From: no author Date: Wed, 23 Nov 2005 10:26:57 +0000 (+0000) Subject: This commit was manufactured by cvs2svn to create tag 'V_0_0_1_2'. X-Git-Tag: V_0_0_1_2 X-Git-Url: http://matita.cs.unibo.it/gitweb/?p=helm.git;a=commitdiff_plain;h=750b8f9359c1200e4fd2ad8cbc109d42b7796d81 This commit was manufactured by cvs2svn to create tag 'V_0_0_1_2'. --- diff --git a/CVSROOT/checkoutlist b/CVSROOT/checkoutlist deleted file mode 100644 index b04b3501f..000000000 --- a/CVSROOT/checkoutlist +++ /dev/null @@ -1,13 +0,0 @@ -# The "checkoutlist" file is used to support additional version controlled -# administrative files in $CVSROOT/CVSROOT, such as template files. -# -# The first entry on a line is a filename which will be checked out from -# the corresponding RCS file in the $CVSROOT/CVSROOT directory. -# The remainder of the line is an error message to use if the file cannot -# be checked out. -# -# File format: -# -# [] -# -# comment lines begin with '#' diff --git a/CVSROOT/commitinfo b/CVSROOT/commitinfo deleted file mode 100644 index b19e7b7a6..000000000 --- a/CVSROOT/commitinfo +++ /dev/null @@ -1,15 +0,0 @@ -# The "commitinfo" file is used to control pre-commit checks. -# The filter on the right is invoked with the repository and a list -# of files to check. A non-zero exit of the filter program will -# cause the commit to be aborted. -# -# The first entry on a line is a regular expression which is tested -# against the directory that the change is being committed to, relative -# to the $CVSROOT. For the first match that is found, then the remainder -# of the line is the name of the filter to run. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name "ALL" appears as a regular expression it is always used -# in addition to the first matching regex or "DEFAULT". diff --git a/CVSROOT/config b/CVSROOT/config deleted file mode 100644 index 8069cad5d..000000000 --- a/CVSROOT/config +++ /dev/null @@ -1,11 +0,0 @@ -# Set this to "no" if pserver shouldn't check system users/passwords -#SystemAuth=no - -# Set `PreservePermissions' to `yes' to save file status information -# in the repository. -#PreservePermissions=no - -# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top -# level of the new working directory when using the `cvs checkout' -# command. -#TopLevelAdmin=no diff --git a/CVSROOT/cvswrappers b/CVSROOT/cvswrappers deleted file mode 100644 index 0accaf1b1..000000000 --- a/CVSROOT/cvswrappers +++ /dev/null @@ -1,23 +0,0 @@ -# This file affects handling of files based on their names. -# -# The -t/-f options allow one to treat directories of files -# as a single file, or to transform a file in other ways on -# its way in and out of CVS. -# -# The -m option specifies whether CVS attempts to merge files. -# -# The -k option specifies keyword expansion (e.g. -kb for binary). -# -# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers) -# -# wildcard [option value][option value]... -# -# where option is one of -# -f from cvs filter value: path to filter -# -t to cvs filter value: path to filter -# -m update methodology value: MERGE or COPY -# -k expansion mode value: b, o, kkv, &c -# -# and value is a single-quote delimited value. -# For example: -#*.gif -k 'b' diff --git a/CVSROOT/editinfo b/CVSROOT/editinfo deleted file mode 100644 index d78886c15..000000000 --- a/CVSROOT/editinfo +++ /dev/null @@ -1,21 +0,0 @@ -# The "editinfo" file is used to allow verification of logging -# information. It works best when a template (as specified in the -# rcsinfo file) is provided for the logging procedure. Given a -# template with locations for, a bug-id number, a list of people who -# reviewed the code before it can be checked in, and an external -# process to catalog the differences that were code reviewed, the -# following test can be applied to the code: -# -# Making sure that the entered bug-id number is correct. -# Validating that the code that was reviewed is indeed the code being -# checked in (using the bug-id number or a seperate review -# number to identify this particular code set.). -# -# If any of the above test failed, then the commit would be aborted. -# -# Actions such as mailing a copy of the report to each reviewer are -# better handled by an entry in the loginfo file. -# -# One thing that should be noted is the the ALL keyword is not -# supported. There can be only one entry that matches a given -# repository. diff --git a/CVSROOT/loginfo b/CVSROOT/loginfo deleted file mode 100644 index 5a59f0a54..000000000 --- a/CVSROOT/loginfo +++ /dev/null @@ -1,26 +0,0 @@ -# The "loginfo" file controls where "cvs commit" log information -# is sent. The first entry on a line is a regular expression which must match -# the directory that the change is being made to, relative to the -# $CVSROOT. If a match is found, then the remainder of the line is a filter -# program that should expect log information on its standard input. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name ALL appears as a regular expression it is always used -# in addition to the first matching regex or DEFAULT. -# -# You may specify a format string as part of the -# filter. The string is composed of a `%' followed -# by a single format character, or followed by a set of format -# characters surrounded by `{' and `}' as separators. The format -# characters are: -# -# s = file name -# V = old version number (pre-checkin) -# v = new version number (post-checkin) -# -# For example: -#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog -# or -#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog diff --git a/CVSROOT/modules b/CVSROOT/modules deleted file mode 100644 index cb9e9efc9..000000000 --- a/CVSROOT/modules +++ /dev/null @@ -1,26 +0,0 @@ -# Three different line formats are valid: -# key -a aliases... -# key [options] directory -# key [options] directory files... -# -# Where "options" are composed of: -# -i prog Run "prog" on "cvs commit" from top-level of module. -# -o prog Run "prog" on "cvs checkout" of module. -# -e prog Run "prog" on "cvs export" of module. -# -t prog Run "prog" on "cvs rtag" of module. -# -u prog Run "prog" on "cvs update" of module. -# -d dir Place module in directory "dir" instead of module name. -# -l Top-level directory only -- do not recurse. -# -# NOTE: If you change any of the "Run" options above, you'll have to -# release and re-checkout any working directories of these modules. -# -# And "directory" is a path to a directory relative to $CVSROOT. -# -# The "-a" option specifies an alias. An alias is interpreted as if -# everything on the right of the "-a" had been typed on the command line. -# -# You can encode a module within a module by using the special '&' -# character to interpose another module into the current module. This -# can be useful for creating a module that consists of many directories -# spread out over the entire source repository. diff --git a/CVSROOT/notify b/CVSROOT/notify deleted file mode 100644 index 34f0bc288..000000000 --- a/CVSROOT/notify +++ /dev/null @@ -1,12 +0,0 @@ -# The "notify" file controls where notifications from watches set by -# "cvs watch add" or "cvs edit" are sent. The first entry on a line is -# a regular expression which is tested against the directory that the -# change is being made to, relative to the $CVSROOT. If it matches, -# then the remainder of the line is a filter program that should contain -# one occurrence of %s for the user to notify, and information on its -# standard input. -# -# "ALL" or "DEFAULT" can be used in place of the regular expression. -# -# For example: -#ALL mail %s -s "CVS notification" diff --git a/CVSROOT/rcsinfo b/CVSROOT/rcsinfo deleted file mode 100644 index 49e59f4d0..000000000 --- a/CVSROOT/rcsinfo +++ /dev/null @@ -1,13 +0,0 @@ -# The "rcsinfo" file is used to control templates with which the editor -# is invoked on commit and import. -# -# The first entry on a line is a regular expression which is tested -# against the directory that the change is being made to, relative to the -# $CVSROOT. For the first match that is found, then the remainder of the -# line is the name of the file that contains the template. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name "ALL" appears as a regular expression it is always used -# in addition to the first matching regex or "DEFAULT". diff --git a/CVSROOT/taginfo b/CVSROOT/taginfo deleted file mode 100644 index 274a46dd5..000000000 --- a/CVSROOT/taginfo +++ /dev/null @@ -1,20 +0,0 @@ -# The "taginfo" file is used to control pre-tag checks. -# The filter on the right is invoked with the following arguments: -# -# $1 -- tagname -# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d -# $3 -- repository -# $4-> file revision [file revision ...] -# -# A non-zero exit of the filter program will cause the tag to be aborted. -# -# The first entry on a line is a regular expression which is tested -# against the directory that the change is being committed to, relative -# to the $CVSROOT. For the first match that is found, then the remainder -# of the line is the name of the filter to run. -# -# If the repository name does not match any of the regular expressions in this -# file, the "DEFAULT" line is used, if it is specified. -# -# If the name "ALL" appears as a regular expression it is always used -# in addition to the first matching regex or "DEFAULT". diff --git a/CVSROOT/verifymsg b/CVSROOT/verifymsg deleted file mode 100644 index 86f747ce2..000000000 --- a/CVSROOT/verifymsg +++ /dev/null @@ -1,21 +0,0 @@ -# The "verifymsg" file is used to allow verification of logging -# information. It works best when a template (as specified in the -# rcsinfo file) is provided for the logging procedure. Given a -# template with locations for, a bug-id number, a list of people who -# reviewed the code before it can be checked in, and an external -# process to catalog the differences that were code reviewed, the -# following test can be applied to the code: -# -# Making sure that the entered bug-id number is correct. -# Validating that the code that was reviewed is indeed the code being -# checked in (using the bug-id number or a seperate review -# number to identify this particular code set.). -# -# If any of the above test failed, then the commit would be aborted. -# -# Actions such as mailing a copy of the report to each reviewer are -# better handled by an entry in the loginfo file. -# -# One thing that should be noted is the the ALL keyword is not -# supported. There can be only one entry that matches a given -# repository. diff --git a/helm/DEVEL/.cvsignore b/helm/DEVEL/.cvsignore deleted file mode 100644 index c1fcbc4ae..000000000 --- a/helm/DEVEL/.cvsignore +++ /dev/null @@ -1,7 +0,0 @@ -*.cmo -*.cmx -*.cmi - -*.o -*.a - diff --git a/helm/DEVEL/gdome_xslt/.cvsignore b/helm/DEVEL/gdome_xslt/.cvsignore deleted file mode 100644 index 4d6980027..000000000 --- a/helm/DEVEL/gdome_xslt/.cvsignore +++ /dev/null @@ -1,14 +0,0 @@ -gdome2-xslt-cpp-smart.pc -gdome2-xslt.pc -autom4te.cache -Makefile -Makefile.in -aclocal.m4 -config.h -config.h.in -config.log -config.status -configure -libtool -stamp-h -stamp-h.in diff --git a/helm/DEVEL/gdome_xslt/AUTHORS b/helm/DEVEL/gdome_xslt/AUTHORS deleted file mode 100644 index 834817f9e..000000000 --- a/helm/DEVEL/gdome_xslt/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -Claudio Sacerdoti Coen -Stefano Zacchiroli -Luca Padovani diff --git a/helm/DEVEL/gdome_xslt/BUGS b/helm/DEVEL/gdome_xslt/BUGS deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/DEVEL/gdome_xslt/C++/.cvsignore b/helm/DEVEL/gdome_xslt/C++/.cvsignore deleted file mode 100644 index 282522db0..000000000 --- a/helm/DEVEL/gdome_xslt/C++/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/helm/DEVEL/gdome_xslt/C++/Makefile.am b/helm/DEVEL/gdome_xslt/C++/Makefile.am deleted file mode 100644 index 30e2ce870..000000000 --- a/helm/DEVEL/gdome_xslt/C++/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = gdome_xslt test diff --git a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/.cvsignore b/helm/DEVEL/gdome_xslt/C++/gdome_xslt/.cvsignore deleted file mode 100644 index 051d1bd50..000000000 --- a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -Makefile -Makefile.in -.deps diff --git a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLT.hh b/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLT.hh deleted file mode 100644 index 97b8cc655..000000000 --- a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLT.hh +++ /dev/null @@ -1,7 +0,0 @@ - -#ifndef __GdomeSmartDOMXSLT_hh__ -#define __GdomeSmartDOMXSLT_hh__ - -#include "GdomeSmartDOMXSLTStylesheet.hh" - -#endif // __GdomeSmartDOMXSLT_hh__ diff --git a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLTStylesheet.cc b/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLTStylesheet.cc deleted file mode 100644 index 330f8724e..000000000 --- a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLTStylesheet.cc +++ /dev/null @@ -1,131 +0,0 @@ -// This file is part of a XSLT engine working on Gdome documents. In fact, -// it just maps Gdome documents to libxml documents back and forth, and -// applies the transformation on libxml documents using libxlt. -// -// Copyright (C) 2002: Luca Padovani -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// For more information, please send an email to lpadovan@cs.unibo.it - -#include "config.h" - -#include -#include - -#include -#include - -#include "GdomeSmartDOMXSLTStylesheet.hh" - -namespace GdomeSmartDOMExt { - - XSLTStylesheet::XSLTStylesheet(const Document& doc) - { - assert(doc); - GdomeDocument* _doc = gdome_cast_doc(doc.gdome_object()); - assert(_doc); - stylesheet = processStylesheet(_doc); - GdomeException _exc = 0; - gdome_doc_unref(_doc, &_exc); - assert(_exc == 0); - } - - XSLTStylesheet::~XSLTStylesheet() - { - if (stylesheet) - { - xsltFreeStylesheet(stylesheet); - stylesheet = 0; - } - } - - Document - XSLTStylesheet::apply(const Document& source) const - { - std::vector< std::pair > noParams; - return apply(source, noParams); - } - - Document - XSLTStylesheet::apply(const Document& source, const std::vector< std::pair >& params) const - { - assert(source); - - char** _params = (char**) malloc(sizeof(char*) * (2 * params.size() + 1)); - for (unsigned i = 0; i < params.size(); i++) - { - std::string param = params[i].first; - _params[2 * i] = strdup(param.c_str()); - std::string value = params[i].second; - _params[2 * i + 1] = strdup(value.c_str()); - } - _params[2 * params.size()] = 0; - - GdomeDocument* _source = gdome_cast_doc(source.gdome_object()); - assert(_source); - GdomeDocument* _result = applyStylesheet(_source, stylesheet, const_cast(_params)); - - GdomeException _exc = 0; - gdome_doc_unref(_source, &_exc); - assert(_exc == 0); - - for (unsigned i = 0; i < 2 * params.size(); i++) free(_params[i]); - free(_params); - - Document result(_result); - gdome_doc_unref(_result, &_exc); - assert(_exc == 0); - - return result; - } - - void - XSLTStylesheet::save(const Document& doc, const std::string& filename) const - { - assert(doc); - GdomeException _exc = 0; - GdomeDocument* _doc = gdome_cast_doc(doc.gdome_object()); - assert(_doc); - if (saveResultToFilename(filename.c_str(), _doc, stylesheet, 0) < 0) throw SaveException(); - gdome_doc_unref(_doc, &_exc); - assert(_exc == 0); - } - - void - XSLTStylesheet::save(const Document& doc, FILE* f) const - { - assert(doc); - GdomeException _exc = 0; - GdomeDocument* _doc = gdome_cast_doc(doc.gdome_object()); - assert(_doc); - if (saveResultToFile(f, _doc, stylesheet) < 0) throw SaveException(); - gdome_doc_unref(_doc, &_exc); - assert(_exc == 0); - } - - void - XSLTStylesheet::save(const Document& doc, int fd) const - { - assert(doc); - GdomeException _exc = 0; - GdomeDocument* _doc = gdome_cast_doc(doc.gdome_object()); - assert(_doc); - if (saveResultToFd(fd, _doc, stylesheet) < 0) throw SaveException(); - gdome_doc_unref(_doc, &_exc); - assert(_exc == 0); - } - -} diff --git a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLTStylesheet.hh b/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLTStylesheet.hh deleted file mode 100644 index 1757f39a3..000000000 --- a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/GdomeSmartDOMXSLTStylesheet.hh +++ /dev/null @@ -1,59 +0,0 @@ -// This file is part of a XSLT engine working on Gdome documents. In fact, -// it just maps Gdome documents to libxml documents back and forth, and -// applies the transformation on libxml documents using libxlt. -// -// Copyright (C) 2002: Luca Padovani -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// For more information, please send an email to lpadovan@cs.unibo.it - -#ifndef __GdomeSmartDOMXSLTStylesheet_hh__ -#define __GdomeSmartDOMXSLTStylesheet_hh__ - -#include -#include -#include - -#include "gdome_xslt.h" -#include - -namespace GdomeSmartDOMExt { - - using namespace GdomeSmartDOM; - - class XSLTStylesheet - { - public: - explicit XSLTStylesheet(const Document& doc); - ~XSLTStylesheet(); - - Document apply(const Document& source) const; - Document apply(const Document& source, const std::vector< std::pair >& params) const; - void save(const Document& result, const std::string& filename) const; - void save(const Document& result, FILE* f) const; - void save(const Document& result, int fd) const; - - class SaveException { }; - - private: - XSLTStylesheet(const XSLTStylesheet&); - - xsltStylesheet* stylesheet; - }; - -} - -#endif // __GdomeSmartDOMXSLTStylesheet_hh__ diff --git a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/Makefile.am b/helm/DEVEL/gdome_xslt/C++/gdome_xslt/Makefile.am deleted file mode 100644 index 0e4b76e4e..000000000 --- a/helm/DEVEL/gdome_xslt/C++/gdome_xslt/Makefile.am +++ /dev/null @@ -1,19 +0,0 @@ - -lib_LTLIBRARIES = libgdome_xslt_cpp_smart.la - -libgdome_xslt_cpp_smart_la_LIBADD = $(top_builddir)/C/gdome_xslt/libgdome_xslt.la - -libgdome_xslt_cpp_smart_la_LDFLAGS = -version-info @VERSION_INFO@ - -libgdome_xslt_cpp_smart_la_SOURCES = \ - GdomeSmartDOMXSLTStylesheet.cc - -pkginclude_HEADERS = \ - GdomeSmartDOMXSLTStylesheet.hh \ - GdomeSmartDOMXSLT.hh - -INCLUDES = \ - $(GMETADOM_CFLAGS) \ - $(LIBXSLT_CFLAGS) \ - -I$(top_srcdir) \ - -I$(top_srcdir)/C/gdome_xslt diff --git a/helm/DEVEL/gdome_xslt/C++/test/.cvsignore b/helm/DEVEL/gdome_xslt/C++/test/.cvsignore deleted file mode 100644 index 051d1bd50..000000000 --- a/helm/DEVEL/gdome_xslt/C++/test/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -Makefile -Makefile.in -.deps diff --git a/helm/DEVEL/gdome_xslt/C++/test/Makefile.am b/helm/DEVEL/gdome_xslt/C++/test/Makefile.am deleted file mode 100644 index 12a08d07a..000000000 --- a/helm/DEVEL/gdome_xslt/C++/test/Makefile.am +++ /dev/null @@ -1,18 +0,0 @@ - -noinst_PROGRAMS = test - -test_SOURCES = main.cc - -LDADDS = \ - $(GMETADOM_LIBS) \ - $(LIBXSLT_LIBS) \ - $(top_builddir)/C++/gdome_xslt/libgdome_xslt_cpp_smart.la - -test_LDADD = $(LDADDS) - -INCLUDES = \ - $(GMETADOM_CFLAGS) \ - $(LIBXSLT_CFLAGS) \ - -I$(top_srcdir)/C/gdome_xslt \ - -I$(top_srcdir)/C++/gdome_xslt - diff --git a/helm/DEVEL/gdome_xslt/C++/test/main.cc b/helm/DEVEL/gdome_xslt/C++/test/main.cc deleted file mode 100644 index 0f5aa2d70..000000000 --- a/helm/DEVEL/gdome_xslt/C++/test/main.cc +++ /dev/null @@ -1,53 +0,0 @@ -/* This file is a test for the XSLT engine working on Gdome documents. - * - * Copyright (C) 2002 Claudio Sacerdoti Coen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please send an email to - */ - -#include -#include -#include "GdomeSmartDOMXSLT.hh" - -namespace DOM = GdomeSmartDOM; -namespace DOMX = GdomeSmartDOMExt; - -#define OUTPUT_FILE "../../test_files/output.xml" -#define CORRECT_OUTPUT_FILE "../../test_files/output.xml.correct" - -int -main(void) -{ - int bytes; - DOM::DOMImplementation di; - std::vector< std::pair > params; - - params.push_back(std::make_pair(DOM::GdomeString("parameter1"), DOM::GdomeString("'value1'"))); - params.push_back(std::make_pair(DOM::GdomeString("parameter2"), DOM::GdomeString("'value2'"))); - params.push_back(std::make_pair(DOM::GdomeString("parameter3"), DOM::GdomeString("'value3'"))); - - DOM::Document input = di.createDocumentFromURI("../../test_files/input.xml"); - DOM::Document style = di.createDocumentFromURI("../../test_files/stylesheet.xsl"); - - DOMX::XSLTStylesheet style_libxslt(style); - DOM::Document output = style_libxslt.apply(input, params); - style_libxslt.save(output, OUTPUT_FILE); - - std::cout << "The test was successful iff " << OUTPUT_FILE << " is equal to " << CORRECT_OUTPUT_FILE << std::endl; - - return 0; -} diff --git a/helm/DEVEL/gdome_xslt/C/.cvsignore b/helm/DEVEL/gdome_xslt/C/.cvsignore deleted file mode 100644 index 282522db0..000000000 --- a/helm/DEVEL/gdome_xslt/C/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/helm/DEVEL/gdome_xslt/C/Makefile.am b/helm/DEVEL/gdome_xslt/C/Makefile.am deleted file mode 100644 index 7424d618c..000000000 --- a/helm/DEVEL/gdome_xslt/C/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ - -SUBDIRS = gdome_xslt test - diff --git a/helm/DEVEL/gdome_xslt/C/gdome_xslt/.cvsignore b/helm/DEVEL/gdome_xslt/C/gdome_xslt/.cvsignore deleted file mode 100644 index 572cf3ae5..000000000 --- a/helm/DEVEL/gdome_xslt/C/gdome_xslt/.cvsignore +++ /dev/null @@ -1,4 +0,0 @@ -gdome_xslt.o -Makefile -Makefile.in -.deps diff --git a/helm/DEVEL/gdome_xslt/C/gdome_xslt/Makefile.am b/helm/DEVEL/gdome_xslt/C/gdome_xslt/Makefile.am deleted file mode 100644 index b8e374ee3..000000000 --- a/helm/DEVEL/gdome_xslt/C/gdome_xslt/Makefile.am +++ /dev/null @@ -1,14 +0,0 @@ - -lib_LTLIBRARIES = libgdome_xslt.la - -libgdome_xslt_la_LDFLAGS = -version-info @VERSION_INFO@ - -libgdome_xslt_la_SOURCES = gdome_xslt.c - -pkginclude_HEADERS = gdome_xslt.h - -INCLUDES = \ - $(GDOME_CFLAGS) \ - $(LIBXSLT_CFLAGS) \ - -I$(top_srcdir) - diff --git a/helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.c b/helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.c deleted file mode 100644 index 232f14b12..000000000 --- a/helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.c +++ /dev/null @@ -1,239 +0,0 @@ -/* This file implements a XSLT engine working on Gdome documents. In fact, - * it just maps Gdome documents to libxml documents back and forth, and - * applyes the transformation on libxml documents using libxlt. - * - * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT - * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT) - * - * Copyright (C) 2002: - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please send an email to {sacerdot,zack}@cs.unibo.it - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "gdome_xslt.h" - -// Begin of Gdome internals exposed -typedef struct _Gdome_xml_Document Gdome_xml_Document; -struct _Gdome_xml_Document { - GdomeDocument super; - const GdomeDocumentVtab* vtab; - int refcnt; - xmlDocPtr n; - GdomeAccessType accessType; -}; - -GdomeNode* gdome_xml_n_mkref(xmlNode* n); -// End of Gdome internals exposed - -// Begin of the abstraction of Gdome internals. Uses the Gdome internals exposed -xmlDocPtr libxml_of_gdome(GdomeDocument* doc) -{ - return ((Gdome_xml_Document*)doc)->n; -} - -GdomeDocument* gdome_of_libxml(xmlDocPtr n) -{ - return (GdomeDocument*)gdome_xml_n_mkref((xmlNode*)n); -} -// End of the abstraction of Gdome internals. Uses the Gdome internals exposed. - - - -// From now on no Gdome internal should be used directly. - - /******************************/ - /* XSLT stylesheet Processing */ - /******************************/ - -xsltStylesheetPtr processStylesheet(GdomeDocument* style) -{ - xmlDocPtr style_copy; - xmlDocPtr style_libxml; - - if (style == NULL) { - return NULL; - } - style_libxml = libxml_of_gdome(style); - style_copy = xmlCopyDoc(style_libxml, 1); - style_copy->URL = xmlStrdup(style_libxml->URL); - - xsltSetGenericDebugFunc(NULL, NULL); - - return xsltParseStylesheetDoc(style_copy); -} - - /*******************************/ - /* XSLT stylesheet Application */ - /*******************************/ - -GdomeDocument* applyStylesheet(GdomeDocument* source, xsltStylesheetPtr - style_libxslt, const char** params) -{ - xmlDocPtr source_libxml; - xmlDocPtr output_libxml; - - if (source == NULL) return NULL; - source_libxml = libxml_of_gdome(source); - - xsltSetGenericDebugFunc(NULL, NULL); - - output_libxml = xsltApplyStylesheet(style_libxslt, source_libxml, - params); - - if (output_libxml == NULL) return NULL; - - return gdome_of_libxml(output_libxml); -} - - /******************/ - /* Results Output */ - /******************/ - -int saveResultToFilename (const char* name, GdomeDocument* result, - xsltStylesheetPtr style_libxslt, int compression) -{ - xmlDocPtr result_libxml; - - if (result == NULL) return -1; - result_libxml = libxml_of_gdome(result); - - xsltSetGenericDebugFunc(NULL, NULL); - - return xsltSaveResultToFilename(name, result_libxml, - style_libxslt, compression); -} - -int saveResultToFile (FILE* file, GdomeDocument* result, - xsltStylesheetPtr style_libxslt) -{ - xmlDocPtr result_libxml; - - if (result == NULL) return -1; - result_libxml = libxml_of_gdome(result); - - xsltSetGenericDebugFunc(NULL, NULL); - - return xsltSaveResultToFile(file, result_libxml, style_libxslt); -} - -int saveResultToFd (int fd, GdomeDocument* result, xsltStylesheetPtr - style_libxslt) -{ - xmlDocPtr result_libxml; - - if (result == NULL) return -1; - result_libxml = libxml_of_gdome(result); - - xsltSetGenericDebugFunc(NULL, NULL); - - return xsltSaveResultToFd(fd, result_libxml, style_libxslt); -} - - /**********************************************/ - /* Error and Debugging Callbacks Registration */ - /**********************************************/ - - /* max size of a single message passed to callbacks */ -#define MAX_MSG_SIZE 1024 -#define TRUNCATED_MSG "... TRUNCATED ..." -#define TRUNCATED_MSG_LEN strlen(TRUNCATED_MSG) - - /* ERROR callbacks */ - - /* user provided error callback, needs a string input */ -static gdomeXsltMsgCallback errorUserCallback = NULL; - - /* libxslt like error callback, ignore context, builds a string - * input for user provided error callback and invoke it */ -void gdomeXsltErrorCallback (void *ctx, const char *msg, ...) { - va_list args; - char buf[MAX_MSG_SIZE]; - - if (errorUserCallback == NULL) - return; - - va_start(args, msg); - if (vsnprintf(buf, MAX_MSG_SIZE, msg, args) > MAX_MSG_SIZE - 1) - { /* message truncated; write TRUNCATED_MSG on it */ - strncpy(buf+(strlen(buf) - TRUNCATED_MSG_LEN), - TRUNCATED_MSG, TRUNCATED_MSG_LEN); - } - va_end(args); - - (*errorUserCallback) (buf); - - return; -} - - /* set user provided error callback */ -void setErrorCallback (gdomeXsltMsgCallback callback) -{ - errorUserCallback = callback; - xsltSetGenericErrorFunc(NULL, - (callback == NULL ? NULL : gdomeXsltErrorCallback)); - - return; -} - - /* DEBUG callbacks */ - - /* user provided debug callback, needs a string input */ -static gdomeXsltMsgCallback debugUserCallback = NULL; - - /* libxslt like debug callback, ignore context, builds a string - * input for user provided debug callback and invoke it */ -void gdomeXsltDebugCallback (void *ctx, const char *msg, ...) { - va_list args; - char buf[MAX_MSG_SIZE]; - - if (debugUserCallback == NULL) - return; - - va_start(args, msg); - if (vsnprintf(buf, MAX_MSG_SIZE, msg, args) > MAX_MSG_SIZE - 1) - { /* message truncated; write TRUNCATED_MSG on it */ - strncpy(buf+(strlen(buf) - TRUNCATED_MSG_LEN), - TRUNCATED_MSG, TRUNCATED_MSG_LEN); - } - va_end(args); - - (*debugUserCallback) (buf); - - return; -} - - /* set user provided debug callback */ -void setDebugCallback (gdomeXsltMsgCallback callback) -{ - debugUserCallback = callback; - xsltSetGenericDebugFunc(NULL, - (callback == NULL ? NULL : gdomeXsltDebugCallback)); - - return; -} - diff --git a/helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.h b/helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.h deleted file mode 100644 index 383208770..000000000 --- a/helm/DEVEL/gdome_xslt/C/gdome_xslt/gdome_xslt.h +++ /dev/null @@ -1,87 +0,0 @@ - -/* This file implements a XSLT engine working on Gdome documents. In fact, - * it just maps Gdome documents to libxml documents back and forth, and - * applies the transformation on libxml documents using libxlt. - * - * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT - * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT) - * - * Copyright (C) 2002: - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please send an email to {sacerdot,zack}@cs.unibo.it - */ - -#ifndef __gdome_xslt_h__ -#define __gdome_xslt_h__ - -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - /******************************/ - /* XSLT stylesheet Processing */ - /******************************/ - -xsltStylesheetPtr processStylesheet (GdomeDocument* style); - - - /*******************************/ - /* XSLT stylesheet Application */ - /*******************************/ - -GdomeDocument* applyStylesheet (GdomeDocument* source, - xsltStylesheetPtr style_libxslt, - const char** params); - - /******************/ - /* Results Output */ - /******************/ - -int saveResultToFilename (const char* name, - GdomeDocument* result, - xsltStylesheetPtr style_libxslt, - int compression); -int saveResultToFile (FILE* file, - GdomeDocument* result, - xsltStylesheetPtr style_libxslt); -int saveResultToFd (int fd, - GdomeDocument* result, - xsltStylesheetPtr style_libxslt); - - /**********************************************/ - /* Error and Debugging Callbacks Registration */ - /**********************************************/ - -typedef void(*gdomeXsltMsgCallback)(const char *); - -void setErrorCallback (gdomeXsltMsgCallback callback); -void setDebugCallback (gdomeXsltMsgCallback callback); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __gdome_xslt_h__ */ diff --git a/helm/DEVEL/gdome_xslt/C/test/.cvsignore b/helm/DEVEL/gdome_xslt/C/test/.cvsignore deleted file mode 100644 index 87ed101b8..000000000 --- a/helm/DEVEL/gdome_xslt/C/test/.cvsignore +++ /dev/null @@ -1,4 +0,0 @@ -test -.deps -Makefile -Makefile.in diff --git a/helm/DEVEL/gdome_xslt/C/test/Makefile.am b/helm/DEVEL/gdome_xslt/C/test/Makefile.am deleted file mode 100644 index e17047c15..000000000 --- a/helm/DEVEL/gdome_xslt/C/test/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ - -noinst_PROGRAMS = test - -test_SOURCES = test.c - -LDADDS = \ - $(GDOME_LIBS) \ - $(LIBXSLT_LIBS) \ - $(top_builddir)/C/gdome_xslt/libgdome_xslt.la - -test_LDADD = $(LDADDS) - -INCLUDES = \ - $(GDOME_CFLAGS) \ - $(LIBXSLT_CFLAGS) \ - -I$(top_srcdir)/C/gdome_xslt - diff --git a/helm/DEVEL/gdome_xslt/C/test/test.c b/helm/DEVEL/gdome_xslt/C/test/test.c deleted file mode 100644 index 2f39ba87a..000000000 --- a/helm/DEVEL/gdome_xslt/C/test/test.c +++ /dev/null @@ -1,106 +0,0 @@ -/* This file is a test for the XSLT engine working on Gdome documents. - * - * Copyright (C) 2002 Claudio Sacerdoti Coen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please send an email to - */ - -#include -#include -#include -#include -#include - -#include "gdome_xslt.h" - -#define OUTPUT_FILE "../../test_files/output.xml" -#define CORRECT_OUTPUT_FILE "../../test_files/output.xml.correct" - -GdomeDocument* loadDocument(GdomeDOMImplementation *domimpl, char *uri) -{ - GdomeDocument *doc; - GdomeException exc; - - doc = gdome_di_createDocFromURI(domimpl, uri, GDOME_LOAD_PARSING, &exc); - if (doc == NULL) { - fprintf (stderr, - "DOMImplementation.createDocFromURI: failed\n\tException #%d\n", - exc); - } - - return doc; -} - -/* // old version: use gdome serialization -int saveDocument(GdomeDOMImplementation *domimpl, GdomeDocument* doc, char *uri) -{ - GdomeException exc; - - if (!gdome_di_saveDocToFile (domimpl, doc, uri, GDOME_SAVE_STANDARD, &exc)) { - fprintf (stderr, - "DOMImplementation.saveDocToFile: failed\n\tException #%d\n", - exc); - return 0; - } - - return 1; -} -*/ - - /* new version, use libxslt serialization */ -int saveDocument(char* fname, GdomeDocument* result, xsltStylesheetPtr style) { - return saveResultToFilename(fname, result, style, 0); -} - -int main(void) -{ - int bytes; - GdomeDOMImplementation *domimpl; - GdomeDocument *input; - GdomeDocument *style; - xsltStylesheetPtr style_libxslt; - GdomeDocument *output; - GdomeException exc; - const char* params[] = {"parameter1", "'value1'", - "parameter2", "'value2'", - "parameter3", "'value3'", - NULL}; - - domimpl = gdome_di_mkref(); - - if (!(input = loadDocument(domimpl, "../../test_files/input.xml"))) return 1; - if (!(style = loadDocument(domimpl, "../../test_files/stylesheet.xsl"))) return 1; - - style_libxslt = processStylesheet(style); - - output = applyStylesheet(input, style_libxslt, params); - -/* if (!(saveDocument(domimpl, output, "../../test_files/output.xml"))) return 1; */ - bytes = saveDocument("../../test_files/output.xml", output, style_libxslt); - - xsltFreeStylesheet(style_libxslt); - gdome_di_freeDoc (domimpl, input, &exc); - gdome_di_freeDoc (domimpl, style, &exc); - gdome_di_freeDoc (domimpl, output, &exc); - gdome_di_unref (domimpl, &exc); - - printf("The test was successful iff %s is equal to %s\n", - OUTPUT_FILE, - CORRECT_OUTPUT_FILE); - - return 0; -} diff --git a/helm/DEVEL/gdome_xslt/ChangeLog b/helm/DEVEL/gdome_xslt/ChangeLog deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/DEVEL/gdome_xslt/LICENSE b/helm/DEVEL/gdome_xslt/LICENSE deleted file mode 100644 index cf9b6b997..000000000 --- a/helm/DEVEL/gdome_xslt/LICENSE +++ /dev/null @@ -1,510 +0,0 @@ - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations -below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. -^L - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it -becomes a de-facto standard. To achieve this, non-free programs must -be allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. -^L - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control -compilation and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. -^L - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. -^L - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at least - three years, to give the same user the materials specified in - Subsection 6a, above, for a charge no more than the cost of - performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. -^L - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. -^L - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply, and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License -may add an explicit geographical distribution limitation excluding those -countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. -^L - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS -^L - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms -of the ordinary General Public License). - - To apply these terms, attach the following notices to the library. -It is safest to attach them to the start of each source file to most -effectively convey the exclusion of warranty; and each file should -have at least the "copyright" line and a pointer to where the full -notice is found. - - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or -your school, if any, to sign a "copyright disclaimer" for the library, -if necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James - Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/helm/DEVEL/gdome_xslt/LICENSE-INRIA b/helm/DEVEL/gdome_xslt/LICENSE-INRIA deleted file mode 100644 index 0fcaa957d..000000000 --- a/helm/DEVEL/gdome_xslt/LICENSE-INRIA +++ /dev/null @@ -1,13 +0,0 @@ -As a special exception to the GNU Library General Public License, you -may link, statically or dynamically, a "work that uses the Library" -with a publicly distributed version of the Library to produce an -executable file containing portions of the Library, and distribute -that executable file under terms of your choice, without any of the -additional requirements listed in clause 6 of the GNU Library General -Public License. By "a publicly distributed version of the Library", -we mean either the unmodified Library as distributed by INRIA, or a -modified version of the Library that is distributed under the -conditions defined in clause 3 of the GNU Library General Public -License. This exception does not however invalidate any other reasons -why the executable file might be covered by the GNU Library General -Public License. diff --git a/helm/DEVEL/gdome_xslt/Makefile.am b/helm/DEVEL/gdome_xslt/Makefile.am deleted file mode 100644 index e31283586..000000000 --- a/helm/DEVEL/gdome_xslt/Makefile.am +++ /dev/null @@ -1,16 +0,0 @@ -DISTDIR = @PACKAGE@-@VERSION@ - -EXTRA_DIST = BUGS LICENSE aclocal.m4 debian gdome2-xslt.pc.in gdome2-xslt-cpp-smart.pc.in - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = gdome2-xslt.pc gdome2-xslt-cpp-smart.pc - -## SUBDIRS = C C++ test_files -SUBDIRS = C C++ ocaml test_files - -deb: dist - if [ -d $(DISTDIR)/ ]; then rm -rf $(DISTDIR); else true; fi - tar xvzf $(DISTDIR).tar.gz - (cd $(DISTDIR)/ && debuild) - rm -rf $(DISTDIR) - diff --git a/helm/DEVEL/gdome_xslt/NEWS b/helm/DEVEL/gdome_xslt/NEWS deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/DEVEL/gdome_xslt/README b/helm/DEVEL/gdome_xslt/README deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/DEVEL/gdome_xslt/configure.ac b/helm/DEVEL/gdome_xslt/configure.ac deleted file mode 100644 index 7542923d1..000000000 --- a/helm/DEVEL/gdome_xslt/configure.ac +++ /dev/null @@ -1,107 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT -AC_CONFIG_SRCDIR([C/gdome_xslt/gdome_xslt.h]) - -PACKAGE=gdome2-xslt -VERSION=0.0.7 -VERSION_INFO=`echo $VERSION | awk -F. '{ printf "%d:%d:%d", $1+$2, $3, $2 }'` -AC_SUBST(VERSION_INFO) - -AC_PROG_CC -AC_PROG_CXX -AC_PROG_INSTALL - -AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE($PACKAGE, $VERSION) -AM_PROG_LIBTOOL - -PKG_CHECK_MODULES(GDOME, gdome2 >= 0.7.0,, AC_MSG_ERROR(could not find Gdome2)) -AC_SUBST(GDOME_CFLAGS) -AC_SUBST(GDOME_LIBS) - -PKG_CHECK_MODULES(GMETADOM, gdome2-cpp-smart >= 0.1.8,, AC_MSG_ERROR(could not find GMetaDOM)) -AC_SUBST(GMETADOM_CFLAGS) -AC_SUBST(GMETADOM_LIBS) - -PKG_CHECK_MODULES(LIBXSLT, libxslt,, AC_MSG_ERROR(could not find libxslt)) -AC_SUBST(LIBXSLT_CFLAGS) -AC_SUBST(LIBXSLT_LIBS) - -AC_CHECK_PROG(HAVE_OCAMLC, ocamlc, yes, no) -if test $HAVE_OCAMLC = "no"; then - AC_MSG_ERROR(could not find ocamlc in PATH, please make sure ocaml is installed) -else - OCAMLC=ocamlc - OCAMLSTDLIBDIR="`ocamlc -where`" - OCAMLSTUBDIR="`ocamlc -where`/stublibs" - AC_SUBST(OCAMLC) - AC_SUBST(OCAMLSTDLIBDIR) - AC_SUBST(OCAMLSTUBDIR) -fi - -AC_CHECK_PROG(HAVE_OCAMLOPT, ocamlopt, yes, no) -if test $HAVE_OCAMLOPT = "no"; then - AC_MSG_WARN(ocaml native libraries won't be compiled since ocamlopt was not found) -else - OCAMLOPT=ocamlopt - AC_SUBST(OCAMLOPT) -fi -AM_CONDITIONAL(HAVE_OCAMLOPT_COND, test x$HAVE_OCAMLOPT = xyes) - -AC_CHECK_PROG(HAVE_OCAMLFIND, ocamlfind, yes, no) -if test $HAVE_OCAMLFIND = "no"; then - AC_MSG_ERROR(could not find ocamlfind in PATH, please make sure findlib is installed) -else - OCAMLFIND=ocamlfind - AC_SUBST(OCAMLFIND) -fi - -AC_CHECK_PROG(HAVE_OCAMLDEP, ocamldep, yes, no) -if test $HAVE_OCAMLDEP = "yes"; then - OCAMLDEP=ocamldep - AC_SUBST(OCAMLDEP) -fi - -AC_CHECK_PROG(HAVE_OCAMLMKLIB, ocamlmklib, yes, no) -if test $HAVE_OCAMLMKLIB = "no"; then - AC_MSG_ERROR(could not find ocamlmklib in PATH, please make sure ocamlmklib is installed) -else - OCAMLMKLIB=ocamlmklib - AC_SUBST(OCAMLMKLIB) -fi - -AC_MSG_CHECKING(for gdome2 ocaml binding) -ocamlfind query gdome2 || - AC_MSG_ERROR(gdome2 not installed (according to findlib)) -MLGDOME_CFLAGS="`$OCAMLFIND query -i-format gdome2`" -AC_SUBST(MLGDOME_CFLAGS) - -AC_MSG_CHECKING(for the ocaml library dir) -OCAML_LIB_DIR=`ocamlc -where` -AC_MSG_RESULT($OCAML_LIB_DIR) - -AC_CHECK_FILE(/usr/include/caml/mlvalues.h, - OCAML_INCLUDE_DIR=/usr/include/caml, - OCAML_INCLUDE_DIR=$OCAML_LIB_DIR/caml -) - -AC_SUBST(PACKAGE) -AC_SUBST(VERSION) -AC_SUBST(OCAML_INCLUDE_DIR) - -AC_CONFIG_FILES([ - Makefile - C/Makefile - C/gdome_xslt/Makefile - C/test/Makefile - C++/gdome_xslt/Makefile - C++/test/Makefile - C++/Makefile - ocaml/Makefile - ocaml/gdome_xslt/Makefile - ocaml/gdome_xslt/META - ocaml/test/Makefile - gdome2-xslt.pc - gdome2-xslt-cpp-smart.pc - test_files/Makefile]) -AC_OUTPUT diff --git a/helm/DEVEL/gdome_xslt/debian/changelog b/helm/DEVEL/gdome_xslt/debian/changelog deleted file mode 100644 index 7c5bdda42..000000000 --- a/helm/DEVEL/gdome_xslt/debian/changelog +++ /dev/null @@ -1,209 +0,0 @@ -gdome2-xslt (0.0.7-1) unstable; urgency=low - - * New upstream release - - enable static linking of C/OCaml glue code - * debian/control - - bumped dependencies to gmetadom 0.2.3 - * debian/* - - ABI transition for gcc 4 - - -- Stefano Zacchiroli Thu, 7 Jul 2005 10:39:37 +0000 - -gdome2-xslt (0.0.6-8) unstable; urgency=low - - * debian/rules - - uses cdbs - * debian/control - - added build dependency on cdbs, bumped debhelper dependency as needed - - -- Stefano Zacchiroli Sun, 22 May 2005 23:46:24 +0200 - -gdome2-xslt (0.0.6-7) unstable; urgency=low - - * rebuilt against ocaml 3.08.3 - - -- Stefano Zacchiroli Sat, 26 Mar 2005 00:38:05 +0100 - -gdome2-xslt (0.0.6-6) unstable; urgency=medium - - * debian/control - - depend on ocaml-base-nox-3.08 instead of ocaml-base-3.08 since - this package doesn't directly need ocaml X libraries - - -- Stefano Zacchiroli Tue, 24 Aug 2004 12:25:28 +0200 - -gdome2-xslt (0.0.6-5) unstable; urgency=low - - * re-run autotools chain to get rid of spurious shared objects created - without .so suffixes - - -- Stefano Zacchiroli Tue, 27 Jul 2004 10:00:09 +0200 - -gdome2-xslt (0.0.6-4) unstable; urgency=low - - * rebuilt with ocaml 3.08 - * debian/control - - bumped ocaml deps to 3.08 - - bumped standards-version to 3.6.1.1 - - changed ocaml deps to ocaml-nox - - bumped gmetadom (ocaml part) versions to >= 0.2.1-3 (first version - rebuilt with ocaml 3.08) - - -- Stefano Zacchiroli Mon, 26 Jul 2004 16:47:13 +0200 - -gdome2-xslt (0.0.6-3) unstable; urgency=high - - * ocaml/gdome_xslt/Makefile.am - - use .o PIC objects from .libs directory - (should fix build failure on hppa) - * debian/control - - versione build dep on findlib to >= 0.8-5 - - -- Stefano Zacchiroli Tue, 21 Oct 2003 14:43:09 +0200 - -gdome2-xslt (0.0.6-2) unstable; urgency=low - - * Rebuilt against gmetadom 0.2.1, gdome2 0.8.1 (should link against glib2) - - -- Stefano Zacchiroli Fri, 10 Oct 2003 09:38:27 +0200 - -gdome2-xslt (0.0.6-1) unstable; urgency=low - - * ocaml binding - - wrapped XSLT stylesheet application in a blocking section so that - it can be interrupted by ocaml exceptions, signals, ... - * restructured/cleaned up Makefiles - - -- Stefano Zacchiroli Sat, 4 Oct 2003 17:09:37 +0200 - -gdome2-xslt (0.0.4-9) unstable; urgency=low - - * Rebuilt with ocaml 3.07 - - -- Stefano Zacchiroli Wed, 1 Oct 2003 14:18:19 +0200 - -gdome2-xslt (0.0.4-8) unstable; urgency=low - - * Rebuilt with ocaml 3.07beta2 - - -- Stefano Zacchiroli Mon, 22 Sep 2003 18:26:04 +0200 - -gdome2-xslt (0.0.4-7) unstable; urgency=low - - * rebuilt against gmetadom 0.1.10-3 - * debian/control - - strictly depends on gmetadom >= 0.1.10-3 (older version are buggy - on mips) - - -- Stefano Zacchiroli Mon, 14 Jul 2003 11:16:59 +0200 - -gdome2-xslt (0.0.4-6) unstable; urgency=low - - * debian/control - - bumped gmetadom dependencies to >= 0.1.10-2 (to ensure that .pc - is available) - - -- Stefano Zacchiroli Tue, 1 Jul 2003 10:14:14 +0200 - -gdome2-xslt (0.0.4-5) unstable; urgency=low - - * rebuilt using gmetadom 0.1.9 - * debian/control - - added build-dep on pkg-config - - bumped dependencies on gmetadom to 0.1.9 - - bumped standards-version to 3.5.10 - - changed section of -dev packages to libdevel - - added ${misc:Depends} - * debian/rules - - removed DH_COMPAT in favour of debian/compat - - removed dh_movefiles in favour of dh_install - - cosmetic changes - - -- Stefano Zacchiroli Thu, 19 Jun 2003 17:05:47 +0200 - -gdome2-xslt (0.0.4-4) unstable; urgency=low - - * Bugfix: ships also -config script - * Bumped Standards-Version to 3.5.9 - - -- Stefano Zacchiroli Thu, 20 Mar 2003 20:45:27 +0100 - -gdome2-xslt (0.0.4-3) unstable; urgency=low - - * Implemented "high" level functions to set handlers for libxslt error and - debugging messages: setErrorCallback, setDebugCallback (C flavour) - * Implemented binding for the above functions (OCaml flavour) - * Bugfix: installs also i_gdome_xslt.ml, gdome_xslt_init.o - - -- Stefano Zacchiroli Thu, 13 Mar 2003 18:07:22 +0100 - -gdome2-xslt (0.0.4-2) unstable; urgency=low - - * Bugfix: installs also i_gdome_xslt.cmi - - -- Stefano Zacchiroli Wed, 12 Mar 2003 18:28:27 +0100 - -gdome2-xslt (0.0.4-1) unstable; urgency=low - - * New release - * Added a new interface for apply method which requires no arguments - * Bumped gmetadom dependencies to 0.1.6 - * Removed << dependencies on gmetadom - * Bumpetd gdome2 version to 0.7.4 - - -- Stefano Zacchiroli Mon, 10 Mar 2003 17:50:42 +0100 - -gdome2-xslt (0.0.3-3) unstable; urgency=low - - * No longer use virtual dependencies on other ocaml libraries, reverted to - >=/<< dependencies approach - * Bumped dependencies on gmetadom to version 0.1.5 - - -- Stefano Zacchiroli Fri, 24 Jan 2003 13:10:22 +0100 - -gdome2-xslt (0.0.3-2) unstable; urgency=low - - * Use versioned ocaml standard library directory - * Changed deps and build-deps to ocaml-3.06-1 - * Source named changed to gdome2-xslt - * Moved OCaml .so stub in /stublibs - * Moved ocaml stuff in /usr/lib/ocaml/3.06 - * Ship also C and C++ flavours - * Added dep from libgdome2-xslt-ocaml to libgdome2-ocaml - * Added dep from libgdome2-xslt-ocaml-dev to libgdome2-ocaml-dev-0.1.4 - * Added build-dep to libgdome2-cpp-smart-dev - * Provided a better Description - * Bumped Standards-Version to 3.5.8 - * Better test for ocamlopt existence - - -- Stefano Zacchiroli Sun, 8 Dec 2002 16:09:56 +0100 - -libxslt-ocaml (0.0.2-1) unstable; urgency=low - - * Added serialization functions - - -- Stefano Zacchiroli Thu, 28 Nov 2002 17:59:29 +0100 - -libxslt-ocaml (0.0.1-3) unstable; urgency=low - - * Rebuilt with ocaml 3.06 (Closes: Bug#158225, Bug#158217) - * Upgraded Standards-Version to 3.5.6 - * Switched deps and build-deps to ocaml-3.06 and ocaml-base-3.06 - * Switched to debhelper 4 - - -- Stefano Zacchiroli Wed, 28 Aug 2002 11:09:04 +0200 - -libxslt-ocaml (0.0.1-2) unstable; urgency=low - - * Added -fPIC option when compiled some .o in order to succesfully build - also on HPPA (Closes: Bug#142485). - * Renamed binary packages to libgdome2-xslt-ocaml and -dev. - - -- Stefano Zacchiroli Fri, 12 Apr 2002 14:55:57 +0200 - -libxslt-ocaml (0.0.1-1) unstable; urgency=low - - * Initial Release. - - -- Stefano Zacchiroli Sat, 6 Apr 2002 13:00:49 +0200 - diff --git a/helm/DEVEL/gdome_xslt/debian/compat b/helm/DEVEL/gdome_xslt/debian/compat deleted file mode 100644 index b8626c4cf..000000000 --- a/helm/DEVEL/gdome_xslt/debian/compat +++ /dev/null @@ -1 +0,0 @@ -4 diff --git a/helm/DEVEL/gdome_xslt/debian/control b/helm/DEVEL/gdome_xslt/debian/control deleted file mode 100644 index df874e90f..000000000 --- a/helm/DEVEL/gdome_xslt/debian/control +++ /dev/null @@ -1,58 +0,0 @@ -Source: gdome2-xslt -Section: devel -Priority: optional -Maintainer: Stefano Zacchiroli -Build-Depends: debhelper (>= 4.1.0), ocaml-nox-3.08.3, ocaml-findlib (>= 0.8-5), libgdome2-ocaml-dev (>= 0.2.3), libgdome2-dev (>= 0.8.1), libxslt1-dev, libgdome2-cpp-smart-dev (>= 0.2.3), pkg-config, cdbs -Standards-Version: 3.6.1.1 - -Package: libgdome2-xslt0c2 -Section: libs -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Replaces: libgdome2-xslt0 -Conflicts: libgdome2-xslt0 -Description: Minimal XSLT processor working on GDome2 documents - gdome2-xslt is a very small C library that implements a minimal - XSLT processor that can be used to apply XSLT stylesheets to - gdome2 documents. - . - This package includes shared libraries for the C implementation - and for the C++ bindings. - -Package: libgdome2-xslt-dev -Section: libdevel -Architecture: any -Depends: libgdome2-xslt0c2 (= ${Source-Version}), libxslt1-dev, libgdome2-dev (>= 0.8.1), libgdome2-cpp-smart-dev (>= 0.2.3), ${misc:Depends} -Description: Minimal XSLT processor working on GDome2 documents - gdome2-xslt is a very small C library that implements a minimal - XSLT processor that can be used to apply XSLT stylesheets to - gdome2 documents. - . - This package includes development support files for the C - library and for its C++ bindings. - -Package: libgdome2-xslt-ocaml -Architecture: any -Depends: ocaml-base-nox-3.08.3, libgdome2-ocaml (>= 0.2.3), ${shlibs:Depends}, ${misc:Depends} -Description: OCaml bindings for a minimal GDome2 based XSLT processor - gdome2-xslt is a very small C library that implements a minimal - XSLT processor that can be used to apply XSLT stylesheets to - gdome2 documents. - . - This package ships the OCaml language bindings for gdome2-xslt. - . - This package contains only the OCaml shared runtime stub libraries. - -Package: libgdome2-xslt-ocaml-dev -Architecture: any -Section: libdevel -Depends: ocaml-nox-3.08.3, libgdome2-xslt-ocaml (= ${Source-Version}), libgdome2-ocaml-dev (>= 0.2.3), libxslt1-dev, libgdome2-dev (>= 0.8.1), ${misc:Depends} -Description: OCaml bindings for a minimal GDome2 based XSLT processor - gdome2-xslt is a very small C library that implements a minimal - XSLT processor that can be used to apply XSLT stylesheets to - gdome2 documents. - . - This package ships the OCaml language bindings for gdome2-xslt. - . - This package contains OCaml development stuff for gdome2-xslt. - diff --git a/helm/DEVEL/gdome_xslt/debian/copyright b/helm/DEVEL/gdome_xslt/debian/copyright deleted file mode 100644 index 5cafed7bd..000000000 --- a/helm/DEVEL/gdome_xslt/debian/copyright +++ /dev/null @@ -1,18 +0,0 @@ -This package was debianized by Stefano Zacchiroli on -Sat, 6 Apr 2002 13:00:49 +0200. - -It was exported from the HELM CVS which is accesible using ViewCVS from: - http://www.cs.unibo.it/helm/ - -Upstream Author: - Claudio Sacerdoti Coen - -Copyright: - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - On a Debian GNU/Linux system, the LGPL can be found as - /usr/share/common-licenses/LGPL-2.1. diff --git a/helm/DEVEL/gdome_xslt/debian/docs b/helm/DEVEL/gdome_xslt/debian/docs deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-dev.examples b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-dev.examples deleted file mode 100644 index 23610114a..000000000 --- a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-dev.examples +++ /dev/null @@ -1,2 +0,0 @@ -ocaml/test/test.ml -test_files/* diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-dev.install b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-dev.install deleted file mode 100644 index e82158cf4..000000000 --- a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-dev.install +++ /dev/null @@ -1,5 +0,0 @@ -debian/tmp/usr/include/ -debian/tmp/usr/lib/*.a -debian/tmp/usr/lib/*.la -debian/tmp/usr/lib/*.so -debian/tmp/usr/lib/pkgconfig/ diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.dirs b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.dirs deleted file mode 100644 index 8646e27b2..000000000 --- a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/lib/ocaml/3.08.3 diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.examples b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.examples deleted file mode 100644 index 354012c11..000000000 --- a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.examples +++ /dev/null @@ -1,3 +0,0 @@ -C/test/test.c -C++/test/main.cc -test_files/* diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.install b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.install deleted file mode 100644 index 52584711d..000000000 --- a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml-dev.install +++ /dev/null @@ -1,3 +0,0 @@ -debian/tmp/usr/lib/ocaml/3.08.3/stublibs/*.owner -debian/tmp/usr/lib/ocaml/3.08.3/stublibs/lib*.so -debian/tmp/usr/lib/ocaml/3.08.3/gdome2-xslt/ diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml.dirs b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml.dirs deleted file mode 100644 index 8646e27b2..000000000 --- a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/lib/ocaml/3.08.3 diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml.install b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml.install deleted file mode 100644 index 96cc7de5c..000000000 --- a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt-ocaml.install +++ /dev/null @@ -1 +0,0 @@ -debian/tmp/usr/lib/ocaml/3.08.3/stublibs/dll*.so diff --git a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt0c2.install b/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt0c2.install deleted file mode 100644 index 79bbe2f02..000000000 --- a/helm/DEVEL/gdome_xslt/debian/libgdome2-xslt0c2.install +++ /dev/null @@ -1 +0,0 @@ -debian/tmp/usr/lib/*.so.* diff --git a/helm/DEVEL/gdome_xslt/debian/rules b/helm/DEVEL/gdome_xslt/debian/rules deleted file mode 100755 index f738c4d58..000000000 --- a/helm/DEVEL/gdome_xslt/debian/rules +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/make -f -include /usr/share/cdbs/1/rules/debhelper.mk -include /usr/share/cdbs/1/class/autotools.mk diff --git a/helm/DEVEL/gdome_xslt/gdome2-xslt-cpp-smart.pc.in b/helm/DEVEL/gdome_xslt/gdome2-xslt-cpp-smart.pc.in deleted file mode 100644 index 0046f27e7..000000000 --- a/helm/DEVEL/gdome_xslt/gdome2-xslt-cpp-smart.pc.in +++ /dev/null @@ -1,14 +0,0 @@ -# This is a comment -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ -datadir=@datadir@ - -Name: Gdome2/XSLT C++ Binding -Description: API for applying XSLT stylesheets to Gdome2 documents -Version: @VERSION@ -Requires: gdome2 libxslt -Libs: @LIBXSLT_LIBS@ -L${libdir} -lgdome_xslt_cpp_smart -Cflags: @LIBXSLT_CFLAGS@ -I${includedir}/@PACKAGE@ - diff --git a/helm/DEVEL/gdome_xslt/gdome2-xslt.pc.in b/helm/DEVEL/gdome_xslt/gdome2-xslt.pc.in deleted file mode 100644 index 88df34a8d..000000000 --- a/helm/DEVEL/gdome_xslt/gdome2-xslt.pc.in +++ /dev/null @@ -1,14 +0,0 @@ -# This is a comment -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ -datadir=@datadir@ - -Name: Gdome2/XSLT C Binding -Description: API for applying XSLT stylesheets to Gdome2 documents -Version: @VERSION@ -Requires: gdome2 libxslt -Libs: @LIBXSLT_LIBS@ -L${libdir} -lgdome_xslt -Cflags: @LIBXSLT_CFLAGS@ -I${includedir}/@PACKAGE@ - diff --git a/helm/DEVEL/gdome_xslt/ocaml/.cvsignore b/helm/DEVEL/gdome_xslt/ocaml/.cvsignore deleted file mode 100644 index 282522db0..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/helm/DEVEL/gdome_xslt/ocaml/Makefile.am b/helm/DEVEL/gdome_xslt/ocaml/Makefile.am deleted file mode 100644 index 30e2ce870..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = gdome_xslt test diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/.cvsignore b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/.cvsignore deleted file mode 100644 index 68ade6c12..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/.cvsignore +++ /dev/null @@ -1,23 +0,0 @@ -META -Makefile -Makefile.in -config.cache -config.log -config.status -configure -gdome2-xslt.cma -gdome_xslt.cmi -gdome_xslt.cmo -gdome_xslt.cmx -gdome2-xslt.cmxa -gdome_xslt.o -gdome_xslt_init.cmi -gdome_xslt_init.cmo -gdome_xslt_init.cmx -gdome_xslt_init.o -i_gdome_xslt.cmi -i_gdome_xslt.cmo -i_gdome_xslt.cmx -i_gdome_xslt.o -ml_gdome_xslt.o -.deps diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/.depend b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/.depend deleted file mode 100644 index 519df4ba6..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/.depend +++ /dev/null @@ -1,5 +0,0 @@ -gdome_xslt.cmo: i_gdome_xslt.cmo gdome_xslt.cmi -gdome_xslt.cmx: i_gdome_xslt.cmx gdome_xslt.cmi -gdome_xslt_init.cmo: i_gdome_xslt.cmo gdome_xslt_init.cmi -gdome_xslt_init.cmx: i_gdome_xslt.cmx gdome_xslt_init.cmi -gdome_xslt.cmi: i_gdome_xslt.cmo diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/META.in b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/META.in deleted file mode 100644 index e5c9b19a1..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/META.in +++ /dev/null @@ -1,4 +0,0 @@ -requires="gdome2" -version="@VERSION@" -archive(byte)="mlgdome2-xslt.cma gdome_xslt_init.cmo" -archive(native)="mlgdome2-xslt.cmxa gdome_xslt_init.cmx" diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/Makefile.am b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/Makefile.am deleted file mode 100644 index 4da9bef88..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/Makefile.am +++ /dev/null @@ -1,114 +0,0 @@ - -ARCHIVE = mlgdome2-xslt -PKGNAME = gdome2-xslt -OCAMLINSTALLDIR = $(DESTDIR)$(OCAMLSTDLIBDIR)/$(PKGNAME) -STUBSDIR = $(DESTDIR)$(OCAMLSTUBDIR) -OCAMLFLAGS = -I +gdome2 -OCAMLC = @OCAMLC@ ${OCAMLFLAGS} -OCAMLOPT = @OCAMLOPT@ ${OCAMLFLAGS} -OCAMLDEP = @OCAMLDEP@ -OCAML_CFLAGS = @OCAML_CFLAGS@ -OCAMLFIND = @OCAMLFIND@ -OCAMLMKLIB = ocamlmklib -DLL = dll$(ARCHIVE).so - -BUILT_SOURCES = x_gdome_xslt.c - -CLEANFILES = \ - $(ARCHIVE).cma $(ARCHIVE).cmxa $(ARCHIVE).a lib$(ARCHIVE).a $(DLL) \ - *.cmo *.cmx *.cmi $(BUILT_SOURCES) - -EXTRA_DIST = \ - META.in .depend \ - gdome_xslt.ml gdome_xslt.mli gdome_xslt_init.ml gdome_xslt_init.mli \ - i_gdome_xslt.ml \ - ocaml-io.h - -if HAVE_OCAMLOPT_COND -noinst_DATA = \ - $(ARCHIVE).cma $(DLL) $(ARCHIVE).cmxa $(ARCHIVE).a lib$(ARCHIVE).a \ - gdome_xslt_init.cmo gdome_xslt_init.cmx -else -noinst_DATA = \ - $(ARCHIVE).cma $(DLL) gdome_xslt_init.cmo lib$(ARCHIVE).a -endif - -noinst_LTLIBRARIES = libmlgdome2-xslt.la -C_SRC = ml_gdome_xslt.c x_gdome_xslt.c -libmlgdome2_xslt_la_SOURCES = $(C_SRC) - -O_S = $(C_SRC:%.c=.libs/%.o) -LO_S = $(O_S:%.o=%.lo) -CMA_DEPS = i_gdome_xslt.cmo gdome_xslt.cmo -CMXA_DEPS = $(CMA_DEPS:%.cmo=%.cmx) -SHARED_LIBS = $(LIBXSLT_LIBS) $(GDOME_LIBS) - -x_gdome_xslt.c: $(top_srcdir)/C/gdome_xslt/gdome_xslt.c - cp $< $@ - -$(ARCHIVE).cma: $(CMA_DEPS) - $(OCAMLMKLIB) -o $(ARCHIVE) $^ $(SHARED_LIBS) -$(ARCHIVE).cmxa: $(CMXA_DEPS) - $(OCAMLMKLIB) -o $(ARCHIVE) $^ $(SHARED_LIBS) -lib$(ARCHIVE).a $(DLL): $(O_S) - $(OCAMLMKLIB) -o $(ARCHIVE) $^ $(SHARED_LIBS) - -INCLUDES = $(GDOME_CFLAGS) $(MLGDOME_CFLAGS) -I/usr/include/caml -I$(top_srcdir)/C/gdome_xslt - -BYTECODE_STUFF = \ - $(ARCHIVE).cma $(DLL) i_gdome_xslt.cmi i_gdome_xslt.ml gdome_xslt.cmi \ - gdome_xslt.mli gdome_xslt_init.cmi gdome_xslt_init.mli gdome_xslt_init.cmo \ - lib$(ARCHIVE).a -NATIVECODE_STUFF = \ - $(ARCHIVE).cmxa $(ARCHIVE).a gdome_xslt_init.cmx gdome_xslt_init.o -if HAVE_OCAMLOPT_COND -install-data-local: $(BYTECODE_STUFF) $(NATIVECODE_STUFF) -else -install-data-local: $(BYTECODE_STUFF) -endif - $(mkinstalldirs) $(OCAMLINSTALLDIR) $(STUBSDIR) - chmod -x $(DLL) - for i in $^; do \ - if [ "$$i" != "$(DLL)" ]; then \ - $(INSTALL_DATA) $$i $(OCAMLINSTALLDIR)/$$i; \ - fi \ - done - if [ "x$(OCAMLFIND)" != "x" ]; then \ - mv $(OCAMLINSTALLDIR) $(OCAMLINSTALLDIR).saved; \ - $(OCAMLFIND) install -destdir $(DESTDIR)$(OCAMLSTDLIBDIR)/ $(PKGNAME) META $(DLL); \ - $(INSTALL_DATA) $(OCAMLINSTALLDIR).saved/* $(OCAMLINSTALLDIR)/; \ - rm -rf $(OCAMLINSTALLDIR).saved/; \ - else \ - $(INSTALL_DATA) $(DLL) $(STUBSDIR); \ - fi - -uninstall-local: - if [ "x$(OCAMLFIND)" != "x" ]; then \ - $(OCAMLFIND) remove -destdir $(DESTDIR)$(OCAMLSTDLIBDIR)/ $(PKGNAME); \ - else \ - rm -rf $(OCAMLINSTALLDIR); \ - rm $(STUBSDIR)/$(DLL); \ - fi - rm $(STUBSDIR)/lib$(ARCHIVE).so - -#### OCaml only stuff from now on - -DEPOBJS = *.ml *.mli - -depend: - $(OCAMLDEP) $(DEPOBJS) > .depend - -%.cmi : $(srcdir)/%.mli - if test ! -e $(@:%.cmi=%.mli) -a "x$(srcdir)" != "x." ; then $(LN_S) $< . ; fi - $(OCAMLC) -c $(@:%.cmi=%.mli) - -%.cmo : $(srcdir)/%.ml - if test ! -e $(@:%.cmo=%.ml) -a "x$(srcdir)" != "x." ; then $(LN_S) $< . ; fi - $(OCAMLC) -c $(@:%.cmo=%.ml) - -%.cmx %.o : $(srcdir)/%.ml - if test ! -e $(@:%.cmx=%.ml) -a "x$(srcdir)" != "x." ; then $(LN_S) $< . ; fi - $(OCAMLOPT) -c $(@:%.cmx=%.ml) - -include .depend - diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt.ml b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt.ml deleted file mode 100644 index b64a006b4..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt.ml +++ /dev/null @@ -1,59 +0,0 @@ -(* This file is part of an ocaml binding of an XSLT engine working on Gdome - * documents. - * - * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT - * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT) - * - * Copyright (C) 2002: - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please send an email to {sacerdot,zack}@cs.unibo.it - *) - -let processStylesheet style = - I_gdome_xslt.processStylesheet style#as_Document -;; - -let applyStylesheet ~source ~stylesheet ~params = - let res = - I_gdome_xslt.applyStylesheet ~source:(source#as_Document) ~stylesheet - ~params - in - new Gdome.document res -;; - -let saveResultToChannel ~outchan ~result ~stylesheet = - I_gdome_xslt.saveResultToChannel - ~outchan - ~result:result#as_Document - ~stylesheet -;; - -let setErrorCallback = function - | None -> I_gdome_xslt.disableErrorCallback () - | Some (callback: string -> unit) -> - Callback.register "error_callback" callback; - I_gdome_xslt.enableErrorCallback () -;; -let setDebugCallback = function - | None -> I_gdome_xslt.disableDebugCallback () - | Some (callback: string -> unit) -> - Callback.register "debug_callback" callback; - I_gdome_xslt.enableDebugCallback () -;; - diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt.mli b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt.mli deleted file mode 100644 index 8115457f3..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt.mli +++ /dev/null @@ -1,59 +0,0 @@ -(* This file is part of an ocaml binding of an XSLT engine working on Gdome - * documents. - * - * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT - * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT) - * - * Copyright (C) 2002: - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please send an email to {sacerdot,zack}@cs.unibo.it - *) - -(* processStylesheet stylesheet *) -(* Process a stylesheet so that it can be subsequently used *) -(* with applyStylesheet. *) -val processStylesheet: - Gdome.document -> - I_gdome_xslt.processed_stylesheet - -(* applyStylesheet source stylesheet params *) -(* Applies a processed stylesheet to a source document, using *) -(* the given list of parameters (couples name,value) *) -val applyStylesheet: - source: Gdome.document -> - stylesheet:I_gdome_xslt.processed_stylesheet -> - params:(string * string) list -> - Gdome.document - -(* output the result of a previous XSLT transformation to an *) -(* output channel *) -val saveResultToChannel: - outchan: out_channel -> - result: Gdome.document -> - stylesheet: I_gdome_xslt.processed_stylesheet -> - unit - -(** set error callback, that is a function invoked each time an error message is -generated. If None is passed, libxslt default error callback is used *) -val setErrorCallback: (string -> unit) option -> unit - -(** set debug callback, that is a function invoked each time a debugging message -is generated. If None is passed, libxslt default error callback is used *) -val setDebugCallback: (string -> unit) option -> unit - diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt_init.ml b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt_init.ml deleted file mode 100644 index e7da4e02d..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt_init.ml +++ /dev/null @@ -1,41 +0,0 @@ -(* This file is part of an ocaml binding of an XSLT engine working on Gdome - * documents. - * - * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT - * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT) - * - * Copyright (C) 2002: - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please send an email to {sacerdot,zack}@cs.unibo.it - *) - -exception ProcessStylesheetException -exception ApplyStylesheetException - -let _ = - Callback.register_exception - "ProcessStylesheetException" ProcessStylesheetException -;; - -let _ = - Callback.register_exception - "ApplyStylesheetException" ApplyStylesheetException -;; - -I_gdome_xslt.setXsltMaxDepth 2000;; diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt_init.mli b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt_init.mli deleted file mode 100644 index d3e6d670e..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/gdome_xslt_init.mli +++ /dev/null @@ -1,37 +0,0 @@ -(* This file is part of an ocaml binding of an XSLT engine working on Gdome - * documents. - * - * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT - * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT) - * - * Copyright (C) 2002: - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please send an email to {sacerdot,zack}@cs.unibo.it - *) - -(**************************** WARNING!!! ***********************************) -(*** ***) -(*** This file must always be linked with any code using gdome_xslt and ***) -(*** must be linked as the first file. It is responsible of initializing ***) -(*** the whole binding, registering some ocaml values to the C level. ***) -(*** ***) -(***************************************************************************) - -exception ProcessStylesheetException -exception ApplyStylesheetException diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/i_gdome_xslt.ml b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/i_gdome_xslt.ml deleted file mode 100644 index 6f686c482..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/i_gdome_xslt.ml +++ /dev/null @@ -1,58 +0,0 @@ -(* This file is part of an ocaml binding of an XSLT engine working on Gdome - * documents. - * - * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT - * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT) - * - * Copyright (C) 2002: - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please send an email to {sacerdot,zack}@cs.unibo.it - *) - -type processed_stylesheet - -external setXsltMaxDepth: - int -> - unit - = "setXsltMaxDepth" - -external processStylesheet: - [> `Document] GdomeT.t -> - processed_stylesheet - = "ml_processStylesheet" - -external applyStylesheet: - source: [> `Document] GdomeT.t -> - stylesheet: processed_stylesheet -> - params: (string * string) list -> - TDocument.t - = "ml_applyStylesheet" - -external saveResultToChannel: - outchan: out_channel -> - result: TDocument.t -> - stylesheet: processed_stylesheet -> - unit - = "ml_saveResultToChannel" - -external enableErrorCallback : unit -> unit = "ml_enableErrorCallback" -external disableErrorCallback : unit -> unit = "ml_disableErrorCallback" -external enableDebugCallback : unit -> unit = "ml_enableDebugCallback" -external disableDebugCallback : unit -> unit = "ml_disableDebugCallback" - diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ml_gdome_xslt.c b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ml_gdome_xslt.c deleted file mode 100644 index 225698a79..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ml_gdome_xslt.c +++ /dev/null @@ -1,186 +0,0 @@ -/* This file is part of an ocaml binding of an XSLT engine working on Gdome - * documents. - * - * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT - * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT) - * - * Copyright (C) 2002: - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please send an email to {sacerdot,zack}@cs.unibo.it - */ - -#include - -#include -#include -#include -#include - -#include -#include - -#include "ocaml-io.h" -#include "mlgdomevalue.h" -#include "gdome_xslt.h" - -xsltStylesheetPtr XsltStylesheetPtr_val(value); - -static void ml_xsltFreeStylesheet(value v) -{ - xsltFreeStylesheet(XsltStylesheetPtr_val(v)); -} - -xsltStylesheetPtr XsltStylesheetPtr_val(value v) -{ - CAMLparam1(v); - xsltStylesheetPtr res = *((xsltStylesheetPtr*) Data_custom_val(v)); - CAMLreturn(res); -} - -value Val_XsltStylesheetPtr(xsltStylesheetPtr obj) -{ - CAMLparam0(); - CAMLlocal1(v); - static struct custom_operations ops = { - "http://www.cs.unibo.it/helm/gdome_xslt/XsltStylesheetPtr", - ml_xsltFreeStylesheet, - custom_compare_default, - custom_hash_default, - custom_serialize_default, - custom_deserialize_default - }; - - v = alloc_custom(&ops, sizeof(xsltStylesheetPtr), 0, 1); - *((xsltStylesheetPtr*) Data_custom_val(v)) = obj; - - CAMLreturn(v); -} - -value ml_processStylesheet(value style) -{ - CAMLparam1(style); - xsltStylesheetPtr res; - res = processStylesheet(Document_val(style)); - if (res == NULL) { - value* excp; - excp = caml_named_value("ProcessStylesheetException"); - assert(excp != NULL); - raise_constant(*excp); - } - CAMLreturn(Val_XsltStylesheetPtr(res)); -} - -value setXsltMaxDepth(value depth) -{ - CAMLparam1(depth); - xsltMaxDepth = Int_val(depth); - CAMLreturn0; -} - -value ml_applyStylesheet(value source, value style, value params) -{ - CAMLparam3(source,style,params); - CAMLlocal1(list); - GdomeDocument* res; - int i; - const char** c_params; - - i = 0 ; list = params; - while(list != Val_int(0)) { - list = Field(list,1); - i++; - } - c_params = (const char **)malloc(sizeof(char *) * (i * 2 + 1)); - - i = 0; list = params; - while(list != Val_int(0)) { - c_params[i] = String_val(Field(Field(list,0),0)); - c_params[i+1] = String_val(Field(Field(list,0),1)); - list = Field(list,1); - i+=2; - } - c_params[i] = NULL; - enter_blocking_section(); - res = applyStylesheet(Document_val(source), - XsltStylesheetPtr_val(style), - c_params); - leave_blocking_section(); - free(c_params); - if (res == NULL) { - value* excp; - excp = caml_named_value("ApplyStylesheetException"); - assert(excp != NULL); - raise_constant(*excp); - } - CAMLreturn(Val_Document(res)); -} - -value ml_saveResultToChannel(value channel, - value result, - value stylesheet) -{ - CAMLparam3(channel, result, stylesheet); - - saveResultToFd((Channel(channel))->fd, - Document_val(result), - XsltStylesheetPtr_val(stylesheet)); - - CAMLreturn0; -} - - /* error callback handling */ - -static void ml_gdomeXsltErrorCallback(const char *msg) { - callback(*caml_named_value("error_callback"), copy_string(msg)); - - return; -} - -value ml_enableErrorCallback(value unit) { - CAMLparam1(unit); - setErrorCallback(ml_gdomeXsltErrorCallback); - CAMLreturn(Val_unit); -} - -value ml_disableErrorCallback(value unit) { - CAMLparam1(unit); - setErrorCallback(NULL); - CAMLreturn(Val_unit); -} - - /* debug callback handling */ - -static void ml_gdomeXsltDebugCallback(const char *msg) { - callback(*caml_named_value("debug_callback"), copy_string(msg)); - - return; -} - -value ml_enableDebugCallback(value unit) { - CAMLparam1(unit); - setDebugCallback(ml_gdomeXsltDebugCallback); - CAMLreturn(Val_unit); -} - -value ml_disableDebugCallback(value unit) { - CAMLparam1(unit); - setDebugCallback(NULL); - CAMLreturn(Val_unit); -} - diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ml_gdome_xslt.h b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ml_gdome_xslt.h deleted file mode 100644 index a173bc97f..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ml_gdome_xslt.h +++ /dev/null @@ -1,40 +0,0 @@ -/* This file is part of an ocaml binding of an XSLT engine working on Gdome - * documents. - * - * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT - * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT) - * - * Copyright (C) 2002: - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please send an email to {sacerdot,zack}@cs.unibo.it - */ - -xsltStylesheetPtr XsltStylesheetPtr_val(value); -value Val_XsltStylesheetPtr(xsltStylesheetPtr); - -value ml_processStylesheet(value style); -value ml_applyStylesheet(value source, value style, value params); - -value ml_saveResultToChannel(value channel, value result, value stylesheet); - -value ml_enableErrorCallback(value unit); -value ml_disableErrorCallback(value unit); -value ml_enableDebugCallback(value unit); -value ml_disableDebugCallback(value unit); - diff --git a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ocaml-io.h b/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ocaml-io.h deleted file mode 100644 index 6ce9493c8..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/gdome_xslt/ocaml-io.h +++ /dev/null @@ -1,54 +0,0 @@ -/**********************************************************************/ -/* */ -/* Objective Caml */ -/* */ -/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */ -/* */ -/* Copyright 1996 Institut National de Recherche en Informatique et */ -/* en Automatique. All rights reserved. This file is distributed */ -/* under the terms of the GNU Library General Public License, with */ -/* the special exception on linking described in file */ -/* ../../LICENSE-INRIA. */ -/* */ -/**********************************************************************/ - -/* Buffered input/output */ - -#ifndef __IO_H__ -#define __IO_H__ - -#ifndef IO_BUFFER_SIZE -#define IO_BUFFER_SIZE 4096 -#endif - -typedef long file_offset; - -struct channel { - int fd; /* Unix file descriptor */ - file_offset offset; /* Absolute position of fd in the file */ - char * end; /* Physical end of the buffer */ - char * curr; /* Current position in the buffer */ - char * max; /* Logical end of the buffer (for input) */ - void * mutex; /* Placeholder for mutex (for systhreads) */ - struct channel * next; /* Linear chaining of channels (flush_all) */ - int revealed; /* For Cash only */ - int old_revealed; /* For Cash only */ - int refcount; /* For flush_all and for Cash */ - char buff[IO_BUFFER_SIZE]; /* The buffer itself */ -}; - -/* For an output channel: - [offset] is the absolute position of the beginning of the buffer [buff]. - For an input channel: - [offset] is the absolute position of the logical end of the buffer, [max]. -*/ - -/* Functions and macros that can be called from C. Take arguments of - type struct channel *. No locking is performed. */ - -/* Extract a struct channel * from the heap object representing it */ - -#define Channel(v) (*((struct channel **) (Data_custom_val(v)))) - -#endif /* __IO_H__ */ - diff --git a/helm/DEVEL/gdome_xslt/ocaml/test/.cvsignore b/helm/DEVEL/gdome_xslt/ocaml/test/.cvsignore deleted file mode 100644 index fb5d24d4f..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/test/.cvsignore +++ /dev/null @@ -1,8 +0,0 @@ -test.cmi -test.cmo -test.cmx -test.o -test -test.opt -Makefile -Makefile.in diff --git a/helm/DEVEL/gdome_xslt/ocaml/test/Makefile.am b/helm/DEVEL/gdome_xslt/ocaml/test/Makefile.am deleted file mode 100644 index 95f83fa79..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/test/Makefile.am +++ /dev/null @@ -1,25 +0,0 @@ -REQUIRES = gdome2 -OCAMLFIND = @OCAMLFIND@ -OCAMLC = $(OCAMLFIND) @OCAMLC@ -package "$(REQUIRES)" -OCAMLOPT = $(OCAMLFIND) @OCAMLOPT@ -package "$(REQUIRES)" -CMA = $(top_builddir)/ocaml/gdome_xslt/mlgdome2-xslt.cma -CMXA = $(top_builddir)/ocaml/gdome_xslt/mlgdome2-xslt.cmxa -INIT_CMO = $(top_builddir)/ocaml/gdome_xslt/gdome_xslt_init.cmo -INIT_CMX = $(top_builddir)/ocaml/gdome_xslt/gdome_xslt_init.cmx -OCAMLC_FLAGS = -I $(top_builddir)/ocaml/gdome_xslt/ - -EXTRA_DIST = test.ml -CLEANFILES = test{,.o,.opt} test.cm[iox] - -if HAVE_OCAMLOPT_COND -noinst_DATA = test.opt test -else -noinst_DATA = test -endif - -test: test.ml $(CMA) $(INIT_CMO) - $(OCAMLC) -o $@ -linkpkg $(OCAMLC_FLAGS) $(CMA) $(INIT_CMO) $< - -test.opt: test.ml $(CMXA) $(INIT_CMX) - $(OCAMLOPT) -o $@ -linkpkg $(OCAMLC_FLAGS) $(CMXA) $(INIT_CMX) $< - diff --git a/helm/DEVEL/gdome_xslt/ocaml/test/test.ml b/helm/DEVEL/gdome_xslt/ocaml/test/test.ml deleted file mode 100644 index 4cd103435..000000000 --- a/helm/DEVEL/gdome_xslt/ocaml/test/test.ml +++ /dev/null @@ -1,79 +0,0 @@ -(* This file is part of an ocaml binding of an XSLT engine working on Gdome - * documents. - * - * The code is largely based on the code of T.J. Mather's XML::GDOME::XSLT - * Perl module (http://kobesearch.cpan.org/search?dist=XML-GDOME-XSLT) - * - * Copyright (C) 2002 Claudio Sacerdoti Coen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please send an email to - *) - -let (output_file, - correct_output_file, - input_file, - stylesheet_file) = - ("../../test_files/output.xml", - "../../test_files/output.xml.correct", - "../../test_files/input.xml", - "../../test_files/stylesheet.xsl") -in -let domImpl = Gdome.domImplementation () in - let input = - domImpl#createDocumentFromURI ~uri:input_file () - and style = - domImpl#createDocumentFromURI ~uri:stylesheet_file () - in - (* First of all, let's try the exception handling machinery *) - let _ = - try - ignore (Gdome_xslt.processStylesheet input); - assert false (* previous line should rise an exception *) - with - Gdome_xslt_init.ProcessStylesheetException -> () - in - let pstyle = Gdome_xslt.processStylesheet style in - let output = - Gdome_xslt.applyStylesheet input pstyle - ["parameter1","'value1'" ; - "parameter2","'value2'" ; - "parameter3","'value3'" - ] - in -(* (* old version: use gdome serialization functions *) - let res = - domImpl#saveDocumentToFile ~doc:output ~name:output_file () - in - if not res then - prerr_endline ("Error saving to document " ^ output_file) - else - begin - Printf.printf - "The test was successful iff %s is equal to %s\n" - output_file - correct_output_file - end -*) - (* new version: use libxslt serialization functions *) - let outchan = open_out output_file in - Gdome_xslt.saveResultToChannel ~outchan ~result:output ~stylesheet:pstyle; - close_out outchan; - Printf.printf - "The test was successful iff %s is equal to %s\n" - output_file - correct_output_file -;; diff --git a/helm/DEVEL/gdome_xslt/test_files/.cvsignore b/helm/DEVEL/gdome_xslt/test_files/.cvsignore deleted file mode 100644 index d1e494380..000000000 --- a/helm/DEVEL/gdome_xslt/test_files/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -output.xml -Makefile -Makefile.in diff --git a/helm/DEVEL/gdome_xslt/test_files/Makefile.am b/helm/DEVEL/gdome_xslt/test_files/Makefile.am deleted file mode 100644 index ead191b52..000000000 --- a/helm/DEVEL/gdome_xslt/test_files/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -EXTRA_DIST = input.xml output.xml.correct stylesheet.xsl diff --git a/helm/DEVEL/gdome_xslt/test_files/input.xml b/helm/DEVEL/gdome_xslt/test_files/input.xml deleted file mode 100644 index b6ffa38fd..000000000 --- a/helm/DEVEL/gdome_xslt/test_files/input.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - It works! - diff --git a/helm/DEVEL/gdome_xslt/test_files/output.xml.correct b/helm/DEVEL/gdome_xslt/test_files/output.xml.correct deleted file mode 100644 index c4adda3d7..000000000 --- a/helm/DEVEL/gdome_xslt/test_files/output.xml.correct +++ /dev/null @@ -1,4 +0,0 @@ - -value2value3value1 - It works! - diff --git a/helm/DEVEL/gdome_xslt/test_files/stylesheet.xsl b/helm/DEVEL/gdome_xslt/test_files/stylesheet.xsl deleted file mode 100644 index ca4534e12..000000000 --- a/helm/DEVEL/gdome_xslt/test_files/stylesheet.xsl +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/DEVEL/lablgtkmathview/.cvsignore b/helm/DEVEL/lablgtkmathview/.cvsignore deleted file mode 100644 index d018d8e04..000000000 --- a/helm/DEVEL/lablgtkmathview/.cvsignore +++ /dev/null @@ -1,10 +0,0 @@ -*.cmi *.cmo *.cmx *.cma *.cmxa config.make config.cache config.log configure -Makefile -config.status -META -lablgtkmathview.spec -gtkMathViewProps.ml -ogtkMathViewProps.ml -aclocal.m4 -autom4te.cache -config.h.in diff --git a/helm/DEVEL/lablgtkmathview/.depend b/helm/DEVEL/lablgtkmathview/.depend deleted file mode 100644 index 23cd75664..000000000 --- a/helm/DEVEL/lablgtkmathview/.depend +++ /dev/null @@ -1,12 +0,0 @@ -gMathViewAux.cmo: gMathView.cmi gMathViewAux.cmi -gMathViewAux.cmx: gMathView.cmx gMathViewAux.cmi -gMathView.cmo: gtkMathView.cmo gtk_mathview.cmo gMathView.cmi -gMathView.cmx: gtkMathView.cmx gtk_mathview.cmx gMathView.cmi -gtkMathView.cmo: gtkMathViewProps.cmo gtk_mathview.cmo -gtkMathView.cmx: gtkMathViewProps.cmx gtk_mathview.cmx -gtkMathViewProps.cmo: gtk_mathview.cmo -gtkMathViewProps.cmx: gtk_mathview.cmx -ogtkMathViewProps.cmo: gtkMathViewProps.cmo -ogtkMathViewProps.cmx: gtkMathViewProps.cmx -gMathViewAux.cmi: gMathView.cmi gtk_mathview.cmo -gMathView.cmi: gtk_mathview.cmo diff --git a/helm/DEVEL/lablgtkmathview/AUTHORS b/helm/DEVEL/lablgtkmathview/AUTHORS deleted file mode 100644 index 3598094a9..000000000 --- a/helm/DEVEL/lablgtkmathview/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -Luca Padovani -Claudio Sacerdoti Coen diff --git a/helm/DEVEL/lablgtkmathview/COPYING b/helm/DEVEL/lablgtkmathview/COPYING deleted file mode 100644 index d60c31a97..000000000 --- a/helm/DEVEL/lablgtkmathview/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/helm/DEVEL/lablgtkmathview/ChangeLog b/helm/DEVEL/lablgtkmathview/ChangeLog deleted file mode 100644 index 19ce76012..000000000 --- a/helm/DEVEL/lablgtkmathview/ChangeLog +++ /dev/null @@ -1,6 +0,0 @@ -* 0.4.1 - - Upgraded to GtkMathView 0.4.[0,1] - -* 0.3.0 - - Upgraded to GtkMathView 0.3.0 - - Now based on the gmetadom (alias gdome2) binding to GDOMe Level 2 diff --git a/helm/DEVEL/lablgtkmathview/LICENSE b/helm/DEVEL/lablgtkmathview/LICENSE deleted file mode 100644 index 691e4e01c..000000000 --- a/helm/DEVEL/lablgtkmathview/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(* Copyright (C) 2000-2003, Luca Padovani , - * Claudio Sacerdoti Coen . - * - * This file is part of lablgtkmathview, the Ocaml binding - * for the GtkMathView widget. - * - * lablgtkmathview is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * lablgtkmathview is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with lablgtkmathview; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * For details, send a mail to the author. - *) diff --git a/helm/DEVEL/lablgtkmathview/META.in b/helm/DEVEL/lablgtkmathview/META.in deleted file mode 100644 index d94e88f16..000000000 --- a/helm/DEVEL/lablgtkmathview/META.in +++ /dev/null @@ -1,4 +0,0 @@ -requires="gdome2 lablgtk2" -version="@VERSION@" -archive(byte)="@PACKAGE@.cma" -archive(native)="@PACKAGE@.cmxa" diff --git a/helm/DEVEL/lablgtkmathview/Makefile.in b/helm/DEVEL/lablgtkmathview/Makefile.in deleted file mode 100644 index 26532c4a8..000000000 --- a/helm/DEVEL/lablgtkmathview/Makefile.in +++ /dev/null @@ -1,134 +0,0 @@ -PACKAGE = @PACKAGE@ -VERSION = @VERSION@ -INCLUDEDIR = @OCAML_INCLUDE_DIR@ -PROPCC = @OCAML_LIB_DIR@/lablgtk2/propcc -PREFIX = -OBJECTS_C = ml_gtk_mathview.o -OBJECTS = gtkMathViewProps.cmo ogtkMathViewProps.cmo gtk_mathview.cmo gtkMathView.cmo gMathView.cmo gMathViewAux.cmo -OBJECTS_OPT = gtkMathViewProps.cmx ogtkMathViewProps.cmx gtkMathView.cmx gtk_mathview.cmx gMathView.cmx gMathViewAux.cmx -GENERATED_FILES = gtkMathViewProps.ml ogtkMathViewProps.ml -NULL = -INST = \ - META \ - gMathView.mli \ - gMathView.cmi \ - gtkMathView.cmi \ - gtk_mathview.cmi \ - gtkMathViewProps.cmi \ - ogtkMathViewProps.cmi \ - gMathViewAux.cmi \ - gMathViewAux.mli \ - $(NULL) -DIST_FILES = \ - Makefile.in configure.in gMathView.ml gMathView.mli \ - gMathViewAux.ml gMathViewAux.mli gtkMathView.ml \ - gtk_mathview.ml ml_gtk_mathview.c META.in .depend debian/ test/ \ - configure gtkMathView.props -DIST_DIR = $(PACKAGE)-$(VERSION) -DOC_FILES = AUTHORS COPYING ChangeLog NEWS README LICENSE -REQUIRES = gdome2 lablgtk2 -PREDICATES = -SHARED_LIBS = @GDOME_LIBS@ @GTKMATHVIEW_LIBS@ - -OCAMLFIND = ocamlfind -OCAMLC = $(OCAMLFIND) ocamlc -OCAMLOPT = $(OCAMLFIND) ocamlopt -OCAMLDEP = ocamldep -OCAMLMKLIB = ocamlmklib -OCAML_STUB_DIR = @OCAML_STUB_DIR@ - -ARCHIVE = $(PACKAGE) -DLL = dll$(ARCHIVE).so - -TESTDIR = ./test -TMPDIR = .test -TMPPKGDIR = $(TMPDIR)/$(PACKAGE) - -all: $(ARCHIVE).cma lib$(ARCHIVE).a $(DLL) -opt: $(ARCHIVE).cmxa $(ARCHIVE).a -test: $(TESTDIR)/test -test.opt: $(TESTDIR)/test.opt -world: all opt - -dist: - rm -rf $(DIST_DIR)/ - mkdir $(DIST_DIR)/ - cp -a $(DIST_FILES) $(DOC_FILES) $(DIST_DIR)/ - -find $(DIST_DIR) -name CVS -type d -exec rm -rf {} \; - -find $(DIST_DIR) -name .cvsignore -type f -exec rm {} \; - tar cvfz $(DIST_DIR).tar.gz $(DIST_DIR)/ - rm -rf $(DIST_DIR)/ - -deb: dist - if [ -d $(DIST_DIR)/ ]; then rm -rf $(DIST_DIR); else true; fi - tar xvzf $(DIST_DIR).tar.gz - (cd $(DIST_DIR)/ && debuild) - rm -rf $(DIST_DIR) - -$(GENERATED_FILES): gtkMathView.props - -ml_gtk_mathview.o: ml_gtk_mathview.c - gcc -c -I$(INCLUDEDIR) -fPIC `ocamlfind query -i-format lablgtk2` @GTKMATHVIEW_CFLAGS@ @GDOME_CFLAGS@ `ocamlfind query -i-format gdome2` $< - -.SUFFIXES: .cmo .cmi .cmx .ml .mli - -.ml.cmo: - $(OCAMLC) -package "$(REQUIRES)" -predicates "$(PREDICATES)" -c $< -.mli.cmi: - $(OCAMLC) -package "$(REQUIRES)" -predicates "$(PREDICATES)" -c $< -.ml.cmx: - $(OCAMLOPT) -package "$(REQUIRES)" -predicates "$(PREDICATES)" -c $< - -%Props.ml o%Props.ml: %.props $(PROPCC) - $(PROPCC) $< - -depend: *.ml *.mli $(GENERATED_FILES) - $(OCAMLDEP) *.ml *.mli >.depend -include .depend - -$(ARCHIVE).cma: $(OBJECTS) - $(OCAMLMKLIB) -o $(ARCHIVE) $^ $(SHARED_LIBS) -$(ARCHIVE).cmxa: $(OBJECTS_OPT) - $(OCAMLMKLIB) -o $(ARCHIVE) $^ $(SHARED_LIBS) -lib$(ARCHIVE).a $(DLL): $(OBJECTS_C) - $(OCAMLMKLIB) -o $(ARCHIVE) $^ $(SHARED_LIBS) - -$(TESTDIR)/test: $(OBJECTS_C) $(ARCHIVE).cma $(TESTDIR)/test.ml - mkdir -p $(TMPPKGDIR) - cp $(OBJECTS_C) $(DLL) $(ARCHIVE).cma $(INST) $(TMPPKGDIR) - cd $(TESTDIR) ; export OCAMLPATH=../$(TMPDIR):$$OCAMLPATH ; make - rm -r $(TMPDIR) - -$(TESTDIR)/test.opt: $(OBJECTS_C) $(ARCHIVE).a $(ARCHIVE).cmxa $(TESTDIR)/test.ml - mkdir -p $(TMPPKGDIR) - cp $(OBJECTS_C) $(ARCHIVE).a $(ARCHIVE).cmxa $(INST) $(TMPPKGDIR) - cd $(TESTDIR) ; export OCAMLPATH=../$(TMPDIR):$$OCAMLPATH ; make opt - rm -r $(TMPDIR) - -install: - test ! -f $(ARCHIVE).cmxa || extra="$(ARCHIVE).a $(ARCHIVE).cmxa" ; \ - if [ "$(PREFIX)" = "" ]; then \ - $(OCAMLFIND) install \ - $(PACKAGE) $(ARCHIVE).cma lib$(ARCHIVE).a \ - $(DLL) $(INST) $$extra; \ - else \ - $(OCAMLFIND) install -ldconf /def/null -destdir $(PREFIX) \ - $(PACKAGE) $(ARCHIVE).cma lib$(ARCHIVE).a \ - $(DLL) $(INST) $$extra; \ - fi - -uninstall: - if [ "$(PREFIX)" = "" ]; then \ - ocamlfind remove $(PACKAGE); \ - else \ - ocamlfind remove -destdir $(PREFIX) $(PACKAGE); \ - fi - -clean: - rm -f *.[ao] *.cm[iaxo] *.cmxa *.so $(GENERATED_FILES) - cd $(TESTDIR) ; make clean - rm -rf $(TMPDIR) - -distclean: clean - rm -f config.log config.cache config.status Makefile META - cd $(TESTDIR) ; make distclean diff --git a/helm/DEVEL/lablgtkmathview/NEWS b/helm/DEVEL/lablgtkmathview/NEWS deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/DEVEL/lablgtkmathview/README b/helm/DEVEL/lablgtkmathview/README deleted file mode 100644 index 61c34d46e..000000000 --- a/helm/DEVEL/lablgtkmathview/README +++ /dev/null @@ -1,9 +0,0 @@ -This is the Ocaml binding for the GtkMathView widget. - -To compile and install: - - ./configure - make - make opt - make install - diff --git a/helm/DEVEL/lablgtkmathview/configure.in b/helm/DEVEL/lablgtkmathview/configure.in deleted file mode 100644 index d4c16e55d..000000000 --- a/helm/DEVEL/lablgtkmathview/configure.in +++ /dev/null @@ -1,57 +0,0 @@ -AC_INIT(gMathView.ml) - -PACKAGE=lablgtkmathview - -LABLGTKMATHVIEW_MAJOR_VERSION=0 -LABLGTKMATHVIEW_MINOR_VERSION=7 -LABLGTKMATHVIEW_MICRO_VERSION=2 -LABLGTKMATHVIEW_VERSION=$LABLGTKMATHVIEW_MAJOR_VERSION.$LABLGTKMATHVIEW_MINOR_VERSION.$LABLGTKMATHVIEW_MICRO_VERSION -VERSION=$LABLGTKMATHVIEW_VERSION - -PKG_CHECK_MODULES(GDOME, gdome2 >= 0.7.0,, AC_MSG_ERROR(could not find Gdome2)) -AC_SUBST(GDOME_CFLAGS) -AC_SUBST(GDOME_LIBS) - -PKG_CHECK_MODULES(GTKMATHVIEW, gtkmathview-gmetadom >= 0.6.2,, AC_MSG_ERROR(could not find gtkmathview-gmetadom)) -AC_SUBST(GTKMATHVIEW_CFLAGS) -AC_SUBST(GTKMATHVIEW_LIBS) - -AC_CHECK_PROG(HAVE_OCAMLC, ocamlc, yes, no) -if test $HAVE_OCAMLC = "no"; then - AC_MSG_ERROR(could not find ocamlc in PATH, please make sure ocaml is installed) -fi - -AC_CHECK_PROG(HAVE_OCAMLFIND, ocamlfind, yes, no) -if test $HAVE_OCAMLFIND = "no"; then - AC_MSG_ERROR(could not find ocamlfind in PATH, please make sure findlib is installed) -fi - -AC_MSG_CHECKING("for gdome2") -ocamlfind query gdome2 || - AC_MSG_ERROR(gdome2 not installed (according to findlib)) - -AC_MSG_CHECKING("for lablgtk2") -ocamlfind query lablgtk2 || - AC_MSG_ERROR(lablgtk2 not installed (according to findlib)) - -AC_MSG_CHECKING("for the ocaml library dir") -OCAML_LIB_DIR=`ocamlc -where` -OCAML_STUB_DIR="$OCAML_LIB_DIR/stublibs" -AC_MSG_RESULT($OCAML_LIB_DIR) - -AC_CHECK_FILE(/usr/include/caml/mlvalues.h, - OCAML_INCLUDE_DIR=/usr/include/caml, - OCAML_INCLUDE_DIR=$OCAML_LIB_DIR/caml -) - -AC_SUBST(PACKAGE) -AC_SUBST(VERSION) -AC_SUBST(OCAML_INCLUDE_DIR) -AC_SUBST(OCAML_LIB_DIR) -AC_SUBST(OCAML_STUB_DIR) - -AC_OUTPUT([ - test/Makefile - Makefile - META -]) diff --git a/helm/DEVEL/lablgtkmathview/debian/changelog b/helm/DEVEL/lablgtkmathview/debian/changelog deleted file mode 100644 index c5e80350e..000000000 --- a/helm/DEVEL/lablgtkmathview/debian/changelog +++ /dev/null @@ -1,339 +0,0 @@ -lablgtkmathview (0.7.2-3) unstable; urgency=low - - * rebuilt with ocaml 3.09 - * debian/* - - no longer hard coding of ocaml abi number anywhere - - -- Stefano Zacchiroli Wed, 23 Nov 2005 09:59:14 +0000 - -lablgtkmathview (0.7.2-2) unstable; urgency=low - - * debian/changelog - - reverted version format, '-debian_version' is back again - * debian/liblablgtkmathview-ocaml.install - - install .so in /stublibs/ - - -- Stefano Zacchiroli Sun, 25 Sep 2005 18:50:32 +0200 - -lablgtkmathview (0.7.2) unstable; urgency=low - - * new upstream release - - enable access to gtk events - - new methods bound: {set,get}_{t1_opaque_mode,t1_anti_aliased_mode} - - bound new GtkMathView method for loading configuration files - * debian/control - - bumped standards-version - - bumped deps on gmetadom and lablgtk2 - - removed useless build-dep on autoconf - - -- Stefano Zacchiroli Sun, 31 Jul 2005 21:00:42 +0200 - -lablgtkmathview (0.7.1-2) unstable; urgency=low - - * debian/control - - changed dep on gtkmathview to libgtkmathview0c2 - - bumped dep on gmetadom to 0.2.3 - - -- Stefano Zacchiroli Thu, 7 Jul 2005 14:15:44 +0000 - -lablgtkmathview (0.7.1-1) unstable; urgency=low - - * new upstream release - - enable static binding of C stubs - - -- Stefano Zacchiroli Wed, 15 Jun 2005 14:27:44 +0200 - -lablgtkmathview (0.7.0-1) unstable; urgency=low - - * new upstream release - - minor changes, removed some annoying debugging prints - * rebuilt against lablgtk2 2.4.0+2005.06.13-1 and gtkmathview 0.7.0 - - -- Stefano Zacchiroli Sat, 11 Jun 2005 12:38:44 +0200 - -lablgtkmathview (0.6.4-3) unstable; urgency=low - - * rebuilt with ocaml 3.08.3 and lablgtk2 2.4.0+2005.02.18 - - -- Stefano Zacchiroli Tue, 29 Mar 2005 10:43:44 +0200 - -lablgtkmathview (0.6.4-2) unstable; urgency=low - - * rebuilt with ocaml 3.08.2 and lablgtk2 2.4.0+2004.11.19-1 - - -- Stefano Zacchiroli Thu, 9 Dec 2004 16:21:36 +0100 - -lablgtkmathview (0.6.4-1) unstable; urgency=low - - * new upstream release - - bindings for gtkmathview 0.6.4 - - -- Stefano Zacchiroli Wed, 10 Nov 2004 14:20:10 +0100 - -lablgtkmathview (0.6.3-2) unstable; urgency=medium - - * debian/control - - depend on ocaml-base-nox-3.08 instead of ocaml-base-3.08 since - this package doesn't directly need ocaml X libraries - - -- Stefano Zacchiroli Tue, 24 Aug 2004 12:23:18 +0200 - -lablgtkmathview (0.6.3-1) unstable; urgency=low - - * new upstream release - - bindings for gtkmathview 0.6.3 - * rebuilt with ocaml 3.08 - * debian/control - - bumped ocaml deps to 3.08 - - bumped lablgtk deps to >= 2.4.0 - - bumped gdome deps to >= 0.2.1-3 (1st version rebuilt with 3.08) - - bumped gtkmathview deps to >= 0.6.3 (needed by this binding) - - bumped stadards version to 3.6.1.1 - - -- Stefano Zacchiroli Thu, 29 Jul 2004 11:51:56 +0200 - -lablgtkmathview (0.5.1-4) unstable; urgency=low - - * ported to latest lablgtk2 (2.2.0+20040113) cvs snapshot - * debian/control - - changed build-dep accordingly - - -- Stefano Zacchiroli Fri, 23 Jan 2004 13:44:11 +0100 - -lablgtkmathview (0.5.1-3) unstable; urgency=low - - * debian/control - - removed some dependencies that should be inherited from - libgtkmathview-dev (bugfix for newer libt1-dev) - - bumped standards version to 3.6.1.0 - - -- Stefano Zacchiroli Thu, 22 Jan 2004 12:54:47 +0100 - -lablgtkmathview (0.5.1-2) unstable; urgency=low - - * Rebuilt with lablgtk2 2.2.0 - * debian/control - - bumped ocaml-findlib dependencies to 0.8-5 - - -- Stefano Zacchiroli Mon, 13 Oct 2003 09:18:48 +0200 - -lablgtkmathview (0.5.1-1) unstable; urgency=low - - * New upstream release (transition to gtk2) - - -- Stefano Zacchiroli Fri, 10 Oct 2003 10:10:10 +0200 - -lablgtkmathview (0.4.3-4) unstable; urgency=low - - * Rebuild with ocaml 3.07 - * debian/autodebian.make and debian/*.in - An experiment! - Mainly I've added an indirection which permits to fill some autoconf - variable in debian/* files. In this way the ocaml version is - discovered automagically and doesn't need to be manually changed - each time a new ocaml version is released. Actually the only two - supported variables are @OCAML_STDLIB_DIR@ (actually expands to - "usr/lib/ocaml/3.07" via ocamlc -where) and @OCAML_STUBLIBS_DIR@ - (actually expands to "usr/lib/ocaml/3.07/stublibs") - - -- Stefano Zacchiroli Wed, 1 Oct 2003 22:48:51 +0200 - -lablgtkmathview (0.4.3-3) unstable; urgency=low - - * rebuilt against gmetadom 0.1.10-3 - * debian/control - - strictly depends on gmetadom >= 0.1.10-3 (older version are buggy - on mips) - - -- Stefano Zacchiroli Sat, 12 Jul 2003 14:14:31 +0200 - -lablgtkmathview (0.4.3-2) unstable; urgency=low - - * upstream changes - - fixed Makefile.in that still looked for gtkmathview-config - - selection flickering got rid of (by means of freeze/thaw) - - structural selection is no longer activated just before - semantic selection for single_selection_math_view - * debian/control - - bumped gmetadom dependencies to >= 0.1.10-2 (to ensure that .pc - file is available) - - -- Stefano Zacchiroli Tue, 1 Jul 2003 11:25:48 +0200 - -lablgtkmathview (0.4.3-1) unstable; urgency=low - - * Rebuild against gtkmathview 0.4.3 - * debian/control - - bumped standards version to 3.5.10 - - bumped dependencies on gtkmathview to 0.4.3 - - bumped dependencies on gmetadom to 0.1.9 - - added ${misc:Depends} - - changed section of -dev package to "libdevel" - - better short description - - added built-dep to pkg-config - * debian/rules - - removed DH_COMPAT in favour of debian/compat - - comsetic changes - - removed useless binary-indep target - - removed dh_movefiles in favour of dh_install - - -- Stefano Zacchiroli Thu, 19 Jun 2003 14:52:54 +0200 - -lablgtkmathview (0.4.1-1) unstable; urgency=low - - * Bugfix in some OCaml value allocations - * Binding for gtkmathview 0.4.1 - * Bumped dependencies to gtkmathview 0.4.1 - * Dropped << dependencies for ocaml libraries - * Bumped gmetadom dependencies to >= 0.1.6 - * Bumped gdome2 dependencies to >= 0.7.4 - - -- Stefano Zacchiroli Tue, 11 Mar 2003 21:18:29 +0100 - -lablgtkmathview (0.3.99-2) unstable; urgency=low - - * Bugfix: added dep on t1lib-dev from liblablgtkmathview-ocaml-dev - * Bugfix: added dep on libgtkmathview-dev (>= 0.4.0) from - liblablgtkmathview-ocaml-dev - - -- Stefano Zacchiroli Sat, 25 Jan 2003 10:24:53 +0100 - -lablgtkmathview (0.3.99-1) unstable; urgency=low - - * Binding to gtkmathview 0.4.0 (pre-release) - * Added module GMathViewAux which contains backward compatible - "single_selection_math_view" class - * Reverted to >=/<< dependencies for ocaml libraries - * Bumped dependencies on gmetadom to 0.1.5 - * Bumped dependencies on gtkmathview to 0.4.0 - * Added missing dependencies from liblablgtkmathview-ocaml-dev to - libgdome2-ocaml-dev - * Versioned dependencies on liblablgtk-ocaml-dev - - -- Stefano Zacchiroli Wed, 22 Jan 2003 14:23:30 +0100 - -lablgtkmathview (0.3.1-1) unstable; urgency=low - - * Binding to gtkmathview 0.3.1 - * debian/control - - bumped Standards Version to 3.5.8 - - deps and build deps to ocaml{,-base}-3.06-1 - * Moved lib stuff to /usr/lib/ocaml/3.06 - - -- Stefano Zacchiroli Tue, 7 Jan 2003 12:57:47 +0100 - -lablgtkmathview (0.3.0-10) unstable; urgency=low - - * Added dep on liblablgtk-ocaml{,-dev} respectively in - liblablgtkmathview-ocaml{,-dev} - - -- Stefano Zacchiroli Tue, 17 Sep 2002 11:58:14 +0200 - -lablgtkmathview (0.3.0-9) unstable; urgency=low - - * Removed useless dh_ocamlld invocation - * Fixed native code compilation shared object path (now looks for .so - in /usr/lib/ocaml/stublibs instead of - /usr/lib/ocaml/lablgtkmathview) - - -- Stefano Zacchiroli Thu, 29 Aug 2002 15:02:21 +0200 - -lablgtkmathview (0.3.0-8) unstable; urgency=low - - * Switched to debhelper 4 - * Added build dep on findlib (>= 0.7.1) - * Rebuilt against ocaml 3.06 (Closes: Bug#158256, Bug#158266) - * Changed deps and build-deps to ocaml-3.06 and ocaml-base-3.06 as - mandated by the new ocaml packaging policy - * Removed mention of lablgtkmathview from debian/control - * Added dep on ocaml-findlib - * Moved shared objects to /usr/lib/ocaml/stublibs - - -- Stefano Zacchiroli Sun, 7 Jul 2002 13:50:52 +0200 - -lablgtkmathview (0.3.0-7) unstable; urgency=low - - * Added -fPIC when compiling some .o in order to build on HPPA - (Closes: #142462) - - -- Stefano Zacchiroli Fri, 12 Apr 2002 14:31:47 +0200 - -lablgtkmathview (0.3.0-6) unstable; urgency=low - - * Added Build-Depends on t1lib-dev (Closes: Bug#140835). - - -- Stefano Zacchiroli Tue, 2 Apr 2002 10:11:25 +0200 - -lablgtkmathview (0.3.0-5) unstable; urgency=low - - * Added Build-Depends on libgdome2-cpp-smart-dev (Closes: Bug#140720). - - -- Stefano Zacchiroli Mon, 1 Apr 2002 09:00:03 +0200 - -lablgtkmathview (0.3.0-4) unstable; urgency=low - - * Added some .mli and .ml files that document the library interface. - * Added Depends: on libgdome2-ocaml, we haven't yet estabilished how to - interact with shlibs system for ocaml shared library that are installed in - /usr/lib/ocaml - - -- Stefano Zacchiroli Mon, 1 Apr 2002 00:17:41 +0200 - -lablgtkmathview (0.3.0-3) unstable; urgency=low - - * Rebuilt against gmetadom 0.3.0-4 and gtkmathview 0.3.0-2. - - -- Stefano Zacchiroli Tue, 26 Mar 2002 19:17:56 +0100 - -lablgtkmathview (0.3.0-2) unstable; urgency=low - - * Added build dep on libgdome2-dev - * Removed CVS stuff from source tarball - - -- Stefano Zacchiroli Fri, 15 Mar 2002 13:23:53 +0100 - -lablgtkmathview (0.3.0-1) unstable; urgency=low - - * New upstream release - * Renamed resulting package to liblablgtkmathview-ocaml-dev - * Changed build-depends to adhere to the new ocaml packages naming schema - (e.g. lablgtk -> liblablgtk-ocaml-dev) (Closes: Bug#138116) - * Split away shared library in liblablgtkmathview-ocaml package - - -- Stefano Zacchiroli Wed, 13 Mar 2002 18:53:50 +0100 - -lablgtkmathview (0.2.8-1) unstable; urgency=low - - * New upstream release - * Built with ocaml 3.04 and lablgtk 1.2.3 - * Removed useless build depends - - -- Stefano Zacchiroli Mon, 25 Feb 2002 18:18:25 +0100 - -lablgtkmathview (0.2.4-4) unstable; urgency=low - - * Rebuilt with libgtkmathview 0.2.7 - - -- Stefano Zacchiroli Tue, 4 Sep 2001 22:16:35 +0200 - -lablgtkmathview (0.2.4-3) unstable; urgency=low - - * Rebuilt with ocaml 3.02 and lablgtk 1.2.1 - - -- Stefano Zacchiroli Tue, 21 Aug 2001 15:20:05 +0200 - -lablgtkmathview (0.2.4-2) unstable; urgency=low - - * Added build-dep on libxml2-dev (closes: Bug#102715). - - -- Stefano Zacchiroli Fri, 29 Jun 2001 12:39:57 +0200 - -lablgtkmathview (0.2.4-1) unstable; urgency=low - - * Initial Release (closes: Bug#93105). - - -- Stefano Zacchiroli Wed, 4 Apr 2001 23:27:07 +0200 - -Local variables: -mode: debian-changelog -End: diff --git a/helm/DEVEL/lablgtkmathview/debian/compat b/helm/DEVEL/lablgtkmathview/debian/compat deleted file mode 100644 index b8626c4cf..000000000 --- a/helm/DEVEL/lablgtkmathview/debian/compat +++ /dev/null @@ -1 +0,0 @@ -4 diff --git a/helm/DEVEL/lablgtkmathview/debian/control b/helm/DEVEL/lablgtkmathview/debian/control deleted file mode 100644 index 92dd81a1f..000000000 --- a/helm/DEVEL/lablgtkmathview/debian/control +++ /dev/null @@ -1,27 +0,0 @@ -Source: lablgtkmathview -Section: devel -Priority: optional -Maintainer: Stefano Zacchiroli -Build-Depends: debhelper (>> 4.0.0), ocaml-nox (>= 3.09.0), ocaml-findlib (>= 1.1), liblablgtk2-ocaml-dev (>= 2.6.0), libgdome2-ocaml-dev (>= 0.2.3-3), libgtkmathview-dev (>= 0.7.5), pkg-config -Standards-Version: 3.6.2 - -Package: liblablgtkmathview-ocaml -Architecture: any -Section: libs -Depends: ocaml-base-nox-${F:OCamlABI}, liblablgtk2-ocaml (>= 2.6.0), libgdome2-ocaml (>= 0.2.3), libgtkmathview0c2a (>= 0.7.5), ${shlibs:Depends}, ${misc:Depends} -Description: OCaml bindings for libgtkmathview, a GTK widget to render MathML - This is the Ocaml binding for the GtkMathView widget, that is - currently available in the libgtkmathview0 package. - . - This package contains only the shared runtime stub libraries. - -Package: liblablgtkmathview-ocaml-dev -Architecture: any -Section: libdevel -Depends: ocaml-nox-${F:OCamlABI}, liblablgtk2-ocaml-dev (>= 2.6.0), liblablgtkmathview-ocaml (= ${Source-Version}), ocaml-findlib, libgdome2-ocaml-dev (>= 0.2.3-3), libgtkmathview-dev (>= 0.7.5), ${misc:Depends} -Description: OCaml bindings for libgtkmathview, a GTK widget to render MathML - These are the Ocaml bindings for the GtkMathView widget, that is - currently available in the libgtkmathview0 package. - . - This package contains the development part of the lablgtkmathview package. - diff --git a/helm/DEVEL/lablgtkmathview/debian/control.in b/helm/DEVEL/lablgtkmathview/debian/control.in deleted file mode 100644 index aa5f9d1d2..000000000 --- a/helm/DEVEL/lablgtkmathview/debian/control.in +++ /dev/null @@ -1,27 +0,0 @@ -Source: lablgtkmathview -Section: devel -Priority: optional -Maintainer: Stefano Zacchiroli -Build-Depends: debhelper (>> 4.0.0), ocaml-nox (>= @OCamlABI@), ocaml-findlib (>= 1.1), liblablgtk2-ocaml-dev (>= 2.6.0), libgdome2-ocaml-dev (>= 0.2.3-3), libgtkmathview-dev (>= 0.7.5), pkg-config -Standards-Version: 3.6.2 - -Package: liblablgtkmathview-ocaml -Architecture: any -Section: libs -Depends: ocaml-base-nox-${F:OCamlABI}, liblablgtk2-ocaml (>= 2.6.0), libgdome2-ocaml (>= 0.2.3), libgtkmathview0c2a (>= 0.7.5), ${shlibs:Depends}, ${misc:Depends} -Description: OCaml bindings for libgtkmathview, a GTK widget to render MathML - This is the Ocaml binding for the GtkMathView widget, that is - currently available in the libgtkmathview0 package. - . - This package contains only the shared runtime stub libraries. - -Package: liblablgtkmathview-ocaml-dev -Architecture: any -Section: libdevel -Depends: ocaml-nox-${F:OCamlABI}, liblablgtk2-ocaml-dev (>= 2.6.0), liblablgtkmathview-ocaml (= ${Source-Version}), ocaml-findlib, libgdome2-ocaml-dev (>= 0.2.3-3), libgtkmathview-dev (>= 0.7.5), ${misc:Depends} -Description: OCaml bindings for libgtkmathview, a GTK widget to render MathML - These are the Ocaml bindings for the GtkMathView widget, that is - currently available in the libgtkmathview0 package. - . - This package contains the development part of the lablgtkmathview package. - diff --git a/helm/DEVEL/lablgtkmathview/debian/copyright b/helm/DEVEL/lablgtkmathview/debian/copyright deleted file mode 100644 index 7ac39e1a9..000000000 --- a/helm/DEVEL/lablgtkmathview/debian/copyright +++ /dev/null @@ -1,21 +0,0 @@ -This package was debianized by Stefano Zacchiroli on -Wed, 4 Apr 2001 23:27:07 +0200. - -It was packed from source obtained via cvs, with this CVSROOT: - :pserver:anonymous@phd.cs.unibo.it:/home/lpadovan/PHELM/ - -Authors: - Luca Padovani - Claudio Sacerdoti Coen - -Copyright: - - Copyright (C) 2000, Luca Padovani . - - This file is part of lablgtkmathview, the Ocaml binding - for the GtkMathView widget. - - lablgtkmathview is free software, you can redistribute it and/or modify - it under the terms of the GNU General Public License. You can find a - copy of the license in /usr/share/common-licenses/GPL. - diff --git a/helm/DEVEL/lablgtkmathview/debian/docs b/helm/DEVEL/lablgtkmathview/debian/docs deleted file mode 100644 index e845566c0..000000000 --- a/helm/DEVEL/lablgtkmathview/debian/docs +++ /dev/null @@ -1 +0,0 @@ -README diff --git a/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml-dev.dirs b/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml-dev.dirs deleted file mode 100644 index 7ba05d3c3..000000000 --- a/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml-dev.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/lib/ocaml/3.09.0 diff --git a/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml-dev.install b/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml-dev.install deleted file mode 100644 index 79836154a..000000000 --- a/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml-dev.install +++ /dev/null @@ -1,7 +0,0 @@ -debian/tmp/usr/lib/ocaml/3.09.0/lablgtkmathview/*.a -debian/tmp/usr/lib/ocaml/3.09.0/lablgtkmathview/*.cma -debian/tmp/usr/lib/ocaml/3.09.0/lablgtkmathview/*.cmi -debian/tmp/usr/lib/ocaml/3.09.0/lablgtkmathview/*.cmxa -debian/tmp/usr/lib/ocaml/3.09.0/lablgtkmathview/META -debian/tmp/usr/lib/ocaml/3.09.0/lablgtkmathview/*.ml -debian/tmp/usr/lib/ocaml/3.09.0/lablgtkmathview/*.mli diff --git a/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml-dev.install.in b/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml-dev.install.in deleted file mode 100644 index bcae88906..000000000 --- a/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml-dev.install.in +++ /dev/null @@ -1,7 +0,0 @@ -debian/tmp/usr/lib/ocaml/@OCamlABI@/lablgtkmathview/*.a -debian/tmp/usr/lib/ocaml/@OCamlABI@/lablgtkmathview/*.cma -debian/tmp/usr/lib/ocaml/@OCamlABI@/lablgtkmathview/*.cmi -debian/tmp/usr/lib/ocaml/@OCamlABI@/lablgtkmathview/*.cmxa -debian/tmp/usr/lib/ocaml/@OCamlABI@/lablgtkmathview/META -debian/tmp/usr/lib/ocaml/@OCamlABI@/lablgtkmathview/*.ml -debian/tmp/usr/lib/ocaml/@OCamlABI@/lablgtkmathview/*.mli diff --git a/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml.dirs b/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml.dirs deleted file mode 100644 index 2c3099109..000000000 --- a/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/lib/ocaml/3.09.0/stublibs diff --git a/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml.install b/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml.install deleted file mode 100644 index 24242ed45..000000000 --- a/helm/DEVEL/lablgtkmathview/debian/liblablgtkmathview-ocaml.install +++ /dev/null @@ -1 +0,0 @@ -debian/tmp/usr/lib/ocaml/3.09.0/lablgtkmathview/*.so usr/lib/ocaml/3.09.0/stublibs/ diff --git a/helm/DEVEL/lablgtkmathview/debian/rules b/helm/DEVEL/lablgtkmathview/debian/rules deleted file mode 100755 index 832767abb..000000000 --- a/helm/DEVEL/lablgtkmathview/debian/rules +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/make -f -# Sample debian/rules that uses debhelper. -# GNU copyright 1997 to 1999 by Joey Hess. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -OCAMLABI := $(shell ocamlc -version) -OCAMLLIBDIR := $(shell ocamlc -where) -OFILES := $(patsubst %.in,%,$(shell ls debian/*.in)) - -ocamlinit: - for f in $(OFILES); do sed -e 's/@OCamlABI@/$(OCAMLABI)/g' $$f.in > $$f; done -configure: configure-stamp -configure-stamp: - dh_testdir - ./configure - - touch configure-stamp - -build: configure-stamp build-stamp -build-stamp: - dh_testdir - - $(MAKE) - if [ -x /usr/bin/ocamlopt ]; then $(MAKE) opt; else true; fi - - touch build-stamp - -clean: - dh_testdir - dh_testroot - rm -f build-stamp configure-stamp - - -$(MAKE) distclean - - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - mkdir -p debian/tmp$(OCAMLLIBDIR) - $(MAKE) install PREFIX=debian/tmp$(OCAMLLIBDIR) - -binary-arch: build install - dh_install - dh_testdir - dh_testroot - dh_installdocs - dh_installexamples - dh_installman - dh_installinfo - dh_installchangelogs ChangeLog - dh_link - dh_strip - dh_compress - dh_fixperms - dh_installdeb - dh_shlibdeps - dh_gencontrol -- -VF:OCamlABI="$(OCAMLABI)" - dh_md5sums - dh_builddeb - -binary: binary-arch -.PHONY: build clean binary-arch binary install configure diff --git a/helm/DEVEL/lablgtkmathview/gMathView.ml b/helm/DEVEL/lablgtkmathview/gMathView.ml deleted file mode 100644 index 0ec81f3f9..000000000 --- a/helm/DEVEL/lablgtkmathview/gMathView.ml +++ /dev/null @@ -1,103 +0,0 @@ -(* Copyright (C) 2000-2005, - * Luca Padovani - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This file is part of lablgtkmathview, the Ocaml binding for the - * GtkMathView widget. - * - * lablgtkmathview is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * lablgtkmathview is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with lablgtkmathview; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * For details, send a mail to the authors. - *) - -open Gaux -open Gtk_mathview -open Gobject -open Gtk -open GtkBase -open GtkMathView -open OgtkMathViewProps -open GObj - -exception ErrorLoadingFile of string;; -exception ErrorWritingFile of string;; -exception ErrorLoadingDOM;; - -let option_element_of_option = - function - None -> None - | Some v -> Some (new Gdome.element v) - -let option_document_of_option = - function - None -> None - | Some v -> Some (new Gdome.document v) - -class math_view_skel obj = object - inherit GObj.widget (obj : Gtk_mathview.math_view obj) - method event = new GObj.event_ops obj - method freeze = MathView.freeze obj - method thaw = MathView.thaw obj - method load_uri ~filename = - if not (MathView.load_uri obj ~filename) then raise (ErrorLoadingFile filename) - method load_root ~root = - if not (MathView.load_root obj ~root:((root : Gdome.element)#as_Element)) then - raise ErrorLoadingDOM - method unload = MathView.unload obj - method select element = MathView.select obj ((element : Gdome.element)#as_Element) - method unselect element = MathView.unselect obj ((element : Gdome.element)#as_Element) - method is_selected element = MathView.is_selected obj ((element : Gdome.element)#as_Element) - method get_element_at x y = option_element_of_option (MathView.get_element_at obj x y) - method get_document = option_document_of_option (MathView.get_document obj) - method structure_changed element = MathView.structure_changed obj ((element : Gdome.element)#as_Element) - method attribute_changed element ~name = MathView.attribute_changed obj ((element : Gdome.element)#as_Element) ((name : Gdome.domString)#as_DOMString) - method get_bounding_box = MathView.get_bounding_box obj - method get_size = MathView.get_size obj - method get_top = MathView.get_top obj - method set_top x y = MathView.set_top obj x y - method set_adjustments adj1 adj2 = MathView.set_adjustments obj (GData.as_adjustment adj1) (GData.as_adjustment adj2) - method get_adjustments = - let hadj, vadj = MathView.get_adjustments obj in - new GData.adjustment hadj, new GData.adjustment vadj - method get_buffer = MathView.get_buffer obj - method set_font_size = MathView.set_font_size obj - method get_font_size = MathView.get_font_size obj - method set_log_verbosity = MathView.set_log_verbosity obj - method get_log_verbosity = MathView.get_log_verbosity obj - method set_t1_opaque_mode = MathView.set_t1_opaque_mode obj - method get_t1_opaque_mode = MathView.get_t1_opaque_mode obj - method set_t1_anti_aliased_mode = MathView.set_t1_anti_aliased_mode obj - method get_t1_anti_aliased_mode = MathView.get_t1_anti_aliased_mode obj -end - -class math_view_signals obj = object - inherit GObj.widget_signals_impl obj - inherit math_view__g_meta_dom_sigs -end - -class math_view obj = object - inherit math_view_skel (obj : Gtk_mathview.math_view obj) - method connect = new math_view_signals obj -end - -let math_view ?hadjustment ?vadjustment ?font_size ?log_verbosity = - GtkBase.Widget.size_params ~cont:( - OgtkMathViewProps.pack_return - (fun p -> OgtkMathViewProps.set_params (new math_view (MathView.create p)) ~font_size ~log_verbosity)) [] - -let add_configuration_path = GtkMathView.add_configuration_path - diff --git a/helm/DEVEL/lablgtkmathview/gMathView.mli b/helm/DEVEL/lablgtkmathview/gMathView.mli deleted file mode 100644 index d116c527d..000000000 --- a/helm/DEVEL/lablgtkmathview/gMathView.mli +++ /dev/null @@ -1,108 +0,0 @@ -(* Copyright (C) 2000-2005, - * Luca Padovani - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This file is part of lablgtkmathview, the Ocaml binding for the - * GtkMathView widget. - * - * lablgtkmathview is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * lablgtkmathview is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with lablgtkmathview; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * For details, send a mail to the authors. - *) - -exception ErrorLoadingFile of string -exception ErrorWritingFile of string -exception ErrorLoadingDOM - -class math_view_signals : - ([> `gtk | `mathview_gmetadom | `widget] as 'b) Gtk.obj -> - object ('a) - inherit GObj.widget_signals - val after: bool - val obj: 'b Gtk.obj - method click : - callback:(Gdome.element option * int * int * int -> unit) -> GtkSignal.id - method element_over : - callback:(Gdome.element option * int * int * int -> unit) -> GtkSignal.id - method select_begin : - callback:(Gdome.element option * int * int * int -> unit) -> GtkSignal.id - method select_over : - callback:(Gdome.element option * int * int * int -> unit) -> GtkSignal.id - method select_end : - callback:(Gdome.element option * int * int * int -> unit) -> GtkSignal.id - method select_abort : - callback:(unit -> unit) -> GtkSignal.id - end - -class math_view_skel : - (Gtk_mathview.math_view Gtk.obj as 'a)-> - object - inherit GObj.widget - val obj : 'a - method attribute_changed : Gdome.element -> name:Gdome.domString -> unit - method event : GObj.event_ops - method freeze : unit - method get_adjustments : GData.adjustment * GData.adjustment - method get_bounding_box : int * int * int - method get_buffer : Gdk.pixmap - method get_document : Gdome.document option - method get_element_at : int -> int -> Gdome.element option (* x, y *) - method get_font_size : int - method get_log_verbosity : int - method get_size : int * int - method get_t1_anti_aliased_mode : bool - method get_t1_opaque_mode : bool - method get_top : int * int - method is_selected : Gdome.element -> bool - method load_root : root:Gdome.element -> unit - method load_uri : filename:string -> unit - method select : Gdome.element -> unit - method set_adjustments : GData.adjustment -> GData.adjustment -> unit - method set_font_size : int -> unit - method set_log_verbosity : int -> unit - method set_top : int -> int -> unit - method set_t1_anti_aliased_mode : bool -> unit - method set_t1_opaque_mode : bool -> unit - method structure_changed : Gdome.element -> unit - method thaw : unit - method unload : unit - method unselect : Gdome.element -> unit - end - -class math_view : - Gtk_mathview.math_view Gtk.obj -> - object - inherit math_view_skel - method connect : math_view_signals - end - -val math_view : - ?hadjustment:GData.adjustment -> - ?vadjustment:GData.adjustment -> - ?font_size:int -> - ?log_verbosity:int -> - ?width:int -> - ?height:int -> - ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> math_view - -(** {2 Global configuration for all math_view instances *) - - (** @param fname file name to be added to the list of configuration files read - * at initialization time. - * To be invoked before GTK initialization. *) -val add_configuration_path: string -> unit - diff --git a/helm/DEVEL/lablgtkmathview/gMathViewAux.ml b/helm/DEVEL/lablgtkmathview/gMathViewAux.ml deleted file mode 100644 index 45bc5d90c..000000000 --- a/helm/DEVEL/lablgtkmathview/gMathViewAux.ml +++ /dev/null @@ -1,281 +0,0 @@ -(* Copyright (C) 2000-2005, - * Luca Padovani - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This file is part of lablgtkmathview, the Ocaml binding for the - * GtkMathView widget. - * - * lablgtkmathview is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * lablgtkmathview is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with lablgtkmathview; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * For details, send a mail to the authors. - *) - -(* finds the common node ancestor of two nodes *) -let common_ancestor (first : Gdome.node) (last : Gdome.node) = - let rec path n = - match n#get_parentNode with - None -> [n] - | Some p -> n::(path p) - in - let rec last_common = - function - _, hd1::tl1, hd2::tl2 when hd1#isSameNode hd2 -> (last_common ((Some hd1),tl1,tl2)) - | Some e, _, _ -> e - | _,_,_ -> assert false - in - (last_common (None,(List.rev (path first)),(List.rev (path last)))) - -let same_element (e1 : Gdome.element option) (e2 : Gdome.element option) = - match e1, e2 with - None, None -> true - | Some e1, Some e2 when (e1 :> Gdome.node)#isSameNode (e2 :> Gdome.node) -> true - | _ -> false - -(* true if n1 is n2 or one of n2's descendants *) -let rec descendant_of (n1 : Gdome.node) (n2 : Gdome.node) = - if n1#isSameNode n2 then true - else - match n1#get_parentNode with - None -> false - | Some n1' -> descendant_of n1' n2 - -let remove_descendants_of (el : Gdome.element) = - let rec aux = - function - [] -> [] - | hd::tl when descendant_of (hd :> Gdome.node) (el :> Gdome.node) -> aux tl - | hd::tl -> hd::(aux tl) - in - aux - -(* mem el l = true if the node n is stored in the list l *) -let mem (el : Gdome.element) = - let rec mem_aux = - function - hd::_ when (hd :> Gdome.node)#isSameNode (el :> Gdome.node) -> true - | _::tl -> mem_aux tl - | _ -> false - in - mem_aux - -(* remove el l = l' where l' has the same nodes as l except that all - * the occurrences of n have been removed *) -let remove (el : Gdome.element) = - let rec remove_aux = - function - hd::tl when (hd :> Gdome.node)#isSameNode (el :> Gdome.node) -> - remove_aux tl - | hd::tl -> hd::(remove_aux tl) - | [] -> [] - in - remove_aux - -class single_selection_math_view_signals obj (set_selection_changed : (Gdome.element option -> unit) -> unit) = - object - inherit GMathView.math_view_signals obj - method selection_changed = set_selection_changed - end -;; - -class single_selection_math_view obj = - object(self) - inherit GMathView.math_view_skel obj - val mutable first_selected = None - val mutable root_selected = None - val mutable selection_changed = (fun _ -> ()) - - method set_selection elem = - self#freeze ; - begin - match root_selected with - None -> () - | Some e -> self#unselect e - end; - root_selected <- elem ; - begin - match elem with - None -> () - | Some e -> self#select e - end ; - self#thaw - - method get_selection = root_selected - - method connect = - new - single_selection_math_view_signals obj - (function f -> selection_changed <- f) - - method action_toggle (elem : Gdome.element) = - match elem#get_namespaceURI, elem#get_localName with - Some ns, Some ln - when - (ns#to_string = "http://www.w3.org/1998/Math/MathML" && ln#to_string = "maction") || - (ns#to_string = "http://helm.cs.unibo.it/2003/BoxML" && ln#to_string = "action") - -> - begin - let selection_attr = Gdome.domString "selection" in - let selection = - if elem#hasAttribute ~name:selection_attr then - int_of_string (elem#getAttribute ~name:selection_attr)#to_string - else - 1 - in - self#freeze ; - (* the widget will cast the index back into a valid range *) - elem#setAttribute ~name:selection_attr - ~value:(Gdome.domString (string_of_int (selection + 1))) ; - self#thaw ; - true - end - | _ -> - begin - match elem#get_parentNode with - Some p -> - begin - try - self#action_toggle (new Gdome.element_of_node p) - with - GdomeInit.DOMCastException _ -> false - end - | None -> assert false (* every element has a parent *) - end - - initializer - selection_changed <- self#set_selection ; - - ignore - (self#connect#select_begin - (fun ((elem : Gdome.element option), _, _, _) -> - if not (same_element root_selected elem) then selection_changed elem ; - first_selected <- elem)) ; - - ignore - (self#connect#select_over - (fun ((elem : Gdome.element option), _, _, _) -> - let new_selected = - match first_selected, elem with - Some first', Some last' -> - (Some - (new Gdome.element_of_node - (common_ancestor (first' :> Gdome.node) (last' :> Gdome.node)))) - | _ -> None - in - if not (same_element root_selected new_selected) then - selection_changed new_selected)) ; - - ignore - (self#connect#select_end - (fun ((elem : Gdome.element option), _, _, _) -> first_selected <- None)) ; - - ignore - (self#connect#select_abort - (fun () -> - first_selected <- None ; - selection_changed None)) ; - - ignore (self#connect#click (fun _ -> self#set_selection None)) - end -;; - -let single_selection_math_view ?hadjustment ?vadjustment ?font_size ?log_verbosity = - GtkBase.Widget.size_params ~cont:( - OgtkMathViewProps.pack_return - (fun p -> OgtkMathViewProps.set_params (new single_selection_math_view - (GtkMathViewProps.MathView_GMetaDOM.create p)) ~font_size ~log_verbosity)) [] -;; - -class multi_selection_math_view_signals obj - (set_selection_changed : (Gdome.element option -> unit) -> unit) -= - object - inherit GMathView.math_view_signals obj - method selection_changed = set_selection_changed - end -;; - -class multi_selection_math_view obj = - object(self) - inherit single_selection_math_view obj - val mutable selected : Gdome.element list = [] - - method remove_selection (elem : Gdome.element) = - if mem elem selected then - selected <- remove elem selected ; - self#unselect elem - - method remove_selections = - self#freeze ; - List.iter (fun e -> self#unselect e) selected ; - selected <- [] ; - begin - match self#get_selection with - None -> () - | Some e -> self#select e - end ; - self#thaw - - method add_selection (elem : Gdome.element) = - List.iter self#unselect selected ; - selected <- elem::(remove_descendants_of elem selected) ; - List.iter self#select selected - - method get_selections = selected - - method set_selection elem = - self#freeze ; - begin - match root_selected with - None -> () - | Some e -> self#unselect e ; List.iter (fun e -> self#select e) selected - end; - root_selected <- elem; - begin - match elem with - None -> () - | Some e -> self#select e - end ; - self#thaw - - initializer - ignore - (self#connect#select_begin - (fun (_,_,_,state) -> - if not (List.mem `CONTROL (Gdk.Convert.modifier state)) then - self#remove_selections)) ; - - ignore - (self#connect#select_end - (fun (_,_,_,state) -> - if not (List.mem `CONTROL (Gdk.Convert.modifier state)) then - self#remove_selections ; - match root_selected with - None -> () - | Some e -> self#set_selection None ; self#add_selection e)) ; - - ignore - (self#connect#click - (fun _ -> self#remove_selections)) - end - ;; - -let multi_selection_math_view ?hadjustment ?vadjustment ?font_size ?log_verbosity = - GtkBase.Widget.size_params ~cont:( - OgtkMathViewProps.pack_return - (fun p -> OgtkMathViewProps.set_params (new multi_selection_math_view - (GtkMathViewProps.MathView_GMetaDOM.create p)) ~font_size ~log_verbosity)) [] -;; diff --git a/helm/DEVEL/lablgtkmathview/gMathViewAux.mli b/helm/DEVEL/lablgtkmathview/gMathViewAux.mli deleted file mode 100644 index 299328733..000000000 --- a/helm/DEVEL/lablgtkmathview/gMathViewAux.mli +++ /dev/null @@ -1,78 +0,0 @@ -(* Copyright (C) 2000-2005, - * Luca Padovani - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This file is part of lablgtkmathview, the Ocaml binding for the - * GtkMathView widget. - * - * lablgtkmathview is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * lablgtkmathview is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with lablgtkmathview; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * For details, send a mail to the authors. - *) - -class single_selection_math_view_signals : - ([> `gtk | `mathview_gmetadom | `widget] as 'b) Gtk.obj -> - ((Gdome.element option -> unit) -> unit) -> - object - inherit GMathView.math_view_signals - method selection_changed : (Gdome.element_of_node option -> unit) -> unit - end - -class single_selection_math_view : - Gtk_mathview.math_view Gtk.obj -> - object - inherit GMathView.math_view_skel - method connect : single_selection_math_view_signals - method get_selection : Gdome.element option - method set_selection : Gdome.element option -> unit - method action_toggle : Gdome.element -> bool - end - -val single_selection_math_view : - ?hadjustment:GData.adjustment -> - ?vadjustment:GData.adjustment -> - ?font_size:int -> - ?log_verbosity:int -> - ?width:int -> - ?height:int -> - ?packing:(GObj.widget -> unit) -> - ?show:bool -> - unit -> - single_selection_math_view - -class multi_selection_math_view : - Gtk_mathview.math_view Gtk.obj -> - object - inherit single_selection_math_view - method remove_selection : Gdome.element -> unit - method remove_selections : unit - method add_selection : Gdome.element -> unit - method get_selections : Gdome.element list - end - -val multi_selection_math_view : - ?hadjustment:GData.adjustment -> - ?vadjustment:GData.adjustment -> - ?font_size:int -> - ?log_verbosity:int -> - ?width:int -> - ?height:int -> - ?packing:(GObj.widget -> unit) -> - ?show:bool -> - unit -> - multi_selection_math_view - diff --git a/helm/DEVEL/lablgtkmathview/gtkMathView.ml b/helm/DEVEL/lablgtkmathview/gtkMathView.ml deleted file mode 100644 index 0b9d45349..000000000 --- a/helm/DEVEL/lablgtkmathview/gtkMathView.ml +++ /dev/null @@ -1,107 +0,0 @@ -(* Copyright (C) 2000-2005, - * Luca Padovani - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This file is part of lablgtkmathview, the Ocaml binding for the - * GtkMathView widget. - * - * lablgtkmathview is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * lablgtkmathview is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with lablgtkmathview; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * For details, send a mail to the authors. - *) - -open Gtk_mathview -open Gaux -open Gobject -open Gtk -open Tags -open GtkMathViewProps -open GtkBase - -external _gtkmathview_init : unit -> unit = "ml_gtk_mathview_init" -let () = _gtkmathview_init () - -external add_configuration_path : string -> unit = - "ml_gtk_math_view_add_configuration_path" - -module MathView = struct - include MathView_GMetaDOM - external freeze : [>`mathview_gmetadom] obj -> unit = - "ml_gtk_math_view_freeze" - external thaw : [>`mathview_gmetadom] obj -> unit = - "ml_gtk_math_view_thaw" - external load_uri : [>`mathview_gmetadom] obj -> filename:string -> bool = - "ml_gtk_math_view_load_uri" - external load_root : [>`mathview_gmetadom] obj -> root:[> `Element] GdomeT.t -> bool = - "ml_gtk_math_view_load_root" - external unload : [>`mathview_gmetadom] obj -> unit = - "ml_gtk_math_view_unload" - external select : - [>`mathview_gmetadom] obj -> [> `Element] GdomeT.t -> unit = - "ml_gtk_math_view_select" - external unselect : - [>`mathview_gmetadom] obj -> [> `Element] GdomeT.t -> unit = - "ml_gtk_math_view_unselect" - external is_selected : - [>`mathview_gmetadom] obj -> [> `Element] GdomeT.t -> bool = - "ml_gtk_math_view_is_selected" - external structure_changed : - [>`mathview_gmetadom] obj -> [> `Element] GdomeT.t -> unit = - "ml_gtk_math_view_structure_changed" - external attribute_changed : - [>`mathview_gmetadom] obj -> [> `Element] GdomeT.t -> name:TDOMString.t -> unit = - "ml_gtk_math_view_attribute_changed" - external get_bounding_box : - [>`mathview_gmetadom] obj -> (int * int * int) = - "ml_gtk_math_view_get_bounding_box" - external get_element_at : - [> `mathview_gmetadom] obj -> int -> int -> TElement.t option = - "ml_gtk_math_view_get_element_at" - external get_document : - [> `mathview_gmetadom] obj -> TDocument.t option = - "ml_gtk_math_view_get_document" - (* beginning of prop-like methods *) - external get_size : [>`mathview_gmetadom] obj -> int * int = - "ml_gtk_math_view_get_size" - external get_top : [>`mathview_gmetadom] obj -> (int * int) = - "ml_gtk_math_view_get_top" - external set_top : [>`mathview_gmetadom] obj -> int -> int -> unit = - "ml_gtk_math_view_set_top" - external set_adjustments : [>`mathview_gmetadom] obj -> Gtk.adjustment obj -> Gtk.adjustment obj -> unit = - "ml_gtk_math_view_set_adjustments" - external get_adjustments : [>`mathview_gmetadom] obj -> - Gtk.adjustment obj * Gtk.adjustment obj = - "ml_gtk_math_view_get_adjustments" - external get_buffer : [>`mathview_gmetadom] obj -> Gdk.pixmap = - "ml_gtk_math_view_get_buffer" - external set_font_size : [>`mathview_gmetadom] obj -> int -> unit = - "ml_gtk_math_view_set_font_size" - external get_font_size : [>`mathview_gmetadom] obj -> int = - "ml_gtk_math_view_get_font_size" - external set_log_verbosity : [>`mathview_gmetadom] obj -> int -> unit = - "ml_gtk_math_view_set_log_verbosity" - external get_log_verbosity : [>`mathview_gmetadom] obj -> int = - "ml_gtk_math_view_get_log_verbosity" - external set_t1_opaque_mode : [>`mathview_gmetadom] obj -> bool -> unit = - "ml_gtk_math_view_set_t1_opaque_mode" - external get_t1_opaque_mode : [>`mathview_gmetadom] obj -> bool = - "ml_gtk_math_view_get_t1_opaque_mode" - external set_t1_anti_aliased_mode : [>`mathview_gmetadom] obj -> bool -> unit = - "ml_gtk_math_view_set_t1_anti_aliased_mode" - external get_t1_anti_aliased_mode : [>`mathview_gmetadom] obj -> bool = - "ml_gtk_math_view_get_t1_anti_aliased_mode" -end diff --git a/helm/DEVEL/lablgtkmathview/gtkMathView.props b/helm/DEVEL/lablgtkmathview/gtkMathView.props deleted file mode 100644 index d26050ce4..000000000 --- a/helm/DEVEL/lablgtkmathview/gtkMathView.props +++ /dev/null @@ -1,111 +0,0 @@ -(* $Id$ *) - -prefix "Gtk" - -header { -open Gtk -open Gtk_mathview - -external gdome_element_of_boxed_option : - Gpointer.boxed option -> TElement.t = - "ml_gtk_math_view_gdome_element_of_boxed_option" -;; - -external gdome_element_option_of_boxed_option : - Gpointer.boxed option -> TElement.t option = - "ml_gtk_math_view_gdome_element_option_of_boxed_option" -;; - -external model_event_of_boxed_option : - Gpointer.boxed option -> TElement.t option * int * int * int = - "ml_gtk_math_view_model_event_of_boxed_option" - -let option_element_of_option = - function - None -> None - | Some v -> Some (new Gdome.element v) -;; - -let option_element_of_boxed_option x = - option_element_of_option (gdome_element_option_of_boxed_option x) -;; - -let model_event_of_boxed model_event = - let id,x,y,state = model_event_of_boxed_option model_event in - option_element_of_option id,x,y,state -;; - -let gdome_element_option_conv = - {Gobject.kind = `POINTER ; - Gobject.proj = - (function - `POINTER element -> option_element_of_boxed_option element - | _ -> failwith "gdome_element_option_conv") ; - Gobject.inj = - (function element -> assert false) - } - -let gtk_math_view_model_event_conv = - {Gobject.kind = `POINTER ; - Gobject.proj = - (function - `POINTER model_event -> model_event_of_boxed model_event - | _ -> failwith "gtk_math_view_model_event_conv") ; - Gobject.inj = - (function element -> assert false) - } -} - -oheader { - -let set_params self ~font_size ~log_verbosity = - begin - match font_size with - Some s -> self#set_font_size s - | None -> () - end ; - begin - match log_verbosity with - Some v -> self#set_log_verbosity v - | None -> () - end ; - self -;; - -let pack_return create p ?packing ?show () = - GObj.pack_return (create p) ~packing ~show -;; - -} - -conversions { - GdomeElement_option "gdome_element_option_conv" - GtkMathViewModelEvent "gtk_math_view_model_event_conv" -} - -classes { - GtkAdjustment "Gtk.adjustment obj" -} - - -class MathView_GMetaDOM type "math_view obj" set wrapsig : Widget { -(* - "width" gint : Read - "height" gint : Read - "top-x" gint : Read / Write / NoSet - "top-y" gint : Read / Write / NoSet - "hadjustment" GtkAdjustment : Read / Write / Construct - "vadjustment" GtkAdjustment : Read / Write / Construct - "buffer" GdkPixmap : Read - "drawing-area" GtkDrawingArea : Read - "font-size" guint : Read / Write / Construct - "log-verbosity" gint : Read / Write / Construct - "root-element" GdomeElement_option : Read -*) - signal click: GtkMathViewModelEvent - signal select_begin: GtkMathViewModelEvent - signal select_over: GtkMathViewModelEvent - signal select_end: GtkMathViewModelEvent - signal select_abort - signal element_over: GtkMathViewModelEvent -} diff --git a/helm/DEVEL/lablgtkmathview/gtk_mathview.ml b/helm/DEVEL/lablgtkmathview/gtk_mathview.ml deleted file mode 100644 index 3267176a0..000000000 --- a/helm/DEVEL/lablgtkmathview/gtk_mathview.ml +++ /dev/null @@ -1,27 +0,0 @@ -(* Copyright (C) 2000-2005, - * Luca Padovani - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This file is part of lablgtkmathview, the Ocaml binding for the - * GtkMathView widget. - * - * lablgtkmathview is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * lablgtkmathview is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with lablgtkmathview; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * For details, send a mail to the authors. - *) - -type math_view = [Gtk.widget|`mathview_gmetadom] diff --git a/helm/DEVEL/lablgtkmathview/lablgtk/META.lablgtk b/helm/DEVEL/lablgtkmathview/lablgtk/META.lablgtk deleted file mode 100644 index f70c5bec6..000000000 --- a/helm/DEVEL/lablgtkmathview/lablgtk/META.lablgtk +++ /dev/null @@ -1,6 +0,0 @@ -requires="" -version="1.2.0" -archive(byte)="lablgtk.cma lablgnome.cma gtkInit.cmo" -archive(native)="lablgtk.cmxa lablgnome.cmxa gtkInit.cmx" -linkopts="" -directory="+lablgtk" diff --git a/helm/DEVEL/lablgtkmathview/ml_gtk_mathview.c b/helm/DEVEL/lablgtkmathview/ml_gtk_mathview.c deleted file mode 100644 index 5d36bc0c4..000000000 --- a/helm/DEVEL/lablgtkmathview/ml_gtk_mathview.c +++ /dev/null @@ -1,271 +0,0 @@ -/* Copyright (C) 2000-2005, - * Luca Padovani - * Claudio Sacerdoti Coen - * Stefano Zacchiroli - * - * This file is part of lablgtkmathview, the Ocaml binding for the - * GtkMathView widget. - * - * lablgtkmathview is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * lablgtkmathview is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with lablgtkmathview; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - * - * For details, send a mail to the authors. - */ - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -/* Init all */ - -CAMLprim value ml_gtk_mathview_init(value unit) -{ - /* Since these are declared const, must force gcc to call them! */ - GType t = gtk_math_view_get_type(); - return Val_GType(t); -} - -#define GtkMathView_val(val) check_cast(GTK_MATH_VIEW,val) - -//##################################### -// -//#define FontManagerId_val(val) Int_val(val) -//#define Val_FontManagerId(val) Val_int(val) -// -///* As ML_1, but the result is optional */ -//#define OML_1(cname, conv1, conv) \ -//value ml_##cname (value arg1) { return Val_option_ptr((cname (conv1 (arg1))),conv); } -///* As ML_3, but the result is optional */ -#define OML_3(cname, conv1, conv2, conv3, conv) \ -value ml_##cname (value arg1, value arg2, value arg3) { return Val_option_ptr((cname (conv1 (arg1), conv2 (arg2), conv3 (arg3))),conv); } -///* As ML_2, but the second argument is optional */ -//#define ML_2O(cname, conv1, conv2, conv) \ -//value ml_##cname (value arg1, value arg2) \ -//{ return conv (cname (conv1(arg1), ptr_val_option(arg2,conv2))); } - -value Val_Element_ref(GdomeElement* elem) -{ - if (elem != NULL) - { - GdomeException exc = 0; - gdome_el_ref(elem, &exc); - g_assert(exc == 0); - } - return Val_Element(elem); -} - -ML_2 (gtk_math_view_structure_changed, GtkMathView_val, Element_val, Unit) -ML_3 (gtk_math_view_attribute_changed, GtkMathView_val, Element_val, DOMString_val, Unit) -/* OML_3 (gtk_math_view_get_element_at, GtkMathView_val, Int_val, Int_val, Val_Element) */ -ML_1 (gtk_math_view_freeze, GtkMathView_val, Unit) -ML_1 (gtk_math_view_thaw, GtkMathView_val, Unit) -ML_2 (gtk_math_view_load_uri, GtkMathView_val, String_val, Val_bool) -ML_2 (gtk_math_view_load_root, GtkMathView_val, Element_val, Val_bool) -ML_1 (gtk_math_view_unload, GtkMathView_val, Unit) -ML_2 (gtk_math_view_select, GtkMathView_val, Element_val, Unit) -ML_2 (gtk_math_view_unselect, GtkMathView_val, Element_val, Unit) -ML_2 (gtk_math_view_is_selected, GtkMathView_val, Element_val, Val_bool) -/* -ML_2 (gtk_math_view_new,GtkAdjustment_val, GtkAdjustment_val, Val_GtkWidget_sink) -ML_1 (gtk_math_view_get_width, GtkMathView_val, Val_int) -ML_1 (gtk_math_view_get_height, GtkMathView_val, Val_int) -*/ -ML_3 (gtk_math_view_set_top, GtkMathView_val, Int_val, Int_val, Unit) -ML_3 (gtk_math_view_set_adjustments, GtkMathView_val, GtkAdjustment_val, GtkAdjustment_val, Unit) -/* -ML_1 (gtk_math_view_get_hadjustment, GtkMathView_val, Val_GtkWidget) -ML_1 (gtk_math_view_get_vadjustment, GtkMathView_val, Val_GtkWidget) -*/ -ML_1 (gtk_math_view_get_buffer, GtkMathView_val, Val_GdkPixmap) -ML_2 (gtk_math_view_set_font_size, GtkMathView_val, Int_val, Unit) -ML_1 (gtk_math_view_get_font_size, GtkMathView_val, Val_int) -ML_2 (gtk_math_view_set_log_verbosity, GtkMathView_val, Int_val, Unit) -ML_1 (gtk_math_view_get_log_verbosity, GtkMathView_val, Val_int) -ML_2 (gtk_math_view_set_t1_opaque_mode, GtkMathView_val, Bool_val, Unit) -ML_1 (gtk_math_view_get_t1_opaque_mode, GtkMathView_val, Val_bool) -ML_2 (gtk_math_view_set_t1_anti_aliased_mode, GtkMathView_val, Bool_val, Unit) -ML_1 (gtk_math_view_get_t1_anti_aliased_mode, GtkMathView_val, Val_bool) -ML_1 (gtk_math_view_add_configuration_path, String_val, Unit) - -value ml_gtk_math_view_get_element_at (value arg1, value arg2, value arg3) -{ - CAMLparam3(arg1, arg2, arg3); - CAMLlocal1 (result); - GdomeElement* el; - if (gtk_math_view_get_element_at(GtkMathView_val (arg1), Int_val(arg2), Int_val(arg3), &el, NULL, NULL)) - result = Val_option_ptr(el, Val_Element); - else - result = Val_unit; - CAMLreturn (result); -} - -value ml_gtk_math_view_get_document (value arg1) -{ - CAMLparam1(arg1); - CAMLlocal1(result); - GdomeDocument* doc = gtk_math_view_get_document(GtkMathView_val (arg1)); - if (doc == NULL) - result = Val_unit; - else - result = Val_option_ptr(doc, Val_Document); - CAMLreturn (result); -} - -value ml_gtk_math_view_get_adjustments(value arg1) -{ - CAMLparam1(arg1); - CAMLlocal1(result); - GtkAdjustment* hadj; - GtkAdjustment* vadj; - gtk_math_view_get_adjustments(GtkMathView_val (arg1), &hadj, &vadj); - result = alloc(2, 0); - Store_field(result, 0, Val_GtkWidget(hadj)); - Store_field(result, 1, Val_GtkWidget(vadj)); - CAMLreturn(result); -} - -value ml_gtk_math_view_get_size (value arg1) -{ - CAMLparam1(arg1); - CAMLlocal1(result); - int width, height; - gtk_math_view_get_size(GtkMathView_val (arg1), &width, &height); - result = alloc(1, 0); - Store_field(result, 0, Val_int(width)); - Store_field(result, 1, Val_int(height)); - CAMLreturn (result); -} - -value ml_gtk_math_view_get_bounding_box (value arg1) -{ - CAMLparam1(arg1); - CAMLlocal1(result); - int width, height, depth; - GtkMathViewBoundingBox gbox; - gtk_math_view_get_bounding_box(GtkMathView_val (arg1), &gbox); - result = alloc(3, 0); - Store_field(result, 0, Val_int(gbox.width)); - Store_field(result, 1, Val_int(gbox.height)); - Store_field(result, 2, Val_int(gbox.depth)); - CAMLreturn (result); -} - -value ml_gtk_math_view_get_top (value arg1) -{ - CAMLparam1(arg1); - CAMLlocal1(result); - int x, y; - gtk_math_view_get_top(GtkMathView_val (arg1), &x, &y); - result = alloc(2, 0); - Store_field(result, 0, Val_int(x)); - Store_field(result, 1, Val_int(y)); - CAMLreturn (result); -} - -/* -value ml_gtk_math_view_get_element_coords (value arg1, value arg2) -{ - CAMLparam2(arg1, arg2); - CAMLlocal1 (result); - int x, y; - gtk_math_view_get_element_coords(GtkMathView_val (arg1), Element_val(arg2), &x, &y); - result = alloc(2, 0); - Store_field(result, 0, Val_int(x)); - Store_field(result, 1, Val_int(y)); - CAMLreturn (result); -} -*/ - -value ml_gtk_math_view_gdome_element_of_boxed_option (value arg1) -{ - CAMLparam1(arg1); - - GdomeException exc = 0; - GdomeElement* nr = NULL; - CAMLlocal1 (res); - - if (arg1==Val_int(0)) { - assert(0); - } else { - nr = (GdomeElement*) Field(Field(arg1,0),1); - } - - res = Val_Element_ref(nr); - if (res==Val_int(0)) { - assert(0); - } - - CAMLreturn(res); -} - -value ml_gtk_math_view_gdome_element_option_of_boxed_option (value arg1) -{ - CAMLparam1(arg1); - - GdomeElement* nr; - CAMLlocal1 (valnr); - CAMLlocal1 (res); - - if (arg1==Val_int(0)) { - res=Val_unit; - } else { - GdomeException exc = 0; - GdomeElement* elem = (GdomeElement*) Field(Field(arg1,0),1); - assert(elem != NULL); - res = Val_option_ptr(elem, Val_Element_ref); - } - - CAMLreturn(res); -} - -value ml_gtk_math_view_model_event_of_boxed_option (value arg1) -{ - CAMLparam1(arg1); - GdomeElement* nr; - CAMLlocal1 (valnr); - CAMLlocal1 (res); - - assert(arg1 != Val_int(0)); - GtkMathViewModelEvent* event = (GtkMathViewModelEvent*) Field(Field(arg1,0),1); - res = alloc(4, 0); - Store_field(res, 0, Val_option_ptr(event->id, Val_Element_ref)); - Store_field(res, 1, Val_int(event->x)); - Store_field(res, 2, Val_int(event->y)); - Store_field(res, 3, Val_int(event->state)); - - CAMLreturn(res); -} - diff --git a/helm/DEVEL/lablgtkmathview/test/.cvsignore b/helm/DEVEL/lablgtkmathview/test/.cvsignore deleted file mode 100644 index b95eb22fb..000000000 --- a/helm/DEVEL/lablgtkmathview/test/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.cmo *.cmi *.cmx t1lib.log test test.opt test.ps test.o Makefile diff --git a/helm/DEVEL/lablgtkmathview/test/Makefile.in b/helm/DEVEL/lablgtkmathview/test/Makefile.in deleted file mode 100644 index 1b4d01991..000000000 --- a/helm/DEVEL/lablgtkmathview/test/Makefile.in +++ /dev/null @@ -1,20 +0,0 @@ -PACKAGE = @PACKAGE@ lablgtk2.init -MLFLAGS = -OCAMLC = ocamlfind ocamlc $(MLFLAGS) -OCAMLOPT = ocamlfind ocamlopt $(MLFLAGS) -TMPDIR = .test - -all: test -opt: test.opt - -test: test.ml - $(OCAMLC) -package "$(PACKAGE)" -linkpkg -predicates "" -o $@ test.ml - -test.opt: test.ml - $(OCAMLOPT) -package "$(PACKAGE)" -linkpkg -predicates "" -o $@ test.ml - -clean: - rm -f *.cm[iox] *.o test test.opt t1lib.log test.ps - -distclean: - rm Makefile diff --git a/helm/DEVEL/lablgtkmathview/test/t1.config b/helm/DEVEL/lablgtkmathview/test/t1.config deleted file mode 100644 index afb669e95..000000000 --- a/helm/DEVEL/lablgtkmathview/test/t1.config +++ /dev/null @@ -1,3 +0,0 @@ -ENCODING=. -AFM=/usr/share/texmf/fonts/afm/ -TYPE1=/usr/share/texmf/fonts/type1/bluesky/cm/:/usr/X11R6/lib/X11/fonts/Type1/:. diff --git a/helm/DEVEL/lablgtkmathview/test/test.ml b/helm/DEVEL/lablgtkmathview/test/test.ml deleted file mode 100644 index b0e584cae..000000000 --- a/helm/DEVEL/lablgtkmathview/test/test.ml +++ /dev/null @@ -1,397 +0,0 @@ -(* Copyright (C) 2000-2003, Luca Padovani , - * Claudio Sacerdoti Coen . - * - * This file is part of lablgtkmathview, the Ocaml binding - * for the GtkMathView widget. - * - * lablgtkmathview is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * lablgtkmathview is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with lablgtkmathview; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * For details, send a mail to the author. - *) - -(******************************************************************************) -(* Claudio Sacerdoti Coen *) -(* 25/09/2000 *) -(* *) -(* This is a simple test for the OCaml (LablGtk indeed) binding of the *) -(* MathView widget *) -(******************************************************************************) - -let helmns = Gdome.domString "http://www.cs.unibo.it/helm";; - -(* -let choose_selection mmlwidget (element : Gdome.element option) = - let module G = Gdome in - let rec aux element = - if element#hasAttributeNS - ~namespaceURI:Misc.helmns - ~localName:(G.domString "xref") - then - mmlwidget#set_selection (Some element) - else - try - match element#get_parentNode with - None -> assert false - (*CSC: OCAML DIVERGES! - | Some p -> aux (new G.element_of_node p) - *) - | Some p -> aux (new Gdome.element_of_node p) - with - GdomeInit.DOMCastException _ -> - prerr_endline - "******* trying to select above the document root ********" - in - match element with - Some x -> aux x - | None -> mmlwidget#set_selection None -;; -*) - -(* Callbacks *) -let selection_changed mathview (element : Gdome.element option) = - let rec aux element = - if element#hasAttributeNS - ~namespaceURI:helmns - ~localName:(Gdome.domString "xref") - then - mathview#set_selection (Some element) - else - try - match element#get_parentNode with - None -> mathview#set_selection None - | Some p -> aux (new Gdome.element_of_node p) - with - GdomeInit.DOMCastException _ -> - prerr_endline "******* trying to select above the document root ********" - in - print_endline ("selection_changed: " ^ - (match element with - None -> "selection_changed on nothing" - | Some element -> element#get_tagName#to_string - ) - ) ; - match element with - None -> () - | Some el -> aux el; - flush stdout -;; - -let element_over mathview ((element : Gdome.element option), _, _, _) = - print_endline ("element_over: " ^ - (match element with - None -> "element_over on nothing" - | Some element -> element#get_tagName#to_string - ) - ) ; - flush stdout -;; - -let rec jump (element : Gdome.element) = - let module G = Gdome in - let attr = (element#getAttribute ~name:(G.domString "href"))#to_string in - if attr = "" then - match element#get_parentNode with - Some p -> - begin - try - jump (new Gdome.element_of_node p) - with - GdomeInit.DOMCastException _ -> - print_string "jump: NO HREF FOR THIS NODE\n" ; - flush stdout ; - false - end - | None -> assert false (* every element has a parent *) - else - begin - print_endline ("jump: " ^ attr) ; - flush stdout ; - true - end -;; - -let rec action mathview (element : Gdome.element) = - let module G = Gdome in - if element#get_tagName#to_string = "m:maction" then - let selection = - if element#hasAttribute ~name:(G.domString "selection") then - int_of_string (element#getAttribute ~name:(G.domString "selection"))#to_string - else - 1 - in - mathview#freeze ; - (* the widget will cast the index back into a reasonable range *) - element#setAttribute ~name:(G.domString "selection") ~value:(G.domString (string_of_int (selection + 1))) ; - mathview#thaw ; - true - else - match element#get_parentNode with - Some p -> - begin - try - action mathview (new Gdome.element_of_node p) - with - GdomeInit.DOMCastException _ -> - print_string "action: NO MACTION FOUND\n" ; - flush stdout ; - false - end - | None -> assert false (* every element has a parent *) - -let click mathview ((element : Gdome.element option), _, _, _) = - let module G = Gdome in - match element with - None -> print_string "CLICKED ON NOTHING\n" ; flush stdout - | Some element -> - if not (jump element) then - if not (mathview#action_toggle element) then - () -;; - -let load_uri mathview () = - mathview#load_uri ~filename:"test.xml" ; - print_string "load: SEEMS TO WORK\n" ; - flush stdout -;; - -let get_document mathview () = - (match mathview#get_document with - | None -> print_string "no document loaded\n" - | Some doc -> - let name = "out.xml" in - ignore ((Gdome.domImplementation ())#saveDocumentToFile ~doc ~name ()); - print_string ("document loaded and saved to " ^ name ^ "\n")); - flush stdout -;; - -let load_doc mathview () = - mathview#load_root ~root:(((Gdome.domImplementation ())#createDocumentFromURI ~uri:"test.xml" ())#get_documentElement) ; - print_string "load from DOM: SEEMS TO WORK\n" ; - flush stdout -;; - -let test_get_selection mathview () = - let selection = - match mathview#get_selection with - Some element -> element#get_tagName#to_string - | None -> "no selection! but there are " ^ (string_of_int (List.length mathview#get_selections)) ^ " multiple selections!" - in - print_string ("selection: " ^ selection ^ "\n") ; - flush stdout -;; - -let test_set_selection mathview () = - begin - match mathview#get_selection with - Some element -> - begin - match element#get_parentNode with - Some p -> - begin - try - mathview#set_selection (Some (new Gdome.element_of_node p)); - print_string "set selection: SEEMS TO WORK\n" - with - GdomeInit.DOMCastException _ -> - print_string "EXCEPTION: no parent\n" - end - | None -> assert false (* every element has a parent *) - end - | None -> - mathview#set_selection None; - print_string "no selection\n" - end ; - flush stdout -;; - -let test_add_selection (mathview : GMathViewAux.multi_selection_math_view) () = - match mathview#get_selection with - Some e -> mathview#add_selection e - | None -> - begin - print_string "no selection to add\n" ; - flush stdout - end -;; - -let test_reset_selections (mathview : GMathViewAux.multi_selection_math_view) () = - mathview#set_selection None ; - mathview#remove_selections - -let select_over (mathview : GMathViewAux.multi_selection_math_view) = - (fun (_,_,_,state) -> - let c = function - | `SHIFT -> "shift" - | `LOCK -> "lock" - | `CONTROL -> "control" - | `MOD1 -> "mod1" - | _ -> "" - in - let msg = - String.concat "," - (List.filter (fun s -> s <> "") - (List.map c (Gdk.Convert.modifier state))) - in - if msg <> "" then begin - print_endline ("modifiers: " ^ msg); - flush stdout - end) - -let unload mathview () = - mathview#unload ; - print_string "unload: SEEMS TO WORK\n" ; - flush stdout -;; - -let get_size mathview () = - let width, height = mathview#get_size in - print_string ("width: " ^ string_of_int width ^ ", height: " ^ string_of_int height ^ "\n") ; - flush stdout -;; - -let get_top mathview () = - let (x,y) = mathview#get_top in - print_string ("top: ("^ string_of_int x ^ "," ^ string_of_int y ^ ")\n") ; - flush stdout -;; - -let set_top mathview () = - mathview#set_top 0 0; - print_string "set_top: SEEM TO WORK\n" ; - flush stdout -;; - -let set_adjustments mathview () = - let adj1 = GData.adjustment () in - let adj2 = GData.adjustment () in - mathview#set_adjustments adj1 adj2 ; - adj1#set_value ((adj1#lower +. adj1#upper) /. 2.0) ; - adj2#set_value ((adj2#lower +. adj2#upper) /. 2.0) ; - print_string "set_adjustments: SEEM TO WORK\n" ; - flush stdout -;; - -let get_adjustments mathview () = - let hadj, vadj = mathview#get_adjustments in - hadj#set_value ((hadj#lower +. hadj#upper) /. 2.0) ; - vadj#set_value ((vadj#lower +. vadj#upper) /. 2.0) ; - print_string "hadjustment: SEEM TO WORK\n" ; - flush stdout -;; - -let get_buffer mathview () = - let buffer = mathview#get_buffer in - Gdk.Draw.rectangle buffer (Gdk.GC.create buffer) ~x:0 ~y:0 - ~width:50 ~height:50 ~filled:true () ; - print_string "buffer: SEEMS TO WORK (hint: force the widget redrawing)\n"; - flush stdout -;; - -let set_font_size mathview () = - mathview#set_font_size 24 ; - print_string "set_font_size: FONT IS NOW 24\n" ; - flush stdout -;; - -let get_font_size mathview () = - print_string ("font_size: " ^ string_of_int (mathview#get_font_size) ^ "\n") ; - flush stdout -;; - -let set_log_verbosity mathview () = - mathview#set_log_verbosity 3 ; - print_string "set_log_verbosity: NOW IS 3\n" ; - flush stdout -;; - -let get_log_verbosity mathview () = - print_string ("log_verbosity: " ^ - string_of_int mathview#get_log_verbosity ^ - "\n") ; - flush stdout -;; - -let x_coord = ref 0 -;; - -(* -let get_element_at mathview () = - begin - match mathview#get_element_at !x_coord 10 with - None -> print_string ("there is no element at " ^ (string_of_int !x_coord) ^ " 10\n") - | Some e -> print_string ("at " ^ (string_of_int !x_coord) ^ " 10 found element " ^ (e#get_nodeName#to_string) ^ "\n") - end ; - x_coord := !x_coord + 10 ; - flush stdout -;; -*) - -let _ = (GtkMain.Main.init ()) -;; - -(* Widget creation *) -let main_window = GWindow.window ~title:"GtkMathView test" () in -let vbox = GPack.vbox ~packing:main_window#add () in -let sw = GBin.scrolled_window ~width:50 ~height:50 ~packing:vbox#pack () in -let mathview= GMathViewAux.multi_selection_math_view ~packing:sw#add ~width:50 ~height:50 () in -let table = GPack.table ~rows:6 ~columns:5 ~packing:vbox#pack () in -let button_load = GButton.button ~label:"load" ~packing:(table#attach ~left:1 ~top:0) () in -let button_unload = GButton.button ~label:"unload" ~packing:(table#attach ~left:2 ~top:0) () in -let button_get_document = GButton.button ~label:"get_document" ~packing:(table#attach ~left:1 ~top:1) () in -let button_selection = GButton.button ~label:"get_selection" ~packing:(table#attach ~left:3 ~top:0) () in -let button_set_selection = GButton.button ~label:"set_selection" ~packing:(table#attach ~left:4 ~top:0) () in -let button_add_selection = GButton.button ~label:"add_selection" ~packing:(table#attach ~left:3 ~top:3) () in -let button_reset_selections = GButton.button ~label:"reset_selections" ~packing:(table#attach ~left:4 ~top:3) () in -let button_get_size = GButton.button ~label:"get_size" ~packing:(table#attach ~left:0 ~top:1) () in -let button_get_top = GButton.button ~label:"get_top" ~packing:(table#attach ~left:2 ~top:1) () in -let button_set_top = GButton.button ~label:"set_top" ~packing:(table#attach ~left:3 ~top:1) () in -let button_set_adjustments = GButton.button ~label:"set_adjustments" ~packing:(table#attach ~left:4 ~top:1) () in -let button_get_adjustments = GButton.button ~label:"get_adjustments" ~packing:(table#attach ~left:0 ~top:2) () in -let button_get_buffer = GButton.button ~label:"get_buffer" ~packing:(table#attach ~left:2 ~top:2) () in -let button_set_font_size = GButton.button ~label:"set_font_size" ~packing:(table#attach ~left:4 ~top:2) () in -let button_get_font_size = GButton.button ~label:"get_font_size" ~packing:(table#attach ~left:0 ~top:3) () in -let button_set_log_verbosity = GButton.button ~label:"set_log_verbosity" ~packing:(table#attach ~left:0 ~top:4) () in -let button_get_log_verbosity = GButton.button ~label:"get_log_verbosity" ~packing:(table#attach ~left:1 ~top:4) () in -let button_load_dom = GButton.button ~label:"load from DOM" ~packing:(table#attach ~left:2 ~top:5) () in -(* let button_get_element_at = GButton.button ~label:"get_element_at" ~packing:(table#attach ~left:3 ~top:5) () in *) -(* Signals connection *) -ignore(button_load#connect#clicked (load_uri mathview)) ; -ignore(button_unload#connect#clicked (unload mathview)) ; -ignore(button_get_document#connect#clicked (get_document mathview)) ; -ignore(button_selection#connect#clicked (test_get_selection mathview)) ; -ignore(button_set_selection#connect#clicked (test_set_selection mathview)) ; -ignore(button_add_selection#connect#clicked (test_add_selection mathview)) ; -ignore(button_reset_selections#connect#clicked (test_reset_selections mathview)) ; -ignore(button_get_size#connect#clicked (get_size mathview)) ; -ignore(button_get_top#connect#clicked (get_top mathview)) ; -ignore(button_set_top#connect#clicked (set_top mathview)) ; -ignore(button_set_adjustments#connect#clicked (set_adjustments mathview)) ; -ignore(button_get_adjustments#connect#clicked (get_adjustments mathview)) ; -ignore(button_get_buffer#connect#clicked (get_buffer mathview)) ; -ignore(button_set_font_size#connect#clicked (set_font_size mathview)) ; -ignore(button_get_font_size#connect#clicked (get_font_size mathview)) ; -ignore(button_set_log_verbosity#connect#clicked (set_log_verbosity mathview)) ; -ignore(button_get_log_verbosity#connect#clicked (get_log_verbosity mathview)) ; -ignore(mathview#connect#click (click mathview)) ; -ignore(mathview#connect#selection_changed (selection_changed mathview)); -ignore(mathview#connect#element_over (element_over mathview)) ; -ignore(mathview#connect#select_over (select_over mathview)); -ignore(button_load_dom#connect#clicked (load_doc mathview)) ; -ignore(main_window#connect#destroy (fun _ -> GMain.quit ())); -(* ignore(button_get_element_at#connect#clicked (get_element_at mathview)) ; *) -(* Main Loop *) -main_window#show () ; -GMain.Main.main () -;; diff --git a/helm/DEVEL/lablgtkmathview/test/test.xml b/helm/DEVEL/lablgtkmathview/test/test.xml deleted file mode 100644 index 9f3d906a7..000000000 --- a/helm/DEVEL/lablgtkmathview/test/test.xml +++ /dev/null @@ -1,134 +0,0 @@ - - - - - -]> - - - - - - - - It's a secret! - - - a - - x - - + - b - - - - - x - 2 - - + - - p - - x - - + - q - - - - d - x - = - - - a2 - - - ln - - - ( - - x2 - + - - p - - x - - + - q - - ) - - - - + - - - - - 2 - - b - - - - - a - - p - - - - - - 4 - - q - - - - - p - 2 - - - - - - - arctg - - - - - 2 - - x - - + - p - - - - - 4 - - q - - - - - p - 2 - - - - - - - + - c - - diff --git a/helm/DEVEL/mathml_editor/.cvsignore b/helm/DEVEL/mathml_editor/.cvsignore deleted file mode 100644 index aa01254b1..000000000 --- a/helm/DEVEL/mathml_editor/.cvsignore +++ /dev/null @@ -1,16 +0,0 @@ -Makefile -Makefile.in -aclocal.m4 -autom4te.cache -config.h -config.h.in -config.log -config.status -configure -editex-config -libtool -result.xml -stamp-h -stamp-h.in -t1lib.log -editex.pc diff --git a/helm/DEVEL/mathml_editor/.log b/helm/DEVEL/mathml_editor/.log deleted file mode 100644 index 3971d5a78..000000000 --- a/helm/DEVEL/mathml_editor/.log +++ /dev/null @@ -1,21 +0,0 @@ -This is TeX, Version 3.14159 (Web2C 7.3.7) (format=tex 2002.8.9) 23 NOV 2002 18:34 -**$$\root 3 \of x+1$$ -(/usr/share/texmf/tex/latex/tools/.tex File ignored) -! Missing $ inserted. - - $ - - \mathchoice -\mathpalette #1#2->\mathchoice - {#1\displaystyle {#2}}{#1\textstyle {#2}}{#1\... -<*> $$\root 3 \of x - +1$$ -? - -* -! Emergency stop. -<*> $$\root 3 \of x+1$$ - -End of file on the terminal! - -No pages of output. diff --git a/helm/DEVEL/mathml_editor/AUTHORS b/helm/DEVEL/mathml_editor/AUTHORS deleted file mode 100644 index 7cec8397e..000000000 --- a/helm/DEVEL/mathml_editor/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -Luca Padovani -Paolo Marinelli diff --git a/helm/DEVEL/mathml_editor/BROWSE b/helm/DEVEL/mathml_editor/BROWSE deleted file mode 100644 index c14c1d2f5..000000000 --- a/helm/DEVEL/mathml_editor/BROWSE +++ /dev/null @@ -1,503 +0,0 @@ -[ebrowse-hs "ebrowse 5.0" " -x" () ()][ebrowse-ts [ebrowse-cs "APushParser" () 0"src/APushParser.hh" "class APushParser -{" 75"src/APushParser.hh" ] -([ebrowse-ts [ebrowse-cs "TPushParser" () 0"src/TPushParser.hh" "class TPushParser :" 226"src/TPushParser.hh" ] -()([ebrowse-ms "buffer" () 0 () " std::list buffer;" 1306 2 () () 0] -[ebrowse-ms "cursor" () 0 () " TNode cursor;" 1363 2 () () 0] -[ebrowse-ms "doc" () 0 () " TDocument doc;" 1343 2 () () 0] -[ebrowse-ms "frames" () 0 () " std::stack frames;" 1278 2 () () 0] -[ebrowse-ms "nextId" () 0 () " unsigned nextId;" 1326 2 () () 0] -) -([ebrowse-ms "PRIME" () 4 () " std::string PRIME(void" 490 2 "src/TPushParser.cc" "TPushParser::PRIME()" 279] -[ebrowse-ms "TPushParser" () 0 () () 0 0 "src/TPushParser.cc" "TPushParser::TPushParser(const TDictionary& d) :" 58] -[ebrowse-ms "TPushParser" () 0 () " TPushParser(const class TDictionary&);" 275 0 () () 0] -[ebrowse-ms "advance" () 0 () " void advance(const" 1065 2 "src/TPushParser.cc" "TPushParser::advance(const" 13192] -[ebrowse-ms "do_active" () 0 () " void do_active(const" 916 2 "src/TPushParser.cc" "TPushParser::do_active(const" 5602] -[ebrowse-ms "do_align" () 0 () " void do_align(void" 624 2 "src/TPushParser.cc" "TPushParser::do_align()" 1530] -[ebrowse-ms "do_apostrophe" () 0 () " void do_apostrophe(void" 1042 2 "src/TPushParser.cc" "TPushParser::do_apostrophe()" 4611] -[ebrowse-ms "do_begin" () 0 () " void do_begin(void" 557 2 "src/TPushParser.cc" "TPushParser::do_begin()" 461] -[ebrowse-ms "do_comment" () 0 () " void do_comment(void" 954 2 "src/TPushParser.cc" "TPushParser::do_comment()" 5668] -[ebrowse-ms "do_control" () 0 () " void do_control(const" 980 2 "src/TPushParser.cc" "TPushParser::do_control(const" 6337] -[ebrowse-ms "do_cr" () 0 () " void do_cr(void" 1014 2 "src/TPushParser.cc" "TPushParser::do_cr()" 5708] -[ebrowse-ms "do_digit" () 0 () " void do_digit(const" 841 2 "src/TPushParser.cc" "TPushParser::do_digit(const" 4072] -[ebrowse-ms "do_end" () 0 () " void do_end(void" 578 2 "src/TPushParser.cc" "TPushParser::do_end()" 910] -[ebrowse-ms "do_eol" () 0 () " void do_eol(void" 645 2 "src/TPushParser.cc" "TPushParser::do_eol()" 2464] -[ebrowse-ms "do_letter" () 0 () " void do_letter(const" 804 2 "src/TPushParser.cc" "TPushParser::do_letter(const" 3902] -[ebrowse-ms "do_other" () 0 () " void do_other(const" 878 2 "src/TPushParser.cc" "TPushParser::do_other(const" 5303] -[ebrowse-ms "do_parameter" () 0 () " void do_parameter(const" 673 2 "src/TPushParser.cc" "TPushParser::do_parameter(const" 2546] -[ebrowse-ms "do_shift" () 0 () " void do_shift(void" 601 2 "src/TPushParser.cc" "TPushParser::do_shift()" 1487] -[ebrowse-ms "do_space" () 0 () " void do_space(const" 766 2 "src/TPushParser.cc" "TPushParser::do_space(const" 3794] -[ebrowse-ms "do_subscript" () 0 () " void do_subscript(void" 742 2 "src/TPushParser.cc" "TPushParser::do_subscript()" 2609] -[ebrowse-ms "do_superscript" () 0 () " void do_superscript(void" 715 2 "src/TPushParser.cc" "TPushParser::do_superscript()" 3204] -[ebrowse-ms "document" () 4 () " TDocument document(void" 432 0 () " TDocument document(void" 432] -[ebrowse-ms "isPrimes" () 4 () " bool isPrimes(const" 520 2 "src/TPushParser.cc" "TPushParser::isPrimes(const" 4445] -[ebrowse-ms "process" () 0 () " void process(const" 1096 2 "src/TPushParser.cc" "TPushParser::process(const" 8538] -[ebrowse-ms "push" () 1 () " virtual void push(const" 349 0 "src/TPushParser.cc" "TPushParser::push(const" 9379] -[ebrowse-ms "setCursor" () 1 () " virtual void setCursor(const" 390 0 "src/TPushParser.cc" "TPushParser::setCursor(const" 13865] -[ebrowse-ms "~TPushParser" () 1 () " virtual ~TPushParser()" 321 0 "src/TPushParser.cc" "TPushParser::~TPushParser()" 241] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TTokenizer" () 0"src/TTokenizer.hh" "class TTokenizer :" 173"src/TTokenizer.hh" ] -()([ebrowse-ms "tokens" () 0 () " std::list tokens;" 405 2 () () 0] -) -([ebrowse-ms "TTokenizer" () 0 () " TTokenizer(void) {" 221 0 () " TTokenizer(void) {" 221] -[ebrowse-ms "push" () 1 () " virtual void push(const" 316 2 "src/TTokenizer.cc" "TTokenizer::push(const" 471] -[ebrowse-ms "setCursor" () 1 () " virtual void setCursor(const" 357 2 () " virtual void setCursor(const" 357] -[ebrowse-ms "tokenize" () 0 () " std::vector tokenize(const" 265 0 "src/TTokenizer.cc" "TTokenizer::tokenize(const" 120] -) -() -() -() -() -()() -])() -([ebrowse-ms "APushParser" () 0 () " APushParser(void) {" 102 0 () " APushParser(void) {" 102] -[ebrowse-ms "push" () 9 () " virtual void push(const" 164 0 () () 0] -[ebrowse-ms "setCursor" () 9 () " virtual void setCursor(const" 209 0 () () 0] -[ebrowse-ms "~APushParser" () 1 () " virtual ~APushParser()" 133 0 () " virtual ~APushParser()" 133] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "EmptyBuffer" "TLexerPush" 0"src/TLexerPush.hh" " class EmptyBuffer {" 271() ] -()() -() -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "unary_function" "std" 32() () 0() ] -([ebrowse-ts [ebrowse-cs "StringHash" "TDictionary" 0"src/TDictionary.hh" " struct StringHash :" 1160"src/TDictionary.hh" ] -()() -([ebrowse-ms "operator ()" () 4 () " { size_t operator()(const" 1238 0 () " { size_t operator()(const" 1238] -) -() -() -() -() -()() -])() -() -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TObject" () 0"src/TObject.hh" "class TObject -{" 63"src/TObject.hh" ] -()() -([ebrowse-ms "TObject" () 0 () " TObject(void) {" 89 1 () " TObject(void) {" 89] -[ebrowse-ms "ref" () 4 () " void ref(coid" 162 0 () " void ref(coid" 162] -[ebrowse-ms "unref" () 4 () " void unref(void" 206 0 () " void unref(void" 206] -[ebrowse-ms "~TObject" () 1 () " virtual ~TObject()" 132 1 () " virtual ~TObject()" 132] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "std" () 0() () 0() ] -()() -() -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TLexerPush" () 0"src/TLexerPush.hh" "class TLexerPush -{" 59"src/TLexerPush.hh" ] -()([ebrowse-ms "state" () 0 () " State state;" 388 2 () () 0] -[ebrowse-ms "tokens" () 0 () " std::deque tokens;" 417 2 () () 0] -) -([ebrowse-ms "TLexerPush" () 0 () " TLexerPush(void);" 85 0 "src/TLexerPush.cc" "TLexerPush::TLexerPush() -{" 51] -[ebrowse-ms "ambiguous" () 4 () " bool ambiguous(void" 182 0 "src/TLexerPush.cc" "TLexerPush::ambiguous()" 576] -[ebrowse-ms "empty" () 4 () " bool empty(void" 240 0 "src/TLexerPush.cc" "TLexerPush::empty()" 447] -[ebrowse-ms "front" () 4 () " TToken front(void" 150 0 "src/TLexerPush.cc" "TLexerPush::front()" 338] -[ebrowse-ms "pending" () 4 () " bool pending(void" 212 0 "src/TLexerPush.cc" "TLexerPush::pending()" 510] -[ebrowse-ms "pop" () 0 () " TToken pop(void" 128 0 "src/TLexerPush.cc" "TLexerPush::pop()" 99] -[ebrowse-ms "push" () 0 () " void push(TChar" 108 0 "src/TLexerPush.cc" "TLexerPush::push(TChar" 664] -) -() -() -() -([ebrowse-ms "State" () 0 () " {" 303 2 () " {" 303] -) -()() -][ebrowse-ts [ebrowse-cs "TLexerPull" () 0() () 0"src/TLexerPull.cc" ] -()() -([ebrowse-ms "pop" () 0 () () 0 0 () "TLexerPull::pop(TCharStream" 94] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TDictionary" () 0"src/TDictionary.hh" "class TDictionary -{" 154"src/TDictionary.hh" ] -()([ebrowse-ms "entries" () 0 () " Dictionary entries;" 1560 2 () () 0] -) -([ebrowse-ms "TDictionary" () 0 () " TDictionary(void) {" 181 0 () " TDictionary(void) {" 181] -[ebrowse-ms "find" () 4 () " const Entry& find(const" 1107 0 "src/TDictionary.cc" "TDictionary::find(const" 3723] -[ebrowse-ms "load" () 0 () " void load(const" 1069 0 "src/TDictionary.cc" "TDictionary::load(const" 162] -[ebrowse-ms "~TDictionary" () 0 () " ~TDictionary()" 204 0 () " ~TDictionary()" 204] -) -() -() -() -([ebrowse-ms "Dictionary" () 0 () "ap< std::string, Entry, StringHash > Dictionary;" 1538 2 () () 0] -[ebrowse-ms "EntryClass" () 0 () " {" 301 0 () " {" 301] -[ebrowse-ms "Form" () 0 () " {" 228 0 () " {" 228] -) -()() -][ebrowse-ts [ebrowse-cs "DOM" () 0() () 0() ] -()() -() -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "APushLexer" () 0"src/APushLexer.hh" "class APushLexer -{" 72"src/APushLexer.hh" ] -([ebrowse-ts [ebrowse-cs "TPushLexer" () 0"src/TPushLexer.hh" "class TPushLexer :" 117"src/TPushLexer.hh" ] -()([ebrowse-ms "buffer" () 0 () " std::string buffer;" 483 2 () () 0] -[ebrowse-ms "state" () 0 () " State state;" 461 2 () () 0] -) -([ebrowse-ms "TPushLexer" () 0 () () 0 0 "src/TPushLexer.cc" "TPushLexer::TPushLexer(APushParser& p) :" 108] -[ebrowse-ms "TPushLexer" () 0 () " TPushLexer(class APushParser&);" 164 0 () () 0] -[ebrowse-ms "error" () 5 () " virtual bool error(void" 290 0 "src/TPushLexer.cc" "TPushLexer::error()" 2463] -[ebrowse-ms "push" () 1 () " virtual void push(char" 234 0 "src/TPushLexer.cc" "TPushLexer::push(char" 1180] -[ebrowse-ms "reset" () 1 () " virtual void reset(void" 262 0 "src/TPushLexer.cc" "TPushLexer::reset()" 176] -[ebrowse-ms "transaction" () 0 () " void transaction(char" 436 2 "src/TPushLexer.cc" "TPushLexer::transaction(char" 251] -[ebrowse-ms "~TPushLexer" () 1 () " virtual ~TPushLexer()" 203 0 () " virtual ~TPushLexer()" 203] -) -() -() -() -([ebrowse-ms "State" () 0 () " {" 327 2 () " {" 327] -) -()() -])() -([ebrowse-ms "APushLexer" () 0 () " APushLexer(class APushParser& p) :" 99 0 () " APushLexer(class APushParser& p) :" 99] -[ebrowse-ms "error" () 13 () " virtual bool error(void" 251 0 () () 0] -[ebrowse-ms "push" () 9 () " virtual void push(char" 187 0 () () 0] -[ebrowse-ms "reset" () 9 () " virtual void reset(void" 219 0 () () 0] -[ebrowse-ms "~APushLexer" () 1 () " virtual ~APushLexer()" 156 0 () " virtual ~APushLexer()" 156] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "Ptr" () 32"src/Ptr.hh" "class Ptr -{" 1067"src/Ptr.hh" ] -()([ebrowse-ms "ptr" () 0 () " P* ptr;" 1797 2 () () 0] -) -([ebrowse-ms "P" () 4 () " operator P*()" 1487 0 () " operator P*()" 1487] -[ebrowse-ms "Ptr" () 0 () " Ptr(const Ptr& p) :" 1142 0 () " Ptr(const Ptr& p) :" 1142] -[ebrowse-ms "Ptr" () 0 () " Ptr(P* p = 0) :" 1083 0 () " Ptr(P* p = 0) :" 1083] -[ebrowse-ms "Q" () 36 () " template operator Ptr()" 1747 0 () " template operator Ptr()" 1747] -[ebrowse-ms "operator ->" () 4 () " P* operator->()" 1253 0 () " P* operator->()" 1253] -[ebrowse-ms "operator =" () 0 () " Ptr& operator=(const" 1316 0 () " Ptr& operator=(const" 1316] -[ebrowse-ms "~Ptr" () 0 () " ~Ptr()" 1202 0 () " ~Ptr()" 1202] -) -() -() -([ebrowse-ms "is_a" () 32 () " template friend bool is_a(const" 1659 0 () " template friend bool is_a(const" 1659] -[ebrowse-ms "smart_cast" () 32 () "emplate friend Ptr smart_cast(const" 1561 0 () "emplate friend Ptr smart_cast(const" 1561] -) -() -()() -][ebrowse-ts [ebrowse-cs "TToken" () 0"src/TToken.hh" "struct TToken -{" 80"src/TToken.hh" ] -()([ebrowse-ms "category" () 0 () " TCat category;" 627 0 () () 0] -[ebrowse-ms "value" () 0 () " std::string value;" 648 0 () () 0] -) -([ebrowse-ms "TToken" () 0 () " TToken(TCat c, const std::string& v) :" 438 0 () " TToken(TCat c, const std::string& v) :" 438] -[ebrowse-ms "TToken" () 0 () " TToken(TCat c, char ch) :" 366 0 () " TToken(TCat c, char ch) :" 366] -[ebrowse-ms "TToken" () 0 () " TToken(TCat c) :" 330 0 () " TToken(TCat c) :" 330] -[ebrowse-ms "operator ==" () 4 () " bool operator==(const" 517 0 () " bool operator==(const" 517] -) -() -() -() -([ebrowse-ms "TCat" () 0 () " {" 98 0 () " {" 98] -) -()() -][ebrowse-ts [ebrowse-cs "binary_function" "std" 32() () 0() ] -([ebrowse-ts [ebrowse-cs "StringEq" "TDictionary" 0"src/TDictionary.hh" " struct StringEq :" 1327() ] -()() -([ebrowse-ms "operator ()" () 4 () " { bool operator()(const" 1415 0 () () 0] -) -() -() -() -() -()() -])() -() -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TNode" () 0"src/TNode.hh" "class TNode -{" 124"src/TNode.hh" ] -()([ebrowse-ms "node" () 0 () " DOM::Element node;" 2444 2 () () 0] -) -([ebrowse-ms "TNode" () 0 () " TNode(const TNode& n) :" 270 0 () " TNode(const TNode& n) :" 270] -[ebrowse-ms "TNode" () 0 () " TNode(void) :" 145 0 () " TNode(void) :" 145] -[ebrowse-ms "append" () 4 () " void append(const" 1667 0 "src/TNode.cc" "TNode::append(const" 2450] -[ebrowse-ms "append" () 4 () " void append(const" 1631 0 "src/TNode.cc" "TNode::append(const" 2348] -[ebrowse-ms "child" () 4 () " TNode child(unsigned" 592 0 "src/TNode.cc" "TNode::child(unsigned" 2874] -[ebrowse-ms "core" () 4 () " TNode core(void" 425 0 "src/TNode.cc" "TNode::core()" 1413] -[ebrowse-ms "empty" () 4 () " bool empty(void" 648 0 () " bool empty(void" 648] -[ebrowse-ms "first" () 4 () " TNode first(void" 480 0 "src/TNode.cc" "TNode::first()" 1075] -[ebrowse-ms "firstL" () 4 () " TNode firstL(void" 508 0 "src/TNode.cc" "TNode::firstL()" 1259] -[ebrowse-ms "get" () 4 () " std::string get(const" 1758 0 "src/TNode.cc" "TNode::get(const" 3007] -[ebrowse-ms "hasId" () 4 () " bool hasId(void" 1994 0 () " bool hasId(void" 1994] -[ebrowse-ms "insert" () 4 () " void insert(const" 1595 0 "src/TNode.cc" "TNode::insert(const" 2193] -[ebrowse-ms "is" () 4 () " bool is(const" 2055 0 () " bool is(const" 2055] -[ebrowse-ms "isC" () 4 () " bool isC(const" 2303 0 () " bool isC(const" 2303] -[ebrowse-ms "isC" () 4 () " bool isC(void" 2258 0 () " bool isC(void" 2258] -[ebrowse-ms "isG" () 4 () " bool isG(void" 2119 0 () " bool isG(void" 2119] -[ebrowse-ms "isSb" () 4 () " bool isSb(void" 2165 0 () " bool isSb(void" 2165] -[ebrowse-ms "isSp" () 4 () " bool isSp(void" 2212 0 () " bool isSp(void" 2212] -[ebrowse-ms "last" () 4 () " TNode last(void" 534 0 "src/TNode.cc" "TNode::last()" 736] -[ebrowse-ms "lastL" () 4 () " TNode lastL(void" 561 0 "src/TNode.cc" "TNode::lastL()" 922] -[ebrowse-ms "name" () 4 () " std::string name(void" 1863 0 () " std::string name(void" 1863] -[ebrowse-ms "nameC" () 4 () " std::string nameC(void" 1929 0 () " std::string nameC(void" 1929] -[ebrowse-ms "next" () 4 () " TNode next(void" 319 0 "src/TNode.cc" "TNode::next()" 63] -[ebrowse-ms "nextL" () 4 () " TNode nextL(void" 346 0 "src/TNode.cc" "TNode::nextL()" 247] -[ebrowse-ms "operator !=" () 4 () " bool operator!=(const" 1295 0 () " bool operator!=(const" 1295] -[ebrowse-ms "operator ==" () 4 () " bool operator==(const" 1227 0 () " bool operator==(const" 1227] -[ebrowse-ms "operator []" () 4 () " ProxyAttr operator[](const" 1422 0 () " ProxyAttr operator[](const" 1422] -[ebrowse-ms "operator []" () 4 () " TNode operator[](int" 1362 0 () " TNode operator[](int" 1362] -[ebrowse-ms "parent" () 4 () " TNode parent(void" 453 0 "src/TNode.cc" "TNode::parent()" 1587] -[ebrowse-ms "prepend" () 4 () " void prepend(const" 1718 0 "src/TNode.cc" "TNode::prepend(const" 2683] -[ebrowse-ms "prev" () 4 () " TNode prev(void" 372 0 "src/TNode.cc" "TNode::prev()" 396] -[ebrowse-ms "prevL" () 4 () " TNode prevL(void" 399 0 "src/TNode.cc" "TNode::prevL()" 588] -[ebrowse-ms "remove" () 4 () " void remove(void" 1529 0 "src/TNode.cc" "TNode::remove()" 1913] -[ebrowse-ms "replace" () 4 () " void replace(const" 1559 0 "src/TNode.cc" "TNode::replace(const" 2038] -[ebrowse-ms "set" () 4 () " void set(const" 1797 0 "src/TNode.cc" "TNode::set(const" 3109] -[ebrowse-ms "size" () 4 () " unsigned size(void" 621 0 "src/TNode.cc" "TNode::size()" 1749] -[ebrowse-ms "value" () 4 () " std::string value(void" 707 0 () " std::string value(void" 707] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "Entry" "TDictionary" 0"src/TDictionary.hh" " struct Entry - {" 405"src/TDictionary.hh" ] -()([ebrowse-ms "cls" () 0 () " EntryClass cls;" 806 0 () () 0] -[ebrowse-ms "delimiter" () 0 () " unsigned delimiter : 1;" 909 0 () () 0] -[ebrowse-ms "embellishment" () 0 () " unsigned embellishment : 1;" 966 0 () () 0] -[ebrowse-ms "infix" () 0 () " unsigned infix : 8;" 830 0 () () 0] -[ebrowse-ms "leftOpen" () 0 () " unsigned leftOpen : 1;" 993 0 () () 0] -[ebrowse-ms "limits" () 0 () " unsigned limits : 1;" 934 0 () () 0] -[ebrowse-ms "pattern" () 0 () " std::vector pattern;" 597 0 () () 0] -[ebrowse-ms "postfix" () 0 () " unsigned postfix : 8;" 881 0 () () 0] -[ebrowse-ms "prefix" () 0 () " unsigned prefix : 8;" 855 0 () () 0] -[ebrowse-ms "rightOpen" () 0 () " unsigned rightOpen : 1;" 1021 0 () () 0] -[ebrowse-ms "table" () 0 () " unsigned table : 1;" 1045 0 () () 0] -[ebrowse-ms "value" () 0 () " std::string value;" 620 0 () () 0] -) -([ebrowse-ms "Entry" () 0 () " {" 420 0 () " {" 420] -[ebrowse-ms "defined" () 4 () " bool defined(void" 643 0 () " bool defined(void" 643] -[ebrowse-ms "hasArguments" () 4 () " bool hasArguments(void" 707 0 () " bool hasArguments(void" 707] -[ebrowse-ms "paramDelimited" () 4 () " bool paramDelimited(unsigned" 777 0 "src/TDictionary.cc" "TDictionary::Entry::paramDelimited(unsigned" 4012] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "Frame" "TPushParser" 0"src/TPushParser.hh" " struct Frame - {" 1126"src/TPushParser.hh" ] -()([ebrowse-ms "entry" () 0 () " const TDictionary::Entry& entry;" 1226 0 () () 0] -[ebrowse-ms "pos" () 0 () " unsigned pos;" 1244 0 () () 0] -) -([ebrowse-ms "Frame" () 0 () " Frame(const TDictionary::Entry& e) :" 1142 0 () " Frame(const TDictionary::Entry& e) :" 1142] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TCharStream" () 0"src/TCharStream.hh" "class TCharStream -{" 94"src/TCharStream.hh" ] -([ebrowse-ts [ebrowse-cs "TCharStreamString" () 0"src/TCharStreamString.hh" "class TCharStreamString :" 120"src/TCharStreamString.hh" ] -()([ebrowse-ms "buffer" () 0 () " TString buffer;" 555 2 () () 0] -[ebrowse-ms "idx" () 0 () " unsigned long idx;" 536 2 () () 0] -) -([ebrowse-ms "TCharStreamString" () 0 () " TCharStreamString(const TString& s) :" 175 0 () " TCharStreamString(const TString& s) :" 175] -[ebrowse-ms "look" () 5 () " virtual TChar look(void" 343 0 () " virtual TChar look(void" 343] -[ebrowse-ms "more" () 5 () " virtual bool more(void" 275 0 () " virtual bool more(void" 275] -[ebrowse-ms "next" () 1 () " virtual TChar next(void" 439 0 () " virtual TChar next(void" 439] -[ebrowse-ms "~TCharStreamString" () 1 () " virtual ~TCharStreamString()" 243 0 () " virtual ~TCharStreamString()" 243] -) -() -() -() -() -()() -])() -([ebrowse-ms "TCharStream" () 0 () " TCharStream(void) {" 121 0 () " TCharStream(void) {" 121] -[ebrowse-ms "look" () 13 () " virtual TChar look(void" 222 0 () () 0] -[ebrowse-ms "more" () 13 () " virtual bool more(void" 184 0 () () 0] -[ebrowse-ms "next" () 9 () " virtual TChar next(void" 260 0 () () 0] -[ebrowse-ms "~TCharStream" () 1 () " virtual ~TCharStream()" 152 0 () " virtual ~TCharStream()" 152] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "EmptyStream" "TCharStream" 0"src/TCharStream.hh" " class EmptyStream {" 289() ] -()() -() -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "*Globals*" () 0() () 0"src/APushLexer.hh" ] -()() -([ebrowse-ms "dispatch" () 0 "src/special.cc" "dispatch(const" 1012 0 "src/special.cc" "dispatch(const" 1012] -[ebrowse-ms "do_apostrophe" () 0 "src/special.cc" "do_apostrophe(const" 669 0 "src/special.cc" "do_apostrophe(const" 669] -[ebrowse-ms "do_bgroup" () 0 "src/special.cc" "do_bgroup(const" 149 0 "src/special.cc" "do_bgroup(const" 149] -[ebrowse-ms "do_control" () 0 "src/special.cc" "do_control(const" 711 0 "src/special.cc" "do_control(const" 711] -[ebrowse-ms "do_other" () 0 "src/special.cc" "do_other(const" 776 0 "src/special.cc" "do_other(const" 776] -[ebrowse-ms "finishG" () 0 "src/special.cc" "void finishG(const" 118 0 () () 0] -[ebrowse-ms "getCore" () 0 "src/domnav.cc" "getCore(const" 629 0 "src/domnav.cc" "getCore(const" 629] -[ebrowse-ms "getRightmostChild" () 0 "src/domnav.cc" "getRightmostChild(const" 37 0 "src/domnav.cc" "getRightmostChild(const" 37] -[ebrowse-ms "isDelimiter" () 0 "src/domnav.cc" "isDelimiter(const" 1716 0 "src/domnav.cc" "isDelimiter(const" 1716] -[ebrowse-ms "isFunction" () 0 "src/domnav.cc" "isFunction(const" 1879 0 "src/domnav.cc" "isFunction(const" 1879] -[ebrowse-ms "isGroup" () 0 "src/domnav.cc" "isGroup(const" 1214 0 "src/domnav.cc" "isGroup(const" 1214] -[ebrowse-ms "isInferred" () 0 "src/domnav.cc" "isInferred(const" 985 0 "src/domnav.cc" "isInferred(const" 985] -[ebrowse-ms "isMacro" () 0 "src/domnav.cc" "isMacro(const" 1085 0 "src/domnav.cc" "isMacro(const" 1085] -[ebrowse-ms "isOperator" () 0 "src/domnav.cc" "isOperator(const" 1553 0 "src/domnav.cc" "isOperator(const" 1553] -[ebrowse-ms "isPrimes" () 0 "src/domnav.cc" "isPrimes(const" 1451 0 "src/domnav.cc" "isPrimes(const" 1451] -[ebrowse-ms "isSb" () 0 "src/domnav.cc" "isSb(const" 1291 0 "src/domnav.cc" "isSb(const" 1291] -[ebrowse-ms "isSp" () 0 "src/domnav.cc" "isSp(const" 1369 0 "src/domnav.cc" "isSp(const" 1369] -[ebrowse-ms "isUnicodeAlpha" () 2 "src/dom.hh" "inline bool isUnicodeAlpha(TChar" 303 0 "src/dom.hh" "inline bool isUnicodeAlpha(TChar" 303] -[ebrowse-ms "isUnicodeDigit" () 2 "src/dom.hh" "inline bool isUnicodeDigit(TChar" 408 0 "src/dom.hh" "inline bool isUnicodeDigit(TChar" 408] -[ebrowse-ms "isUnicodeSpace" () 2 "src/dom.hh" "inline bool isUnicodeSpace(TChar" 198 0 "src/dom.hh" "inline bool isUnicodeSpace(TChar" 198] -[ebrowse-ms "main" () 0 "src/texlexer.cc" "main()" 51 0 "src/texlexer.cc" "main()" 51] -[ebrowse-ms "prevLinearSibling" () 0 "src/domnav.cc" "prevLinearSibling(const" 324 0 "src/domnav.cc" "prevLinearSibling(const" 324] -[ebrowse-ms "replace" () 0 "src/domnav.cc" "replace(const" 834 0 "src/domnav.cc" "replace(const" 834] -[ebrowse-ms "tokenize" () 0 "src/tokenizer.hh" "std::vector tokenize(const" 123 0 () () 0] -) -([ebrowse-ms "undefinedEntry" () 0 () () 0 0 "src/TDictionary.cc" "static TDictionary::Entry undefinedEntry;" 132] -) -() -([ebrowse-ms "Ptr_hh" () 512 () () 0 0 "src/Ptr.hh" "#define Ptr_hh -" 1036] -[ebrowse-ms "TML_NS_URI" () 512 () () 0 0 "src/globals.hh" "#define TML_NS_URI " 67] -[ebrowse-ms "XMLNS_NS_URI" () 512 () () 0 0 "src/globals.hh" "#define XMLNS_NS_URI " 123] -[ebrowse-ms "__APushLexer_hh__" () 512 () () 0 0 () "#define __APushLexer_hh__ -" 53] -[ebrowse-ms "__APushParser_hh__" () 512 () () 0 0 "src/APushParser.hh" "#define __APushParser_hh__ -" 55] -[ebrowse-ms "__TCharStreamString_hh__" () 512 () () 0 0 "src/TCharStreamString.hh" "#define __TCharStreamString_hh__ -" 67] -[ebrowse-ms "__TCharStream_hh__" () 512 () () 0 0 "src/TCharStream.hh" "#define __TCharStream_hh__ -" 55] -[ebrowse-ms "__TDictionary_hh__" () 512 () () 0 0 "src/TDictionary.hh" "#define __TDictionary_hh__ -" 55] -[ebrowse-ms "__TDocument_hh__" () 512 () () 0 0 "src/TDocument.hh" "#define __TDocument_hh__ -" 51] -[ebrowse-ms "__TNode_hh__" () 512 () () 0 0 "src/TNode.hh" "#define __TNode_hh__ -" 43] -[ebrowse-ms "__TObject_hh__" () 512 () () 0 0 "src/TObject.hh" "#define __TObject_hh__ -" 47] -[ebrowse-ms "__TPushLexer_hh__" () 512 () () 0 0 "src/TPushLexer.hh" "#define __TPushLexer_hh__ -" 53] -[ebrowse-ms "__TPushParser_hh__" () 512 () () 0 0 "src/TPushParser.hh" "#define __TPushParser_hh__ -" 55] -[ebrowse-ms "__TToken_hh__" () 512 () () 0 0 "src/TToken.hh" "#define __TToken_hh__ -" 45] -[ebrowse-ms "__TTokenizer_hh__" () 512 () () 0 0 "src/TTokenizer.hh" "#define __TTokenizer_hh__ -" 53] -[ebrowse-ms "__dom_hh__" () 512 () () 0 0 "src/dom.hh" "#define __dom_hh__ -" 39] -[ebrowse-ms "__globals_hh__" () 512 () () 0 0 "src/globals.hh" "#define __globals_hh__ -" 47] -[ebrowse-ms "__tokenzier_hh__" () 512 () () 0 0 "src/tokenizer.hh" "#define __tokenzier_hh__ -" 51] -) -([ebrowse-ms "TChar" () 0 () () 0 0 "src/dom.hh" "typedef DOM::Char32 TChar;" 131] -[ebrowse-ms "TString" () 0 () () 0 0 "src/dom.hh" "typedef DOM::UCS4String TString;" 164] -) -()() -][ebrowse-ts [ebrowse-cs "ProxyAttr" "TNode" 0"src/TNode.hh" " class ProxyAttr - {" 765"src/TNode.hh" ] -()([ebrowse-ms "name" () 0 () " std::string name;" 1155 2 () () 0] -[ebrowse-ms "node" () 0 () " DOM::Element node;" 1132 2 () () 0] -) -([ebrowse-ms "ProxyAttr" () 0 () "r(const DOM::Element& n, const std::string& s) :" 795 0 () "r(const DOM::Element& n, const std::string& s) :" 795] -[ebrowse-ms "operator =" () 0 () " ProxyAttr& operator=(const" 959 0 () " ProxyAttr& operator=(const" 959] -[ebrowse-ms "operator ==" () 0 () " bool operator==(const" 1040 0 () " bool operator==(const" 1040] -[ebrowse-ms "string" () 4 () " operator std::string()" 885 0 () " operator std::string()" 885] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "EventListener" "DOM" 0() () 0() ] -([ebrowse-ts [ebrowse-cs "DOMSubtreeModifiedListener" "TDocument" 0"src/TDocument.hh" " class DOMSubtreeModifiedListener :" 1015"src/TDocument.hh" ] -()([ebrowse-ms "doc" () 0 () " TDocument doc;" 1247 2 () () 0] -) -([ebrowse-ms "DOMSubtreeModifiedListener" () 0 () "DOMSubtreeModifiedListener(const TDocument& d) :" 1092 0 () "DOMSubtreeModifiedListener(const TDocument& d) :" 1092] -[ebrowse-ms "handleEvent" () 1 () " virtual void handleEvent(const" 1202 0 () () 0] -[ebrowse-ms "~DOMSubtreeModifiedListener" () 1 () " virtual ~DOMSubtreeModifiedListener()" 1162 0 () " virtual ~DOMSubtreeModifiedListener()" 1162] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TDocument" () 0"src/TDocument.hh" "class TDocument :" 108"src/TDocument.hh" ] -()([ebrowse-ms "dirty" () 0 () " DOM::Element dirty;" 971 2 () () 0] -[ebrowse-ms "doc" () 0 () " DOM::Document doc;" 949 2 () () 0] -) -([ebrowse-ms "TDocument" () 0 () " TDocument(void);" 162 0 "src/TDocument.cc" "TDocument::TDocument() -{" 108] -[ebrowse-ms "create" () 4 () " TNode create(const" 202 0 "src/TDocument.cc" "TDocument::create(const" 789] -[ebrowse-ms "createC" () 4 () " TNode createC(const" 327 0 "src/TDocument.cc" "TDocument::createC(const" 1062] -[ebrowse-ms "createG" () 4 () " TNode createG(unsigned" 262 0 () " TNode createG(unsigned" 262] -[ebrowse-ms "createI" () 4 () " TNode createI(const" 461 0 () " TNode createI(const" 461] -[ebrowse-ms "createN" () 4 () " TNode createN(const" 561 0 () " TNode createN(const" 561] -[ebrowse-ms "createO" () 4 () " TNode createO(const" 661 0 () " TNode createO(const" 661] -[ebrowse-ms "createT" () 4 () " TNode createT(const" 384 0 "src/TDocument.cc" "TDocument::createT(const" 1197] -[ebrowse-ms "dirtyIdNode" () 4 () " TNode dirtyIdNode(void" 872 0 "src/TDocument.cc" "TDocument::dirtyIdNode()" 2081] -[ebrowse-ms "dirtyNode" () 4 () " TNode dirtyNode(void" 821 0 () " TNode dirtyNode(void" 821] -[ebrowse-ms "handleEvent" () 1 () " virtual void handleEvent(const" 1293 2 "src/TDocument.cc" "TDocument::handleEvent(const" 2348] -[ebrowse-ms "root" () 0 () " TNode root(void" 758 0 () " TNode root(void" 758] -[ebrowse-ms "serialize" () 4 () " void serialize(const" 904 0 "src/TDocument.cc" "TDocument::serialize(const" 637] -[ebrowse-ms "~TDocument" () 0 () " ~TDocument()" 179 0 "src/TDocument.cc" "TDocument::~TDocument()" 460] -) -() -([ebrowse-ms "findCommonAncestor" () 0 () " static DOM::Node findCommonAncestor(const" 1398 2 "src/TDocument.cc" "TDocument::findCommonAncestor(const" 1560] -[ebrowse-ms "nodeDepth" () 0 () " static unsigned nodeDepth(const" 1341 2 "src/TDocument.cc" "TDocument::nodeDepth(const" 1362] -) -() -() -()() -])() -() -() -() -() -() -()() -] \ No newline at end of file diff --git a/helm/DEVEL/mathml_editor/BUGS b/helm/DEVEL/mathml_editor/BUGS deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/DEVEL/mathml_editor/BUGS-GDOME2 b/helm/DEVEL/mathml_editor/BUGS-GDOME2 deleted file mode 100644 index 5f756359f..000000000 --- a/helm/DEVEL/mathml_editor/BUGS-GDOME2 +++ /dev/null @@ -1,4 +0,0 @@ - -* /usr/lib is given by gdome-config -* should optimize event propagation, remember only those nodes with - listeners diff --git a/helm/DEVEL/mathml_editor/ChangeLog b/helm/DEVEL/mathml_editor/ChangeLog deleted file mode 100644 index 95f5681b7..000000000 --- a/helm/DEVEL/mathml_editor/ChangeLog +++ /dev/null @@ -1,55 +0,0 @@ -editex (0.0.4-3) unstable; urgency=low - - * Debugging printf commented out - - -- Claudio Sacerdoti Coen Fri, 07 Nov 2003 13:52:01 +0200 - -editex (0.0.4-2) unstable; urgency=low - - * Use .o objects from .libs directory so that they are PIC - (should fix build failure on hppa) - - -- Stefano Zacchiroli Tue, 21 Oct 2003 14:53:01 +0200 - -editex (0.0.4-1) unstable; urgency=low - - * New upstream release - * Rebuilt with ocaml 3.07, gmetadom 0.2.1, gtkmathview 0.5.1, - gdome-2xslt 0.0.6, lablgtk 1.2.6 - * Use debian/compat instead of DH_COMPAT - - -- Stefano Zacchiroli Fri, 10 Oct 2003 09:57:02 +0200 - -editex (0.0.3-2) unstable; urgency=low - - * Signed by me - * debian/control - - added ${misc:Depends} - - bumped standards-version to 3.5.10 - - bumped dependencies on gmetadom to 0.1.9 - - changed section of -dev package to libdevel - - -- Stefano Zacchiroli Wed, 25 Jun 2003 18:26:11 +0200 - -editex (0.0.3-1) unstable; urgency=low - - * New upstream release. - * Bug fix: tml-litex.xsl was not installed - * Bug fix: Makefile.ac did not use pkg-config to look for the existence - of the required packages (that, in the meantime, started using pkg-config) - As a result, the required packages were no longer detected by ./configure - - -- Claudio Sacerdoti Coen Thu, 19 Jun 2003 12:58:21 +0200 - -editex (0.0.2-1) unstable; urgency=low - - * New upstream release. - - -- Claudio Sacerdoti Coen Thu, 19 Jun 2003 12:58:21 +0200 - -editex (0.0.1-1) unstable; urgency=low - - * Initial Release. - - -- Stefano Zacchiroli Wed, 02 Apr 2003 15:53:25 +0200 - diff --git a/helm/DEVEL/mathml_editor/LICENSE b/helm/DEVEL/mathml_editor/LICENSE deleted file mode 100644 index 567f3dc4c..000000000 --- a/helm/DEVEL/mathml_editor/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - diff --git a/helm/DEVEL/mathml_editor/MODES b/helm/DEVEL/mathml_editor/MODES deleted file mode 100644 index 39032e3eb..000000000 --- a/helm/DEVEL/mathml_editor/MODES +++ /dev/null @@ -1,25 +0,0 @@ - -there are two basic syntactic modes: - -TeX mode: - -* any letter is an identifier by itself - -Program mode: - -* sequences of letters (and possibly other characters) - are collapsed into a single token. Id tokens are separated - by any other character not included in one of the collapsing - categories. - -The mode is a property of the parser. - -there are two basic semantic modes: - -math mode: - -* implicit operator is multiplication - -program mode: - -* implicit operator is function application diff --git a/helm/DEVEL/mathml_editor/Makefile.am b/helm/DEVEL/mathml_editor/Makefile.am deleted file mode 100644 index aa15ecbef..000000000 --- a/helm/DEVEL/mathml_editor/Makefile.am +++ /dev/null @@ -1,31 +0,0 @@ -DISTDIR = @PACKAGE@-@VERSION@ - -EXTRA_DIST = BUGS LICENSE BUGS-GDOME2 MODES PATTERNS aclocal.m4 editex.pc.in debian -SUBDIRS = src test ocaml textomml xsl dict -CLEANFILES = core - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = editex.pc - -backup: - cd ..; tar cvfz @PACKAGE@-@VERSION@-`date|tr ' ' '_'|tr ':' '_'`.tar.gz @PACKAGE@ - -cleanbak: - -rm -f `find . -name "*~"` - -lc: - @( \ - CFILES=`find . -name "*.c"`; \ - HFILES=`find . -name "*.h"`; \ - CCFILES=`find . -name "*.cc"`; \ - HHFILES=`find . -name "*.hh"`; \ - ICCFILES=`find . -name "*.icc"`; \ - wc -l $$CFILES $$HFILES $$CCFILES $$HHFILES $$ICCFILES | tail -n 1 \ - ) - -deb: dist - if [ -d $(DISTDIR)/ ]; then rm -rf $(DISTDIR); else true; fi - tar xvzf $(DISTDIR).tar.gz - (cd $(DISTDIR)/ && rm -rf debian/CVS/ && debuild) - rm -rf $(DISTDIR) - diff --git a/helm/DEVEL/mathml_editor/Makefile.in b/helm/DEVEL/mathml_editor/Makefile.in deleted file mode 100644 index b66feab8e..000000000 --- a/helm/DEVEL/mathml_editor/Makefile.in +++ /dev/null @@ -1,438 +0,0 @@ -# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am - -# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - -SHELL = @SHELL@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include - -DESTDIR = - -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ - -top_builddir = . - -ACLOCAL = @ACLOCAL@ -AUTOCONF = @AUTOCONF@ -AUTOMAKE = @AUTOMAKE@ -AUTOHEADER = @AUTOHEADER@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -transform = @program_transform_name@ - -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -host_alias = @host_alias@ -host_triplet = @host@ -AS = @AS@ -CC = @CC@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -DLLTOOL = @DLLTOOL@ -ECHO = @ECHO@ -EDITEX_VERSION_INFO = @EDITEX_VERSION_INFO@ -EXEEXT = @EXEEXT@ -GDOMEXSLT_CFLAGS = @GDOMEXSLT_CFLAGS@ -GDOMEXSLT_LIBS = @GDOMEXSLT_LIBS@ -GMETADOM_CFLAGS = @GMETADOM_CFLAGS@ -GMETADOM_LIBS = @GMETADOM_LIBS@ -GTKMATHVIEW_CFLAGS = @GTKMATHVIEW_CFLAGS@ -GTKMATHVIEW_LIBS = @GTKMATHVIEW_LIBS@ -HAVE_OCAMLC = @HAVE_OCAMLC@ -HAVE_OCAMLDEP = @HAVE_OCAMLDEP@ -HAVE_OCAMLFIND = @HAVE_OCAMLFIND@ -HAVE_OCAMLMKLIB = @HAVE_OCAMLMKLIB@ -HAVE_OCAMLOPT = @HAVE_OCAMLOPT@ -LDFLAGS = @LDFLAGS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -MAKEINFO = @MAKEINFO@ -MLGDOME_CFLAGS = @MLGDOME_CFLAGS@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OCAMLC = @OCAMLC@ -OCAMLDEP = @OCAMLDEP@ -OCAMLFIND = @OCAMLFIND@ -OCAMLMKLIB = @OCAMLMKLIB@ -OCAMLOPT = @OCAMLOPT@ -OCAMLSTDLIBDIR = @OCAMLSTDLIBDIR@ -OCAMLSTUBDIR = @OCAMLSTUBDIR@ -OCAML_INCLUDE_DIR = @OCAML_INCLUDE_DIR@ -PACKAGE = @PACKAGE@ -RANLIB = @RANLIB@ -STRIP = @STRIP@ -VERSION = @VERSION@ - -EXTRA_DIST = BUGS LICENSE aclocal.m4 -SUBDIRS = src test ocaml textomml -CLEANFILES = core - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = editex.pc -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = editex.pc -DATA = $(pkgconfig_DATA) - -DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \ -Makefile.am Makefile.in NEWS TODO aclocal.m4 config.guess config.h.in \ -config.sub configure configure.ac editex.pc.in install-sh ltmain.sh \ -missing mkinstalldirs - - -DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) - -TAR = tar -GZIP_ENV = --best -all: all-redirect -.SUFFIXES: -$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) - cd $(top_builddir) \ - && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status - -$(ACLOCAL_M4): configure.ac - cd $(srcdir) && $(ACLOCAL) - -config.status: $(srcdir)/configure.ac $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck -$(srcdir)/configure: $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) - cd $(srcdir) && $(AUTOCONF) - -config.h: stamp-h - @if test ! -f $@; then \ - rm -f stamp-h; \ - $(MAKE) stamp-h; \ - else :; fi -stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status - cd $(top_builddir) \ - && CONFIG_FILES= CONFIG_HEADERS=config.h \ - $(SHELL) ./config.status - @echo timestamp > stamp-h 2> /dev/null -$(srcdir)/config.h.in: $(srcdir)/stamp-h.in - @if test ! -f $@; then \ - rm -f $(srcdir)/stamp-h.in; \ - $(MAKE) $(srcdir)/stamp-h.in; \ - else :; fi -$(srcdir)/stamp-h.in: $(top_srcdir)/configure.ac $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOHEADER) - @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null - -mostlyclean-hdr: - -clean-hdr: - -distclean-hdr: - -rm -f config.h - -maintainer-clean-hdr: -editex.pc: $(top_builddir)/config.status editex.pc.in - cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status - -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir) - @list='$(pkgconfig_DATA)'; for p in $$list; do \ - if test -f $(srcdir)/$$p; then \ - echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p"; \ - $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p; \ - else if test -f $$p; then \ - echo " $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p"; \ - $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p; \ - fi; fi; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - list='$(pkgconfig_DATA)'; for p in $$list; do \ - rm -f $(DESTDIR)$(pkgconfigdir)/$$p; \ - done - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. - -@SET_MAKE@ - -all-recursive install-data-recursive install-exec-recursive \ -installdirs-recursive install-recursive uninstall-recursive \ -check-recursive installcheck-recursive info-recursive dvi-recursive: - @set fnord $(MAKEFLAGS); amf=$$2; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @set fnord $(MAKEFLAGS); amf=$$2; \ - dot_seen=no; \ - rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ - rev="$$subdir $$rev"; \ - test "$$subdir" = "." && dot_seen=yes; \ - done; \ - test "$$dot_seen" = "no" && rev=". $$rev"; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done - -tags: TAGS - -ID: $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS)'; \ - unique=`for i in $$list; do echo $$i; done | \ - awk ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - here=`pwd` && cd $(srcdir) \ - && mkid -f$$here/ID $$unique $(LISP) - -TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS)'; \ - unique=`for i in $$list; do echo $$i; done | \ - awk ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ - || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS) - -mostlyclean-tags: - -clean-tags: - -distclean-tags: - -rm -f TAGS ID - -maintainer-clean-tags: - -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - -rm -rf $(distdir) - GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz - mkdir $(distdir)/=build - mkdir $(distdir)/=inst - dc_install_base=`cd $(distdir)/=inst && pwd`; \ - cd $(distdir)/=build \ - && ../configure --srcdir=.. --prefix=$$dc_install_base \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) dist - -rm -rf $(distdir) - @banner="$(distdir).tar.gz is ready for distribution"; \ - dashes=`echo "$$banner" | sed s/./=/g`; \ - echo "$$dashes"; \ - echo "$$banner"; \ - echo "$$dashes" -dist: distdir - -chmod -R a+r $(distdir) - GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) - -rm -rf $(distdir) -dist-all: distdir - -chmod -R a+r $(distdir) - GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) - -rm -rf $(distdir) -distdir: $(DISTFILES) - -rm -rf $(distdir) - mkdir $(distdir) - -chmod 777 $(distdir) - here=`cd $(top_builddir) && pwd`; \ - top_distdir=`cd $(distdir) && pwd`; \ - distdir=`cd $(distdir) && pwd`; \ - cd $(top_srcdir) \ - && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Makefile - @for file in $(DISTFILES); do \ - d=$(srcdir); \ - if test -d $$d/$$file; then \ - cp -pr $$d/$$file $(distdir)/$$file; \ - else \ - test -f $(distdir)/$$file \ - || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ - || cp -p $$d/$$file $(distdir)/$$file || :; \ - fi; \ - done - for subdir in $(SUBDIRS); do \ - if test "$$subdir" = .; then :; else \ - test -d $(distdir)/$$subdir \ - || mkdir $(distdir)/$$subdir \ - || exit 1; \ - chmod 777 $(distdir)/$$subdir; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ - || exit 1; \ - fi; \ - done -info-am: -info: info-recursive -dvi-am: -dvi: dvi-recursive -check-am: all-am -check: check-recursive -installcheck-am: -installcheck: installcheck-recursive -all-recursive-am: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -install-exec-am: -install-exec: install-exec-recursive - -install-data-am: install-pkgconfigDATA -install-data: install-data-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -install: install-recursive -uninstall-am: uninstall-pkgconfigDATA -uninstall: uninstall-recursive -all-am: Makefile $(DATA) config.h -all-redirect: all-recursive-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install -installdirs: installdirs-recursive -installdirs-am: - $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir) - - -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -rm -f Makefile $(CONFIG_CLEAN_FILES) - -rm -f config.cache config.log stamp-h stamp-h[0-9]* - -maintainer-clean-generic: -mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic - -mostlyclean: mostlyclean-recursive - -clean-am: clean-hdr clean-tags clean-generic mostlyclean-am - -clean: clean-recursive - -distclean-am: distclean-hdr distclean-tags distclean-generic clean-am - -rm -f libtool - -distclean: distclean-recursive - -rm -f config.status - -maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \ - maintainer-clean-generic distclean-am - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - -maintainer-clean: maintainer-clean-recursive - -rm -f config.status - -.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ -uninstall-pkgconfigDATA install-pkgconfigDATA install-data-recursive \ -uninstall-data-recursive install-exec-recursive \ -uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ -all-recursive check-recursive installcheck-recursive info-recursive \ -dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ -maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ -distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ -dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \ -install-exec-am install-exec install-data-am install-data install-am \ -install uninstall-am uninstall all-redirect all-am all installdirs-am \ -installdirs mostlyclean-generic distclean-generic clean-generic \ -maintainer-clean-generic clean mostlyclean distclean maintainer-clean - - -backup: - cd ..; tar cvfz @PACKAGE@-@VERSION@-`date|tr ' ' '_'|tr ':' '_'`.tar.gz @PACKAGE@ - -cleanbak: - -rm -f `find . -name "*~"` - -lc: - @( \ - CFILES=`find . -name "*.c"`; \ - HFILES=`find . -name "*.h"`; \ - CCFILES=`find . -name "*.cc"`; \ - HHFILES=`find . -name "*.hh"`; \ - ICCFILES=`find . -name "*.icc"`; \ - wc -l $$CFILES $$HFILES $$CCFILES $$HHFILES $$ICCFILES | tail -n 1 \ - ) - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/helm/DEVEL/mathml_editor/NEWS b/helm/DEVEL/mathml_editor/NEWS deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/DEVEL/mathml_editor/PATTERNS b/helm/DEVEL/mathml_editor/PATTERNS deleted file mode 100644 index 0e5814d82..000000000 --- a/helm/DEVEL/mathml_editor/PATTERNS +++ /dev/null @@ -1,196 +0,0 @@ - -identifier # - - insert(#) - -number # - - insert(#) - -\sqrt - - replace($, $) - -\root - - replace($, $) - -\of - - when (isa($.parent, "mrow") && isa($.parent.parent, "mroot")) - let mroot = $.parent.parent - if ($.prev and !$.prev.prev and !$.next) replace($.parent, $.prev) - replace(mroot.child[0], $) - -\underline - - insert([$, _]) - -\overline - - insert([$, ]) - -\cases - - replace($, {$) - -\matrix - - replace($, $) - -\over - - if isa($.parent, "mrow") - replace($.parent, [$.parent, $]) - - -_ if isa($.parent, "mrow") - if eq($.prev, null) - replace($, new(mmultiscripts, [ new mrow, $, new none ])) - elseif (isa($.prev, msub)) - let base = $.prev.children[0] - let script = $.prev.children[1] - replace($.rev, new(mmultiscripts, [ base, script, new none, $, new none ])) - elseif (isa($.prev, msup)) - let base = $.prev.children[0] - let script = $.prev.children[1] - replace($.prev, new(msubsup, [ base, $, script ])) - elseif (isa($.prev, msubsup)) - let base = $.prev.children[0] - let subscript = $.prev.children[1] - let superscript = $.prev.children[2] - replace($.prev, new(mmultiscripts, [ base, subscript, superscript, $, new none ])) - elseif isa($.prev, mmultiscripts) - if ($.prev.children[$.prev.children.size - 2] = null) - replace($.prev.children[$.prev.children.size - 2], $) - else - $.prev.children.append([$, new none]) - else - replace($.prev, new(msub, [ $.prev, $ ])) - else if isa($.parent, msub) and $.parent.children[1] = $ - let base = $.parent.children[0] - replace($.parent, new(munder, [ base, $ ])) - - -_, \sb (subscript) - - if parent.isa(mrow) - if cursor is first child then - sub = new mmultiscripts - parent.replace(cursor, sub); - sub.set_base(new mrow); - sub.set_subscript(cursor); - else - elem = element prior to cursor in parent - if elem.isa(msub) || elem.isa(msup) || elem.isa(mmultiscripts) then - append script to multiscript and/or replace single script with - multiscript - else if elem.isa(munder) || elem.isa(mover) || elem.isa(munderover) then - creates another munder - else - parent.replace(elem, sub); - sub.set_base(elem); - sub.set_subscript(cursor); - else if (parent.isa(msub) and cursor is subscript) or - change msub into a munder - cursor in same position - else - replace cursor with msub with empty base - -^, \sp (superscript) - - symmetric to subscript - -', \prime (prime) - - similar to superscript, but multiple prime superscripts should go - together in the same operator - -{ (group open) - - replace cursor with mrow, put cursor inside mrow - if cursor is inside a table, create a new table row and a new table cell - and put the cursor inside the cell - -} (group close) - - remove cursor from mrow - mrow.parent.advance(cursor, mrow) - if cursor inside a table cell then close table - -\over,\atop,\above (fraction) - - if cursor.parent.isa(mrow) then - frac = new mfrac - cursor.parent.parent.replace(mrow, frac) - numerator is current content of cursor.parent except for the cursor - itself. - set denominator to cursor - else - -\choose - - similar to fractions, but with stretchable parentheses around - -\sqrt - - parent.replace(cursor, new msqrt) - set new msqrt.base to cursor - -\root - - parent.replace(cursor, new mroot) - set empty base element - set root index to cursor - -\of - - check if cursor.parent is mroot (or mrow inside mroot index) - or and cursor is in index position. move the cursor to the base element - -\underline - - create munder element with stretchable horizontal line as underscript - substitute cursor with munder - move the cursor in the base element - -\overline - - symmetric - -accents (\hat) - - create an mover with accent=true and the operator has stretchy=false - -wide accents (\widehat) - - as accents, but mover has accent=false and the operator has stretchy=true - -\scriptstyle, ... - - create an appropriate mstyle, the cursor moves in. However, when the - subformula ends one has to skip the mstyle - -\cases - - create mrow with stretchable brace and emtpy table, put cursor inside - table - -\matrix - - create empty table, cursor inside table - -& - - check that cursor is inside a table cell - create a new cell next to it - -\cr - - check that cursor is inside a table cell inside a table row - create a new row - -\phantom - - create a mphantom element, cursor inside - diff --git a/helm/DEVEL/mathml_editor/README b/helm/DEVEL/mathml_editor/README deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/DEVEL/mathml_editor/TML.dtd b/helm/DEVEL/mathml_editor/TML.dtd deleted file mode 100644 index 74760bb45..000000000 --- a/helm/DEVEL/mathml_editor/TML.dtd +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/DEVEL/mathml_editor/TODO b/helm/DEVEL/mathml_editor/TODO deleted file mode 100644 index 701ec4673..000000000 --- a/helm/DEVEL/mathml_editor/TODO +++ /dev/null @@ -1,13 +0,0 @@ - -* add param node in the TML with the name of the parameter -* add space node? active node? -* add alt boolean to all deleting methods -* implement a mechanism that allows the definition of new macros -* add open-group close-group attributes in the dictionary and handle them -* implement macro completion - -BUGS -* $1\over{2}$ does not work - -* compare pure_subst/pure_diff/subst_diff performances - diff --git a/helm/DEVEL/mathml_editor/configure.ac b/helm/DEVEL/mathml_editor/configure.ac deleted file mode 100644 index e1972fd90..000000000 --- a/helm/DEVEL/mathml_editor/configure.ac +++ /dev/null @@ -1,187 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT(editex, [0.0.5]) -AC_CONFIG_SRCDIR(src/TToken.hh) -AM_INIT_AUTOMAKE($AC_PACKAGE_NAME, $AC_PACKAGE_VERSION) - -PACKAGE=$PACKAGE_NAME -VERSION=$PACKAGE_VERSION -AC_SUBST(PACKAGE) -AC_SUBST(VERSION) - -EDITEX_VERSION_INFO=`echo $VERSION | awk -F. '{ printf "%d:%d:%d", $1+$2, $3, $2 }'` -AC_SUBST(EDITEX_VERSION_INFO) - -AC_ARG_ENABLE( - profile, - [ --enable-profile[=ARG] include profiling information [default=no]], - profile=$enableval, - profile=no -) - -AC_ARG_ENABLE( - debug, - [ --enable-debug[=ARG] include debugging debug [default=yes]], - enable_debug=$enableval, - enable_debug=yes -) - -if test "x$enable_debug" = "xyes"; then - AC_DEFINE(ENABLE_DEBUG,,[Define to 1 if you want to enable validity checks while running]) -fi - -GMETADOM_PREFIX="" -AC_ARG_WITH(gmetadom-prefix, - [ --with-gmetadom-prefix=[PFX] Specify location of gmetadom], - GMETADOM_PREFIX=$withval -) - -dnl AC_CONFIG_HEADERS([config.h]) -AM_CONFIG_HEADER(config.h) - -AH_TOP([ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2004 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef config_h -#define config_h -]) - -AH_BOTTOM([ -#endif /* config_h */ -]) - -AC_PROG_CC -AC_PROG_CXX -AC_PROG_INSTALL -AC_HEADER_STDC([]) - -AC_LANG_PUSH(C++) -AC_CHECK_HEADERS(hash_map) -AC_CHECK_HEADERS(ext/hash_map) -AC_LANG_POP(C++) - -AC_SUBST(CFLAGS) -AC_SUBST(CPPFLAGS) -AC_SUBST(LDFLAGS) - -AM_PROG_LIBTOOL - -dnl PKG_CHECK_MODULES(GLIB2, glib-2.0) -dnl AC_SUBST(GLIB2_CFLAGS) -dnl AC_SUBST(GLIB2_LIBS) - -PKG_CHECK_MODULES(GMETADOM,gdome2-cpp-smart) -AC_SUBST(GMETADOM_CFLAGS) -AC_SUBST(GMETADOM_LIBS) - -PKG_CHECK_MODULES(GDOMEXSLT,gdome2-xslt-cpp-smart) -AC_SUBST(GDOMEXSLT_CFLAGS) -AC_SUBST(GDOMEXSLT_LIBS) - -PKG_CHECK_MODULES(GTKMATHVIEW,gtkmathview-gmetadom) -AC_SUBST(GTKMATHVIEW_CFLAGS) -AC_SUBST(GTKMATHVIEW_LIBS) - -AC_CHECK_PROG(HAVE_OCAMLC, ocamlc, yes, no) -if test $HAVE_OCAMLC = "no"; then - AC_MSG_ERROR([could not find ocamlc in PATH, please make sure ocaml is installed]) -else - OCAMLC=ocamlc - OCAMLSTDLIBDIR="`ocamlc -where`" - OCAMLSTUBDIR="`ocamlc -where`/stublibs" - AC_SUBST(OCAMLC) - AC_SUBST(OCAMLSTDLIBDIR) - AC_SUBST(OCAMLSTUBDIR) -fi - -AC_CHECK_PROG(HAVE_OCAMLOPT, ocamlopt, yes, no) -if test $HAVE_OCAMLOPT = "no"; then - AC_MSG_WARN([ocaml native libraries won't be compiled since ocamlopt was not found]) -else - OCAMLOPT=ocamlopt - AC_SUBST(OCAMLOPT) -fi -AM_CONDITIONAL(HAVE_OCAMLOPT_COND, test x$HAVE_OCAMLOPT = xyes) - -AC_CHECK_PROG(HAVE_OCAMLFIND, ocamlfind, yes, no) -if test $HAVE_OCAMLFIND = "no"; then - AC_MSG_ERROR([could not find ocamlfind in PATH, please make sure findlib is installed]) -else - OCAMLFIND=ocamlfind - AC_SUBST(OCAMLFIND) -fi - -AC_CHECK_PROG(HAVE_OCAMLDEP, ocamldep, yes, no) -if test $HAVE_OCAMLDEP = "yes"; then - OCAMLDEP=ocamldep - AC_SUBST(OCAMLDEP) -fi - -AC_CHECK_PROG(HAVE_OCAMLMKLIB, ocamlmklib, yes, no) -if test $HAVE_OCAMLMKLIB = "no"; then - AC_MSG_ERROR([could not find ocamlmklib in PATH, please make sure ocamlmklib is installed]) -else - OCAMLMKLIB=ocamlmklib - AC_SUBST(OCAMLMKLIB) -fi -AM_CONDITIONAL(HAVE_SHAREDLIBS_COND, test x$enable_shared = xyes) - -AC_MSG_CHECKING(for gdome2 ocaml binding) -ocamlfind query gdome2 || - AC_MSG_ERROR(gdome2 not installed (according to findlib)) -MLGDOME_CFLAGS="`$OCAMLFIND query -i-format gdome2`" -AC_SUBST(MLGDOME_CFLAGS) - -AC_MSG_CHECKING(for the ocaml library dir) -OCAML_LIB_DIR=`ocamlc -where` -AC_MSG_RESULT($OCAML_LIB_DIR) - -AC_CHECK_FILE(/usr/include/caml/mlvalues.h, - OCAML_INCLUDE_DIR=/usr/include/caml, - OCAML_INCLUDE_DIR=$OCAML_LIB_DIR/caml -) - -AC_SUBST(OCAML_INCLUDE_DIR) - -if test $profile = yes; then - CFLAFS="$CFLAGS -O0 -pg" - CXXFLAGS="$CXXFLAGS -O0 -pg" - AC_DEFINE(ENABLE_PROFILE,,[Define to 1 to let the widget collect some information for profiling purposes]) -fi - -AC_CONFIG_FILES([ - Makefile - src/Makefile - src/config.dirs - test/Makefile - textomml/Makefile - textomml/config.dirs - ocaml/Makefile - ocaml/META - editex.pc - xsl/Makefile - dict/Makefile -]) -AC_OUTPUT diff --git a/helm/DEVEL/mathml_editor/debian/changelog b/helm/DEVEL/mathml_editor/debian/changelog deleted file mode 100644 index 5af2b5f80..000000000 --- a/helm/DEVEL/mathml_editor/debian/changelog +++ /dev/null @@ -1,114 +0,0 @@ -editex (0.0.5-6) unstable; urgency=low - - * Rebuilt against ocaml 3.08.3 - - -- Stefano Zacchiroli Wed, 30 Mar 2005 09:08:25 +0200 - -editex (0.0.5-5) unstable; urgency=low - - * debian/control - - libeditex-ocaml depends on ocaml-base-nox-3.08 instead of - ocaml-base-3.08 since the ocaml part of this package does not - depend directly on ocaml X stuff - - -- Stefano Zacchiroli Wed, 25 Aug 2004 09:49:21 +0200 - -editex (0.0.5-4) unstable; urgency=low - - * ported to gtkmathview 0.6.3 - * debian/control - - bumped gtkmathview deps to >= 0.6.3 - - -- Stefano Zacchiroli Mon, 2 Aug 2004 11:24:00 +0200 - -editex (0.0.5-3) unstable; urgency=low - - * rebuilt with ocaml 3.08 - * debian/control - - bumped ocaml deps to 3.08 - - bumped standards-version to 3.6.1.1 - - changed ocaml deps to ocaml-nox - - bumped gmetadom (ocaml part) deps to >= 0.2.1-3 (1st version - rebuilt with ocaml 3.08) - - bumped gdome xslt (ocaml part) deps to >= 0.0.6-4 (1st version - rebuilt with ocaml 3.08) - - bumped gdome xslt (C/C++ part) deps to >= 0.0.6-5 (1st version - which fixes missing-.so bug) - - -- Stefano Zacchiroli Tue, 27 Jul 2004 09:11:35 +0200 - -editex (0.0.5-2) unstable; urgency=low - - * ocaml/Makefile.am - - the .o files to be used in the dll are now taken from the .libs - subdirectoy (which presumably contains the PIC code) - (Closes: Bug#239697) - - -- Stefano Zacchiroli Thu, 25 Mar 2004 12:43:39 +0100 - -editex (0.0.5-1) unstable; urgency=low - - * New upstream release - * debian/control - - depends on libt1-dev instead of t1lib-dev - - bumped t1 dependencies to >= 5.0.0 accordingly to gtkmathview - - -- Stefano Zacchiroli Tue, 23 Mar 2004 15:38:28 +0100 - -editex (0.0.4-3) unstable; urgency=low - - * debian/control - - depends on gtkmathview 0.5.2 (Closes: Bug#218409) - - bumped standards version - - -- Stefano Zacchiroli Wed, 12 Nov 2003 17:16:56 +0100 - -editex (0.0.4-2) unstable; urgency=low - - * Use .o objects from .libs directory so that they are PIC - (should fix build failure on hppa) - - -- Stefano Zacchiroli Tue, 21 Oct 2003 14:53:01 +0200 - -editex (0.0.4-1) unstable; urgency=low - - * New upstream release - * Rebuilt with ocaml 3.07, gmetadom 0.2.1, gtkmathview 0.5.1, - gdome-2xslt 0.0.6, lablgtk 1.2.6 - * Use debian/compat instead of DH_COMPAT - - -- Stefano Zacchiroli Fri, 10 Oct 2003 09:57:02 +0200 - -editex (0.0.3-2) unstable; urgency=low - - * Signed by me - * debian/control - - added ${misc:Depends} - - bumped standards-version to 3.5.10 - - bumped dependencies on gmetadom to 0.1.9 - - changed section of -dev package to libdevel - - -- Stefano Zacchiroli Wed, 25 Jun 2003 18:26:11 +0200 - -editex (0.0.3-1) unstable; urgency=low - - * New upstream release. - * Bug fix: tml-litex.xsl was not installed - * Bug fix: Makefile.ac did not use pkg-config to look for the existence - of the required packages (that, in the meantime, started using pkg-config) - As a result, the required packages were no longer detected by ./configure - - -- Claudio Sacerdoti Coen Thu, 19 Jun 2003 12:58:21 +0200 - -editex (0.0.2-1) unstable; urgency=low - - * New upstream release. - - -- Claudio Sacerdoti Coen Thu, 19 Jun 2003 12:58:21 +0200 - -editex (0.0.1-1) unstable; urgency=low - - * Initial Release. - - -- Stefano Zacchiroli Wed, 02 Apr 2003 15:53:25 +0200 - diff --git a/helm/DEVEL/mathml_editor/debian/compat b/helm/DEVEL/mathml_editor/debian/compat deleted file mode 100644 index b8626c4cf..000000000 --- a/helm/DEVEL/mathml_editor/debian/compat +++ /dev/null @@ -1 +0,0 @@ -4 diff --git a/helm/DEVEL/mathml_editor/debian/control b/helm/DEVEL/mathml_editor/debian/control deleted file mode 100644 index c87009e09..000000000 --- a/helm/DEVEL/mathml_editor/debian/control +++ /dev/null @@ -1,46 +0,0 @@ -Source: editex -Priority: optional -Maintainer: Stefano Zacchiroli -Build-Depends: debhelper (>> 4.0.0), ocaml-nox-3.08.3, libgdome2-cpp-smart-dev (>= 0.2.1), libgdome2-ocaml-dev (>= 0.2.1-3), libgdome2-xslt-dev (>= 0.0.6-5), libgdome2-xslt-ocaml-dev (>= 0.0.6-4), ocaml-findlib, libgtkmathview-dev (>= 0.6.3), libgtk2.0-dev, libt1-dev (>= 5.0.0) -Standards-Version: 3.6.1.1 - -Package: libeditex0 -Section: libs -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: MathML editor based on TeX syntax - EdiTeX is a C library implementing a MathML editor based on TeX syntax. - . - This package includes the shared runtime objects. - -Package: libeditex-dev -Section: libdevel -Architecture: any -Depends: libeditex0 (= ${Source-Version}), libgdome2-cpp-smart-dev (>= 0.2.1), libgdome2-xslt-dev (>= 0.0.6-5), libgtk2.0-dev, libt1-dev (>= 5.0.0), ${misc:Depends} -Description: MathML editor based on TeX syntax - EdiTeX is a C library implementing a MathML editor based on TeX syntax. - . - This package includes the development files. - -Package: libeditex-ocaml -Section: libs -Architecture: any -Depends: ocaml-base-nox-3.08.3, libgdome2-ocaml (>= 0.2.1-3), libgdome2-xslt-ocaml (>= 0.0.6-4), ${shlibs:Depends}, ${misc:Depends} -Description: OCaml bindings to EdiTeX, a MathML editor based on TeX syntax - EdiTeX is a C library implementing a MathML editor based on TeX syntax. - . - This are the Objective CAML bindings to EdiTeX. - . - This package includes the OCaml shared runtime objects. - -Package: libeditex-ocaml-dev -Section: libdevel -Architecture: any -Depends: libeditex-ocaml (= ${Source-Version}), libgdome2-ocaml-dev (>= 0.2.1-3), libgdome2-xslt-ocaml-dev (>= 0.0.6-4), ocaml-findlib, ${misc:Depends} -Description: OCaml bindings to EdiTeX, a MathML editor based on TeX syntax - EdiTeX is a C library implementing a MathML editor based on TeX syntax. - . - This are the Objective CAML bindings to EdiTeX. - . - This package includes the OCaml development files. - diff --git a/helm/DEVEL/mathml_editor/debian/copyright b/helm/DEVEL/mathml_editor/debian/copyright deleted file mode 100644 index 310cde409..000000000 --- a/helm/DEVEL/mathml_editor/debian/copyright +++ /dev/null @@ -1,23 +0,0 @@ -This package was debianized by Stefano Zacchiroli on -Thu, 20 Mar 2003 18:09:22 +0100. - -It was downloaded from: - - http://www.cs.unibo.it/cgi-bin/cvsweb/helm/DEVEL/mathml_editor/ - -Upstream Authors: - Luca Padovani - Paolo Marinelli - -Copyright: - - This library is distributed under the term of the GNU Lesser General - Public License (LGPL). - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - On a Debian GNU/Linux system, the LGPL can be found as - /usr/share/common-licenses/LGPL-2.1. diff --git a/helm/DEVEL/mathml_editor/debian/docs b/helm/DEVEL/mathml_editor/debian/docs deleted file mode 100644 index 4a84a8c2c..000000000 --- a/helm/DEVEL/mathml_editor/debian/docs +++ /dev/null @@ -1,7 +0,0 @@ -BUGS -BUGS-GDOME2 -MODES -NEWS -PATTERNS -README -TODO diff --git a/helm/DEVEL/mathml_editor/debian/libeditex-dev.files b/helm/DEVEL/mathml_editor/debian/libeditex-dev.files deleted file mode 100644 index 1d5afcf6e..000000000 --- a/helm/DEVEL/mathml_editor/debian/libeditex-dev.files +++ /dev/null @@ -1,5 +0,0 @@ -usr/lib/pkgconfig -usr/include -usr/lib/*.a -usr/lib/*.la -usr/lib/*.so diff --git a/helm/DEVEL/mathml_editor/debian/libeditex-ocaml-dev.files b/helm/DEVEL/mathml_editor/debian/libeditex-ocaml-dev.files deleted file mode 100644 index 98d36d2a3..000000000 --- a/helm/DEVEL/mathml_editor/debian/libeditex-ocaml-dev.files +++ /dev/null @@ -1,3 +0,0 @@ -usr/lib/ocaml/3.08.3/mathml-editor -usr/lib/ocaml/3.08.3/stublibs/lib*.so -usr/lib/ocaml/3.08.3/stublibs/dll*.so.owner diff --git a/helm/DEVEL/mathml_editor/debian/libeditex-ocaml.files b/helm/DEVEL/mathml_editor/debian/libeditex-ocaml.files deleted file mode 100644 index f4d1a9de0..000000000 --- a/helm/DEVEL/mathml_editor/debian/libeditex-ocaml.files +++ /dev/null @@ -1 +0,0 @@ -usr/lib/ocaml/3.08.3/stublibs/dll*.so diff --git a/helm/DEVEL/mathml_editor/debian/libeditex0.files b/helm/DEVEL/mathml_editor/debian/libeditex0.files deleted file mode 100644 index 213e11b2f..000000000 --- a/helm/DEVEL/mathml_editor/debian/libeditex0.files +++ /dev/null @@ -1,2 +0,0 @@ -usr/lib/*.so.* -usr/share diff --git a/helm/DEVEL/mathml_editor/debian/rules b/helm/DEVEL/mathml_editor/debian/rules deleted file mode 100755 index 933fd24d2..000000000 --- a/helm/DEVEL/mathml_editor/debian/rules +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/make -f - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -# These are used for cross-compiling and for saving the configure script -# from having to guess our platform (since we know it already) -DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) -DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) - -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) - CFLAGS += -O0 -else - CFLAGS += -O2 -endif -ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) - INSTALL_PROGRAM += -s -endif - -config.status: configure - dh_testdir - ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info - -build: build-stamp -build-stamp: config.status - dh_testdir - - $(MAKE) - - touch build-stamp - -clean: - dh_testdir - dh_testroot - rm -f build-stamp - - -$(MAKE) distclean -# ifneq "$(wildcard /usr/share/misc/config.sub)" "" -# cp -f /usr/share/misc/config.sub config.sub -# endif -# ifneq "$(wildcard /usr/share/misc/config.guess)" "" -# cp -f /usr/share/misc/config.guess config.guess -# endif - - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp - dh_movefiles - -binary-arch: build install - dh_testdir -s - dh_testroot -s - dh_installchangelogs -s ChangeLog - dh_installdocs -s -# dh_installexamples -s -# dh_installinfo -s - dh_link -s - dh_strip -s - dh_compress -s - dh_fixperms -s - dh_makeshlibs -p libeditex0 - dh_installdeb -s - dh_shlibdeps -s - dh_gencontrol -s - dh_md5sums -s - dh_builddeb -s - -binary: binary-arch -.PHONY: build clean binary-arch binary install diff --git a/helm/DEVEL/mathml_editor/dict/.cvsignore b/helm/DEVEL/mathml_editor/dict/.cvsignore deleted file mode 100644 index 282522db0..000000000 --- a/helm/DEVEL/mathml_editor/dict/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/helm/DEVEL/mathml_editor/dict/Makefile.am b/helm/DEVEL/mathml_editor/dict/Makefile.am deleted file mode 100644 index f4246e40c..000000000 --- a/helm/DEVEL/mathml_editor/dict/Makefile.am +++ /dev/null @@ -1,2 +0,0 @@ -pkgdata_DATA = dictionary-basic.xml dictionary-test.xml dictionary-tex.xml dictionary.dtd -EXTRA_DIST = dictionary-basic.xml dictionary-test.xml dictionary-tex.xml dictionary.dtd diff --git a/helm/DEVEL/mathml_editor/dict/dictionary-basic.xml b/helm/DEVEL/mathml_editor/dict/dictionary-basic.xml deleted file mode 100644 index ed2e26461..000000000 --- a/helm/DEVEL/mathml_editor/dict/dictionary-basic.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/helm/DEVEL/mathml_editor/dict/dictionary-test.xml b/helm/DEVEL/mathml_editor/dict/dictionary-test.xml deleted file mode 100644 index 3fcc05694..000000000 --- a/helm/DEVEL/mathml_editor/dict/dictionary-test.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/helm/DEVEL/mathml_editor/dict/dictionary-tex.xml b/helm/DEVEL/mathml_editor/dict/dictionary-tex.xml deleted file mode 100644 index 47995454f..000000000 --- a/helm/DEVEL/mathml_editor/dict/dictionary-tex.xml +++ /dev/null @@ -1,378 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/DEVEL/mathml_editor/dict/dictionary.dtd b/helm/DEVEL/mathml_editor/dict/dictionary.dtd deleted file mode 100644 index 3fefc71fe..000000000 --- a/helm/DEVEL/mathml_editor/dict/dictionary.dtd +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - diff --git a/helm/DEVEL/mathml_editor/doc/.cvsignore b/helm/DEVEL/mathml_editor/doc/.cvsignore deleted file mode 100644 index 44d749510..000000000 --- a/helm/DEVEL/mathml_editor/doc/.cvsignore +++ /dev/null @@ -1,5 +0,0 @@ -spec.aux -spec.dvi -spec.log -spec.ps -*~ diff --git a/helm/DEVEL/mathml_editor/doc/spec.tex b/helm/DEVEL/mathml_editor/doc/spec.tex deleted file mode 100644 index a9ccdc263..000000000 --- a/helm/DEVEL/mathml_editor/doc/spec.tex +++ /dev/null @@ -1,973 +0,0 @@ -\documentclass[10pt]{article} - -\usepackage{a4wide} -\usepackage{palatino} -\usepackage{euler} -\usepackage{amssymb} -\usepackage{stmaryrd} -\usepackage{wasysym} - -\title{\EdiTeX: a MathML Editor Based on \TeX{} Syntax\\\small Description and Formal Specification} -\author{Paolo Marinelli\\Luca Padovani\\\small\{{\tt pmarinel},{\tt lpadovan}\}{\tt @cs.unibo.it}\\\small Department of Computer Science\\\small University of Bologna} -\date{} - -\newcommand{\EdiTeX}{Edi\TeX} - -\newcommand{\tmap}[1]{\llbracket#1\rrbracket} -\newcommand{\tadvance}{\vartriangle} -\newcommand{\tnext}{\rhd} -\newcommand{\G}{\texttt{g}} -\newcommand{\PNODE}{\texttt{p}} -\newcommand{\SNODE}{\texttt{s}} -\newcommand{\INODE}{\texttt{i}} -\newcommand{\NNODE}{\texttt{n}} -\newcommand{\ONODE}{\texttt{o}} -\newcommand{\CNODE}{\texttt{c}} -\newcommand{\TABLE}{\texttt{table}} -\newcommand{\SP}{\texttt{sp}} -\newcommand{\SB}{\texttt{sb}} -\newcommand{\CELL}{\texttt{cell}} -\newcommand{\ROW}{\texttt{row}} -\newcommand{\SLDROP}{\blacktriangleleft} -\newcommand{\NLDROP}{\vartriangleleft} -\newcommand{\RDROP}{\vartriangleright} - -\begin{document} - -\maketitle - -\section{Introduction} - -MathML~\cite{MathML1,MathML2,MathML2E} is an XML application for the -representation of mathematical expressions. As most XML applications, -MathML is unsuitable to be hand-written, except for the simplest -cases, because of its verbosity. In fact, the MathML specification -explicitly states that -\begin{quote} -``While MathML is human-readable, it is anticipated that, in all but -the simplest cases, authors will use equation editors, conversion -programs, and other specialized software tools to generate MathML'' -\end{quote} - -The statement about human readability of MathML is already too strong, -as the large number of mathematical symbols, operators, and -diacritical marks that are used in mathematical notation cause MathML -documents to make extensive use of Unicode characters that typically -are not in the ``visible'' range of common text editors. Such -characters may appear as entity references, whose name indicates -somehow the kind of symbol used, or character references or they are -directly encoded in the document encoding scheme (for instance, -UTF-8). - -It is thus obvious that authoring MathML documents assumes the -assistance of dedicated tools. As of today, such tools can be -classified into two main categories: -\begin{enumerate} - \item WYSIWYG (What You See Is What You Get) editors that allow the - author to see the formatted document on the screen as it is - composed; - \item conversion tools that generate MathML markup from different - sources, typically other markup languages for scientific - documents, such as \TeX. -\end{enumerate} - -While the former tools are certainly more appealing, especially to the -unexperienced user, as they give a direct visual feedback, the -existance of tools in the second category takes into account the large -availability of existing documents in \TeX{} format, and also the fact -that experienced or ``lazy'' users may continue to prefer the use of a -markup language other than MathML for editing, and generate MathML -only as a final step of the authoring process. The ``laziness'' is not -really intended as a way of being reluctant towards a new technology, -but rather as a justified convincement that WYSIWYG editors are ``nice -to look at'' but after all they may slow down the authoring process. -WYSIWYG editors often involve the use of menus, palettes of symbols, -and, in general, an extensive use of the pointing device (the mouse) -for completing most operations. The use of shortcuts is of little -help, as it implies very soon a challenging exercise for the fingers -and the mind. Moreover, authors \emph{cannot improve} their authoring -speed with time. On the other side, the gap between the syntax of any -markup language for mathematics and mathematical notation may be -relevant, especially for large, non-trivial formulas and authoring is -a re-iterated process in which the author repeadtedly types the markup -in the editor, compiles, and looks at the result inside a pre-viewer. - -\EdiTeX{} tries to synthesize the ``best of both worlds'' in a single -tool. The basic idea is that of creating a WYSIWYG editor in which -editing is achieved by typing \TeX{} markup as the author would do in -a text editor. The \TeX{} markup is tokenized and parsed on-the-fly -and a corresponding MathML representation is created and -displayed. This way, the author can see the rendered document as it -changes. The advantages of this approach can be summarized as follows: -\begin{itemize} - \item the document is rendered concurrently with the editing, the - user has an immediate feedback hence it is easier to spot errors; - \item the author types in a concrete (and likely familiar) syntax - improving the editing speed; - \item the usual WYSIWYG mechanisms are still available. In - particular, it is possible to select \emph{visually} a fragment of - the document that needs re-editing, or that was left behind for - subsequent editing. -\end{itemize} - -\paragraph{The Name of the Game:} there is no reference to MathML in -the name ``\EdiTeX.'' In fact, the architecture of the editor is not -tied to MathML markup. Although we focus on MathML editing, by -changing a completely modularized component of the editor it is -virtually possible to generate any other markup language. - -\paragraph{Acknowledgments.} Stephen M. Watt and Igor Rodionov for -their work on the \TeX{} to MathML conversion tool; Stan Devitt for an -illuminating discussion about the architecture of \TeX{} to XML -conversion tools; Claudio Sacerdoti Coen for the valuable feedback and -uncountable bug reports. - -\section{Architecture} - -\section{Customization} - -\subsection{Short and Long Identifiers} - -\subsection{The Dictionary} - -\subsection{Stylesheets and Trasformations} - -\subsection{Rendering} - -\section{XML Representation of \TeX{} Markup} - -\section{Tokens} - -The following tokens are defined: - -\begin{tabular}{lllp{0.5\textwidth}} - \textbf{\TeX{}} & \textbf{Notation} & \textbf{Node} & \textbf{Description} \\ -\hline - \verb+{+ & $\mathrm{begin}$ & \texttt{g} & Beginning of a group \\ - \verb+}+ & $\mathrm{end}$ & & End of a group \\ - \verb+$+ & $\$$ & \texttt{math} & Math shift \\ %$ \\ - & & & End-of-line \\ - \verb+#+$i$ & $p(i)$ & \texttt{p} & Parameter \\ - \verb+^+ & $\uparrow$ & \texttt{sp} & Superscript \\ - \verb+_+ & $\downarrow$ & \texttt{sb} & Subscript \\ - & $\square$ & & Space-like character that can be ignored \\ - & $s$ & \texttt{s} & Space-like character that may be significant \\ - letter & $i(v)$ & \texttt{i} & Identifier $v$ \\ - digit & $n(v)$ & \texttt{n} & Number $v$ \\ - other & $o(v)$ & \texttt{o} & Other character or operator $v$ \\ - \verb+~+ & $\sim$ & & Active character \\ - \verb+%+ & $\%$ & & Comment \\ - control & $c(v)\langle\alpha_1,\dots,\alpha_n\rangle$ & \texttt{c} & - Control sequence $v$ that expects the $\alpha_1,\dots,\alpha_n$ sequence of tokens. \\ - backspace & $\vartriangleleft$ & & \\ - backspace & $\blacktriangleleft$ & & \\ -\end{tabular} - -%% Some tokens are mapped directly into nodes of the TML tree. The following functions shows -%% the mapping: - -\begin{tabular}{r@{\quad$=$\quad}l} - $\tmap{\{}$ & \verb+g+ \\ - $\tmap{p(i)}$ & \verb+p[@index=+$i$\verb+]+ \\ - $\tmap{p_l(i)}$ & \verb+p[@index=+$i$\verb+][@left-open='1']+ \\ - $\tmap{p_r(i)}$ & \verb+p[@index=+$i$\verb+][@right-open='1']+ \\ - $\tmap{s}$ & \verb+s+ \\ - $\tmap{\uparrow}$ & \verb+sp+ \\ - $\tmap{\downarrow}$ & \verb+sb+ \\ - $\tmap{i(v)}$ & \verb+i[@value=+$v$\verb+]+ \\ - $\tmap{n(v)}$ & \verb+n[@value=+$v$\verb+]+ \\ - $\tmap{o(v)}$ & \verb+o[@value=+$v$\verb+]+ \\ - $\tmap{c(v)\langle\alpha_1,\dots,\alpha_n\rangle}$ & \verb+c[@name=+$v$\verb+][^+$\tmap{\alpha_1}\cdots\tmap{\alpha_n}$\verb+$]+\\ -\end{tabular} -%$ - -\section{Description and Semantics of the Pattern Language} - -%% \begin{eqnarray*} -%% \mathit{NodeTest} & ::= & \mathtt{*} \\ -%% & | & \mathit{ElementType} \\ -%% & | & \mathtt{<}~\mathit{ElementTypePattern}~\mathtt{>} \\[1ex] -%% \mathit{ElementTypePattern} & ::= & \mathtt{*} \\ -%% & | & \mathit{ElementType}~(\mathtt{|}~\mathit{ElementType})^* \\ -%% & | & \mathtt{!}\mathit{ElementType}~(\mathtt{|}~\mathit{ElementType})^*\\[1ex] -%% \mathit{NodePattern} & ::= & \mathit{NodeTest}~\mathit{AttributeQualifier}^*\\[1ex] -%% \mathit{AttributeQualifier} & ::= & \mathtt{[@}\mathit{AttributeTest}\mathtt{]}\\ -%% & | & \mathtt{[!@}\mathit{AttributeTest}\mathtt{]}\\[1ex] -%% \mathit{AttributeTest} & ::= & \mathit{AttributeName} \\ -%% & | & \mathit{AttributeName}\mathtt{='}\mathit{Text}\mathtt{'} -%% \end{eqnarray*} - -\begin{table} -\[ -\begin{array}{rcl@{\hspace{3em}}rcl@{\hspace{3em}}rcl} - C &::=& . & Q &::=& \langle*\rangle & P &::=& P'\#P' \\ - &|& .. & &|& \langle!*\rangle & &|& \cent P'\#P'\\ - &|& / & &|& \langle n_1\mid\cdots\mid n_k\rangle & &|& P'\#P'\$\\%$ - &|& Q & &|& \langle!n_1\mid\cdots\mid n_k\rangle & &|& \cent P'\#P'\$\\%$ - &|& (C) & &|& Q[@n] & & &\\ - &|& \{C:\Gamma\} & &|& Q[!@n] & P' &::=& \\ - &|& C\&C & &|& Q[@n=v] & &|& C\;P'\\ - &|& C\mid C & &|& Q[!@n=v] & & &\\ - &|& C+ & &|& Q[P] & & &\\ - &|& C? & &|& Q[!P] & & &\\ - &|& C* & & & & & &\\ - &|& C\;C & & & & & &\\ - &|& !C & & & & & &\\ -\end{array} -\] -\caption{Syntax of the regular context language. $n$, $n_i$ denote -names, $v$ denotes a string enclosed in single or double quotes} -\end{table} - - -\section{Insert Rules} - -\paragraph{Begin Group:} $\{$ - -\begin{description} - \item{\verb+table/cursor+}\\ - create a \texttt{row} node, create a \texttt{cell} node, create a \texttt{g} node, - append the cursor to the \texttt{g} node, append the \texttt{g} node to the \texttt{cell} node, - append the \texttt{cell} node to the \texttt{row} node, append the \texttt{row} node to the - \texttt{c} node - \item{\verb+cursor+} \\ create a \texttt{g} node, replace the cursor with the new \texttt{g} node, - append the cursor to the new \texttt{g} node -\end{description} - -% CASE: c/g[!@id]/cursor - -% CASE: c/cursor - -% ELSE: - -% do_begin: -% CASE: c[@table='1']/cursor -% ELSE: -% create a g node with id, replace the cursor with the fresh g and append -% the cursor as only child of it - -\paragraph{End Group:} $\}$ - -\begin{description} - \item{\verb+g[@id]/cursor+}\\ - remove the cursor, put $\tadvance$ after the \texttt{g} node - \item{\verb+row/cell/g/cursor+}\\ - remove the cursor, put $\tadvance$ after the \texttt{row} node - \item{\verb+math/g[!@id]/cursor+}\\ - ? - \item{\verb+cursor+}\\ - error ? -\end{description} - -\paragraph{Math Shift:} $\$$ - -\begin{description} - \item{\verb+tex/cursor+}\\ - create a \texttt{math} node, create a \texttt{g} node, append the \texttt{g} node - as child of the \texttt{math} node, append the cursor as child of the \texttt{g} node - \item{\verb+math[@display='1']/g[!@id][*#]/cursor+}\\ - append the cursor as last child of the \texttt{math} node - \item{\verb+math/g[!@id][*#]/cursor+}\\ - remove the cursor - \item{\verb+math[!display='1']/g[!@id]/cursor+}\\ - set \verb+display='1'+ in the \texttt{math} node - \item{\verb+math/g[!@id]+}\\ - append the cursor after the \texttt{math} node - \item{\verb+math/cursor+}\\ - remove the cursor - \item{\verb+cursor+} \\ - error ? -\end{description} - -% do_shift: -% CASE: tex/cursor -% create a math node. create a g node. append g as child of math. -% append the cursor as child of g -% CASE: math[@display='1']/g[!@id][*#]/cursor -% append the cursor as last child of math -% CASE: math/g[!@id][*#]/cursor -% remove the cursor. Editing is done -% CASE: math[!display='1']/g[!@id]/cursor -% set the display attribute to '1' -% CASE: math/g[!@id] -% append the cursor after math (?) -% CASE: math/cursor -% remove the cursor. Editing is done -% ELSE: -% error - -\paragraph{Align:} $\&$ - -\begin{description} - \item{\verb+g[@id]/cursor+}\\ - create a \texttt{row} node, create a \texttt{cell} node, create a \texttt{g} node, - append the cursor to the new \texttt{g} node, append the \texttt{cell} node to the - the \texttt{row} node ? - \item{\verb+row/cell/g/cursor+}\\ - create the \texttt{g} node, create the \texttt{cell} node, append the cursor - as child of the new \texttt{g} node, append the new \texttt{g} node to the new - \texttt{cell} node after the old \texttt{cell} node - \item{\verb+cursor+}\\ - error -\end{description} - -% do_align: -% CASE: g[@id]/cursor -% create a row node. create a cell node. create a g node. append the -% cursor to g, append the g to cell, append the cell to row, ??? -% CASE: row/cell/g/cursor -% create a g node. create a cell node. appent the cursor to g, -% append the g to cell, insert the new cell after the existing cell -% ELSE: -% error - -\paragraph{End-of-line:} - -% do_eol: -% ignored - -\paragraph{Parameter:} $p(i)$ -% do_parameter: -% ignored - -\paragraph{Superscript:} $\uparrow$ - -\begin{description} - \item{\verb+[^#]/cursor+}\\ - create a \SP{} node, create a \G{} node, replace the cursor with the \SP{} node, - append the \G{} node as first child of the \SP{} node, append the cursor as last - child of the \SP{} node - \item{\verb+[*#]/cursor+}\\ - create a \SP{} node, replace \texttt{*} with the \SP{} node, append \texttt{*} to - the \SP{} node, append cursor to the \SP{} node - \item{\verb+sp[^*#$][!@over='1']/cursor+}\\ %$ - set \verb+over='1'+ in the \SP{} node - \item{\verb+sp[^*#$][@over='1']/cursor+}\\ %$ - error - \item{\verb+cursor+}\\ - error ? -\end{description} -% do_superscript: -% CASE: g[^#]/cursor -% create sp node. create g node, replace cursor with sp, append g to sp, append cursor to sp -% CASE: g[*#]/cursor -% create sp node, replace * with sp, append * to sp, append cursor to sp -% CASE: sp[^*#$][!@over='1']/cursor -% set over='1' in sp node -% CASE: sp[^*#$][@over='1']/cursor -% error -% ELSE: -% error ? - -\paragraph{Subscript:} $\downarrow$ - -\begin{description} - \item{\verb+[^#]/cursor+}\\ - create a \SB{} node, create a \G{} node, replace the cursor with the \SB{} node, - append the \G{} node as first child of the \SB{} node, append the cursor as last - child of the \SB{} node - \item{\verb+[*#]/cursor+}\\ - create a \SB{} node, replace \texttt{*} with the \SB{} node, append \texttt{*} to - the \SB{} node, append cursor to the \SB{} node - \item{\verb+sb[^*#$][!@under='1']/cursor+}\\ %$ - set \verb+under='1'+ in the \SB{} node - \item{\verb+sb[^*#$][@under='1']/cursor+}\\ %$ - error - \item{\verb+cursor+}\\ - error ? -\end{description} -% do_subscript: -% CASE: g[^#]/cursor -% create sb node. create g node, replace cursor with sb, append g to sb, append cursor to sb -% CASE: g[*#]/cursor -% create sb node, replace * with sb, append * to sb, append cursor to sb -% CASE: sb[^*#$][!@under='1']/cursor -% set over='1' in sb node -% CASE: sb[^*#$][@under='1']/cursor -% error -% ELSE: -% error ? - -\paragraph{Ignorable space:} $\square$ - -% do_ignorable_space: -% do nothing? - -\paragraph{Space:} $s$ - -\begin{description} - \item{\verb+cursor+}\\ - create \SNODE{} node, replace cursor with the \SNODE{} node, append - $\tadvance$ after \SNODE{} node -\end{description} - -% do_space -% create s node, replace cursor with s, append \advance after s - -\paragraph{Identifier:} $i(v)$ - -\begin{description} - \item{\verb+cursor+}\\ - create an \INODE{}, set \verb+value=+$v$ in the \INODE{}, replace - cursor with \INODE{}, append $\tadvance$ after the \INODE{} node -\end{description} - -% do_identifier -% create i node, replace cursor with i, append \advance after i - -\paragraph{Number:} $n(v)$ - -\begin{description} - \item{\verb+cursor+}\\ - create an \NNODE{}, set \verb+value=+$v$ in the \NNODE{}, replace - cursor with \NNODE{}, append $\tadvance$ after the \NNODE{} node -\end{description} - -% do_number -% create n node, replace cursor with n, append \advance after n - -\paragraph{Apostrophe:} $o({}')$ - -\begin{description} - \item{\verb+[(sp[*#$]/g[o[@name='prime']$])#]/cursor+}\\ - create a \ONODE{} node, set \verb+name='prime'+ in the \ONODE{}, - append the \ONODE{} to the innermost \G{} node - \item{\verb+[(sb[^sp[^*#$]/g[o[@name='prime']]$])#]/cursor+}\\ - create a \ONODE{} node, set \verb+name='prime'+ in the \ONODE{}, - append the \ONODE{} to the innermost \G{} node - \item{\verb+[*#]/cursor+}\\ - create a \ONODE{} node, set \verb+name='prime'+ in the \ONODE{}, - create a \SP{} node, create a \G{} node, replace \texttt{*} with \SP{} node, - append the new \G{} node to the \SP{} node, append the \ONODE{} - node to the new \G{} node - \item{\verb+[^#]/cursor+}\\ - error? - \item{\verb+cursor+}\\ - cursor is not in a group, error? -\end{description} - -% do_apostrophe -% CASE: g[(sp[^*#$]/g[o[@name='prime']$])#]/cursor -% append a new o[@name='prime'] node to the inner g node -% CASE: g[(sb[^sp[^*#$]/g[o[@name='prime']]$])#]/cursor -% append a new o[@name='prime'] node to the inner g node -% CASE: g[*#]/cursor -% create sp node, create g node, replace * with sp, append * to sp, append g to sp, -% append a new o[@name='prime'[ node to the new g node -% CASE: g[^#]/cursor -% error? -% ELSE: -% cursor is not in a group, error? - -\paragraph{Other:} $o(v)$ - -create an \ONODE{}, set \verb+value=+$v$ in the \ONODE{}, replace -cursor with \ONODE{}, append $\tadvance$ after the \ONODE{} node - -% do_other -% create o node, replace cursor with o, append \advance after o - -\paragraph{Active:} $\sim$ - -% do_active: -% ignored ??? - -\paragraph{Comment:} $\%$ - -% do_comment: -% ignored ??? - -\paragraph{Begin Environment:} $c(\mathtt{begin})\langle\alpha_1,\dots,\alpha_n\rangle$ - -\paragraph{End Environment:} $c(\mathtt{end})\langle\rangle$ - -\paragraph{Left Delimiter:} $c(\mathtt{left})\langle\alpha\rangle$ - -\paragraph{Right Delimiter:} $c(\mathtt{right})\langle\alpha\rangle$ - -\paragraph{Carriage-Return:} $c(\mathtt{cr})\langle\rangle$ - -\begin{description} - \item{\verb+row/cell/g/cursor+}\\ - create a \ROW{} node, create a \CELL{} node, create a \G{} - node, append the cursor to the new \G{} node, append the new \G{} - node to the new \CELL{} node, append the new \CELL{} node to the - new \ROW{} node, insert the new \ROW{} node after the old \ROW{} node - \item{\verb+cursor+}\\ - ignored? -\end{description} - -% do_cr: -% CASE: row/cell/g/cursor -% create row node, create cell node, create g node, -% append cursor to g, append g to cell, append cell to row, -% insert new row after old row -% ELSE: -% ignored ??? - -\paragraph{Macro:} $c(v)\langle\alpha_1,\dots,\alpha_n\rangle$ - -\begin{description} - \item{\verb+/cursor+}\\ - create a \CNODE{} node with the children corresponding to the pattern - $\tmap{\alpha_1}$,\dots,$\tmap{\alpha_n}$, replace the cursor with - the new \CNODE{} node. put $\tnext$ as the first child of the new - \CNODE{} node - - \item{\verb+*/cursor+}\\ - create a \CNODE{} node with the children corresponding to the pattern - $\tmap{\alpha_1}$,\dots,$\tmap{\alpha_n}$, replace the cursor with - the new \CNODE{} node, put $\tnext$ as the first child of the new - \CNODE{} node. If $n\ne0$ emit a warning (the macro has arguments but - but the context wouldn't normally allow them to be entered) -\end{description} - -% do_macro: -% CASE: g/cursor -% create a c node with children corresponding to the pattern of the macro -% append \nextparam as first child of the macro - -\section{Left Drop Rules} - -\paragraph{Normal Left Drop:} $\NLDROP$ - -\begin{description} - - \item{\verb+cursor+}\\ - replace the cursor with the $\NLDROP$. - -\end{description} - -\paragraph{Special Left Drop:} $\SLDROP$ - -\begin{description} - - \item{\verb+cursor+}\\ - replace the cursor with the $\SLDROP$. - -\end{description} - -\section{Right Drop Rules} - -\begin{description} - - \item{\verb+cursor+}\\ - replace the cursor with the $\RDROP$. - -\end{description} - -\section{$\varepsilon$-rules} - -\paragraph{Nromal Left Drop} - -\begin{description} - - \item{\verb+math/g[^#]/+$\NLDROP$}\\ - repalce the $\NLDROP$ with the cursor. - - %************************************************************************************** - %****************************** epsilon-rules with \NLDROP **************************** - %************************************************************************************** - - %************** \NLDROP has neither preceding nor following nodes ******************** - - \item{\verb+math[^#$]/+$\NLDROP$}\\ - replace the $\NLDROP$ with the cursor. - - \item{\verb+g[^#$]/+$\NLDROP$}\\ - replace the \G{} node with the $\NLDROP$. - - % this rule is overridden by the two ones below - \item{\verb+c/p[^#$]/+$\NLDROP$}\\ - remove the $\NLDROP$ and insert it before the \PNODE{} node. - - \item{\verb+c[p[@left-open='1'][*]#$]/p[@right-open='1'][^#$]/+$\NLDROP$}\\ - replace the \CNODE{} node with the content of the first \PNODE{} node and insert the $\NLDROP$ after this content - - \item{\verb+c[p[@left-open='1'][!*]#$]/p[@right-open='1'][^#$]/+$\NLDROP$}\\ - replace the \CNODE{} node with the $\NLDROP$. - - \item{\verb+c[^#][!p(*)]/+$\NLDROP$}\\ - replace the \CNODE{} node with the $\NLDROP$. - - \item{\verb+cell[^#$]/+$\NLDROP$}\\ - replace the cell with the $\NLDROP_n$. - - \item{\verb+table[^#$]/+$\NLDROP$}\\ - replace the \TABLE{} node with the $\NLDROP$. - - %************************* \NLDROP has at least one preceding node ********************* - - % general rules - - % this rule should also handles the case where the \NLDROP is the third (and last) child of a script. - \item{\verb+*[*#]/+$\NLDROP$}\\ - remove the $\NLDROP$ and append it as the last child of its ex preceding brother. - - % this rule overrides the one above - \item{\verb+*[(i|n|o|s|c[!*])#]/+$\NLDROP$}\\ - remove the $\NLDROP$ and replace the token with the $\NLDROP_n$. - - % special rules - - \item{\verb+[^*#$]+/$\NLDROP$}\\ - replace the script node with its first child and insert the $\NLDROP$ after it. - - % this rule overrides the one above. - \item{\verb+[^g[!@id][!*]#$]/+$\NLDROP$}\\ - replace the script with the cursor. - - % this rule overrides the one above - \item{\verb+*[sp[!@id][^*g[!@id][^o[@name='prime']++\verb+o[@name='prime']$]]#]/+$\NLDROP$}\\ - remove the last \ONODE{} node and replace the $\NLDROP$ with the cursor.%$\NLDROP_n$. - - \item{\verb+*[sp[!@id][^*g[!@id][^o[@name='prime']$]]#]/+$\NLDROP$}\\ - replace the script with its first child and replace the $\NLDROP$ with the cursor.%$\NLDROP_n$. - - \item{\verb+c[(i|n|o|s|c[!*])#]/+$\NLDROP$}\\ - move the $\NLDROP$ before the delimiter. - - % this rule is true for both right-open and parameterized macros. - \item{\verb+c[p#]/+$\NLDROP$}\\ - move the $\NLDROP$ into the \PNODE{} node. - - %**************** \NLDROP has no preceding nodes, but has following nodes ************** - - % general rule - \item{\verb+*[^#*]/+$\NLDROP$}\\ - remove the $\NLDROP$ and insert it before its parent. - - % special rules - - % this rule is applicable to all macros. - \item{\verb+c[^#][p[*]]/+$\NLDROP$}\\ - remove the $\NLDROP$ and insert it before the \CNODE{} node. - -\end{description} - -\paragraph{Special Left Drop} - -\begin{description} - - %******************************************************************************************************** - %************************************ epsilon-rules with \SLDROP **************************************** - %******************************************************************************************************** - - \item{\verb+math/+$\SLDROP$}\\ - replace the $\SLDROP$ with the cursor. - - \item{\verb+math/g[^#]/+$\NLDROP$}\\ - replace the $\NLDROP$ with the cursor. - - %************************ \SLDROP has neither preceding nor following nodes ***************************** - - \item{\verb+g[^#$]/+$\SLDROP$}\\ - replace the \G{} node with the cursor. - - \item{\verb+c[p[@left-open='1'][*]#$]/p[@right-open='1'][^#$]/+$\SLDROP$}\\ - replace the \CNODE{} node with the content of the first \PNODE{} node and insert the cursor after this content - - \item{\verb+c[p[@left-open='1'][!*]#$]/p[@right-open='1'][^#$]/+$\SLDROP$}\\ - replace the \CNODE{} node with the cursor. - - \item{\verb+c/p[^#$]/+$\SLDROP$}\\ - remove the $\SLDROP$ and insert it before the \PNODE{} node. - - \item{\verb+c[^#][!p(*)]/+$\SLDROP$}\\ - replace the \CNODE{} node with the cursor. - - \item{\verb+cell[^#$]/+$\SLDROP$}\\ - replace the cell with the $\NLDROP_n$. - - \item{\verb+table[^#$]/+$\SLDROP$}\\ - replace the \TABLE{} node with the cursor. - - %*********************** \SLDROP has at least one preceding node *********************************** - - \item{\verb+*[sp[!@id][^*g[!@id][^o[@name='prime']++\verb+o[@name='prime']$]]#]/+$\SLDROP$}\\ - remove the last \ONODE{} node and replace the $\SLDROP$ with the cursor. - - \item{\verb+*[sp[!@id][^*g[!@id][^o[@name='prime']$]]#]/+$\SLDROP$}\\ - replace the script with its first child and replace the $\SLDROP$ with the cursor.%$\NLDROP_n$. - - \item{\verb+[^g[!@id][!*]#$]/+$\SLDROP$}\\ - replace the script with the cursor. - - % this rule is overridden by the three rules above. - \item{\verb+[^*#$]+/$\SLDROP$}\\ - replace the script node with its first child and insert the cursor after it. - - \item{\verb+c[(i|n|o|s|c[!*])#]/+$\SLDROP$}\\ - remove the $\SLDROP$ and insert the cursor before the delimiter. - - \item{\verb+c[p#(i|n|o|s|c[!*])]/+$\SLDROP$}\\ - remove the $\SLDROP$ and insert the cursor into the \PNODE{} node. - - \item{\verb+c[p[@right-open='1']#]+}\\ - remove the $\SLDROP$ and append the curor as last child of the \PNODE{} node. - - % this rule is overridden by the two ones above. - \item{\verb+c[p#]/+$\SLDROP$}\\ - move the $\SLDROP$ into the \PNODE{} node. - - \item{\verb+*[(i|n|o|s|c[!*])#]/+$\SLDROP$}\\ - remove the $\SLDROP$ and replace the token with the cursor. - - \item{\verb+*[table#]/+$\SLDROP$}\\ - remove the $\SLDROP$ and append the $\NLDROP_n$ as the last child of the \TABLE{} node. - - \item{\verb+*[c#]/+$\SLDROP$}\\ - move the $\SLDROP$ into the \CNODE{} node. - - \item{\verb+*[g#]/+$\SLDROP$}\\ - remove the $\SLDROP$ and append the cursor as the last child of the \G{} node. - - %********** \SLDROP has no preceding node, but has following ones ************** - - \item{\verb+c[^#p][p(*)]/+$\SLDROP$}\\ - remove the $\SLDROP$ and insert the cursor before the \CNODE{} node. - - % general rule - \item{\verb+*[^#*]/+$\SLDROP$}\\ - remove the $\SLDROP$ and insert the cursor before its parent. - -\end{description} - -\paragraph{Normalize Left Drop} - -\begin{description} - - %**************************************************************************************** - %***************************** epsilon-rules with \NLDROP_n ***************************** - %**************************************************************************************** - - \item{\verb+*[*#]/+$\NLDROP_n$}\\ - replace the $\NLDROP_n$ with the cursor. - - \item{\verb+row[cell#]/+$\NLDROP_n$}\\ - remove the $\NLDROP_n$ and append the cursor as the last child of the \CELL{} node. - - \item{\verb+row[^#$]/+$\NLDROP_n$}\\ - replace the \ROW{} node with the $\NLDROP_n$ - - \item{\verb+table[row#]/+$\NLDROP_n$}\\ - remove the $\NLDROP_n$ and append it as last child of the \ROW{} node. - - \item{\verb+table[^#$]/+$\NLDROP_n$}\\ - replace the \TABLE{} with the cursor.%$\NLDROP_n$. - - \item{\verb+g[@id][^#$]/+$\NLDROP_n$}\\ - replace the \G{} node with the $\NLDROP_n$. - - \item{$\NLDROP_n$}\\ - replace the $\NLDROP_n$ with the cursor. - -\end{description} - -\paragraph{Right Drop} - -\begin{description} - - %************************* \RDROP has at least a following node **************************************** - - \item{\verb+c[#(i|n|o|s|c[!*])]/+$\RDROP$}\\ - remove the $\RDROP$ and append it after the delimiter - - \item{\verb+*[#(i|n|o|s|c[!*])]/+$\RDROP$}\\ - remove the token and replace the $\RDROP$ with the cursor $\RDROP_n$. - - % this rule is overridden by those ones above. - \item{\verb+*[#*]/+$\RDROP$}\\ - remove the $\RDROP$ and append it as the first child of the following node. - - %************************** \RDROP has neither following nor preceding nodes ****************************** - - \item{\verb+c[#$][!p[*]]/+$\RDROP$}\\ - replace the \CNODE{} with the $\RDROP$. - - \item{\verb+p[^#$]/+$\RDROP$}\\ - move the $\RDROP$ after the \PNODE{} node. - - \item{\verb+g[^#$]/+$\RDROP$}\\ - replace the \G{} node with the $\RDROP$. - -\end{description} - -\paragraph{Normalize Right Drop} - -\begin{description} - - % at the moment it's the only rule, defined for this symbol. - \item{\verb+g[@id][^#$]/+$\RDROP_n$}\\ - replace the \G{} node with the $\RDROP_n$. - - \item{$\RDROP_n$}\\ - replace the $\RDROP$ with the cursor. - -\end{description} - -\paragraph{Advance} - -\begin{description} - \item{\verb+g/+$\tadvance$}\\ - replace $\tadvance$ with the cursor - - \item{\verb+p[#$]/+$\tadvance$}\\ %$ - put $\tadvance$ after the \PNODE{} node - - \item{\verb+c[#p]/+$\tadvance$} \\ - remove $\tadvance$, put the cursor as first child of the \PNODE{} node - - \item{\verb+c[#*]/+$\tadvance$} \\ %$ - replace $\tadvance$ with the cursor - - \item{\verb+c[#$]/+$\tadvance$} \\ %$ - move $\tadvance$ after the \CNODE{} node -\end{description} - -\paragraph{Next Parameter} - -\paragraph{Next Token} - -%% \begin{description} -%% \item{\verb+c[#p]/+$\tnext$} \\ -%% \end{description} - -% g[@id]/(c[#$][@right-open]/g[!@id][#$]/)+cursor } let p = cursor.parent() in remove; advance(p) - -% c/g[!@id]/cursor -% c/cursor -% */cursor { let g = new group in replace - -% g[@id][^#$]/cursor <= cursor.parent().replace(cursor) -% g[@id][^#$]/cursor <- cursor -% (!g[@id][^#$])[A#B]/(g[@id][^#$]/)+cursor <- (!g[@id][^#$])[A#B]/cursor - -\clearpage -\appendix -\section{Semantics of the Regular Context Language} - -\newcommand{\CSEM}[2]{\mathcal{C}\llbracket#1\rrbracket#2} -\newcommand{\QSEM}[2]{\mathcal{Q}\llbracket#1\rrbracket#2} -\newcommand{\TSEMUP}[2]{\mathcal{T}^\uparrow\llbracket#1\rrbracket#2} -\newcommand{\TSEMDOWN}[2]{\mathcal{T}_\downarrow\llbracket#1\rrbracket#2} -\newcommand{\NSEM}[2]{\mathcal{N}\llbracket#1\rrbracket#2} -\newcommand{\PSEM}[1]{\mathcal{P}\llbracket#1\rrbracket} -\newcommand{\LSEM}[2]{\mathcal{L}\llbracket#1\rrbracket#2} -\newcommand{\RSEM}[2]{\mathcal{R}\llbracket#1\rrbracket#2} -\newcommand{\FSEM}[2]{\mathcal{F}\llbracket#1\rrbracket(#2)} -\newcommand{\PARENT}[1]{\mathit{parent}(#1)} -\newcommand{\CHILDREN}[1]{\mathit{children}(#1)} -\newcommand{\CHILD}[1]{\mathit{child}(#1)} -\newcommand{\ANCESTORS}[1]{\mathit{ancestors}(#1)} -\newcommand{\DESCENDANTS}[1]{\mathit{descendants}(#1)} -\newcommand{\HASATTRIBUTE}[2]{\mathit{hasAttribute}(#1,#2)} -\newcommand{\HASNOATTRIBUTE}[2]{\mathit{hasNoAttribute}(#1,#2)} -\newcommand{\ATTRIBUTE}[2]{\mathit{attribute}(#1,#2)} -\newcommand{\ISELEMENT}[1]{\mathit{isElement}(#1)} -\newcommand{\NAME}[1]{\mathit{name}(#1)} -\newcommand{\PREV}[1]{\mathit{prev}(#1)} -\newcommand{\NEXT}[1]{\mathit{next}(#1)} -\newcommand{\PREDICATE}[1]{\mathit{predicate}(#1)} -\newcommand{\IFV}[3]{\begin{array}[t]{@{}l}\mathbf{if}~#1~\mathbf{then}\\\quad#2\\\mathbf{else}\\\quad#3\end{array}} -\newcommand{\IFH}[3]{\mathbf{if}~#1~\mathbf{then}~#2~\mathbf{else}~#3} -\newcommand{\TRUE}{\mathbf{true}} -\newcommand{\FALSE}{\mathbf{false}} -\newcommand{\FUN}[2]{\lambda#1.#2} -\newcommand{\LET}[3]{\mathbf{let}~#1=#2~\mathbf{in}~#3} -\newcommand{\REC}[2]{\mathbf{rec}~#1=#2} -\newcommand{\APPLY}[2]{(#1\;#2)} -\newcommand{\APPLYX}[3]{(#1\;#2\;#3)} -\newcommand{\AND}{\wedge} -\newcommand{\OR}{\vee} -\newcommand{\AAND}{\,\vec{\AND}\,} -\newcommand{\AOR}{\,\vec{\OR}\,} -\newcommand{\MATCH}[4]{\begin{array}[t]{@{}c@{~\to~}l@{}l@{}}\multicolumn{2}{@{}l@{}}{\mathbf{match}~#1~\mathbf{with}}\\\phantom{|}\quad\{#2\}\\|\quad\emptyset\end{array}} - -\[ -\begin{array}{rcl} - \CSEM{q}{x} &=& \{x_1\mid x_1\in\{x\} \wedge \QSEM{q}{x_1}\}\\ - \CSEM{..}{x} &=& \PARENT{x}\\ - \CSEM{/}{x} &=& \CHILDREN{x}\\ - \CSEM{c_1\;c_2}{x} &=& \CSEM{c_2}{\CSEM{c_1}{x}}\\ - \CSEM{(c)}{x} &=& \CSEM{c}{x}\\ - \CSEM{\{c:\alpha\}}{x} &=& \alpha(x,\CSEM{c}{x})\\ - \CSEM{c_1\&c_2}{x} &=& \CSEM{c_1}{x} \cap \CSEM{c_2}{x}\\ - \CSEM{c_1\mid c_2}{x} &=& \CSEM{c_1}{x} \cup \CSEM{c_2}{x}\\ - \CSEM{c+}{x} &=& \CSEM{c}{x} \cup \CSEM{c+}{\CSEM{c}{x}}\\ - \CSEM{c?}{x} &=& \{x\}\cup\CSEM{c}{x}\\ - \CSEM{c*}{x} &=& \CSEM{{c+}?}{x}\\[3ex] - \QSEM{c}{x} &=& \CSEM{c}{x}\ne\emptyset\\ - \QSEM{!c}{x} &=& \CSEM{c}{x}=\emptyset\\ - \QSEM{\langle*\rangle}{x} &=& \TRUE\\ - \QSEM{\langle n\rangle}{x} &=& \NAME{x}=n\\ - \QSEM{@n}{x} &=& \HASATTRIBUTE{x}{n}\\ - \QSEM{@n=v}{x} &=& \ATTRIBUTE{x}{n}=v\\ - \QSEM{[p_1\#p_2]}{x} &=& \LSEM{p_1}{\PREV{x}}\wedge\RSEM{p_2}{\NEXT{x}}\\[3ex] - \LSEM{}{\alpha} &=& \TRUE\\ - \LSEM{\cent}{\alpha} &=& \alpha=\emptyset\\ - \LSEM{p\;q}{\emptyset} &=& \FALSE\\ - \LSEM{p\;q}{\{x\}} &=& \QSEM{q}{x}\wedge\LSEM{p}{\PREV{x}}\\[3ex] - \RSEM{}{\alpha} &=& \TRUE\\ - \RSEM{\$}{\alpha} &=& \alpha=\emptyset\\ - \RSEM{q\;p}{\emptyset} &=& \FALSE\\ - \RSEM{q\;p}{\{x\}} &=& \QSEM{q}{x}\wedge\RSEM{p}{\NEXT{x}}\\[3ex] - \PREDICATE{q} &=& \TRUE\\ - \PREDICATE{..} &=& \FALSE\\ - \PREDICATE{/} &=& \FALSE\\ - \PREDICATE{c_1\;c_2} &=& \PREDICATE{c_1}\wedge\PREDICATE{c_2}\\ - \PREDICATE{(c)} &=& \PREDICATE{c}\\ - \PREDICATE{c_1\&c_2} &=& \PREDICATE{c_1}\wedge\PREDICATE{c_2}\\ - \PREDICATE{c_1\mid c_2} &=& \PREDICATE{c_1}\wedge\PREDICATE{c_2}\\ - \PREDICATE{c+} &=& \PREDICATE{c}\\ - \PREDICATE{c?} &=& \PREDICATE{c}\\ - \PREDICATE{c*} &=& \PREDICATE{c} -\end{array} -\] - -\[ -\begin{array}{rcl} - \PSEM{q} &=& \FUN{x}{\APPLY{\QSEM{q}{}}{x}} \\ - \PSEM{..} &=& \FUN{x}{\neg\APPLY{\mathit{null}}{\PARENT{x}}}\\ - \PSEM{/} &=& \FUN{x}{\neg\APPLY{\mathit{null}}{\CHILD{x}}}\\ - \PSEM{(c)} &=& \PSEM{c}\\ - \PSEM{\{c:\alpha\}} &=& \FUN{x}{\APPLY{\PSEM{c}}{x}\AAND\APPLY{\alpha}{x}}\\ - \PSEM{c_1\;c_2} &=& \IFV{\PREDICATE{c_1}}{\FUN{x}{(\PSEM{c_1}\;x)\wedge(\PSEM{c_2}\;x)}}{\FSEM{c_1}{\PSEM{c_2},\FUN{\_}{\FALSE}}}\\ - \PSEM{c_1\&c_2} &=& \IFV{\PREDICATE{c_1}\wedge\PREDICATE{c_2}}{\FUN{x}{(\PSEM{c_1}\;x)\wedge(\PSEM{c_2}\;x)}}{\FSEM{c_1\&c_2}{\FUN{\_}{\TRUE},\FUN{\_}{\FALSE}}}\\ - \PSEM{c_1\mid c_2} &=& \FUN{x}{(\PSEM{c_1}\;x)\vee(\PSEM{c_2}\;x)}\\ - \PSEM{c+} &=& \PSEM{c}\\ - \PSEM{c?} &=& \FUN{\_}{\TRUE}\\ - \PSEM{c*} &=& \FUN{\_}{\TRUE}\\[3ex] - \FSEM{q}{t,f} &=& \FUN{x}{(\APPLY{\PSEM{q}}{x}\AAND\APPLY{t}{x})\AOR\APPLY{f}{x}}\\ - \FSEM{..}{t,f} &=& \FUN{x}{\MATCH{\PARENT{x}}{y}{\APPLY{t}{y}}{\APPLY{f}{x}}}\\ -% \FSEM{/}{t,f} &=& \FUN{x}{(\vee_{y\in\CHILDREN{x}} \APPLY{t}{y})\AOR\APPLY{f}{x}}\\ - \FSEM{/}{t,f} &=& \FUN{x}{\APPLYX{\mathit{exists}}{t}{\CHILD{x}}\AOR\APPLY{f}{x}}\\ - \FSEM{(c)}{t,f} &=& \FSEM{c}{t,f}\\ - \FSEM{\{c:\alpha\}}{t,f} &=& \FSEM{c}{\FUN{x}{\PSEM{c}\AAND\APPLY{\alpha}{x}\AAND\APPLY{t}{x},f}}\\ - \FSEM{c_1\;c_2}{t,f} &=& \FUN{x}{\APPLY{\FSEM{c_1}{\FSEM{c_2}{t,\FUN{\_}{\APPLY{f}{x}}},f}}{x}}\\ - \FSEM{c_1\&c_2}{t,f} &=& \FUN{x}{\APPLY{\FSEM{c_1}{\FUN{y}{\APPLY{\FSEM{c_2}{\FUN{z}{(y=z)\AAND\APPLY{t}{z}},\FUN{\_}{\APPLY{f}{x}}}}{x}},f}}{x}}\\ - \FSEM{c_1\mid c_2}{t,f} &=& \FSEM{c_1}{t,\FSEM{c_2}{t,f}}\\ - \FSEM{c+}{t,f} &=& \FSEM{c}{\FSEM{c+}{t,t},f}\\ - \FSEM{c?}{t,f} &=& \FSEM{c}{t,t}\\ - \FSEM{c*}{t,f} &=& \FSEM{{c+}?}{t,f}\\[3ex] - \QSEM{c}{} &=& \PSEM{c}\\ - \QSEM{!c}{} &=& \FUN{x}{\neg\APPLY{\PSEM{c}}{x}}\\ - \QSEM{\langle*\rangle}{} &=& \FUN{\_}{\TRUE}\\ - \QSEM{\langle n\rangle}{} &=& \FUN{x}{\NAME{x}=n}\\ - \QSEM{@n}{} &=& \FUN{x}{\HASATTRIBUTE{x}{n}}\\ - \QSEM{@n=v}{} &=& \FUN{x}{\ATTRIBUTE{x}{n}=v}\\ - \QSEM{[p_1\#p_2]}{} &=& \FUN{x}{\APPLY{\LSEM{p_1}{}}{\PREV{x}}\wedge\APPLY{\RSEM{p_2}{}}{\NEXT{x}}}\\[3ex] - \LSEM{}{} &=& \FUN{\_}{\TRUE}\\ - \LSEM{\cent}{} &=& \mathit{null}\\ - \LSEM{p\;q}{} &=& \FUN{x}{\MATCH{x}{y}{\QSEM{q}{y}\AAND\APPLY{\LSEM{p}}{\PREV{y}}}{\FALSE}}\\ - \RSEM{}{} &=& \FUN{\_}{\TRUE}\\ - \RSEM{\$}{} &=& \mathit{null}\\ - \RSEM{p\;q}{} &=& \FUN{x}{\MATCH{x}{y}{\QSEM{q}{y}\AAND\APPLY{\RSEM{p}}{\NEXT{y}}}{\FALSE}}\\ - \mathit{null} &=& \FUN{x}{\MATCH{x}{\_}{\FALSE}{\TRUE}}\\ - \mathit{exists} &=& \FUN{t}{\REC{a}{\FUN{x}{\MATCH{x}{y}{\APPLY{t}{y}\AOR\APPLY{a}{\NEXT{x}}}{\FALSE}}}} -\end{array} -\] - - - -\end{document} diff --git a/helm/DEVEL/mathml_editor/editex.pc.in b/helm/DEVEL/mathml_editor/editex.pc.in deleted file mode 100644 index 9e2c91bf4..000000000 --- a/helm/DEVEL/mathml_editor/editex.pc.in +++ /dev/null @@ -1,19 +0,0 @@ -# This is a comment -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ -datadir=@datadir@ - -pkgdatadir=${datadir}/editex -default_dictionary=${pkgdatadir}/dictionary-tex.xml -default_mathml_xsl=${pkgdatadir}/tml-mmlp.xsl -default_tex_xsl=${pkgdatadir}/tml-tex.xsl - -Name: EdiTeX -Description: An XML/MathML editor based on TeX/LaTeX syntax -Version: @VERSION@ -Requires: glib -Libs: -L${libdir} -leditex -Cflags: -I${includedir}/editex - diff --git a/helm/DEVEL/mathml_editor/examples/.cvsignore b/helm/DEVEL/mathml_editor/examples/.cvsignore deleted file mode 100644 index 282522db0..000000000 --- a/helm/DEVEL/mathml_editor/examples/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/helm/DEVEL/mathml_editor/examples/Makefile.am b/helm/DEVEL/mathml_editor/examples/Makefile.am deleted file mode 100644 index 8de82fb70..000000000 --- a/helm/DEVEL/mathml_editor/examples/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -EXTRA_DIST = abs.tex big.tex diff --git a/helm/DEVEL/mathml_editor/examples/abs.tex b/helm/DEVEL/mathml_editor/examples/abs.tex deleted file mode 100644 index 6cd86a144..000000000 --- a/helm/DEVEL/mathml_editor/examples/abs.tex +++ /dev/null @@ -1 +0,0 @@ -$|x|=\matrix{1&0\cr0&1}$ diff --git a/helm/DEVEL/mathml_editor/examples/big.tex b/helm/DEVEL/mathml_editor/examples/big.tex deleted file mode 100644 index 913a1a13c..000000000 --- a/helm/DEVEL/mathml_editor/examples/big.tex +++ /dev/null @@ -1 +0,0 @@ -$1+x+x^2+x^3+\cdots+x^n\over{\sqrt 1+y^{-1}+y^{-2}+y^{-3}+\cdots+y^{-m}}$ diff --git a/helm/DEVEL/mathml_editor/ocaml/.cvsignore b/helm/DEVEL/mathml_editor/ocaml/.cvsignore deleted file mode 100644 index cf4c41a0a..000000000 --- a/helm/DEVEL/mathml_editor/ocaml/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -META Makefile Makefile.in *.cm[ioax] *.cmxa *.lo *.la .deps .libs diff --git a/helm/DEVEL/mathml_editor/ocaml/.depend b/helm/DEVEL/mathml_editor/ocaml/.depend deleted file mode 100644 index ceb7476a9..000000000 --- a/helm/DEVEL/mathml_editor/ocaml/.depend +++ /dev/null @@ -1,3 +0,0 @@ -mathml_editor.cmo: i_mathml_editor.cmo mathml_editor.cmi -mathml_editor.cmx: i_mathml_editor.cmx mathml_editor.cmi -mathml_editor.cmi: i_mathml_editor.cmo diff --git a/helm/DEVEL/mathml_editor/ocaml/META.in b/helm/DEVEL/mathml_editor/ocaml/META.in deleted file mode 100644 index f3fe7899a..000000000 --- a/helm/DEVEL/mathml_editor/ocaml/META.in +++ /dev/null @@ -1,6 +0,0 @@ -requires="gdome2,gdome2-xslt" -version="@VERSION@" -archive(byte)="mlmathml-editor.cma" -archive(native)="mlmathml-editor.cmxa" -archive(byte,premethods)="i_mathml_editor.cmo mlmathml-editor.cma" -archive(native,premethods)="i_mathml_editor.cmx mlmathml-editor.cmxa" diff --git a/helm/DEVEL/mathml_editor/ocaml/Makefile.am b/helm/DEVEL/mathml_editor/ocaml/Makefile.am deleted file mode 100644 index 28982ba25..000000000 --- a/helm/DEVEL/mathml_editor/ocaml/Makefile.am +++ /dev/null @@ -1,90 +0,0 @@ -PKGNAME = mathml-editor -ARCHIVE = mlmathml-editor -REQUIRES = gdome2 gdome2-xslt -OCAMLFIND = @OCAMLFIND@ -OCAMLFLAGS = -I $(top_srcdir)/ocaml -OCAMLC = $(OCAMLFIND) @OCAMLC@ $(OCAMLFLAGS) -package "$(REQUIRES)" -OCAMLOPT = $(OCAMLFIND) @OCAMLOPT@ $(OCAMLFLAGS) -package "$(REQUIRES)" -OCAMLDEP = $(OCAMLFIND) @OCAMLDEP@ $(OCAMLFLAGS) -package "$(REQUIRES)" -if HAVE_SHAREDLIBS_COND -OCAMLMKLIBFLAGS = -else -OCAMLMKLIBFLAGS = -custom -endif -OCAMLMKLIB = @OCAMLMKLIB@ $(OCAMLMKLIBFLAGS) -DLL = dll$(ARCHIVE).so -OCAMLSTDLIBDIR = $(DESTDIR)/@OCAMLSTDLIBDIR@ -OCAMLSTUBDIR = $(DESTDIR)/@OCAMLSTUBDIR@ -OCAMLINSTALLDIR = $(OCAMLSTDLIBDIR)/$(PKGNAME) -MODULES = i_mathml_editor mathml_editor -INIT = -CMI_S = $(MODULES:%=%.cmi) -CMO_S = $(MODULES:%=%.cmo) -CMX_S = $(MODULES:%=%.cmx) -O_S = ml_mathml_editor.o c_mathml_editor.o -LO_S = $(O_S:%.o=%.lo) -SHARED_LIBS = $(GMETADOM_LIBS) $(GDOMEXSLT_LIBS) -lmlgdome2-xslt -lmlgdome -lstdc++ -L$(top_builddir)/src/.libs/ -leditex -BYTE_STUFF = i_mathml_editor.cmi mathml_editor.cmi $(ARCHIVE).cma $(DLL) lib$(ARCHIVE).a -NATIVE_STUFF = $(ARCHIVE).cmxa $(ARCHIVE).a -BYTE_INSTALL_STUFF = $(BYTE_STUFF) META mathml_editor.mli -NATIVE_INSTALL_STUFF = $(NATIVE_STUFF) - -EXTRA_DIST = \ - META.in mathml_editor.ml mathml_editor.mli i_mathml_editor.ml \ - c_mathml_editor.h .depend - -if HAVE_OCAMLOPT_COND -noinst_DATA = $(BYTE_STUFF) $(NATIVE_STUFF) -else -noinst_DATA = $(BYTE_STUFF) -endif - -noinst_LTLIBRARIES = libmlmathml-editor.la -libmlmathml_editor_la_SOURCES = \ - c_mathml_editor.cc \ - ml_mathml_editor.c - -if HAVE_OCAMLOPT_COND -install-data-local: $(BYTE_INSTALL_STUFF) $(NATIVE_INSTALL_STUFF) -else -install-data-local: $(BYTE_INSTALL_STUFF) -endif - $(mkinstalldirs) $(OCAMLSTDLIBDIR) $(OCAMLSTUBDIR) - chmod -x $(DLL) - $(OCAMLFIND) install -destdir $(OCAMLSTDLIBDIR) $(PKGNAME) $^ - ln -fs $(DLL) $(OCAMLSTUBDIR)/lib$(ARCHIVE).so - -CLEANFILES = \ - $(ARCHIVE).{cma,cmxa,a} $(CMI_S) $(CMO_S) $(CMX_S) ml_mathml_editor.o \ - $(DLL) $(INIT).cm[iox] libmlmathml-editor.a - -INCLUDES = \ - $(GDOME_CFLAGS) $(MLGDOME_CFLAGS) \ - $(GMETADOM_CFLAGS) $(GDOMEXSLT_CFLAGS) \ - -I$(top_srcdir)/src - -$(ARCHIVE).cma: $(CMO_S) - $(OCAMLMKLIB) -o $(ARCHIVE) -L@OCAMLSTUBDIR@ $(CMO_S) $(SHARED_LIBS) - -$(ARCHIVE).cmxa: $(CMX_S) - $(OCAMLMKLIB) -o $(ARCHIVE) -L@OCAMLSTUBDIR@ $(CMX_S) $(SHARED_LIBS) - -$(DLL) $(ARCHIVE).a: $(O_S) - $(OCAMLMKLIB) -o $(ARCHIVE) -L@OCAMLSTUBDIR@ $(SHARED_LIBS) $(O_S:%.o=.libs/%.o) - -%.cmi: %.mli - $(OCAMLC) -c $< -%.cmo %.cmi: %.ml - $(OCAMLC) -c $< -%.cmx: %.ml %.cmi - $(OCAMLOPT) -c $< - -i_mathml_editor.cmo: i_mathml_editor.ml - $(OCAMLC) -c $< -i_mathml_editor.cmx: i_mathml_editor.ml - $(OCAMLOPT) -c $< - -depend: *.ml - $(OCAMLDEP) *.ml *.mli >.depend -include .depend - diff --git a/helm/DEVEL/mathml_editor/ocaml/c_mathml_editor.cc b/helm/DEVEL/mathml_editor/ocaml/c_mathml_editor.cc deleted file mode 100644 index 25759823b..000000000 --- a/helm/DEVEL/mathml_editor/ocaml/c_mathml_editor.cc +++ /dev/null @@ -1,224 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include -#include - -#include "ALogger.hh" -#include "TDictionary.hh" -#include "CMathMLFactoryXSLT.hh" -#include "TPushLexer.hh" -#include "LPushLexer.hh" -#include "TPushParser.hh" - -class CCallbackLogger : public ALogger -{ -public: - CCallbackLogger(void (*)(int, const char*, void*), void*); - virtual ~CCallbackLogger() { }; - -protected: - virtual void message(Level, const std::string&); - -private: - void (*callback)(int, const char*, void*); - void* user_data; -}; - -CCallbackLogger::CCallbackLogger(void (*cb)(int, const char*, void*), void* data) : callback(cb), user_data(data) -{ - assert(callback); -} - -void -CCallbackLogger::message(Level l, const std::string& s) -{ - assert(callback); - callback(l, s.c_str(), user_data); -} - -struct Editor -{ - Editor(const char*, const char*, const char*, void (*)(int, const char*, void*), void*, bool); - ~Editor(); - - ALogger* logger; - TDictionary* dictionary; - DOMX::XSLTStylesheet* tml_mml; - DOMX::XSLTStylesheet* tml_tex; - AMathMLFactory* factory; - TPushParser* parser; - APushLexer* lexer; -}; - -Editor::Editor(const char* dict_uri, const char* mml_uri, const char* tex_uri, - void (*cb)(int, const char*, void*), void* data, bool alt) -{ - assert(dict_uri); - assert(mml_uri); - assert(tex_uri); - assert(cb); - logger = new CCallbackLogger(cb, data); - dictionary = new TDictionary(*logger); - dictionary->load(dict_uri); - DOM::DOMImplementation di; - DOM::Document mml = di.createDocumentFromURI(mml_uri); - DOM::Document tex = di.createDocumentFromURI(tex_uri); - tml_mml = new DOMX::XSLTStylesheet(mml); - tml_tex = new DOMX::XSLTStylesheet(tex); - factory = new CMathMLFactoryXSLT(*logger, *tml_mml); - parser = new TPushParser(*logger, *factory, *dictionary); - if (alt) lexer = new LPushLexer(*logger, *parser); - else lexer = new TPushLexer(*logger, *parser); -} - -Editor::~Editor() -{ - delete lexer; - delete parser; - delete factory; - delete tml_tex; - delete tml_mml; - delete dictionary; - delete logger; -} - -extern "C" const char* -c_mathml_editor_get_default_dictionary_path() -{ - return TDictionary::getDefaultDictionaryPath().c_str(); -} - -extern "C" const char* -c_mathml_editor_get_default_mathml_stylesheet_path() -{ - return AMathMLFactory::getDefaultMathMLStylesheetPath().c_str(); -} - -extern "C" const char* -c_mathml_editor_get_default_tex_stylesheet_path() -{ - return AMathMLFactory::getDefaultTeXStylesheetPath().c_str(); -} - -extern "C" Editor* -c_mathml_editor_new(bool alt, - const char* dictionary_uri, - const char* tml_mml_uri, - const char* tml_tex_uri, - void (*log_message_cb)(int, const char*, void*), - void* user_data) -{ - return new Editor(dictionary_uri, tml_mml_uri, tml_tex_uri, log_message_cb, user_data, alt); -} - -extern "C" void -c_mathml_editor_destroy(Editor* editor) -{ - assert(editor); - delete editor; -} - -extern "C" int -c_mathml_editor_freeze(Editor* editor) -{ - assert(editor); - return editor->parser->freeze(); -} - -extern "C" int -c_mathml_editor_thaw(Editor* editor) -{ - assert(editor); - return editor->parser->thaw(); -} - -extern "C" void -c_mathml_editor_push(Editor* editor, char ch) -{ - assert(editor); - editor->lexer->push(ch); -} - -extern "C" void -c_mathml_editor_drop(Editor* editor, int alt) -{ - assert(editor); - editor->lexer->drop(alt != 0); -} - -extern "C" int -c_mathml_editor_cursor_hide(Editor* editor) -{ - assert(editor); - return editor->parser->hideCursor(); -} - -extern "C" int -c_mathml_editor_cursor_show(Editor* editor) -{ - assert(editor); - return editor->parser->showCursor(); -} - -extern "C" char* -c_mathml_editor_get_tex(const Editor* editor) -{ - assert(editor); - DOM::Document res = editor->tml_tex->apply(editor->parser->document()); - assert(res); - res.normalize(); - assert(res.get_firstChild() && res.get_firstChild().get_nodeName() == "#text"); - return strdup(std::string(res.get_firstChild().get_nodeValue()).c_str()); -} - -extern "C" void -c_mathml_editor_reset(Editor* editor) -{ - assert(editor); - editor->lexer->reset(); - editor->parser->reset(); -} - -extern "C" GdomeDocument* -c_mathml_editor_get_tml(const Editor* editor) -{ - assert(editor); - GdomeNode* n = editor->parser->document().cloneNode(true).gdome_object(); - GdomeDocument* doc = gdome_cast_doc(n); - assert(n && doc); - return doc; -} - -extern "C" GdomeDocument* -c_mathml_editor_get_mml(const Editor* editor) -{ - assert(editor); - GdomeNode* n = editor->factory->document().gdome_object(); - GdomeDocument* doc = gdome_cast_doc(n); - assert(n && doc); - return doc; -} - diff --git a/helm/DEVEL/mathml_editor/ocaml/c_mathml_editor.h b/helm/DEVEL/mathml_editor/ocaml/c_mathml_editor.h deleted file mode 100644 index cb01155ad..000000000 --- a/helm/DEVEL/mathml_editor/ocaml/c_mathml_editor.h +++ /dev/null @@ -1,49 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __c_mathml_editor_h__ -#define __c_mathml_editor_h__ - -#include - -typedef struct Editor Editor; - -const char* c_mathml_editor_get_default_dictionary_path(void); -const char* c_mathml_editor_get_default_mathml_stylesheet_path(void); -const char* c_mathml_editor_get_default_tex_stylesheet_path(void); -Editor* c_mathml_editor_new(int, const char*, const char*, const char*, void (*)(int, const char*, void*), void*); -void c_mathml_editor_destroy(Editor*); -int c_mathml_editor_freeze(Editor*); -int c_mathml_editor_thaw(Editor*); -void c_mathml_editor_reset(Editor*); -void c_mathml_editor_push(Editor*, char); -void c_mathml_editor_drop(Editor*, int); -int c_mathml_editor_cursor_hide(Editor*); -int c_mathml_editor_cursor_show(Editor*); -char* c_mathml_editor_get_tex(const Editor*); -GdomeDocument* c_mathml_editor_get_tml(const Editor*); -GdomeDocument* c_mathml_editor_get_mml(const Editor*); - -#endif /* __c_mathml_editor_h__ */ diff --git a/helm/DEVEL/mathml_editor/ocaml/i_mathml_editor.ml b/helm/DEVEL/mathml_editor/ocaml/i_mathml_editor.ml deleted file mode 100644 index d865898d6..000000000 --- a/helm/DEVEL/mathml_editor/ocaml/i_mathml_editor.ml +++ /dev/null @@ -1,76 +0,0 @@ -(* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - *) - -type t - -external get_default_dictionary_path : unit -> string - = "ml_mathml_editor_get_default_dictionary_path" - -external get_default_mathml_stylesheet_path : unit -> string - = "ml_mathml_editor_get_default_mathml_stylesheet_path" - -external get_default_tex_stylesheet_path : unit -> string - = "ml_mathml_editor_get_default_tex_stylesheet_path" - -external raw_create : - alt_lexer:bool -> - dictionary_uri: string -> - mml_uri: string -> - tml_uri: string -> - log:(int -> string -> unit) -> - t - = "ml_mathml_editor_new" -let create ?(alt_lexer=false) = raw_create ~alt_lexer - -external freeze : editor:t -> bool - = "ml_mathml_editor_freeze" - -external thaw : editor:t -> bool - = "ml_mathml_editor_thaw" - -external reset : editor:t -> unit - = "ml_mathml_editor_reset" - -external push : editor:t -> ch:char -> unit - = "ml_mathml_editor_push" - -external drop : editor:t -> alt:bool -> unit - = "ml_mathml_editor_drop" - -external cursor_hide : editor:t -> unit - = "ml_mathml_editor_cursor_hide" - -external cursor_show : editor:t -> unit - = "ml_mathml_editor_cursor_show" - -external get_tex : editor:t -> string - = "ml_mathml_editor_get_tex" - -external get_tml : editor:t -> TDocument.t - = "ml_mathml_editor_get_tml" - -external get_mml : editor:t -> TDocument.t - = "ml_mathml_editor_get_mml" - diff --git a/helm/DEVEL/mathml_editor/ocaml/mathml_editor.ml b/helm/DEVEL/mathml_editor/ocaml/mathml_editor.ml deleted file mode 100644 index a49ea436e..000000000 --- a/helm/DEVEL/mathml_editor/ocaml/mathml_editor.ml +++ /dev/null @@ -1,70 +0,0 @@ -(* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - *) - -let default_dictionary_path = I_mathml_editor.get_default_dictionary_path () -;; - -let default_mathml_stylesheet_path = I_mathml_editor.get_default_mathml_stylesheet_path () -;; - -let default_tex_stylesheet_path = I_mathml_editor.get_default_tex_stylesheet_path () -;; - -let create ?(alt_lexer=false) ~dictionary_uri ~mml_uri ~tml_uri ~log = - I_mathml_editor.create ~alt_lexer ~dictionary_uri ~mml_uri ~tml_uri ~log -;; - -let freeze = I_mathml_editor.freeze -;; - -let thaw = I_mathml_editor.thaw -;; - -let reset = I_mathml_editor.reset -;; - -let push = I_mathml_editor.push -;; - -let drop = I_mathml_editor.drop -;; - -let cursor_hide = I_mathml_editor.cursor_hide -;; - -let cursor_show = I_mathml_editor.cursor_show -;; - -let get_tex = I_mathml_editor.get_tex -;; - -let get_tml ~editor = - new Gdome.document (I_mathml_editor.get_tml ~editor) -;; - -let get_mml ~editor = - new Gdome.document (I_mathml_editor.get_mml ~editor) -;; - diff --git a/helm/DEVEL/mathml_editor/ocaml/mathml_editor.mli b/helm/DEVEL/mathml_editor/ocaml/mathml_editor.mli deleted file mode 100644 index aa0278522..000000000 --- a/helm/DEVEL/mathml_editor/ocaml/mathml_editor.mli +++ /dev/null @@ -1,50 +0,0 @@ -(* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - *) - -val default_dictionary_path : string -val default_mathml_stylesheet_path : string -val default_tex_stylesheet_path : string - -val create : - ?alt_lexer:bool -> - dictionary_uri: string -> - mml_uri: string -> - tml_uri: string -> - log:(int -> string -> unit) -> I_mathml_editor.t - -val freeze : editor:I_mathml_editor.t -> bool -val thaw : editor:I_mathml_editor.t -> bool - -val reset : editor:I_mathml_editor.t -> unit -val push : editor:I_mathml_editor.t -> ch:char -> unit -val drop : editor:I_mathml_editor.t -> alt:bool -> unit - -val cursor_hide : editor:I_mathml_editor.t -> unit -val cursor_show : editor:I_mathml_editor.t -> unit - -val get_tex : editor:I_mathml_editor.t -> string -val get_tml : editor:I_mathml_editor.t -> Gdome.document -val get_mml : editor:I_mathml_editor.t -> Gdome.document - diff --git a/helm/DEVEL/mathml_editor/ocaml/ml_mathml_editor.c b/helm/DEVEL/mathml_editor/ocaml/ml_mathml_editor.c deleted file mode 100644 index c74dfd01c..000000000 --- a/helm/DEVEL/mathml_editor/ocaml/ml_mathml_editor.c +++ /dev/null @@ -1,210 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include - -#include -#include -#include - -#include "mlgdomevalue.h" - -#include "c_mathml_editor.h" - -typedef struct -{ - Editor* c_editor; - value callback; -} ml_Editor; - -ml_Editor* -Editor_val(value v) -{ - ml_Editor* editor = *((ml_Editor**) Data_custom_val(v)); - assert(editor != NULL); - return editor; -} - -static void -ml_mathml_editor_finalize(value v) -{ - ml_Editor* editor = Editor_val(v); - assert(editor); - - remove_global_root(&editor->callback); - c_mathml_editor_destroy(editor->c_editor); - free(editor); -} - -static void -ml_mathml_editor_log_callback(int level, const char* msg, void* user_data) -{ - ml_Editor* ml_editor = (ml_Editor*) user_data; - assert(ml_editor); - callback2(ml_editor->callback, Val_int(level), copy_string(msg)); -} - -value -ml_mathml_editor_get_default_dictionary_path(value unit) -{ - CAMLparam1(unit); - CAMLreturn(copy_string(c_mathml_editor_get_default_dictionary_path())); -} - -value -ml_mathml_editor_get_default_mathml_stylesheet_path(value unit) -{ - CAMLparam1(unit); - CAMLreturn(copy_string(c_mathml_editor_get_default_mathml_stylesheet_path())); -} - -value -ml_mathml_editor_get_default_tex_stylesheet_path(value unit) -{ - CAMLparam1(unit); - CAMLreturn(copy_string(c_mathml_editor_get_default_tex_stylesheet_path())); -} - -value -ml_mathml_editor_new(value alt, - value dictionary_uri, - value tml_mml_uri, - value tml_tex_uri, - value log_message_cb) -{ - static struct custom_operations ops = - { - "HELM/MathML Editor", - ml_mathml_editor_finalize, - custom_compare_default, - custom_hash_default, - custom_serialize_default, - custom_deserialize_default - }; - - value v = alloc_custom(&ops, sizeof(ml_Editor*), 0, 1); - ml_Editor** ml_editor_ref = (ml_Editor**) Data_custom_val(v); - ml_Editor* ml_editor = *ml_editor_ref = malloc(sizeof(ml_Editor)); - ml_editor->c_editor = c_mathml_editor_new(Bool_val(alt), - String_val(dictionary_uri), - String_val(tml_mml_uri), - String_val(tml_tex_uri), - ml_mathml_editor_log_callback, - (void*) ml_editor); - ml_editor->callback = log_message_cb; - register_global_root(&ml_editor->callback); - - return v; -} - -value -ml_mathml_editor_freeze(value v) -{ - CAMLparam1(v); - ml_Editor* editor = Editor_val(v); - CAMLreturn(Val_bool(c_mathml_editor_freeze(editor->c_editor))); -} - -value -ml_mathml_editor_thaw(value v) -{ - CAMLparam1(v); - ml_Editor* editor = Editor_val(v); - CAMLreturn(Val_bool(c_mathml_editor_thaw(editor->c_editor))); -} - -value -ml_mathml_editor_push(value v, value ch) -{ - CAMLparam2(v, ch); - ml_Editor* editor = Editor_val(v); - c_mathml_editor_push(editor->c_editor, Int_val(ch)); - CAMLreturn(Val_unit); -} - -value -ml_mathml_editor_drop(value v, value alt) -{ - CAMLparam2(v, alt); - ml_Editor* editor = Editor_val(v); - c_mathml_editor_drop(editor->c_editor, Bool_val(alt)); - CAMLreturn(Val_unit); -} - -value -ml_mathml_editor_cursor_hide(value v) -{ - CAMLparam1(v); - ml_Editor* editor = Editor_val(v); - CAMLreturn(Val_bool(c_mathml_editor_cursor_hide(editor->c_editor))); -} - -value -ml_mathml_editor_cursor_show(value v) -{ - CAMLparam1(v); - ml_Editor* editor = Editor_val(v); - CAMLreturn(Val_bool(c_mathml_editor_cursor_show(editor->c_editor))); -} - -value -ml_mathml_editor_get_tex(value v) -{ - CAMLparam1(v); - ml_Editor* editor = Editor_val(v); - char* res = c_mathml_editor_get_tex(editor->c_editor); - CAMLlocal1(ml_res); - ml_res = copy_string(res); - free(res); - CAMLreturn(ml_res); -} - -value -ml_mathml_editor_reset(value v, value s) -{ - CAMLparam1(v); - ml_Editor* editor = Editor_val(v); - c_mathml_editor_reset(editor->c_editor); - CAMLreturn(Val_unit); -} - -value -ml_mathml_editor_get_tml(value v) -{ - CAMLparam1(v); - ml_Editor* editor = Editor_val(v); - GdomeDocument* doc = c_mathml_editor_get_tml(editor->c_editor); - CAMLreturn(Val_Document(doc)); -} - -value -ml_mathml_editor_get_mml(value v) -{ - CAMLparam1(v); - ml_Editor* editor = Editor_val(v); - GdomeDocument* doc = c_mathml_editor_get_mml(editor->c_editor); - CAMLreturn(Val_Document(doc)); -} - diff --git a/helm/DEVEL/mathml_editor/src/.cvsignore b/helm/DEVEL/mathml_editor/src/.cvsignore deleted file mode 100644 index 332956c5c..000000000 --- a/helm/DEVEL/mathml_editor/src/.cvsignore +++ /dev/null @@ -1,9 +0,0 @@ -*~ -*.lo -*.o -*.la -.deps -.libs -Makefile -Makefile.in -config.dirs diff --git a/helm/DEVEL/mathml_editor/src/ALogger.hh b/helm/DEVEL/mathml_editor/src/ALogger.hh deleted file mode 100644 index 7843dbc88..000000000 --- a/helm/DEVEL/mathml_editor/src/ALogger.hh +++ /dev/null @@ -1,53 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __ALogger_hh__ -#define __ALogger_hh__ - -#include - -class ALogger -{ -public: - enum Level { Error, Warning, Info, Debug }; - - ALogger(void) { level = Error; } - virtual ~ALogger() { } - void debug(const std::string& msg) { if (level >= Debug) message(Debug, msg); } - void info(const std::string& msg) { if (level >= Info) message(Info, msg); } - void warning(const std::string& msg) { if (level >= Warning) message(Warning, msg); } - void error(const std::string& msg) { if (level >= Error) message(Error, msg); } - - Level verbosity(void) const { return level; } - void verbosity(Level lvl) { level = lvl; } - -protected: - virtual void message(Level, const std::string&) = 0; - -private: - Level level; -}; - -#endif // __ALogger_hh__ diff --git a/helm/DEVEL/mathml_editor/src/AMathMLConsumer.hh b/helm/DEVEL/mathml_editor/src/AMathMLConsumer.hh deleted file mode 100644 index ee5e12690..000000000 --- a/helm/DEVEL/mathml_editor/src/AMathMLConsumer.hh +++ /dev/null @@ -1,38 +0,0 @@ - -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __AMathMLConsumer_hh__ -#define __AMathMLConsumer_hh__ - -class AMathMLConsumer -{ -public: - AMathMLConsumer(void) { }; - virtual ~AMathMLConsumer() { }; - virtual void documentModified(const DOM::Document&) = 0; -}; - -#endif // __AMathMLConsumer_hh__ diff --git a/helm/DEVEL/mathml_editor/src/AMathMLFactory.cc b/helm/DEVEL/mathml_editor/src/AMathMLFactory.cc deleted file mode 100644 index b9826352b..000000000 --- a/helm/DEVEL/mathml_editor/src/AMathMLFactory.cc +++ /dev/null @@ -1,42 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include - -#include "config.dirs" -#include "AMathMLFactory.hh" - -std::string -AMathMLFactory::getDefaultMathMLStylesheetPath() -{ - return PKGDATADIR"/tml-mmlp.xsl"; -} - -std::string -AMathMLFactory::getDefaultTeXStylesheetPath() -{ - return PKGDATADIR"/tml-tex.xsl"; -} - diff --git a/helm/DEVEL/mathml_editor/src/AMathMLFactory.hh b/helm/DEVEL/mathml_editor/src/AMathMLFactory.hh deleted file mode 100644 index f53b56408..000000000 --- a/helm/DEVEL/mathml_editor/src/AMathMLFactory.hh +++ /dev/null @@ -1,47 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __AMathMLFactory_hh__ -#define __AMathMLFactory_hh__ - -#include "dom.hh" - -class AMathMLFactory -{ -public: - AMathMLFactory(class ALogger& l) : logger(l) { }; - virtual ~AMathMLFactory() { }; - - static std::string getDefaultMathMLStylesheetPath(void); - static std::string getDefaultTeXStylesheetPath(void); - - virtual void documentModified(class TDocument&) = 0; - virtual DOM::Document document(void) const = 0; - -protected: - class ALogger& logger; -}; - -#endif // __AMathMLFactory_hh__ diff --git a/helm/DEVEL/mathml_editor/src/APushLexer.hh b/helm/DEVEL/mathml_editor/src/APushLexer.hh deleted file mode 100644 index 4a2940b4c..000000000 --- a/helm/DEVEL/mathml_editor/src/APushLexer.hh +++ /dev/null @@ -1,46 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __APushLexer_hh__ -#define __APushLexer_hh__ - -class APushLexer -{ -public: - APushLexer(class ALogger& l, class APushParser& p) : logger(l), parser(p) { }; - virtual ~APushLexer() { }; - - virtual void push(char) = 0; - virtual void drop(bool) = 0; - virtual bool complete(void) = 0; - virtual void reset(void) = 0; - virtual bool error(void) const = 0; - -protected: - class ALogger& logger; - class APushParser& parser; -}; - -#endif // __APushLexer_hh__ diff --git a/helm/DEVEL/mathml_editor/src/APushParser.cc b/helm/DEVEL/mathml_editor/src/APushParser.cc deleted file mode 100644 index 6f843d508..000000000 --- a/helm/DEVEL/mathml_editor/src/APushParser.cc +++ /dev/null @@ -1,42 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include "APushParser.hh" -#include "AMathMLFactory.hh" - -bool -APushParser::freeze() -{ - return freeze_level++ == 0; -} - -bool -APushParser::thaw() -{ - if (freeze_level > 0) - return --freeze_level == 0; - else - return true; -} diff --git a/helm/DEVEL/mathml_editor/src/APushParser.hh b/helm/DEVEL/mathml_editor/src/APushParser.hh deleted file mode 100644 index 74cb18e3b..000000000 --- a/helm/DEVEL/mathml_editor/src/APushParser.hh +++ /dev/null @@ -1,57 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __APushParser_hh__ -#define __APushParser_hh__ - -#include - -class APushParser -{ -public: - APushParser(class ALogger& l) : logger(l), factory(0), freeze_level(0) { }; - APushParser(class ALogger& l, class AMathMLFactory& f) : logger(l), factory(&f), freeze_level(0) { }; - virtual ~APushParser() { }; - - virtual void reset(void) = 0; - virtual void push(const class TToken&) = 0; - virtual std::string drop(bool) = 0; - virtual void setCursorHint(const std::string&) = 0; - virtual bool hideCursor(void) = 0; - virtual bool showCursor(void) = 0; - - virtual bool freeze(void); - virtual bool thaw(void); - bool frozen(void) const { return freeze_level > 0; }; - -protected: - class ALogger& logger; - class AMathMLFactory* factory; - -private: - unsigned freeze_level; -}; - -#endif // __APushParser_hh__ diff --git a/helm/DEVEL/mathml_editor/src/BROWSE b/helm/DEVEL/mathml_editor/src/BROWSE deleted file mode 100644 index ddd9c4428..000000000 --- a/helm/DEVEL/mathml_editor/src/BROWSE +++ /dev/null @@ -1,503 +0,0 @@ -[ebrowse-hs "ebrowse 5.0" " -x" () ()][ebrowse-ts [ebrowse-cs "APushParser" () 0"APushParser.hh" "class APushParser -{" 75"APushParser.hh" ] -([ebrowse-ts [ebrowse-cs "TPushParser" () 0"TPushParser.hh" "class TPushParser :" 226"TPushParser.hh" ] -()([ebrowse-ms "buffer" () 0 () " std::list buffer;" 1306 2 () () 0] -[ebrowse-ms "cursor" () 0 () " TNode cursor;" 1363 2 () () 0] -[ebrowse-ms "doc" () 0 () " TDocument doc;" 1343 2 () () 0] -[ebrowse-ms "frames" () 0 () " std::stack frames;" 1278 2 () () 0] -[ebrowse-ms "nextId" () 0 () " unsigned nextId;" 1326 2 () () 0] -) -([ebrowse-ms "PRIME" () 4 () " std::string PRIME(void" 490 2 "TPushParser.cc" "TPushParser::PRIME()" 279] -[ebrowse-ms "TPushParser" () 0 () () 0 0 "TPushParser.cc" "TPushParser::TPushParser(const TDictionary& d) :" 58] -[ebrowse-ms "TPushParser" () 0 () " TPushParser(const class TDictionary&);" 275 0 () () 0] -[ebrowse-ms "advance" () 0 () " void advance(const" 1065 2 "TPushParser.cc" "TPushParser::advance(const" 13192] -[ebrowse-ms "do_active" () 0 () " void do_active(const" 916 2 "TPushParser.cc" "TPushParser::do_active(const" 5602] -[ebrowse-ms "do_align" () 0 () " void do_align(void" 624 2 "TPushParser.cc" "TPushParser::do_align()" 1530] -[ebrowse-ms "do_apostrophe" () 0 () " void do_apostrophe(void" 1042 2 "TPushParser.cc" "TPushParser::do_apostrophe()" 4611] -[ebrowse-ms "do_begin" () 0 () " void do_begin(void" 557 2 "TPushParser.cc" "TPushParser::do_begin()" 461] -[ebrowse-ms "do_comment" () 0 () " void do_comment(void" 954 2 "TPushParser.cc" "TPushParser::do_comment()" 5668] -[ebrowse-ms "do_control" () 0 () " void do_control(const" 980 2 "TPushParser.cc" "TPushParser::do_control(const" 6337] -[ebrowse-ms "do_cr" () 0 () " void do_cr(void" 1014 2 "TPushParser.cc" "TPushParser::do_cr()" 5708] -[ebrowse-ms "do_digit" () 0 () " void do_digit(const" 841 2 "TPushParser.cc" "TPushParser::do_digit(const" 4072] -[ebrowse-ms "do_end" () 0 () " void do_end(void" 578 2 "TPushParser.cc" "TPushParser::do_end()" 910] -[ebrowse-ms "do_eol" () 0 () " void do_eol(void" 645 2 "TPushParser.cc" "TPushParser::do_eol()" 2464] -[ebrowse-ms "do_letter" () 0 () " void do_letter(const" 804 2 "TPushParser.cc" "TPushParser::do_letter(const" 3902] -[ebrowse-ms "do_other" () 0 () " void do_other(const" 878 2 "TPushParser.cc" "TPushParser::do_other(const" 5303] -[ebrowse-ms "do_parameter" () 0 () " void do_parameter(const" 673 2 "TPushParser.cc" "TPushParser::do_parameter(const" 2546] -[ebrowse-ms "do_shift" () 0 () " void do_shift(void" 601 2 "TPushParser.cc" "TPushParser::do_shift()" 1487] -[ebrowse-ms "do_space" () 0 () " void do_space(const" 766 2 "TPushParser.cc" "TPushParser::do_space(const" 3794] -[ebrowse-ms "do_subscript" () 0 () " void do_subscript(void" 742 2 "TPushParser.cc" "TPushParser::do_subscript()" 2609] -[ebrowse-ms "do_superscript" () 0 () " void do_superscript(void" 715 2 "TPushParser.cc" "TPushParser::do_superscript()" 3204] -[ebrowse-ms "document" () 4 () " TDocument document(void" 432 0 () " TDocument document(void" 432] -[ebrowse-ms "isPrimes" () 4 () " bool isPrimes(const" 520 2 "TPushParser.cc" "TPushParser::isPrimes(const" 4445] -[ebrowse-ms "process" () 0 () " void process(const" 1096 2 "TPushParser.cc" "TPushParser::process(const" 8538] -[ebrowse-ms "push" () 1 () " virtual void push(const" 349 0 "TPushParser.cc" "TPushParser::push(const" 9379] -[ebrowse-ms "setCursor" () 1 () " virtual void setCursor(const" 390 0 "TPushParser.cc" "TPushParser::setCursor(const" 13865] -[ebrowse-ms "~TPushParser" () 1 () " virtual ~TPushParser()" 321 0 "TPushParser.cc" "TPushParser::~TPushParser()" 241] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TTokenizer" () 0"TTokenizer.hh" "class TTokenizer :" 173"TTokenizer.hh" ] -()([ebrowse-ms "tokens" () 0 () " std::list tokens;" 405 2 () () 0] -) -([ebrowse-ms "TTokenizer" () 0 () " TTokenizer(void) {" 221 0 () " TTokenizer(void) {" 221] -[ebrowse-ms "push" () 1 () " virtual void push(const" 316 2 "TTokenizer.cc" "TTokenizer::push(const" 471] -[ebrowse-ms "setCursor" () 1 () " virtual void setCursor(const" 357 2 () " virtual void setCursor(const" 357] -[ebrowse-ms "tokenize" () 0 () " std::vector tokenize(const" 265 0 "TTokenizer.cc" "TTokenizer::tokenize(const" 120] -) -() -() -() -() -()() -])() -([ebrowse-ms "APushParser" () 0 () " APushParser(void) {" 102 0 () " APushParser(void) {" 102] -[ebrowse-ms "push" () 9 () " virtual void push(const" 164 0 () () 0] -[ebrowse-ms "setCursor" () 9 () " virtual void setCursor(const" 209 0 () () 0] -[ebrowse-ms "~APushParser" () 1 () " virtual ~APushParser()" 133 0 () " virtual ~APushParser()" 133] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "EmptyBuffer" "TLexerPush" 0"TLexerPush.hh" " class EmptyBuffer {" 271() ] -()() -() -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "unary_function" "std" 32() () 0() ] -([ebrowse-ts [ebrowse-cs "StringHash" "TDictionary" 0"TDictionary.hh" " struct StringHash :" 1160"TDictionary.hh" ] -()() -([ebrowse-ms "operator ()" () 4 () " { size_t operator()(const" 1238 0 () " { size_t operator()(const" 1238] -) -() -() -() -() -()() -])() -() -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TObject" () 0"TObject.hh" "class TObject -{" 63"TObject.hh" ] -()() -([ebrowse-ms "TObject" () 0 () " TObject(void) {" 89 1 () " TObject(void) {" 89] -[ebrowse-ms "ref" () 4 () " void ref(coid" 162 0 () " void ref(coid" 162] -[ebrowse-ms "unref" () 4 () " void unref(void" 206 0 () " void unref(void" 206] -[ebrowse-ms "~TObject" () 1 () " virtual ~TObject()" 132 1 () " virtual ~TObject()" 132] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "std" () 0() () 0() ] -()() -() -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TLexerPush" () 0"TLexerPush.hh" "class TLexerPush -{" 59"TLexerPush.hh" ] -()([ebrowse-ms "state" () 0 () " State state;" 388 2 () () 0] -[ebrowse-ms "tokens" () 0 () " std::deque tokens;" 417 2 () () 0] -) -([ebrowse-ms "TLexerPush" () 0 () " TLexerPush(void);" 85 0 "TLexerPush.cc" "TLexerPush::TLexerPush() -{" 51] -[ebrowse-ms "ambiguous" () 4 () " bool ambiguous(void" 182 0 "TLexerPush.cc" "TLexerPush::ambiguous()" 576] -[ebrowse-ms "empty" () 4 () " bool empty(void" 240 0 "TLexerPush.cc" "TLexerPush::empty()" 447] -[ebrowse-ms "front" () 4 () " TToken front(void" 150 0 "TLexerPush.cc" "TLexerPush::front()" 338] -[ebrowse-ms "pending" () 4 () " bool pending(void" 212 0 "TLexerPush.cc" "TLexerPush::pending()" 510] -[ebrowse-ms "pop" () 0 () " TToken pop(void" 128 0 "TLexerPush.cc" "TLexerPush::pop()" 99] -[ebrowse-ms "push" () 0 () " void push(TChar" 108 0 "TLexerPush.cc" "TLexerPush::push(TChar" 664] -) -() -() -() -([ebrowse-ms "State" () 0 () " {" 303 2 () " {" 303] -) -()() -][ebrowse-ts [ebrowse-cs "TLexerPull" () 0() () 0"TLexerPull.cc" ] -()() -([ebrowse-ms "pop" () 0 () () 0 0 () "TLexerPull::pop(TCharStream" 94] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TDictionary" () 0"TDictionary.hh" "class TDictionary -{" 154"TDictionary.hh" ] -()([ebrowse-ms "entries" () 0 () " Dictionary entries;" 1560 2 () () 0] -) -([ebrowse-ms "TDictionary" () 0 () " TDictionary(void) {" 181 0 () " TDictionary(void) {" 181] -[ebrowse-ms "find" () 4 () " const Entry& find(const" 1107 0 "TDictionary.cc" "TDictionary::find(const" 3723] -[ebrowse-ms "load" () 0 () " void load(const" 1069 0 "TDictionary.cc" "TDictionary::load(const" 162] -[ebrowse-ms "~TDictionary" () 0 () " ~TDictionary()" 204 0 () " ~TDictionary()" 204] -) -() -() -() -([ebrowse-ms "Dictionary" () 0 () "ap< std::string, Entry, StringHash > Dictionary;" 1538 2 () () 0] -[ebrowse-ms "EntryClass" () 0 () " {" 301 0 () " {" 301] -[ebrowse-ms "Form" () 0 () " {" 228 0 () " {" 228] -) -()() -][ebrowse-ts [ebrowse-cs "DOM" () 0() () 0() ] -()() -() -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "APushLexer" () 0"APushLexer.hh" "class APushLexer -{" 72"APushLexer.hh" ] -([ebrowse-ts [ebrowse-cs "TPushLexer" () 0"TPushLexer.hh" "class TPushLexer :" 117"TPushLexer.hh" ] -()([ebrowse-ms "buffer" () 0 () " std::string buffer;" 483 2 () () 0] -[ebrowse-ms "state" () 0 () " State state;" 461 2 () () 0] -) -([ebrowse-ms "TPushLexer" () 0 () () 0 0 "TPushLexer.cc" "TPushLexer::TPushLexer(APushParser& p) :" 108] -[ebrowse-ms "TPushLexer" () 0 () " TPushLexer(class APushParser&);" 164 0 () () 0] -[ebrowse-ms "error" () 5 () " virtual bool error(void" 290 0 "TPushLexer.cc" "TPushLexer::error()" 2463] -[ebrowse-ms "push" () 1 () " virtual void push(char" 234 0 "TPushLexer.cc" "TPushLexer::push(char" 1180] -[ebrowse-ms "reset" () 1 () " virtual void reset(void" 262 0 "TPushLexer.cc" "TPushLexer::reset()" 176] -[ebrowse-ms "transaction" () 0 () " void transaction(char" 436 2 "TPushLexer.cc" "TPushLexer::transaction(char" 251] -[ebrowse-ms "~TPushLexer" () 1 () " virtual ~TPushLexer()" 203 0 () " virtual ~TPushLexer()" 203] -) -() -() -() -([ebrowse-ms "State" () 0 () " {" 327 2 () " {" 327] -) -()() -])() -([ebrowse-ms "APushLexer" () 0 () " APushLexer(class APushParser& p) :" 99 0 () " APushLexer(class APushParser& p) :" 99] -[ebrowse-ms "error" () 13 () " virtual bool error(void" 251 0 () () 0] -[ebrowse-ms "push" () 9 () " virtual void push(char" 187 0 () () 0] -[ebrowse-ms "reset" () 9 () " virtual void reset(void" 219 0 () () 0] -[ebrowse-ms "~APushLexer" () 1 () " virtual ~APushLexer()" 156 0 () " virtual ~APushLexer()" 156] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "Ptr" () 32"Ptr.hh" "class Ptr -{" 1067"Ptr.hh" ] -()([ebrowse-ms "ptr" () 0 () " P* ptr;" 1797 2 () () 0] -) -([ebrowse-ms "P" () 4 () " operator P*()" 1487 0 () " operator P*()" 1487] -[ebrowse-ms "Ptr" () 0 () " Ptr(const Ptr& p) :" 1142 0 () " Ptr(const Ptr& p) :" 1142] -[ebrowse-ms "Ptr" () 0 () " Ptr(P* p = 0) :" 1083 0 () " Ptr(P* p = 0) :" 1083] -[ebrowse-ms "Q" () 36 () " template operator Ptr()" 1747 0 () " template operator Ptr()" 1747] -[ebrowse-ms "operator ->" () 4 () " P* operator->()" 1253 0 () " P* operator->()" 1253] -[ebrowse-ms "operator =" () 0 () " Ptr& operator=(const" 1316 0 () " Ptr& operator=(const" 1316] -[ebrowse-ms "~Ptr" () 0 () " ~Ptr()" 1202 0 () " ~Ptr()" 1202] -) -() -() -([ebrowse-ms "is_a" () 32 () " template friend bool is_a(const" 1659 0 () " template friend bool is_a(const" 1659] -[ebrowse-ms "smart_cast" () 32 () "emplate friend Ptr smart_cast(const" 1561 0 () "emplate friend Ptr smart_cast(const" 1561] -) -() -()() -][ebrowse-ts [ebrowse-cs "TToken" () 0"TToken.hh" "struct TToken -{" 80"TToken.hh" ] -()([ebrowse-ms "category" () 0 () " TCat category;" 627 0 () () 0] -[ebrowse-ms "value" () 0 () " std::string value;" 648 0 () () 0] -) -([ebrowse-ms "TToken" () 0 () " TToken(TCat c, const std::string& v) :" 438 0 () " TToken(TCat c, const std::string& v) :" 438] -[ebrowse-ms "TToken" () 0 () " TToken(TCat c, char ch) :" 366 0 () " TToken(TCat c, char ch) :" 366] -[ebrowse-ms "TToken" () 0 () " TToken(TCat c) :" 330 0 () " TToken(TCat c) :" 330] -[ebrowse-ms "operator ==" () 4 () " bool operator==(const" 517 0 () " bool operator==(const" 517] -) -() -() -() -([ebrowse-ms "TCat" () 0 () " {" 98 0 () " {" 98] -) -()() -][ebrowse-ts [ebrowse-cs "binary_function" "std" 32() () 0() ] -([ebrowse-ts [ebrowse-cs "StringEq" "TDictionary" 0"TDictionary.hh" " struct StringEq :" 1327() ] -()() -([ebrowse-ms "operator ()" () 4 () " { bool operator()(const" 1415 0 () () 0] -) -() -() -() -() -()() -])() -() -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TNode" () 0"TNode.hh" "class TNode -{" 124"TNode.hh" ] -()([ebrowse-ms "node" () 0 () " DOM::Element node;" 2444 2 () () 0] -) -([ebrowse-ms "TNode" () 0 () " TNode(const TNode& n) :" 270 0 () " TNode(const TNode& n) :" 270] -[ebrowse-ms "TNode" () 0 () " TNode(void) :" 145 0 () " TNode(void) :" 145] -[ebrowse-ms "append" () 4 () " void append(const" 1667 0 "TNode.cc" "TNode::append(const" 2450] -[ebrowse-ms "append" () 4 () " void append(const" 1631 0 "TNode.cc" "TNode::append(const" 2348] -[ebrowse-ms "child" () 4 () " TNode child(unsigned" 592 0 "TNode.cc" "TNode::child(unsigned" 2874] -[ebrowse-ms "core" () 4 () " TNode core(void" 425 0 "TNode.cc" "TNode::core()" 1413] -[ebrowse-ms "empty" () 4 () " bool empty(void" 648 0 () " bool empty(void" 648] -[ebrowse-ms "first" () 4 () " TNode first(void" 480 0 "TNode.cc" "TNode::first()" 1075] -[ebrowse-ms "firstL" () 4 () " TNode firstL(void" 508 0 "TNode.cc" "TNode::firstL()" 1259] -[ebrowse-ms "get" () 4 () " std::string get(const" 1758 0 "TNode.cc" "TNode::get(const" 3007] -[ebrowse-ms "hasId" () 4 () " bool hasId(void" 1994 0 () " bool hasId(void" 1994] -[ebrowse-ms "insert" () 4 () " void insert(const" 1595 0 "TNode.cc" "TNode::insert(const" 2193] -[ebrowse-ms "is" () 4 () " bool is(const" 2055 0 () " bool is(const" 2055] -[ebrowse-ms "isC" () 4 () " bool isC(const" 2303 0 () " bool isC(const" 2303] -[ebrowse-ms "isC" () 4 () " bool isC(void" 2258 0 () " bool isC(void" 2258] -[ebrowse-ms "isG" () 4 () " bool isG(void" 2119 0 () " bool isG(void" 2119] -[ebrowse-ms "isSb" () 4 () " bool isSb(void" 2165 0 () " bool isSb(void" 2165] -[ebrowse-ms "isSp" () 4 () " bool isSp(void" 2212 0 () " bool isSp(void" 2212] -[ebrowse-ms "last" () 4 () " TNode last(void" 534 0 "TNode.cc" "TNode::last()" 736] -[ebrowse-ms "lastL" () 4 () " TNode lastL(void" 561 0 "TNode.cc" "TNode::lastL()" 922] -[ebrowse-ms "name" () 4 () " std::string name(void" 1863 0 () " std::string name(void" 1863] -[ebrowse-ms "nameC" () 4 () " std::string nameC(void" 1929 0 () " std::string nameC(void" 1929] -[ebrowse-ms "next" () 4 () " TNode next(void" 319 0 "TNode.cc" "TNode::next()" 63] -[ebrowse-ms "nextL" () 4 () " TNode nextL(void" 346 0 "TNode.cc" "TNode::nextL()" 247] -[ebrowse-ms "operator !=" () 4 () " bool operator!=(const" 1295 0 () " bool operator!=(const" 1295] -[ebrowse-ms "operator ==" () 4 () " bool operator==(const" 1227 0 () " bool operator==(const" 1227] -[ebrowse-ms "operator []" () 4 () " ProxyAttr operator[](const" 1422 0 () " ProxyAttr operator[](const" 1422] -[ebrowse-ms "operator []" () 4 () " TNode operator[](int" 1362 0 () " TNode operator[](int" 1362] -[ebrowse-ms "parent" () 4 () " TNode parent(void" 453 0 "TNode.cc" "TNode::parent()" 1587] -[ebrowse-ms "prepend" () 4 () " void prepend(const" 1718 0 "TNode.cc" "TNode::prepend(const" 2683] -[ebrowse-ms "prev" () 4 () " TNode prev(void" 372 0 "TNode.cc" "TNode::prev()" 396] -[ebrowse-ms "prevL" () 4 () " TNode prevL(void" 399 0 "TNode.cc" "TNode::prevL()" 588] -[ebrowse-ms "remove" () 4 () " void remove(void" 1529 0 "TNode.cc" "TNode::remove()" 1913] -[ebrowse-ms "replace" () 4 () " void replace(const" 1559 0 "TNode.cc" "TNode::replace(const" 2038] -[ebrowse-ms "set" () 4 () " void set(const" 1797 0 "TNode.cc" "TNode::set(const" 3109] -[ebrowse-ms "size" () 4 () " unsigned size(void" 621 0 "TNode.cc" "TNode::size()" 1749] -[ebrowse-ms "value" () 4 () " std::string value(void" 707 0 () " std::string value(void" 707] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "Entry" "TDictionary" 0"TDictionary.hh" " struct Entry - {" 405"TDictionary.hh" ] -()([ebrowse-ms "cls" () 0 () " EntryClass cls;" 806 0 () () 0] -[ebrowse-ms "delimiter" () 0 () " unsigned delimiter : 1;" 909 0 () () 0] -[ebrowse-ms "embellishment" () 0 () " unsigned embellishment : 1;" 966 0 () () 0] -[ebrowse-ms "infix" () 0 () " unsigned infix : 8;" 830 0 () () 0] -[ebrowse-ms "leftOpen" () 0 () " unsigned leftOpen : 1;" 993 0 () () 0] -[ebrowse-ms "limits" () 0 () " unsigned limits : 1;" 934 0 () () 0] -[ebrowse-ms "pattern" () 0 () " std::vector pattern;" 597 0 () () 0] -[ebrowse-ms "postfix" () 0 () " unsigned postfix : 8;" 881 0 () () 0] -[ebrowse-ms "prefix" () 0 () " unsigned prefix : 8;" 855 0 () () 0] -[ebrowse-ms "rightOpen" () 0 () " unsigned rightOpen : 1;" 1021 0 () () 0] -[ebrowse-ms "table" () 0 () " unsigned table : 1;" 1045 0 () () 0] -[ebrowse-ms "value" () 0 () " std::string value;" 620 0 () () 0] -) -([ebrowse-ms "Entry" () 0 () " {" 420 0 () " {" 420] -[ebrowse-ms "defined" () 4 () " bool defined(void" 643 0 () " bool defined(void" 643] -[ebrowse-ms "hasArguments" () 4 () " bool hasArguments(void" 707 0 () " bool hasArguments(void" 707] -[ebrowse-ms "paramDelimited" () 4 () " bool paramDelimited(unsigned" 777 0 "TDictionary.cc" "TDictionary::Entry::paramDelimited(unsigned" 4012] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "Frame" "TPushParser" 0"TPushParser.hh" " struct Frame - {" 1126"TPushParser.hh" ] -()([ebrowse-ms "entry" () 0 () " const TDictionary::Entry& entry;" 1226 0 () () 0] -[ebrowse-ms "pos" () 0 () " unsigned pos;" 1244 0 () () 0] -) -([ebrowse-ms "Frame" () 0 () " Frame(const TDictionary::Entry& e) :" 1142 0 () " Frame(const TDictionary::Entry& e) :" 1142] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TCharStream" () 0"TCharStream.hh" "class TCharStream -{" 94"TCharStream.hh" ] -([ebrowse-ts [ebrowse-cs "TCharStreamString" () 0"TCharStreamString.hh" "class TCharStreamString :" 120"TCharStreamString.hh" ] -()([ebrowse-ms "buffer" () 0 () " TString buffer;" 555 2 () () 0] -[ebrowse-ms "idx" () 0 () " unsigned long idx;" 536 2 () () 0] -) -([ebrowse-ms "TCharStreamString" () 0 () " TCharStreamString(const TString& s) :" 175 0 () " TCharStreamString(const TString& s) :" 175] -[ebrowse-ms "look" () 5 () " virtual TChar look(void" 343 0 () " virtual TChar look(void" 343] -[ebrowse-ms "more" () 5 () " virtual bool more(void" 275 0 () " virtual bool more(void" 275] -[ebrowse-ms "next" () 1 () " virtual TChar next(void" 439 0 () " virtual TChar next(void" 439] -[ebrowse-ms "~TCharStreamString" () 1 () " virtual ~TCharStreamString()" 243 0 () " virtual ~TCharStreamString()" 243] -) -() -() -() -() -()() -])() -([ebrowse-ms "TCharStream" () 0 () " TCharStream(void) {" 121 0 () " TCharStream(void) {" 121] -[ebrowse-ms "look" () 13 () " virtual TChar look(void" 222 0 () () 0] -[ebrowse-ms "more" () 13 () " virtual bool more(void" 184 0 () () 0] -[ebrowse-ms "next" () 9 () " virtual TChar next(void" 260 0 () () 0] -[ebrowse-ms "~TCharStream" () 1 () " virtual ~TCharStream()" 152 0 () " virtual ~TCharStream()" 152] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "EmptyStream" "TCharStream" 0"TCharStream.hh" " class EmptyStream {" 289() ] -()() -() -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "*Globals*" () 0() () 0"APushLexer.hh" ] -()() -([ebrowse-ms "dispatch" () 0 "special.cc" "dispatch(const" 1012 0 "special.cc" "dispatch(const" 1012] -[ebrowse-ms "do_apostrophe" () 0 "special.cc" "do_apostrophe(const" 669 0 "special.cc" "do_apostrophe(const" 669] -[ebrowse-ms "do_bgroup" () 0 "special.cc" "do_bgroup(const" 149 0 "special.cc" "do_bgroup(const" 149] -[ebrowse-ms "do_control" () 0 "special.cc" "do_control(const" 711 0 "special.cc" "do_control(const" 711] -[ebrowse-ms "do_other" () 0 "special.cc" "do_other(const" 776 0 "special.cc" "do_other(const" 776] -[ebrowse-ms "finishG" () 0 "special.cc" "void finishG(const" 118 0 () () 0] -[ebrowse-ms "getCore" () 0 "domnav.cc" "getCore(const" 629 0 "domnav.cc" "getCore(const" 629] -[ebrowse-ms "getRightmostChild" () 0 "domnav.cc" "getRightmostChild(const" 37 0 "domnav.cc" "getRightmostChild(const" 37] -[ebrowse-ms "isDelimiter" () 0 "domnav.cc" "isDelimiter(const" 1716 0 "domnav.cc" "isDelimiter(const" 1716] -[ebrowse-ms "isFunction" () 0 "domnav.cc" "isFunction(const" 1879 0 "domnav.cc" "isFunction(const" 1879] -[ebrowse-ms "isGroup" () 0 "domnav.cc" "isGroup(const" 1214 0 "domnav.cc" "isGroup(const" 1214] -[ebrowse-ms "isInferred" () 0 "domnav.cc" "isInferred(const" 985 0 "domnav.cc" "isInferred(const" 985] -[ebrowse-ms "isMacro" () 0 "domnav.cc" "isMacro(const" 1085 0 "domnav.cc" "isMacro(const" 1085] -[ebrowse-ms "isOperator" () 0 "domnav.cc" "isOperator(const" 1553 0 "domnav.cc" "isOperator(const" 1553] -[ebrowse-ms "isPrimes" () 0 "domnav.cc" "isPrimes(const" 1451 0 "domnav.cc" "isPrimes(const" 1451] -[ebrowse-ms "isSb" () 0 "domnav.cc" "isSb(const" 1291 0 "domnav.cc" "isSb(const" 1291] -[ebrowse-ms "isSp" () 0 "domnav.cc" "isSp(const" 1369 0 "domnav.cc" "isSp(const" 1369] -[ebrowse-ms "isUnicodeAlpha" () 2 "dom.hh" "inline bool isUnicodeAlpha(TChar" 303 0 "dom.hh" "inline bool isUnicodeAlpha(TChar" 303] -[ebrowse-ms "isUnicodeDigit" () 2 "dom.hh" "inline bool isUnicodeDigit(TChar" 408 0 "dom.hh" "inline bool isUnicodeDigit(TChar" 408] -[ebrowse-ms "isUnicodeSpace" () 2 "dom.hh" "inline bool isUnicodeSpace(TChar" 198 0 "dom.hh" "inline bool isUnicodeSpace(TChar" 198] -[ebrowse-ms "main" () 0 "texlexer.cc" "main()" 51 0 "texlexer.cc" "main()" 51] -[ebrowse-ms "prevLinearSibling" () 0 "domnav.cc" "prevLinearSibling(const" 324 0 "domnav.cc" "prevLinearSibling(const" 324] -[ebrowse-ms "replace" () 0 "domnav.cc" "replace(const" 834 0 "domnav.cc" "replace(const" 834] -[ebrowse-ms "tokenize" () 0 "tokenizer.hh" "std::vector tokenize(const" 123 0 () () 0] -) -([ebrowse-ms "undefinedEntry" () 0 () () 0 0 "TDictionary.cc" "static TDictionary::Entry undefinedEntry;" 132] -) -() -([ebrowse-ms "Ptr_hh" () 512 () () 0 0 "Ptr.hh" "#define Ptr_hh -" 1036] -[ebrowse-ms "TML_NS_URI" () 512 () () 0 0 "globals.hh" "#define TML_NS_URI " 67] -[ebrowse-ms "XMLNS_NS_URI" () 512 () () 0 0 "globals.hh" "#define XMLNS_NS_URI " 123] -[ebrowse-ms "__APushLexer_hh__" () 512 () () 0 0 () "#define __APushLexer_hh__ -" 53] -[ebrowse-ms "__APushParser_hh__" () 512 () () 0 0 "APushParser.hh" "#define __APushParser_hh__ -" 55] -[ebrowse-ms "__TCharStreamString_hh__" () 512 () () 0 0 "TCharStreamString.hh" "#define __TCharStreamString_hh__ -" 67] -[ebrowse-ms "__TCharStream_hh__" () 512 () () 0 0 "TCharStream.hh" "#define __TCharStream_hh__ -" 55] -[ebrowse-ms "__TDictionary_hh__" () 512 () () 0 0 "TDictionary.hh" "#define __TDictionary_hh__ -" 55] -[ebrowse-ms "__TDocument_hh__" () 512 () () 0 0 "TDocument.hh" "#define __TDocument_hh__ -" 51] -[ebrowse-ms "__TNode_hh__" () 512 () () 0 0 "TNode.hh" "#define __TNode_hh__ -" 43] -[ebrowse-ms "__TObject_hh__" () 512 () () 0 0 "TObject.hh" "#define __TObject_hh__ -" 47] -[ebrowse-ms "__TPushLexer_hh__" () 512 () () 0 0 "TPushLexer.hh" "#define __TPushLexer_hh__ -" 53] -[ebrowse-ms "__TPushParser_hh__" () 512 () () 0 0 "TPushParser.hh" "#define __TPushParser_hh__ -" 55] -[ebrowse-ms "__TToken_hh__" () 512 () () 0 0 "TToken.hh" "#define __TToken_hh__ -" 45] -[ebrowse-ms "__TTokenizer_hh__" () 512 () () 0 0 "TTokenizer.hh" "#define __TTokenizer_hh__ -" 53] -[ebrowse-ms "__dom_hh__" () 512 () () 0 0 "dom.hh" "#define __dom_hh__ -" 39] -[ebrowse-ms "__globals_hh__" () 512 () () 0 0 "globals.hh" "#define __globals_hh__ -" 47] -[ebrowse-ms "__tokenzier_hh__" () 512 () () 0 0 "tokenizer.hh" "#define __tokenzier_hh__ -" 51] -) -([ebrowse-ms "TChar" () 0 () () 0 0 "dom.hh" "typedef DOM::Char32 TChar;" 131] -[ebrowse-ms "TString" () 0 () () 0 0 "dom.hh" "typedef DOM::UCS4String TString;" 164] -) -()() -][ebrowse-ts [ebrowse-cs "ProxyAttr" "TNode" 0"TNode.hh" " class ProxyAttr - {" 765"TNode.hh" ] -()([ebrowse-ms "name" () 0 () " std::string name;" 1155 2 () () 0] -[ebrowse-ms "node" () 0 () " DOM::Element node;" 1132 2 () () 0] -) -([ebrowse-ms "ProxyAttr" () 0 () "r(const DOM::Element& n, const std::string& s) :" 795 0 () "r(const DOM::Element& n, const std::string& s) :" 795] -[ebrowse-ms "operator =" () 0 () " ProxyAttr& operator=(const" 959 0 () " ProxyAttr& operator=(const" 959] -[ebrowse-ms "operator ==" () 0 () " bool operator==(const" 1040 0 () " bool operator==(const" 1040] -[ebrowse-ms "string" () 4 () " operator std::string()" 885 0 () " operator std::string()" 885] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "EventListener" "DOM" 0() () 0() ] -([ebrowse-ts [ebrowse-cs "DOMSubtreeModifiedListener" "TDocument" 0"TDocument.hh" " class DOMSubtreeModifiedListener :" 1015"TDocument.hh" ] -()([ebrowse-ms "doc" () 0 () " TDocument doc;" 1247 2 () () 0] -) -([ebrowse-ms "DOMSubtreeModifiedListener" () 0 () "DOMSubtreeModifiedListener(const TDocument& d) :" 1092 0 () "DOMSubtreeModifiedListener(const TDocument& d) :" 1092] -[ebrowse-ms "handleEvent" () 1 () " virtual void handleEvent(const" 1202 0 () () 0] -[ebrowse-ms "~DOMSubtreeModifiedListener" () 1 () " virtual ~DOMSubtreeModifiedListener()" 1162 0 () " virtual ~DOMSubtreeModifiedListener()" 1162] -) -() -() -() -() -()() -][ebrowse-ts [ebrowse-cs "TDocument" () 0"TDocument.hh" "class TDocument :" 108"TDocument.hh" ] -()([ebrowse-ms "dirty" () 0 () " DOM::Element dirty;" 971 2 () () 0] -[ebrowse-ms "doc" () 0 () " DOM::Document doc;" 949 2 () () 0] -) -([ebrowse-ms "TDocument" () 0 () " TDocument(void);" 162 0 "TDocument.cc" "TDocument::TDocument() -{" 108] -[ebrowse-ms "create" () 4 () " TNode create(const" 202 0 "TDocument.cc" "TDocument::create(const" 789] -[ebrowse-ms "createC" () 4 () " TNode createC(const" 327 0 "TDocument.cc" "TDocument::createC(const" 1062] -[ebrowse-ms "createG" () 4 () " TNode createG(unsigned" 262 0 () " TNode createG(unsigned" 262] -[ebrowse-ms "createI" () 4 () " TNode createI(const" 461 0 () " TNode createI(const" 461] -[ebrowse-ms "createN" () 4 () " TNode createN(const" 561 0 () " TNode createN(const" 561] -[ebrowse-ms "createO" () 4 () " TNode createO(const" 661 0 () " TNode createO(const" 661] -[ebrowse-ms "createT" () 4 () " TNode createT(const" 384 0 "TDocument.cc" "TDocument::createT(const" 1197] -[ebrowse-ms "dirtyIdNode" () 4 () " TNode dirtyIdNode(void" 872 0 "TDocument.cc" "TDocument::dirtyIdNode()" 2081] -[ebrowse-ms "dirtyNode" () 4 () " TNode dirtyNode(void" 821 0 () " TNode dirtyNode(void" 821] -[ebrowse-ms "handleEvent" () 1 () " virtual void handleEvent(const" 1293 2 "TDocument.cc" "TDocument::handleEvent(const" 2348] -[ebrowse-ms "root" () 0 () " TNode root(void" 758 0 () " TNode root(void" 758] -[ebrowse-ms "serialize" () 4 () " void serialize(const" 904 0 "TDocument.cc" "TDocument::serialize(const" 637] -[ebrowse-ms "~TDocument" () 0 () " ~TDocument()" 179 0 "TDocument.cc" "TDocument::~TDocument()" 460] -) -() -([ebrowse-ms "findCommonAncestor" () 0 () " static DOM::Node findCommonAncestor(const" 1398 2 "TDocument.cc" "TDocument::findCommonAncestor(const" 1560] -[ebrowse-ms "nodeDepth" () 0 () " static unsigned nodeDepth(const" 1341 2 "TDocument.cc" "TDocument::nodeDepth(const" 1362] -) -() -() -()() -])() -() -() -() -() -() -()() -] \ No newline at end of file diff --git a/helm/DEVEL/mathml_editor/src/CLoggerConsole.cc b/helm/DEVEL/mathml_editor/src/CLoggerConsole.cc deleted file mode 100644 index 0265f389d..000000000 --- a/helm/DEVEL/mathml_editor/src/CLoggerConsole.cc +++ /dev/null @@ -1,35 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include - -#include "CLoggerConsole.hh" - -void -CLoggerConsole::message(Level l, const std::string& msg) -{ - const char* ls[] = { "Error", "Warning", "Info", "Debug" }; - std::cerr << "*** " << ls[l] << ": " << msg << std::endl; -} diff --git a/helm/DEVEL/mathml_editor/src/CLoggerConsole.hh b/helm/DEVEL/mathml_editor/src/CLoggerConsole.hh deleted file mode 100644 index 630f7cf32..000000000 --- a/helm/DEVEL/mathml_editor/src/CLoggerConsole.hh +++ /dev/null @@ -1,40 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __CLoggerConsole_hh__ -#define __CLoggerConsole_hh__ - -#include "ALogger.hh" - -class CLoggerConsole : public ALogger -{ -public: - CLoggerConsole(void) { }; - -protected: - virtual void message(Level, const std::string&); -}; - -#endif // __CLoggerConsole_hh__ diff --git a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc b/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc deleted file mode 100644 index 888452030..000000000 --- a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.cc +++ /dev/null @@ -1,145 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include "dom.hh" -#include "TNode.hh" -#include "ALogger.hh" -#include "TDocument.hh" -#include "CMathMLFactoryXSLT.hh" -#include "AMathMLConsumer.hh" -#include - -CMathMLFactoryXSLT::CMathMLFactoryXSLT(ALogger& l, const DOMX::XSLTStylesheet& s) - : AMathMLFactory(l), style(s) -{ - DOM::DOMImplementation di; - DOM::DocumentType dt; - result = di.createDocument(MATHML_NS_URI, "m:math", dt); -} - -#if 1 -void -CMathMLFactoryXSLT::documentModified(TDocument& doc) -{ - std::vector< std::pair > dirtyId; - if (TNode dirty = doc.dirtyNode()) - if (result.get_documentElement().hasAttribute("xref")) - dirtyId.push_back(std::make_pair(DOM::GdomeString("id"), - DOM::GdomeString("'" + std::string(dirty["id"]) + "'"))); - DOM::Document res = style.apply(doc.document(), dirtyId); - assert(res); - //style.save(doc.document(), stdout); - - if (DOM::Element wrapper = res.get_documentElement()) - { - if (DOM::Element root = wrapper.get_firstChild()) - if (DOM::Element oldRoot = result.get_documentElement().get_firstChild()) - { - bool ok = subst(oldRoot, root.getAttribute("xref"), result.importNode(root, true)); - assert(ok); - doc.clearDirty(); - } - else - { - result.get_documentElement().appendChild(result.importNode(root, true)); - } - } - else - { - // Something wrong happened while applying the stylesheet. - DOM::Element root = result.get_documentElement(); - DOM::Node p = root.get_firstChild(); - while (p) { - DOM::Node next = p.get_nextSibling(); - root.removeChild(p); - p = next; - } - logger.error("The stylesheet produced an empty document"); - } - - //style.save(result, stdout); -} -#else -void -CMathMLFactoryXSLT::documentModified(TDocument& doc) -{ - DOM::Document res = style.apply(doc.document()); - assert(res); - - if (DOM::Element root = res.get_documentElement()) - { - DOM::Element newRoot = root.get_firstChild(); - assert(newRoot); - - if (DOM::Element oldSubRoot = result.get_documentElement().get_firstChild()) - { - result.get_documentElement().replaceChild(result.importNode(newRoot, true), oldSubRoot); - } - else - { - result.get_documentElement().appendChild(result.importNode(newRoot, true)); - } - } - else - { - // Something wrong happened while applying the stylesheet. - DOM::Element root = result.get_documentElement(); - DOM::Node p = root.get_firstChild(); - while (p) { - DOM::Node next = p.get_nextSibling(); - root.removeChild(p); - p = next; - } - logger.error("The stylesheet produced an empty document"); - } -} -#endif - -bool -CMathMLFactoryXSLT::subst(const DOM::Element& e1, const DOM::GdomeString& id, const DOM::Element& e2) -{ - assert(e1); - assert(e2); - if (e1.getAttribute("xref") == id) - { - DOM::Node parent = e1.get_parentNode(); - assert(parent); - parent.replaceChild(e2, e1); - return true; - } - else - { - DOM::Node p = e1.get_firstChild(); - while (p) - { - while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_nextSibling(); - if (p) - if (subst(p, id, e2)) return true; - else p = p.get_nextSibling(); - } - return false; - } -} - diff --git a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.hh b/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.hh deleted file mode 100644 index 34d8fa984..000000000 --- a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLT.hh +++ /dev/null @@ -1,47 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __CMathMLFactoryXSLT_hh__ -#define __CMathMLFactoryXSLT_hh__ - -#include -#include "AMathMLFactory.hh" - -class CMathMLFactoryXSLT : public AMathMLFactory -{ -public: - CMathMLFactoryXSLT(class ALogger&, const class GdomeSmartDOMExt::XSLTStylesheet&); - - virtual void documentModified(class TDocument&); - virtual GdomeSmartDOM::Document document(void) const { return result; }; - -private: - static bool subst(const GdomeSmartDOM::Element&, const GdomeSmartDOM::GdomeString&, const GdomeSmartDOM::Element&); - - const class GdomeSmartDOMExt::XSLTStylesheet& style; - GdomeSmartDOM::Document result; -}; - -#endif // __CMathMLFactoryXSLT_hh__ diff --git a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLTDiff.cc b/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLTDiff.cc deleted file mode 100644 index 456f383b4..000000000 --- a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLTDiff.cc +++ /dev/null @@ -1,102 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include -#include - -#include "dom.hh" -#include "timer.hh" -#include "Diff.hh" -#include "TNode.hh" -#include "TDocument.hh" -#include "CMathMLFactoryXSLTDiff.hh" -#include "AMathMLConsumer.hh" - -CMathMLFactoryXSLTDiff::CMathMLFactoryXSLTDiff(ALogger& l, const DOMX::XSLTStylesheet& s) - : AMathMLFactory(l), style(s) -{ - DOM::DOMImplementation di; - DOM::DocumentType dt; - result = di.createDocument(MATHML_NS_URI, "m:math", dt); -} - -void -CMathMLFactoryXSLTDiff::documentModified(TDocument& doc) -{ -#if 0 - std::vector< std::pair > dirtyId; - if (TNode dirty = doc.dirtyNode()) - if (false && result.get_documentElement().hasAttribute("xref")) - dirtyId.push_back(std::make_pair(DOM::GdomeString("id"), - DOM::GdomeString("'" + std::string(dirty["id"]) + "'"))); -#endif - long t0 = getTimer(); - DOM::Document res = style.apply(doc.document()); - long t1 = getTimer(); - assert(res); - //cout << "*** THE TEX DOCUMENT" << endl; - //style.save(doc.document(), stdout); - //std::cout << "*** THE CURRENT DOCUMENT:" << std::endl; - //if (result) style.save(result, stdout); - //std::cout << "*** THE NEW DOCUMENT:" << std::endl; - //style.save(res, stdout); - //std::cout << "*** THE DIFF:" << std::endl; - DOMX::Diff diff = DOMX::Diff::diff(result, res); - //style.save(diff.document(), stdout); - long t2 = getTimer(); - diff.patch(); - long t3 = getTimer(); - - //std::cout << "=== APPLY = " << (t1 - t0) / 1000 << " DIFF = " << (t2 - t1) / 1000 << " PATCH = " << (t3 - t2) / 1000 << std::endl; - - doc.clearDirty(); -} - -bool -CMathMLFactoryXSLTDiff::subst(const DOM::Element& e1, const DOM::GdomeString& id, const DOM::Element& e2) -{ - assert(e1); - assert(e2); - if (e1.getAttribute("xref") == id) - { - DOMX::Diff diff = DOMX::Diff::diff(e1, e2); - //style.save(diff.document(), stdout); - diff.patch(); - return true; - } - else - { - DOM::Node p = e1.get_firstChild(); - while (p) - { - while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_nextSibling(); - if (p) - if (subst(p, id, e2)) return true; - else p = p.get_nextSibling(); - } - return false; - } -} - diff --git a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLTDiff.hh b/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLTDiff.hh deleted file mode 100644 index 75ebfc260..000000000 --- a/helm/DEVEL/mathml_editor/src/CMathMLFactoryXSLTDiff.hh +++ /dev/null @@ -1,46 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __CMathMLFactoryXSLTDiff_hh__ -#define __CMathMLFactoryXSLTDiff_hh__ - -#include "AMathMLFactory.hh" - -class CMathMLFactoryXSLTDiff : public AMathMLFactory -{ -public: - CMathMLFactoryXSLTDiff(class ALogger&, const DOMX::XSLTStylesheet&); - - virtual void documentModified(class TDocument&); - virtual DOM::Document document(void) const { return result; }; - -private: - bool subst(const DOM::Element& e1, const DOM::GdomeString& id, const DOM::Element& e2); - - const DOMX::XSLTStylesheet& style; - DOM::Document result; -}; - -#endif // __CMathMLFactoryXSLT_hh__ diff --git a/helm/DEVEL/mathml_editor/src/Diff.cc b/helm/DEVEL/mathml_editor/src/Diff.cc deleted file mode 100644 index d8df81201..000000000 --- a/helm/DEVEL/mathml_editor/src/Diff.cc +++ /dev/null @@ -1,393 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include -#include -#include -#include -#include - -#include "Diff.hh" - -namespace GdomeSmartDOMExt -{ - - Diff - Diff::diff(const Document& dest, const Document& source, flatNodeEq flatEq) - { - assert(dest); - assert(source); - assert(flatEq); - - return diff(dest.get_documentElement(), source.get_documentElement(), flatEq); - } - - Diff - Diff::diff(const Element& dest, const Element& source, flatNodeEq flatEq) - { - assert(dest); - assert(source); - assert(flatEq); - - DOMImplementation di; - Document doc = di.createDocument(DDIFF_NS_URI, "diff:doc", DocumentType()); - Element root = doc.get_documentElement(); - root.setAttributeNS(XMLNS_NS_URI, "xmlns:diff", DDIFF_NS_URI); - - Diff diff(dest, doc, flatEq); - if (Node d = diff.diffNodes(dest, source)) root.appendChild(d); - else root.appendChild(doc.createElementNS(DDIFF_NS_URI, "diff:same")); - - return diff; - } - - struct NodeEqPredicate : std::binary_function - { - NodeEqPredicate(Diff::flatNodeEq e) : eq(e) { }; - bool operator()(const Node& n1, const Node& n2) const { return eq(n1, n2); }; - - private: - Diff::flatNodeEq eq; - }; - - std::vector - collectProperAttributes(const Node& n) - { - assert(n); - NamedNodeMap map = n.get_attributes(); - unsigned len = map.get_length(); - - std::vector res; - res.reserve(len); - for (unsigned i = 0; i < len; i++) - { - Node attr = map.item(i); - assert(attr); - if (attr.get_nodeName() != "xmlns" && attr.get_prefix() != "xmlns") res.push_back(attr); - } - - return res; - } - - bool - Diff::defaultFlatNodeEq(const Node& n1, const Node& n2) - { - assert(n1); - assert(n2); - - unsigned nodeType = n1.get_nodeType(); - if (nodeType != n2.get_nodeType()) return false; - - GdomeString ns1 = n1.get_namespaceURI(); - GdomeString ns2 = n2.get_namespaceURI(); - if (ns1 != ns2) return false; - - switch (nodeType) - { - case Node::ATTRIBUTE_NODE: - if (!ns1.null()) - { - assert(!ns2.null()); - if (n1.get_localName() != n2.get_localName()) return false; - } - else - { - assert(ns2.null()); - if (n1.get_nodeName() != n2.get_nodeName()) return false; - } - // WARNING: fallback for checking node value - case Node::TEXT_NODE: - case Node::CDATA_SECTION_NODE: - if (n1.get_nodeValue() != n2.get_nodeValue()) return false; - return true; - case Node::ELEMENT_NODE: - { - //cout << "comparing: " << n1.get_nodeName() << " ? " << n2.get_nodeName() << endl; - if (!ns1.null()) - { - assert(!ns2.null()); - if (n1.get_localName() != n2.get_localName()) return false; - } - else - { - assert(ns2.null()); - if (n1.get_nodeName() != n2.get_nodeName()) return false; - } -#if 1 - std::vector m1 = collectProperAttributes(n1); - std::vector m2 = collectProperAttributes(n2); - if (m1.size() != m2.size()) return false; - - for (unsigned i = 0; i < m1.size(); i++) - { - std::vector::iterator p2 = std::find_if(m2.begin(), m2.end(), std::bind2nd(NodeEqPredicate(defaultFlatNodeEq), m1[i])); - if (p2 == m2.end()) return false; - } -#endif - } - return true; - default: - return true; - } - - } - - void - Diff::sameChunk(const Node& res, unsigned long n) const - { - assert(n > 0); - Element s = doc.createElementNS(DDIFF_NS_URI, "diff:same"); - if (n != 1) - { - std::ostringstream os; - os << n; - s.setAttribute("count", os.str()); - } - res.appendChild(s); - } - - Node - Diff::diffNodes(const Node& p1, const Node& p2) const - { - if (eq(p1, p2)) - { - Element m = doc.createElementNS(DDIFF_NS_URI, "diff:merge"); - if (diffChildren(p1, p2, m)) return m; - else return Node(); - } - else - { - Element r = doc.createElementNS(DDIFF_NS_URI, "diff:replace"); - r.appendChild(doc.importNode(p2, true)); - return r; - } - } - - bool - Diff::diffChildren(const Node& n1, const Node& n2, const Node& res) const - { - assert(n1); - assert(n2); - assert(res); - - Node p1 = n1.get_firstChild(); - Node p2 = n2.get_firstChild(); - bool same = true; - unsigned nSame = 0; - while (p1 && p2) - { - if (Node d = diffNodes(p1, p2)) - { - same = false; - if (nSame > 0) - { - sameChunk(res, nSame); - nSame = 0; - } - res.appendChild(d); - } - else - nSame++; - - p1 = p1.get_nextSibling(); - p2 = p2.get_nextSibling(); - } - - if (p1) - { - same = false; - if (nSame > 0) - { - sameChunk(res, nSame); - nSame = 0; - } - - unsigned nRemoved = 0; - while (p1) - { - nRemoved++; - p1 = p1.get_nextSibling(); - } - - if (nRemoved > 0) - { - Element r = doc.createElementNS(DDIFF_NS_URI, "diff:remove"); - if (nRemoved > 1) - { - std::ostringstream os; - os << nRemoved; - r.setAttribute("count", os.str()); - } - res.appendChild(r); - } - } - - if (p2) - { - same = false; - if (nSame > 0) - { - sameChunk(res, nSame); - nSame = 0; - } - - Element i = doc.createElementNS(DDIFF_NS_URI, "diff:insert"); - while (p2) - { - i.appendChild(doc.importNode(p2, true)); - p2 = p2.get_nextSibling(); - } - res.appendChild(i); - } - - return !same; - } - - static Node - getFirstElement(const Node& n) - { - Node p = n.get_firstChild(); - while (p && p.get_nodeType() != Node::ELEMENT_NODE) - p = p.get_nextSibling(); - return p; - } - - static Node - getNextElement(const Node& n) - { - Node p = n.get_nextSibling(); - while (p && p.get_nodeType() != Node::ELEMENT_NODE) - p = p.get_nextSibling(); - return p; - } - - void - Diff::patchRootNode(const Node& node, const Element& elem) const - { - GdomeString name = elem.get_localName(); - if (name == "same") - { - if (elem.hasAttribute("count")) - { - unsigned count; - std::istringstream is(elem.getAttribute("count")); - is >> count; - assert(count == 1); - } - } - else if (name == "replace") - { - Document d1 = node.get_ownerDocument(); - Node parent = node.get_parentNode(); - assert(parent); -#if 0 - /* the following patch is because of gdome2 bug that prevents from - * replacing the root element of a document. - */ - assert(!node.get_previousSibling()); - assert(!node.get_nextSibling()); - parent.removeChild(node); - parent.appendChild(d1.importNode(getFirstElement(elem), true)); -#endif - parent.replaceChild(d1.importNode(getFirstElement(elem), true), node); - } - else if (name == "merge") - patchChildren(node, elem); - else - assert(0); - } - - void - Diff::patchChildren(const Node& n1, const Element& e2) const - { - Node p1 = n1.get_firstChild(); - Element p2 = getFirstElement(e2); - while (p2) - { - GdomeString name = p2.get_localName(); - if (name == "same") - { - unsigned count = 1; - if (p2.hasAttribute("count")) - { - std::istringstream is(p2.getAttribute("count")); - is >> count; - } - while (count-- > 0) - { - if (!p1) throw BADDiff("too few nodes in original document (same)"); - p1 = p1.get_nextSibling(); - } - } - else if (name == "replace") - { - Document d1 = n1.get_ownerDocument(); - if (!p1) throw BADDiff("no node to replace in original document"); - Node next = p1.get_nextSibling(); - n1.replaceChild(d1.importNode(p2.get_firstChild(), true), p1); - p1 = next; - } - else if (name == "insert") - { - Document d1 = n1.get_ownerDocument(); - for (Node i = p2.get_firstChild(); i; i = i.get_nextSibling()) - n1.insertBefore(d1.importNode(i, true), p1); - } - else if (name == "merge") - { - if (!p1) throw BADDiff("no node to merge in original document"); - patchChildren(p1, p2); - p1 = p1.get_nextSibling(); - } - else if (name == "remove") - { - unsigned count = 1; - if (p2.hasAttribute("count")) - { - std::istringstream is(p2.getAttribute("count")); - is >> count; - } - while (count-- > 0) - { - if (!p1) throw BADDiff("too few nodes in original document (remove)"); - Node next = p1.get_nextSibling(); - n1.removeChild(p1); - p1 = next; - } - } - else - assert(0); - - p2 = getNextElement(p2); - } - } - - void - Diff::patch() const - { - patchRootNode(dest, getFirstElement(doc.get_documentElement())); - } - -} diff --git a/helm/DEVEL/mathml_editor/src/Diff.hh b/helm/DEVEL/mathml_editor/src/Diff.hh deleted file mode 100644 index a047d6baa..000000000 --- a/helm/DEVEL/mathml_editor/src/Diff.hh +++ /dev/null @@ -1,77 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __Diff_hh__ -#define __Diff_hh__ - -#include - -#define XMLNS_NS_URI "http://www.w3.org/2000/xmlns/" -#define DDIFF_NS_URI "http://helm.cs.unibo.it/2002/DDIFF" - -namespace GdomeSmartDOMExt -{ - - using namespace GdomeSmartDOM; - - class Diff - { - public: - typedef bool (*flatNodeEq)(const Node&, const Node&); - static bool defaultFlatNodeEq(const Node&, const Node&); - - private: - Diff(const Node& n, const Document& d, flatNodeEq e) : dest(n), doc(d), eq(e) { }; - - public: - static Diff diff(const Document&, const Document&, flatNodeEq = defaultFlatNodeEq); - static Diff diff(const Element&, const Element&, flatNodeEq = defaultFlatNodeEq); - - Document document(void) const { return doc; }; - Node node(void) const { return dest; }; - - void patch(void) const; - - struct BADDiff - { - BADDiff(const std::string& s) : msg(s) { }; - const std::string msg; - }; - - private: - Node diffNodes(const Node&, const Node&) const; - bool diffChildren(const Node&, const Node&, const Node&) const; - void sameChunk(const Node&, unsigned long) const; - void patchRootNode(const Node&, const Element&) const; - void patchChildren(const Node&, const Element&) const; - - Document doc; - Node dest; - flatNodeEq eq; - }; - -} - -#endif // __ddiff_hh__ diff --git a/helm/DEVEL/mathml_editor/src/ILPushLexer.cc b/helm/DEVEL/mathml_editor/src/ILPushLexer.cc deleted file mode 100644 index b82b52e5c..000000000 --- a/helm/DEVEL/mathml_editor/src/ILPushLexer.cc +++ /dev/null @@ -1,51 +0,0 @@ - -#include -#include - -#include "ALogger.hh" -#include "TToken.hh" -#include "ILPushLexer.hh" -#include "APushParser.hh" -#include "TDictionary.hh" - -ILPushLexer::ILPushLexer(ALogger& l, APushParser& p, TDictionary& d) : LPushLexer(l, p), dictionary(d) -{ - state = ACCEPT; -} - -bool -ILPushLexer::complete() -{ - if (state == MACRO) - { - std::list complete_list; - std::string new_buffer = dictionary.complete(buffer, complete_list); - - if (!complete_list.size()) - { - // no matching macro - logger.warning("no known macro with `" + buffer + "' prefix"); - } - else if (complete_list.size() == 1) - { - // good! we have found the macro - buffer = new_buffer; - } - else - { - // we have more than one matching macro - logger.warning("ambiguous prefix `" + buffer + "'"); - for (std::list::const_iterator p = complete_list.begin(); - p != complete_list.end(); - p++) - { - logger.info("Candidate: " + *p); - } - buffer = new_buffer; - } - - displayCursor(); - return true; - } - else return false; -} diff --git a/helm/DEVEL/mathml_editor/src/ILPushLexer.hh b/helm/DEVEL/mathml_editor/src/ILPushLexer.hh deleted file mode 100644 index 1af6f93ea..000000000 --- a/helm/DEVEL/mathml_editor/src/ILPushLexer.hh +++ /dev/null @@ -1,21 +0,0 @@ - -#ifndef __ILPushLexer_hh__ -#define __ILPushLexer_hh__ - -#include - -#include "LPushLexer.hh" - -class ILPushLexer : public LPushLexer -{ -public: - ILPushLexer(class ALogger&, class APushParser&, class TDictionary&); - ~ILPushLexer(void) { }; - - virtual bool complete(void); - -protected: - class TDictionary& dictionary; -}; - -#endif diff --git a/helm/DEVEL/mathml_editor/src/ITPushLexer.cc b/helm/DEVEL/mathml_editor/src/ITPushLexer.cc deleted file mode 100644 index b4d1b6c12..000000000 --- a/helm/DEVEL/mathml_editor/src/ITPushLexer.cc +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include - -#include "ALogger.hh" -#include "TToken.hh" -#include "ITPushLexer.hh" -#include "APushParser.hh" -#include "TDictionary.hh" - -ITPushLexer::ITPushLexer(ALogger& l, APushParser& p, TDictionary& d) : TPushLexer(l, p), dictionary(d) -{ - state = ACCEPT; -} - -bool -ITPushLexer::complete() -{ - if (state == MACRO) - { - std::list complete_list; - std::string new_buffer = dictionary.complete(buffer, complete_list); - - if (!complete_list.size()) - { - // no matching macro - logger.warning("wrong prefix: nothing to complete"); - } - else if (complete_list.size() == 1) - { - // good! we have found the macro - buffer = new_buffer; - } - else - { - // we have more than one matching macro - logger.warning("prefix not sufficient"); - buffer = new_buffer; - } - - displayCursor(); - return true; - } - else return false; -} diff --git a/helm/DEVEL/mathml_editor/src/ITPushLexer.hh b/helm/DEVEL/mathml_editor/src/ITPushLexer.hh deleted file mode 100644 index 5b5ace351..000000000 --- a/helm/DEVEL/mathml_editor/src/ITPushLexer.hh +++ /dev/null @@ -1,20 +0,0 @@ - -#ifndef __ITPushLexer_hh__ -#define __ITPushLexer_hh__ - -#include - -#include "TPushLexer.hh" - -class ITPushLexer : public TPushLexer -{ -public: - ITPushLexer(class ALogger&, class APushParser&, class TDictionary&); - ~ITPushLexer(void) { }; - - virtual bool complete(void); -private: - class TDictionary& dictionary; -}; - -#endif diff --git a/helm/DEVEL/mathml_editor/src/LPushLexer.cc b/helm/DEVEL/mathml_editor/src/LPushLexer.cc deleted file mode 100644 index a16801bf0..000000000 --- a/helm/DEVEL/mathml_editor/src/LPushLexer.cc +++ /dev/null @@ -1,382 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include -#include -#include - -#include "ALogger.hh" -#include "TToken.hh" -#include "LPushLexer.hh" -#include "APushParser.hh" - -LPushLexer::LPushLexer(ALogger& l, APushParser& p) : APushLexer(l, p) -{ - state = ACCEPT; -} - -void -LPushLexer::reset() -{ - buffer.erase(); - state = ACCEPT; - - displayCursor(); -} - -void -LPushLexer::flush() -{ - push(-1); -} - -void -LPushLexer::transaction(char ch, State newState) -{ - switch (ch) - { - case '{': parser.push(TToken(TToken::BEGIN)); break; - case '}': parser.push(TToken(TToken::END)); break; - case '$': parser.push(TToken(TToken::SHIFT)); break; - case '&': parser.push(TToken(TToken::ALIGN)); break; - case '\n': - case '\r': parser.push(TToken(TToken::EOL, ch)); break; - case '^': parser.push(TToken(TToken::SUPERSCRIPT)); break; - case '_': parser.push(TToken(TToken::SUBSCRIPT)); break; - case '\t': parser.push(TToken(TToken::IGNORABLE_SPACE, ch)); break; - case ' ': parser.push(TToken(TToken::SPACE, ch)); break; - case '~': parser.push(TToken(TToken::ACTIVE, ch)); break; - case '%': parser.push(TToken(TToken::COMMENT)); break; - default: parser.push(TToken(TToken::OTHER, ch)); break; - } - state = newState; -} - -void -LPushLexer::push(char ch) -{ - switch (state) - { - case ACCEPT: - if (ch == '\\') state = ESCAPE; - else if (ch == '#') state = PARAMETER; - else if (ch == -1) ; - else if (isalpha(ch)) - { - buffer.push_back(ch); - state = IDENTIFIER; - } - else if (isdigit(ch)) - { - buffer.push_back(ch); - state = NUMBER; - } - else transaction(ch, ACCEPT); - break; - case ESCAPE: - if (isalpha(ch)) - { - buffer.push_back(ch); - state = MACRO; - } - else if (ch == -1) error(); - else if (isdigit(ch)) - { - // in this case, the previous '\' is ignored - buffer.push_back(ch); - state = NUMBER; - } - else - { - parser.push(TToken(TToken::CONTROL, ch)); - state = ACCEPT; - } - break; - case MACRO: - if (ch == '\\') - { - parser.push(TToken(TToken::CONTROL, buffer)); - buffer.erase(); - state = ESCAPE; - } - else if (ch == '#') - { - parser.push(TToken(TToken::CONTROL, buffer)); - buffer.erase(); - state = PARAMETER; - } - else if (isalpha(ch)) - buffer.push_back(ch); - else if (ch == -1) - { - parser.push(TToken(TToken::CONTROL, buffer)); - buffer.erase(); - state = ACCEPT; - } - else if (isspace(ch)) - { - // we don't call transaction, because a white space is useful to exit from the macro, - // without "side effect". It's the TeX syntax. - parser.push(TToken(TToken::CONTROL, buffer)); - buffer.erase(); - state = ACCEPT; - } - else if (isdigit(ch)) - { - parser.push(TToken(TToken::CONTROL, buffer)); - buffer.erase(); - buffer.push_back(ch); - state = NUMBER; - } - else - { - parser.push(TToken(TToken::CONTROL, buffer)); - buffer.erase(); - transaction(ch, ACCEPT); - } - break; - case PARAMETER: - if (ch == -1) error(); - else - { - parser.push(TToken(TToken::PARAMETER, ch)); - state = ACCEPT; - } - break; - case IDENTIFIER: - if (ch == -1) - { - parser.push(TToken(TToken::LETTER, buffer)); - buffer.erase(); - state = ACCEPT; - } - else if (isalpha(ch) || isdigit(ch)) - { - buffer.push_back(ch); - } - else if (ch == '\\') state = ESCAPED_CHARACTER; - else if (ch == '#') - { - parser.push(TToken(TToken::LETTER, buffer)); - buffer.erase(); - state = PARAMETER; - } - else - { - parser.push(TToken(TToken::LETTER, buffer)); - buffer.erase(); - transaction(ch, ACCEPT); - } - break; - case ESCAPED_CHARACTER: - if ((ch == '-') || (ch == '_') || (ch == '/')) - { - buffer.push_back(ch); - state = IDENTIFIER; - } - else if (isalpha(ch)) - { - parser.push(TToken(TToken::LETTER, buffer)); - buffer.erase(); - buffer.push_back(ch); - state = MACRO; - } - else if (ch == -1) error(); - else if (isdigit(ch)) - { - parser.push(TToken(TToken::LETTER, buffer)); - buffer.erase(); - buffer.push_back(ch); - state = NUMBER; - } - else - { - parser.push(TToken(TToken::LETTER, buffer)); - buffer.erase(); - parser.push(TToken(TToken::CONTROL, ch)); - state = ACCEPT; - } - break; - case NUMBER: - if (isdigit(ch)) buffer.push_back(ch); - else if (isalpha(ch)) - { - parser.push(TToken(TToken::DIGIT, buffer)); - buffer.erase(); - buffer.push_back(ch); - state = IDENTIFIER; - } - else if (ch == -1) - { - parser.push(TToken(TToken::DIGIT, buffer)); - buffer.erase(); - state = ACCEPT; - } - else if (ch == '\\') - { - parser.push(TToken(TToken::DIGIT, buffer)); - buffer.erase(); - state = ESCAPE; - } - else if (ch == '#') - { - parser.push(TToken(TToken::DIGIT, buffer)); - buffer.erase(); - state = PARAMETER; - } - else - { - parser.push(TToken(TToken::DIGIT, buffer)); - buffer.erase(); - transaction(ch, ACCEPT); - } - break; - default: - assert(0); - break; - } - - displayCursor(); - -} - -void -LPushLexer::drop(bool alt) -{ - std::string restore = ""; - - switch (state) - { - case ACCEPT: - { - restore = parser.drop(alt); - long bs_pos = restore.find('\\'); - if ((restore.length() > 0) && (bs_pos != std::string::npos)) - { - // in this case we have to control the blackslash's position - if (bs_pos == 0) - { - //logger.debug(restore); - buffer = std::string(restore, 1, restore.length() - 1); - state = (buffer.length() > 0) ? MACRO : ESCAPE; - } - else - { - assert(bs_pos == restore.length() - 1); - buffer = std::string(restore, 0, bs_pos); - state = ESCAPED_CHARACTER; - } - } - else if (restore.length() > 0 && isdigit(restore[0])) - { - buffer = restore; - state = NUMBER; - } - else if (restore.length() > 0 && isalpha(restore[0])) - { - buffer = restore; - state = IDENTIFIER; - } - } - break; -/* if (restore.length() > 0 && restore[0] == '\\') - { - logger.debug(restore); - buffer = std::string(restore, 1, restore.length() - 1); - state = (buffer.length() > 0) ? MACRO : ESCAPE; - } - else if (restore.length() > 0 && isdigit(restore[0])) - { - buffer = restore; - state = NUMBER; - } - else if (restore.length() > 0 && isalpha(restore[0])) - { - buffer = restore; - state = IDENTIFIER; - } - break;*/ - case ESCAPED_CHARACTER: - state = IDENTIFIER; - break; - case ESCAPE: - state = ACCEPT; - break; - case MACRO: - if (alt) buffer.erase(); - else buffer.erase(buffer.length() - 1, 1); - if (buffer.length() == 0) state = ESCAPE; - break; - case IDENTIFIER: - switch (buffer[buffer.length() - 1]) - { - case '-': - case '_': - buffer.erase(buffer.length() - 1, 1); - if (alt) state = ESCAPED_CHARACTER; - break; - default: - if (alt) buffer.erase(); - else buffer.erase(buffer.length() - 1, 1); - if (buffer.length() == 0) state = ACCEPT; - break; - } - break; - case NUMBER: - if (alt) buffer.erase(); - else buffer.erase(buffer.length() - 1, 1); - if (buffer.length() == 0) state = ACCEPT; - break; - case PARAMETER: - default: - //assert(0); - error(); - break; - } - - displayCursor(); - -} - -void -LPushLexer::displayCursor() -{ - switch (state) - { - case ESCAPE: parser.setCursorHint("\\"); break; - case ESCAPED_CHARACTER: parser.setCursorHint(buffer + "\\"); break; - case MACRO: parser.setCursorHint("\\" + buffer); break; - case PARAMETER: parser.setCursorHint("#"); break; - case IDENTIFIER: parser.setCursorHint(buffer); break; - case NUMBER: parser.setCursorHint(buffer); break; - default: parser.setCursorHint(""); break; - } -} - -bool -LPushLexer::error() const -{ - return false; -} diff --git a/helm/DEVEL/mathml_editor/src/LPushLexer.hh b/helm/DEVEL/mathml_editor/src/LPushLexer.hh deleted file mode 100644 index a9f95e200..000000000 --- a/helm/DEVEL/mathml_editor/src/LPushLexer.hh +++ /dev/null @@ -1,65 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __LPushLexer_hh__ -#define __LPushLexer_hh__ - -#include - -#include "APushLexer.hh" - -class LPushLexer : public APushLexer -{ -public: - LPushLexer(class ALogger&, class APushParser&); - virtual ~LPushLexer() { }; - - virtual void push(char); - virtual void drop(bool); - virtual bool complete(void) {}; - virtual void reset(void); - virtual void flush(void); - virtual bool error(void) const; - -protected: - enum State - { - ACCEPT, - ESCAPE, - MACRO, - PARAMETER, - IDENTIFIER, - ESCAPED_CHARACTER, - NUMBER - }; - - void transaction(char, State); - void displayCursor(void); - - State state; - std::string buffer; -}; - -#endif // __LPushLexer_hh__ diff --git a/helm/DEVEL/mathml_editor/src/Makefile.am b/helm/DEVEL/mathml_editor/src/Makefile.am deleted file mode 100644 index 1f3a12ddf..000000000 --- a/helm/DEVEL/mathml_editor/src/Makefile.am +++ /dev/null @@ -1,57 +0,0 @@ - -lib_LTLIBRARIES = libeditex.la - -libeditex_la_LDFLAGS = -version-info @EDITEX_VERSION_INFO@ - -libeditex_la_LIBADD = \ - $(GMETADOM_LIBS) \ - $(GDOMEXSLT_LIBS) \ - -lstdc++ - -libeditex_la_SOURCES = \ - Diff.cc \ - CLoggerConsole.cc \ - ITPushLexer.cc \ - ILPushLexer.cc \ - TPushLexer.cc \ - LPushLexer.cc \ - APushParser.cc \ - TPushParser.cc \ - AMathMLFactory.cc \ - CMathMLFactoryXSLT.cc \ - CMathMLFactoryXSLTDiff.cc \ - TDictionary.cc \ - TDocument.cc \ - TNode.cc \ - TTokenizer.cc \ - timer.cc - -pkginclude_HEADERS = \ - Diff.hh \ - ALogger.hh \ - CLoggerConsole.hh \ - APushLexer.hh \ - APushParser.hh \ - AMathMLFactory.hh \ - AMathMLConsumer.hh \ - CMathMLFactoryXSLT.hh \ - CMathMLFactoryXSLTDiff.hh \ - TPushLexer.hh \ - LPushLexer.hh \ - ITPushLexer.hh \ - ILPushLexer.hh \ - TPushParser.hh \ - TTokenizer.hh \ - TDictionary.hh \ - TDocument.hh \ - TNode.hh \ - TListener.hh \ - TToken.hh \ - globals.hh \ - dom.hh \ - timer.hh - -INCLUDES = \ - $(GMETADOM_CFLAGS) \ - $(GDOMEXSLT_CFLAGS) - diff --git a/helm/DEVEL/mathml_editor/src/Makefile.in b/helm/DEVEL/mathml_editor/src/Makefile.in deleted file mode 100644 index 0863b0101..000000000 --- a/helm/DEVEL/mathml_editor/src/Makefile.in +++ /dev/null @@ -1,431 +0,0 @@ -# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am - -# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - -SHELL = @SHELL@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include - -DESTDIR = - -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ - -top_builddir = .. - -ACLOCAL = @ACLOCAL@ -AUTOCONF = @AUTOCONF@ -AUTOMAKE = @AUTOMAKE@ -AUTOHEADER = @AUTOHEADER@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -transform = @program_transform_name@ - -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -host_alias = @host_alias@ -host_triplet = @host@ -AS = @AS@ -CC = @CC@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -DLLTOOL = @DLLTOOL@ -ECHO = @ECHO@ -EDITEX_VERSION_INFO = @EDITEX_VERSION_INFO@ -EXEEXT = @EXEEXT@ -GDOMEXSLT_CFLAGS = @GDOMEXSLT_CFLAGS@ -GDOMEXSLT_LIBS = @GDOMEXSLT_LIBS@ -GMETADOM_CFLAGS = @GMETADOM_CFLAGS@ -GMETADOM_LIBS = @GMETADOM_LIBS@ -GTKMATHVIEW_CFLAGS = @GTKMATHVIEW_CFLAGS@ -GTKMATHVIEW_LIBS = @GTKMATHVIEW_LIBS@ -HAVE_OCAMLC = @HAVE_OCAMLC@ -HAVE_OCAMLDEP = @HAVE_OCAMLDEP@ -HAVE_OCAMLFIND = @HAVE_OCAMLFIND@ -HAVE_OCAMLMKLIB = @HAVE_OCAMLMKLIB@ -HAVE_OCAMLOPT = @HAVE_OCAMLOPT@ -LDFLAGS = @LDFLAGS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -MAKEINFO = @MAKEINFO@ -MLGDOME_CFLAGS = @MLGDOME_CFLAGS@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OCAMLC = @OCAMLC@ -OCAMLDEP = @OCAMLDEP@ -OCAMLFIND = @OCAMLFIND@ -OCAMLMKLIB = @OCAMLMKLIB@ -OCAMLOPT = @OCAMLOPT@ -OCAMLSTDLIBDIR = @OCAMLSTDLIBDIR@ -OCAMLSTUBDIR = @OCAMLSTUBDIR@ -OCAML_INCLUDE_DIR = @OCAML_INCLUDE_DIR@ -PACKAGE = @PACKAGE@ -RANLIB = @RANLIB@ -STRIP = @STRIP@ -VERSION = @VERSION@ - -lib_LTLIBRARIES = libeditex.la - -libeditex_la_LDFLAGS = -version-info @EDITEX_VERSION_INFO@ - -libeditex_la_LDADDS = $(GMETADOM_LIBS) $(GDOMEXSLT_LIBS) - - -libeditex_la_SOURCES = Diff.cc CLoggerConsole.cc ITPushLexer.cc ILPushLexer.cc TPushLexer.cc LPushLexer.cc APushParser.cc TPushParser.cc CMathMLFactoryXSLT.cc CMathMLFactoryXSLTDiff.cc TDictionary.cc TDocument.cc TNode.cc TTokenizer.cc - - -pkginclude_HEADERS = Diff.hh ALogger.hh CLoggerConsole.hh APushLexer.hh APushParser.hh AMathMLFactory.hh AMathMLConsumer.hh CMathMLFactoryXSLT.hh CMathMLFactoryXSLTDiff.hh TPushLexer.hh LPushLexer.hh ITPushLexer.hh ILPushLexer.hh TPushParser.hh TTokenizer.hh TDictionary.hh TDocument.hh TNode.hh TListener.hh TToken.hh globals.hh dom.hh - - -INCLUDES = $(GMETADOM_CFLAGS) $(GDOMEXSLT_CFLAGS) - -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = ../config.h -CONFIG_CLEAN_FILES = -LTLIBRARIES = $(lib_LTLIBRARIES) - - -DEFS = @DEFS@ -I. -I$(srcdir) -I.. -LIBS = @LIBS@ -libeditex_la_LIBADD = -libeditex_la_OBJECTS = Diff.lo CLoggerConsole.lo ITPushLexer.lo \ -ILPushLexer.lo TPushLexer.lo LPushLexer.lo APushParser.lo \ -TPushParser.lo CMathMLFactoryXSLT.lo CMathMLFactoryXSLTDiff.lo \ -TDictionary.lo TDocument.lo TNode.lo TTokenizer.lo -CXXFLAGS = @CXXFLAGS@ -CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ -HEADERS = $(pkginclude_HEADERS) - -DIST_COMMON = Makefile.am Makefile.in - - -DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) - -TAR = tar -GZIP_ENV = --best -DEP_FILES = .deps/APushParser.P .deps/CLoggerConsole.P \ -.deps/CMathMLFactoryXSLT.P .deps/CMathMLFactoryXSLTDiff.P .deps/Diff.P \ -.deps/ILPushLexer.P .deps/ITPushLexer.P .deps/LPushLexer.P \ -.deps/TDictionary.P .deps/TDocument.P .deps/TNode.P .deps/TPushLexer.P \ -.deps/TPushParser.P .deps/TTokenizer.P -SOURCES = $(libeditex_la_SOURCES) -OBJECTS = $(libeditex_la_OBJECTS) - -all: all-redirect -.SUFFIXES: -.SUFFIXES: .S .c .cc .lo .o .obj .s -$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - - -mostlyclean-libLTLIBRARIES: - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - -distclean-libLTLIBRARIES: - -maintainer-clean-libLTLIBRARIES: - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(libdir) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - if test -f $$p; then \ - echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ - $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ - else :; fi; \ - done - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ - done - -# FIXME: We should only use cygpath when building on Windows, -# and only if it is available. -.c.obj: - $(COMPILE) -c `cygpath -w $<` - -.s.o: - $(COMPILE) -c $< - -.S.o: - $(COMPILE) -c $< - -mostlyclean-compile: - -rm -f *.o core *.core - -rm -f *.$(OBJEXT) - -clean-compile: - -distclean-compile: - -rm -f *.tab.c - -maintainer-clean-compile: - -.s.lo: - $(LIBTOOL) --mode=compile $(COMPILE) -c $< - -.S.lo: - $(LIBTOOL) --mode=compile $(COMPILE) -c $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -maintainer-clean-libtool: - -libeditex.la: $(libeditex_la_OBJECTS) $(libeditex_la_DEPENDENCIES) - $(CXXLINK) -rpath $(libdir) $(libeditex_la_LDFLAGS) $(libeditex_la_OBJECTS) $(libeditex_la_LIBADD) $(LIBS) -.cc.o: - $(CXXCOMPILE) -c $< -.cc.obj: - $(CXXCOMPILE) -c `cygpath -w $<` -.cc.lo: - $(LTCXXCOMPILE) -c $< - -install-pkgincludeHEADERS: $(pkginclude_HEADERS) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(pkgincludedir) - @list='$(pkginclude_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ - echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p"; \ - $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgincludedir)/$$p; \ - done - -uninstall-pkgincludeHEADERS: - @$(NORMAL_UNINSTALL) - list='$(pkginclude_HEADERS)'; for p in $$list; do \ - rm -f $(DESTDIR)$(pkgincludedir)/$$p; \ - done - -tags: TAGS - -ID: $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS)'; \ - unique=`for i in $$list; do echo $$i; done | \ - awk ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - here=`pwd` && cd $(srcdir) \ - && mkid -f$$here/ID $$unique $(LISP) - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS)'; \ - unique=`for i in $$list; do echo $$i; done | \ - awk ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ - || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) - -mostlyclean-tags: - -clean-tags: - -distclean-tags: - -rm -f TAGS ID - -maintainer-clean-tags: - -distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) - -subdir = src - -distdir: $(DISTFILES) - here=`cd $(top_builddir) && pwd`; \ - top_distdir=`cd $(top_distdir) && pwd`; \ - distdir=`cd $(distdir) && pwd`; \ - cd $(top_srcdir) \ - && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/Makefile - @for file in $(DISTFILES); do \ - d=$(srcdir); \ - if test -d $$d/$$file; then \ - cp -pr $$d/$$file $(distdir)/$$file; \ - else \ - test -f $(distdir)/$$file \ - || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ - || cp -p $$d/$$file $(distdir)/$$file || :; \ - fi; \ - done - -DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) - --include $(DEP_FILES) - -mostlyclean-depend: - -clean-depend: - -distclean-depend: - -rm -rf .deps - -maintainer-clean-depend: - -%.o: %.c - @echo '$(COMPILE) -c $<'; \ - $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< - @-cp .deps/$(*F).pp .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm .deps/$(*F).pp - -%.lo: %.c - @echo '$(LTCOMPILE) -c $<'; \ - $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< - @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ - < .deps/$(*F).pp > .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm -f .deps/$(*F).pp - -%.o: %.cc - @echo '$(CXXCOMPILE) -c $<'; \ - $(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< - @-cp .deps/$(*F).pp .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm .deps/$(*F).pp - -%.lo: %.cc - @echo '$(LTCXXCOMPILE) -c $<'; \ - $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< - @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ - < .deps/$(*F).pp > .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm -f .deps/$(*F).pp -info-am: -info: info-am -dvi-am: -dvi: dvi-am -check-am: all-am -check: check-am -installcheck-am: -installcheck: installcheck-am -install-exec-am: install-libLTLIBRARIES -install-exec: install-exec-am - -install-data-am: install-pkgincludeHEADERS -install-data: install-data-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -install: install-am -uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgincludeHEADERS -uninstall: uninstall-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -all-redirect: all-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install -installdirs: - $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(pkgincludedir) - - -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -rm -f Makefile $(CONFIG_CLEAN_FILES) - -rm -f config.cache config.log stamp-h stamp-h[0-9]* - -maintainer-clean-generic: -mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ - mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ - mostlyclean-generic - -mostlyclean: mostlyclean-am - -clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ - clean-depend clean-generic mostlyclean-am - -clean: clean-am - -distclean-am: distclean-libLTLIBRARIES distclean-compile \ - distclean-libtool distclean-tags distclean-depend \ - distclean-generic clean-am - -rm -f libtool - -distclean: distclean-am - -maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ - maintainer-clean-compile maintainer-clean-libtool \ - maintainer-clean-tags maintainer-clean-depend \ - maintainer-clean-generic distclean-am - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - -maintainer-clean: maintainer-clean-am - -.PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ -clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ -uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ -distclean-compile clean-compile maintainer-clean-compile \ -mostlyclean-libtool distclean-libtool clean-libtool \ -maintainer-clean-libtool uninstall-pkgincludeHEADERS \ -install-pkgincludeHEADERS tags mostlyclean-tags distclean-tags \ -clean-tags maintainer-clean-tags distdir mostlyclean-depend \ -distclean-depend clean-depend maintainer-clean-depend info-am info \ -dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ -install-exec install-data-am install-data install-am install \ -uninstall-am uninstall all-redirect all-am all installdirs \ -mostlyclean-generic distclean-generic clean-generic \ -maintainer-clean-generic clean mostlyclean distclean maintainer-clean - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/helm/DEVEL/mathml_editor/src/TDictionary.cc b/helm/DEVEL/mathml_editor/src/TDictionary.cc deleted file mode 100644 index 25f6c9674..000000000 --- a/helm/DEVEL/mathml_editor/src/TDictionary.cc +++ /dev/null @@ -1,316 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include -#include - -#include "dom.hh" -#include "config.dirs" -#include "TDictionary.hh" -#include "TTokenizer.hh" -#include "CLoggerConsole.hh" - -static TDictionary::Entry undefinedEntry; - -static std::string -getURIBase(const std::string& uri) -{ - std::string::size_type slash = uri.rfind('/'); - if (slash != std::string::npos) return uri.substr(0, slash + 1); - else return ""; -} - -static std::string -getURIName(const std::string& uri) -{ - std::string::size_type slash = uri.rfind('/'); - if (slash != std::string::npos) return uri.substr(slash + 1, uri.size()); - else return uri; -} - -std::string -TDictionary::getDefaultDictionaryPath() -{ - return PKGDATADIR"/dictionary-tex.xml"; -} - -void -TDictionary::load(const std::string& uri) -{ - load(getURIName(uri), getURIBase(uri)); -} - -void -TDictionary::load(const std::string& name, const std::string& base) -{ - logger.debug("Dictionary: loading `" + base + name + "'"); - - DOM::DOMImplementation di; - DOM::Document doc = di.createDocumentFromURI((base + name).c_str()); - assert(doc); - load(doc, base); -} - -void -TDictionary::load(const DOM::Document& doc, const std::string& base) -{ - assert(doc); - - DOM::Element root = doc.get_documentElement(); - assert(root); - - CLoggerConsole logger; - TTokenizer tokenizer(logger); - - for (DOM::Node p = root.get_firstChild(); p; p = p.get_nextSibling()) - if (p.get_nodeType() == DOM::Node::ELEMENT_NODE && p.get_nodeName() == "include") - { - DOM::Element el = p; - assert(el); - if (el.hasAttribute("href")) - { - // WARNING: this may result into an infinite loop! - std::string href = el.getAttribute("href"); - std::string newBase = getURIBase(href); - std::string newName = getURIName(href); - if (newBase != "") load(newName, newBase); - else load(newName, base); - } - else - logger.warning("Dictionary: include statement with no href attribute (ignored)"); - } - else if (p.get_nodeType() == DOM::Node::ELEMENT_NODE && p.get_nodeName() == "entry") - { - DOM::Element el = p; - assert(el); - assert(el.hasAttribute("name")); - - std::string name = el.getAttribute("name"); - if (entries.find(name) != entries.end()) - logger.info("Dictionary: `" + name + "' is being redefined"); - - Entry entry; - - if (el.hasAttribute("class")) - { - std::string cls = el.getAttribute("class"); - if (cls == "o") entry.cls = OPERATOR; - else if (cls == "i") entry.cls = IDENTIFIER; - else if (cls == "n") entry.cls == NUMBER; - else entry.cls = MACRO; - } - else - entry.cls = MACRO; - - if (el.hasAttribute("val")) - { - entry.value = el.getAttribute("val"); - if (entry.cls == MACRO) - logger.warning("Dictionary: `" + name + "' has a specified value, but is classified as macro"); - } - - if (el.hasAttribute("pattern")) - { - if (entry.cls != MACRO) - logger.warning("Dictionary: `" + name + "' has a specified pattern, but is not classified as macro"); - - std::string pattern = el.getAttribute("pattern"); - if (pattern == "{}") - entry.leftOpen = entry.rightOpen = 1; - else if (pattern == "{") - entry.leftOpen = 1; - else if (pattern == "}") - entry.rightOpen = 1; - else - entry.pattern = tokenizer.tokenize(pattern); - } - -#if 0 - if (el.hasAttribute("infix")) - { - std::istringstream is(el.getAttribute("infix")); - unsigned infix; - is >> infix; - entry.infix = infix; - if (!el.hasAttribute("prefix")) entry.prefix = infix; - if (!el.hasAttribute("postfix")) entry.postfix = infix; - } - - if (el.hasAttribute("prefix")) - { - std::istringstream is(el.getAttribute("prefix")); - unsigned prefix; - is >> prefix; - entry.prefix = prefix; - if (!el.hasAttribute("infix")) - { - entry.infix = prefix; - if (!el.hasAttribute("postfix")) entry.postfix = prefix; - } - } - - if (el.hasAttribute("postfix")) - { - std::istringstream is(el.getAttribute("postfix")); - unsigned postfix; - is >> postfix; - entry.postfix = postfix; - if (!el.hasAttribute("infix")) - { - entry.infix = postfix; - if (!el.hasAttribute("prefix")) entry.prefix = postfix; - } - } -#endif - - if (el.hasAttribute("limits")) - { - std::istringstream is(el.getAttribute("limits")); - unsigned limits; - is >> limits; - entry.limits = limits; - } - - if (el.hasAttribute("embellishment")) - { - std::istringstream is(el.getAttribute("embellishment")); - unsigned embellishment; - is >> embellishment; - entry.embellishment = embellishment; - } - - if (el.hasAttribute("delimiter")) - { - if (entry.cls != OPERATOR && !entry.embellishment) - logger.warning("Dictionary: `" + name + "' delimiter ignored for non-operator"); - - std::istringstream is(el.getAttribute("delimiter")); - unsigned delimiter; - is >> delimiter; - entry.delimiter = delimiter; - } - - if (el.hasAttribute("table")) - { - if (entry.cls != MACRO) - logger.warning("Dictionary: `" + name + "' table ignored for non-macro"); - - std::istringstream is(el.getAttribute("table")); - unsigned table; - is >> table; - entry.table = table; - } - - entries[name] = entry; - } -} - -const TDictionary::Entry& -TDictionary::find(const std::string& name) const -{ - Dictionary::const_iterator p = entries.find(name); - if (p != entries.end()) return (*p).second; - else - { - logger.warning("unknown entry `" + name + "'"); - return undefinedEntry; - } -} - -std::string -TDictionary::complete(const std::string prefix, std::list& complete_list) const -{ - bool no_match = true; - std::string new_prefix = ""; - for (Dictionary::const_iterator i = entries.begin(); i != entries.end(); i++) - { - if ((*i).first.find(prefix) == 0) - { - complete_list.push_front((*i).first); - if (no_match) - { - // it's the first match - no_match = false; - new_prefix = (*i).first; - } - else - { - // in this case, new_prefix has been set yet. - std::string s1 = (*i).first.substr(prefix.length()); // s1 is the high part of the matching string - std::string s2 = new_prefix.substr(prefix.length()); // s2 is the high part of new_prefix -#if 0 - long j = 0; // it's the number of common characters - while (s1[j] == s2[j]) j++; -#endif - std::string::const_iterator i1 = s1.begin(); - std::string::const_iterator i2 = s2.begin(); - while (i1 != s1.end() && i2 != s2.end() && *i1 == *i2) i1++, i2++; - new_prefix = prefix + s1.substr(0, i1 - s1.begin()); - //new_prefix = (j) ? prefix + s1.substr(0, i1 - s1.begin()) : prefix; - } - } - } - - return new_prefix; -} - -bool -TDictionary::Entry::paramDelimited(unsigned i) const -{ - assert(i < pattern.size()); - assert(pattern[i].category == TToken::PARAMETER); - // a parameter is delimited if it is NOT the last one - // AND the next argument is not a parameter - return i + 1 < pattern.size() && pattern[i + 1].category != TToken::PARAMETER; -} - -bool -TDictionary::Entry::lastDelimiter(unsigned i) const -{ - assert(i < pattern.size()); - assert(pattern[i].category != TToken::PARAMETER); - // a token is the last delimiter if it is the last token - // of the pattern or if the next token is a parameter) - return i + 1 == pattern.size() || pattern[i + 1].category == TToken::PARAMETER; -} - -unsigned -TDictionary::Entry::previousParam(unsigned i) const -{ - // this method return the position in the pattern of the - // parameter placed in a position preceding i. - // If no preceding i parameter present, the method return - // pattern.size(). - // To know the position of the last parameter, call this - // method with i == pattern.size() - unsigned j = i - 1; - - while (pattern[j].category != TToken::PARAMETER) - { - if (j) j--; - else return pattern.size(); - } - return j; -} diff --git a/helm/DEVEL/mathml_editor/src/TDictionary.hh b/helm/DEVEL/mathml_editor/src/TDictionary.hh deleted file mode 100644 index 4864630f9..000000000 --- a/helm/DEVEL/mathml_editor/src/TDictionary.hh +++ /dev/null @@ -1,129 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __TDictionary_hh__ -#define __TDictionary_hh__ - -#include - -#include -#include -#if defined(HAVE_EXT_HASH_MAP) -#include -#elif defined(HAVE_HASH_MAP) -#include -#else -#error "no hash_map could be found" -#endif -#include - -#include "dom.hh" -#include "TToken.hh" - -class TDictionary -{ -public: - TDictionary(class ALogger& l) : logger(l) { }; - ~TDictionary() { }; - - enum Form - { - INFIX, - PREFIX, - POSTFIX - }; - - enum EntryClass - { - UNDEFINED, - MACRO, - OPERATOR, - IDENTIFIER, - NUMBER - }; - - struct Entry - { - Entry(void) - { - cls = UNDEFINED; - table = delimiter = limits = embellishment = leftOpen = rightOpen = 0; - }; - - std::vector pattern; - std::string value; - - bool defined(void) const { return cls != UNDEFINED; }; - bool hasArguments(void) const { return !pattern.empty(); }; - bool paramDelimited(unsigned) const; - bool lastDelimiter(unsigned) const; - unsigned previousParam(unsigned) const; - - EntryClass cls; - unsigned delimiter : 1; - unsigned limits : 1; - unsigned embellishment : 1; - unsigned leftOpen : 1; - unsigned rightOpen : 1; - unsigned table : 1; - }; - - static std::string getDefaultDictionaryPath(void); - - void load(const std::string&); - void load(const std::string&, const std::string&); - void load(const DOM::Document&, const std::string& = ""); - const Entry& find(const std::string&) const; - std::string complete(const std::string, std::list&) const; - -private: -#if defined(HAVE_EXT_HASH_MAP) - struct StringHash : public std::unary_function< std::string, size_t > - { size_t operator()(const std::string& s) const { return __gnu_cxx::hash()(s.c_str()); } }; -#elif defined(HAVE_HASH_MAP) - struct StringHash : public std::unary_function< std::string, size_t > - { size_t operator()(const std::string& s) const { return hash()(s.c_str()); } }; -#else -#error "no hash_map could be found" -#endif - -#if 0 - struct StringEq : public std::binary_function< std::string, std::string, bool > - { bool operator()(const std::string&, const class String*) const; }; -#endif - - class ALogger& logger; -#if defined(HAVE_EXT_HASH_MAP) - typedef __gnu_cxx::hash_map< std::string, Entry, StringHash > Dictionary; -#elif defined(HAVE_HASH_MAP) - typedef std::hash_map< std::string, Entry, StringHash > Dictionary; -#else -#error "no hash_map could be found" -#endif - Dictionary entries; -}; - -#endif // __TDictionary_hh__ - diff --git a/helm/DEVEL/mathml_editor/src/TDocument.cc b/helm/DEVEL/mathml_editor/src/TDocument.cc deleted file mode 100644 index ca4878e6c..000000000 --- a/helm/DEVEL/mathml_editor/src/TDocument.cc +++ /dev/null @@ -1,213 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include -#include - -#include "globals.hh" -#include "dom.hh" -#include "TDocument.hh" - -TDocument::TDocument() -{ - DOM::DOMImplementation di; - DOM::DocumentType dt; - doc = di.createDocument(TML_NS_URI, "tml:tex", dt); - DOM::Element root = doc.get_documentElement(); - assert(root); - root.setAttributeNS(XMLNS_NS_URI, "xmlns:tml", TML_NS_URI); - - DOM::EventTarget et(doc); - assert(et); - et.addEventListener("DOMSubtreeModified", *this, false); -} - -TDocument::~TDocument() -{ - //DOM::Element root = doc.get_documentElement(); - DOM::EventTarget et(doc); - assert(doc); - et.removeEventListener("DOMSubtreeModified", *this, false); -} - -void -TDocument::reset() -{ - DOM::Element root = doc.createElementNS(TML_NS_URI, "tml:tex"); - root.setAttributeNS(XMLNS_NS_URI, "xmlns:tml", TML_NS_URI); - doc.replaceChild(root, doc.get_documentElement()); - clearDirty(); -} - -void -TDocument::serialize(const char* filename) const -{ - DOM::DOMImplementation di; - di.saveDocumentToFile(doc, filename, GDOME_SAVE_LIBXML_INDENT); -} - -std::string -TDocument::makeId(unsigned id) -{ - std::ostringstream os; - os << "I" << id; - return os.str(); -} - -TNode -TDocument::create(const std::string& name, unsigned id) const -{ - DOM::Element elem = doc.createElementNS(TML_NS_URI, "tml:" + name); - if (id > 0) elem.setAttribute("id", makeId(id)); - return elem; -} - -TNode -TDocument::createC(const std::string& name, unsigned id) const -{ - TNode m = create("c", id); - m["name"] = name; - return m; -} - -TNode -TDocument::createT(const std::string& name, const std::string& text, unsigned id) const -{ - TNode t = create(name, id); - t["val"] = text; - return t; -} - -unsigned -TDocument::nodeDepth(const DOM::Node& node) -{ - DOM::Node n = node; - - unsigned depth = 0; - while (n) - { - depth++; - n = n.get_parentNode(); - } - return depth; -} - -DOM::Node -TDocument::findCommonAncestor(const DOM::Node& node1, const DOM::Node& node2) -{ - DOM::Node n1 = node1; - DOM::Node n2 = node2; - - unsigned d1 = nodeDepth(n1); - unsigned d2 = nodeDepth(n2); - - // cout << "finding common ancestor " << d1 << " " << d2 << endl; - - while (d1 < d2) - { - assert(n2); - n2 = n2.get_parentNode(); - d2--; - } - - while (d1 > d2) - { - assert(n1); - n1 = n1.get_parentNode(); - d1--; - } - - while (n1 != n2) - { - assert(n1); - assert(n2); - n1 = n1.get_parentNode(); - n2 = n2.get_parentNode(); - } - - return n1; -} - -DOM::Node -TDocument::findIdNode(const DOM::Node& node) -{ - DOM::Node n = node; - while (n) - { - if (n.get_nodeType() == DOM::Node::ELEMENT_NODE) - { - DOM::Element el = n; - if (el.hasAttribute("id")) return el; - } - n = n.get_parentNode(); - } - - return DOM::Node(0); -} - -TNode -TDocument::getNodeByIdAux(const TNode& node, const std::string& id) -{ - if (node.hasId(id)) return node; - else - for (TNode p = node.first(); p; p = p.next()) - if (TNode res = getNodeByIdAux(p, id)) return res; - return TNode(); -} - -TNode -TDocument::getNodeById(unsigned id) const -{ - DOM::Element root = doc.get_documentElement(); - assert(root); - return getNodeByIdAux(root, makeId(id)); -} - -void -TDocument::handleEvent(const DOM::Event& ev) -{ - DOM::MutationEvent me(ev); - assert(me); - -#if 0 - if (dirty) - cout << "TDocument::handleEvent DIRTY BEFORE = " << dirty.getAttribute("id") << endl; - else - cout << "TDocument::handleEvent DIRTY BEFORE = (nil)" << endl; -#endif - - if (DOM::Node node = me.get_target()) - if (dirty) - dirty = findIdNode(findCommonAncestor(dirty, node)); - else - dirty = findIdNode(node); - else - assert(0); - -#if 0 - cout << "TDocument::handleEvent target = " << DOM::Node(me.get_target()).get_nodeName() << " DIRTY AFTER = " - << dirty.getAttribute("id") << " ME = " << DOM::Node(me.get_target()).get_nodeName() << endl; -#endif -} diff --git a/helm/DEVEL/mathml_editor/src/TDocument.hh b/helm/DEVEL/mathml_editor/src/TDocument.hh deleted file mode 100644 index 02d1dc38d..000000000 --- a/helm/DEVEL/mathml_editor/src/TDocument.hh +++ /dev/null @@ -1,69 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __TDocument_hh__ -#define __TDocument_hh__ - -#include "dom.hh" -#include "TNode.hh" - -class TDocument : private DOM::EventListener -{ -public: - TDocument(void); - ~TDocument(); - - void reset(void); - TNode create(const std::string&, unsigned = 0) const; - TNode createG(unsigned id = 0) const { return create("g", id); }; - TNode createC(const std::string&, unsigned = 0) const; - TNode createT(const std::string&, const std::string&, unsigned = 0) const; - TNode createI(const std::string& text, unsigned id = 0) const { return createT("i", text, id); }; - TNode createN(const std::string& text, unsigned id = 0) const { return createT("n", text, id); }; - TNode createO(const std::string& text, unsigned id = 0) const { return createT("o", text, id); }; - TNode createS(unsigned id = 0) const { return createT("s", "", id); }; - - DOM::Document document(void) const { return doc; }; - - TNode getNodeById(unsigned) const; - TNode root(void) { return doc.get_documentElement(); }; - TNode dirtyNode(void) const { return dirty; }; - void clearDirty(void) { dirty = DOM::Element(0); }; - - void serialize(const char*) const; - -private: - DOM::Document doc; - DOM::Element dirty; - - virtual void handleEvent(const DOM::Event&); - static std::string makeId(unsigned); - static TNode getNodeByIdAux(const TNode&, const std::string&); - static unsigned nodeDepth(const DOM::Node&); - static DOM::Node findCommonAncestor(const DOM::Node&, const DOM::Node&); - static DOM::Node findIdNode(const DOM::Node&); -}; - -#endif // __TDocument_hh__ diff --git a/helm/DEVEL/mathml_editor/src/TListener.hh b/helm/DEVEL/mathml_editor/src/TListener.hh deleted file mode 100644 index 16fea6d71..000000000 --- a/helm/DEVEL/mathml_editor/src/TListener.hh +++ /dev/null @@ -1,35 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __TListener_hh__ -#define __TListener_hh__ - -class TListener -{ -public: - virtual void callback(TDocument&) = 0; -}; - -#endif // __TListener_hh__ diff --git a/helm/DEVEL/mathml_editor/src/TNode.cc b/helm/DEVEL/mathml_editor/src/TNode.cc deleted file mode 100644 index 3c67d9d60..000000000 --- a/helm/DEVEL/mathml_editor/src/TNode.cc +++ /dev/null @@ -1,236 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include "globals.hh" -#include "TNode.hh" -#include - -TNode -TNode::next() const -{ - assert(node); - DOM::Node p = node.get_nextSibling(); - while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_nextSibling(); - return p; -} - -TNode -TNode::nextL() const -{ - assert(node); - if (TNode n = next()) - if (n.isG()) return n.firstL(); - else return n; - else return TNode(); -} - -TNode -TNode::prev() const -{ - assert(node); - DOM::Node p = node.get_previousSibling(); - while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_previousSibling(); - return p; -} - -TNode -TNode::prevL() const -{ - assert(node); - if (TNode n = prev()) - if (n.isG()) return n.lastL(); - else return n; - else return TNode(); -} - -TNode -TNode::last() const -{ - assert(node); - DOM::Node p = node.get_lastChild(); - while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_previousSibling(); - return p; -} - -TNode -TNode::lastL() const -{ - assert(node); - if (TNode n = last()) - if (n.isG()) return n.lastL(); - else return n; - else - return TNode(); -} - -TNode -TNode::first() const -{ - assert(node); - DOM::Node p = node.get_firstChild(); - while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_nextSibling(); - return p; -} - -TNode -TNode::firstL() const -{ - assert(node); - if (TNode n = first()) - if (n.isG()) return n.firstL(); - else return n; - else - return TNode(); -} - -TNode -TNode::core() const -{ - assert(node); - // check also if there is a macro embellishment (\not) - if (isSb() || isSp()) return first().core(); - else return *this; -} - -TNode -TNode::parent() const -{ - assert(node); - DOM::Node p = node.get_parentNode(); - assert(!p || p.get_nodeType() == DOM::Node::ELEMENT_NODE); - return p; -} - -unsigned -TNode::size() const -{ - assert(node); - unsigned size = 0; - TNode p = first(); - while (p) - { - p = p.next(); - size++; - } - - return size; -} - -void -TNode::remove() const -{ - assert(node); - DOM::Node parent = node.get_parentNode(); - parent.removeChild(node); -} - -void -TNode::replace(const TNode& newNode) const -{ - assert(node); - DOM::Node parent = node.get_parentNode(); - parent.replaceChild(newNode.node, node); -} - -void -TNode::replace(const TNode& first, const TNode& last) const -{ - assert(node); - assert(first); - - TNode p = first; - while (p != last) - { - TNode next = p.next(); - insert(p); - p = next; - } - remove(); -} - -void -TNode::insert(const TNode& newNode) const -{ - assert(node); - DOM::Node parent = node.get_parentNode(); - parent.insertBefore(newNode.node, node); -} - -void -TNode::append(const TNode& newNode) const -{ - assert(node); - node.appendChild(newNode.node); -} - -void -TNode::append(const TNode& first, const TNode& last) const -{ - assert(node); - assert(first); - assert(last); - - TNode p = first; - while (p != last) - { - TNode next = p.next(); - append(p); - p = next; - } -} - -void -TNode::prepend(const TNode& newNode) const -{ - assert(node); - DOM::Node parent = node.get_parentNode(); - parent.insertBefore(newNode.node, parent.get_firstChild()); -} - -#if 0 -#endif - -TNode -TNode::child(unsigned pos) const -{ - assert(node); - TNode p = first(); - while (p && pos-- > 0) p = p.next(); - return p; -} - -std::string -TNode::get(const std::string& name) const -{ - assert(node); - return node.getAttribute(name); -} - -void -TNode::set(const std::string& name, const std::string& value) const -{ - assert(node); - node.setAttribute(name, value); -} diff --git a/helm/DEVEL/mathml_editor/src/TNode.hh b/helm/DEVEL/mathml_editor/src/TNode.hh deleted file mode 100644 index adbfe69a6..000000000 --- a/helm/DEVEL/mathml_editor/src/TNode.hh +++ /dev/null @@ -1,107 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __TNode_hh__ -#define __TNode_hh__ - -#include "dom.hh" -#include "globals.hh" -#include "TDictionary.hh" - -class TNode -{ -public: - TNode(void) : node(0) { }; - TNode(const DOM::Node& n) : node(n) { }; - TNode(const DOM::Element& elem) : node(elem) { }; - TNode(const TNode& n) : node(n.node) { }; - - TNode next(void) const; - TNode nextL(void) const; - TNode prev(void) const; - TNode prevL(void) const; - TNode core(void) const; - TNode parent(void) const; - TNode first(void) const; - TNode firstL(void) const; - TNode last(void) const; - TNode lastL(void) const; - TNode child(unsigned) const; - unsigned size(void) const; - bool empty(void) const { return !first().node; }; - std::string value(void) const { return (*this)["val"]; }; - - class ProxyAttr - { - public: - ProxyAttr(const DOM::Element& n, const std::string& s) : node(n), name(s) { }; - operator std::string() const { return node.getAttribute(name); }; - ProxyAttr& operator=(const std::string& v) { node.setAttribute(name, v); }; - bool operator==(const std::string& v) const { return node.getAttribute(name) == v; }; - bool operator!=(const std::string& v) const { return node.getAttribute(name) != v; }; - private: - DOM::Element node; - std::string name; - }; - - operator bool() const { return node; }; - DOM::Element element(void) const { return node; }; - bool operator==(const TNode& n) const { return node == n.node; }; - bool operator!=(const TNode& n) const { return node != n.node; }; - TNode operator[](int i) const { return child(i); }; - ProxyAttr operator[](const char* s) const { return ProxyAttr(node, s); }; - - //void advance(const TNode&) const; - void remove(void) const; - void replace(const TNode&) const; - void replace(const TNode&, const TNode&) const; - void insert(const TNode&) const; - void append(const TNode&) const; - void append(const TNode&, const TNode&) const; - void prepend(const TNode&) const; - - std::string get(const std::string&) const; - void set(const std::string&, const std::string&) const; - - std::string name(void) const { return node.get_localName(); }; - std::string nameC(void) const { return node.getAttribute("name"); }; - bool hasId(void) const { return node.hasAttribute("id"); }; - bool hasId(const std::string& id) const { return node.getAttribute("id") == id; }; - bool is(const std::string& s) const { return name() == s; }; - bool isG(void) const { return is("g"); }; - bool isSb(void) const { return is("sb"); }; - bool isSp(void) const { return is("sp"); }; - bool isC(void) const { return is("c"); } - bool isC(const std::string& name) const - { return isC() && node.getAttribute("name") == name; }; - bool isT(void) const { return (is("o") || is("i") || is("n") || is("s")); }; - - friend class TDocument; - -private: - DOM::Element node; -}; - -#endif // __TNode_hh__ diff --git a/helm/DEVEL/mathml_editor/src/TPushLexer.cc b/helm/DEVEL/mathml_editor/src/TPushLexer.cc deleted file mode 100644 index da15822c3..000000000 --- a/helm/DEVEL/mathml_editor/src/TPushLexer.cc +++ /dev/null @@ -1,207 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include -#include -#include - -#include "TToken.hh" -#include "TPushLexer.hh" -#include "APushParser.hh" - -TPushLexer::TPushLexer(ALogger& l, APushParser& p) : APushLexer(l, p) -{ - state = ACCEPT; -} - -void -TPushLexer::reset() -{ - buffer.erase(); - state = ACCEPT; - - displayCursor(); -} - -void -TPushLexer::flush() -{ - push(-1); -} - -void -TPushLexer::transaction(char ch, State newState) -{ - switch (ch) - { - case '{': parser.push(TToken(TToken::BEGIN)); break; - case '}': parser.push(TToken(TToken::END)); break; - case '$': parser.push(TToken(TToken::SHIFT)); break; - case '&': parser.push(TToken(TToken::ALIGN)); break; - case '\n': - case '\r': parser.push(TToken(TToken::EOL, ch)); break; - case '^': parser.push(TToken(TToken::SUPERSCRIPT)); break; - case '_': parser.push(TToken(TToken::SUBSCRIPT)); break; - case '\t': - case ' ': parser.push(TToken(TToken::IGNORABLE_SPACE, ch)); break; - case '~': parser.push(TToken(TToken::ACTIVE, ch)); break; - case '%': parser.push(TToken(TToken::COMMENT)); break; - default: - if (isalpha(ch)) parser.push(TToken(TToken::LETTER, ch)); - else if (isdigit(ch)) parser.push(TToken(TToken::DIGIT, ch)); - else parser.push(TToken(TToken::OTHER, ch)); - break; - } - state = newState; -} - -void -TPushLexer::push(char ch) -{ - switch (state) - { - case ACCEPT: - if (ch == '\\') state = ESCAPE; - else if (ch == '#') state = PARAMETER; - else if (ch == -1) ; - else transaction(ch, ACCEPT); - break; - case ESCAPE: - if (isalpha(ch)) - { - buffer.push_back(ch); - state = MACRO; - } - else if (ch == -1) error(); - else - { - parser.push(TToken(TToken::CONTROL, ch)); - state = ACCEPT; - } - break; - case MACRO: - if (ch == '\\') - { - parser.push(TToken(TToken::CONTROL, buffer)); - buffer.erase(); - state = ESCAPE; - } - else if (ch == '#') - { - parser.push(TToken(TToken::CONTROL, buffer)); - buffer.erase(); - state = PARAMETER; - } - else if (isalpha(ch)) - buffer.push_back(ch); - else if (ch == -1) - { - parser.push(TToken(TToken::CONTROL, buffer)); - buffer.erase(); - state = ACCEPT; - } - else - { - parser.push(TToken(TToken::CONTROL, buffer)); - buffer.erase(); - if (isspace(ch)) state = IGNORE_SPACE; - else transaction(ch, ACCEPT); - } - break; - case IGNORE_SPACE: - if (ch == '\\') state = ESCAPE; - else if (ch == '#') state = PARAMETER; - else if (isspace(ch)) ; - else if (ch == -1) state = ACCEPT; - else transaction(ch, ACCEPT); - break; - case PARAMETER: - if (ch == -1) error(); - else - { - parser.push(TToken(TToken::PARAMETER, ch)); - state = ACCEPT; - } - break; - default: - assert(0); - break; - } - - displayCursor(); - -} - -void -TPushLexer::drop(bool alt) -{ - std::string restore = ""; - - switch (state) - { - case ACCEPT: - case IGNORE_SPACE: - restore = parser.drop(alt); - if (restore.length() > 0 && restore[0] == '\\') - { - buffer = std::string(restore, 1, restore.length() - 1); - state = (buffer.length() > 0) ? MACRO : ESCAPE; - } - break; - case ESCAPE: - state = ACCEPT; - break; - case MACRO: - if (alt) buffer.erase(); - else buffer.erase(buffer.length() - 1, 1); - if (buffer.length() == 0) state = ESCAPE; - break; - case PARAMETER: - default: - assert(0); - break; - } - - displayCursor(); - -} - -void -TPushLexer::displayCursor() -{ - switch (state) - { - case ESCAPE: parser.setCursorHint("\\"); break; - case MACRO: parser.setCursorHint("\\" + buffer); break; - case PARAMETER: parser.setCursorHint("#"); break; - default: parser.setCursorHint(""); break; - } -} - -bool -TPushLexer::error() const -{ - return false; -} diff --git a/helm/DEVEL/mathml_editor/src/TPushLexer.hh b/helm/DEVEL/mathml_editor/src/TPushLexer.hh deleted file mode 100644 index 2aafd6ec9..000000000 --- a/helm/DEVEL/mathml_editor/src/TPushLexer.hh +++ /dev/null @@ -1,64 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __TPushLexer_hh__ -#define __TPushLexer_hh__ - -#include - -#include "APushLexer.hh" - -class TPushLexer : public APushLexer -{ -public: - TPushLexer(class ALogger&, class APushParser&); - virtual ~TPushLexer() { }; - - virtual void push(char); - virtual void drop(bool); - virtual bool complete(void) { }; - virtual void reset(void); - virtual void flush(void); - virtual bool error(void) const; - -protected: - enum State - { - ACCEPT, - ESCAPE, - MACRO, - IGNORE_SPACE, - PARAMETER - }; - - void transaction(char, State); - void displayCursor(void); - - State state; - std::string buffer; - -}; - -#endif // __TPushLexer_hh__ diff --git a/helm/DEVEL/mathml_editor/src/TPushParser.cc b/helm/DEVEL/mathml_editor/src/TPushParser.cc deleted file mode 100644 index 0c96fe439..000000000 --- a/helm/DEVEL/mathml_editor/src/TPushParser.cc +++ /dev/null @@ -1,1952 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include - -#include "ALogger.hh" -#include "TPushParser.hh" -#include "AMathMLFactory.hh" - -TPushParser::TPushParser(ALogger& l, const TDictionary& d) : APushParser(l), dictionary(d) -{ - init(); -} - -TPushParser::TPushParser(ALogger& l, AMathMLFactory& f, const TDictionary& d) : APushParser(l, f), dictionary(d) -{ - init(); -} - -TPushParser::~TPushParser() -{ -} - -void -TPushParser::init() -{ - cursor = doc.create("cursor"); - cursor["visible"] = "1"; - hiddenCursor = 0; - reset(); -} - -void -TPushParser::reset() -{ - nextId = 1; - if (cursor.parent()) cursor.remove(); - cursor["val"] = ""; - doc.reset(); - doc.root().append(cursor); - if (factory && !frozen()) factory->documentModified(doc); -} - -TNode -TPushParser::PRIME() -{ - const TDictionary::Entry entry = dictionary.find("prime"); - if (entry.cls == TDictionary::OPERATOR) - { - TNode op = doc.createO(entry.value, nextId++); - op["name"] = "prime"; - return op; - } - else - { - TNode op = doc.createO("?", nextId++); - return op; - } -} - -bool -TPushParser::do_begin() -{ - TNode parent = cursor.parent(); - if (parent.isC() && dictionary.find(parent.nameC()).table) - { - TNode row = doc.create("row"); - TNode cell = doc.create("cell"); - TNode g = doc.createG(); - row.append(cell); - cell.append(g); - g.append(cursor); - parent.append(row); - } - else - { - TNode g = doc.createG(nextId++); - cursor.replace(g); - g.append(cursor); - } - return true; -} - -bool -TPushParser::correctBrace() -{ - // this method MUST be invoked when the cursor is child of a - // phantom group, which in turn is the last rightOpen MACRO's child. - // The only way to exit from a rightOpen MACRO is opening a group before - // inserting the MACRO and, once the MACRO is completely inserted, closing - // the group. - // This method return true if the condition above is true. False, otherwise. - assert(cursor.parent() && cursor.parent().isG() && !cursor.parent().hasId()); - TNode parent = cursor.parent(); - assert(parent.parent() && parent.parent().isC()); - assert(!frames.empty()); - Frame& frame = frames.top(); - assert(frame.entry.rightOpen); - assert(parent.parent().last() == parent); - - TNode c = parent.parent(); - bool stop = false; - bool ok = false; - TNode node = c.parent(); - do - { - if (node.isG() && node.hasId()) - { - // in this case, the rightOpen MACRO is a child of a group with id. - // So, the '}' is correct - ok = true; - stop = true; - } - else if (node.isG()) - { - // the MACRO is a phantom group's child. We have to control why we - // have this phantom group - TNode nodeParent = node.parent(); - if (nodeParent && nodeParent.isC()) - { - // we have to control the nature of this MACRO - const TDictionary::Entry& entry = dictionary.find(nodeParent.nameC()); - if (entry.rightOpen && node == nodeParent.last()) - { - // in this case we have to re-iterate the process - node = nodeParent.parent(); - } - else stop = true; - } - else stop = true; - } - else - { - // at the moment we assume that a MACRO cannot be child of an element other than a group - stop = true; - } - } - while (!stop); - - return ok; -} - -bool -TPushParser::do_end() -{ - TNode parent = cursor.parent(); - if (parent && parent.isG() && parent.hasId()) - { - // normal closing brace for an explicitly open group - cursor.remove(); - advance(parent); - return true; - } - else if (parent && parent.isG() && parent.parent() && parent.parent().is("cell")) - { - assert(!frames.empty()); - // closing brace for a structure in which & or \cr have been used - TNode row = parent.parent().parent(); - assert(row && row.is("row")); - assert(row.parent()); - advance(row); - return true; - } - else if (parent && parent.isG() && !parent.hasId() && parent.parent() && !parent.parent().is("math")) - { - // In this case, we have to control the cursor's grand parent. - TNode gparent = parent.parent(); - - if (gparent.isC() && gparent.last() == parent) - { - // a frame MUST be in the stack - assert(!frames.empty()); - - // we have to control the nature of this macro - if (frames.top().entry.rightOpen) - { - // in this case, the '}' character is the proper way to exit from the phantom group, and - // in particular, this character means that the user wants to exit from the MACRO. - // A rightOpen MACRO MUST be descendant of a group with Id. This '}' is the closing brace of this - // group. So, we have to control if this group exists. This groyp could exist, but this MACRO could - // be another MACRO's child, so we have to control this last MACRO recursively. This recurive control - // is done by the correctBrace method. - if (!correctBrace()) - { - // the '}' is not correct - logger.warning("nothing to close"); - return false; - } - else - { - cursor.remove(); - advance(parent); - return true; - } - } - else - { - logger.warning("ignored closing brace"); - return false; - } - } - else - { - // at the moment, a phantom group with the cursor inside can be a MACRO's child or a cell's child, and these cases - // are handled in other blocks of code. - logger.error("do_end: strange TML tree"); - return false; - } - } - else - { - // In this case, there is a redundant '}', so we can ignore it and - // emit an error - logger.warning("There is so no corresponding'{'"); - return false; - //assert(0); - } -} - -bool -TPushParser::do_shift() -{ - TNode parent = cursor.parent(); - assert(parent); - if (parent.is("tex")) - { - TNode math = doc.create("math", nextId++); - TNode g = doc.createG(); - cursor.replace(math); - math.append(g); - g.append(cursor); - return true; - } - else if (parent.isG() && !parent.hasId() && parent.parent() && parent.parent().is("math")) - { - if (cursor.prev()) - { - // there is something before the cursor, hence this is the - // closing math shift - if (parent.parent()["display"] != "1") - { - // one math shift is enough to close it - cursor.remove(); - return true; - } - else - { - // we need two closing math shifts - //cursor.remove(); ?? - parent.parent().append(cursor); - return true; // ??? - } - } - else if (parent.parent()["display"] != "1") - { - // there is nothing before the cursor, and the math is not - // in display mode, so this must be a double math shift - parent.parent()["display"] = "1"; - return true; - } - else - { - parent.parent().append(cursor); - return true; - } - } - else if (parent.is("math")) - { - cursor.remove(); - return true; - } - else - { - logger.warning("not allowed here"); - return false; - } -} - -bool -TPushParser::do_align() -{ - TNode parent = cursor.parent(); - if (parent && parent.isG() && parent.hasId()) - { - // alignment tab used for the first time inside a group - TNode row = doc.create("row"); - TNode cell = doc.create("cell"); - TNode g = doc.createG(); - row.append(cell); - cell.append(g); - g.append(parent.first(), cursor); - return true; - } - else if (parent && parent.isG() && parent.parent().is("cell")) - { - // alignment tab used within a cell - TNode oldCell = parent.parent(); - assert(oldCell && oldCell.is("cell")); - TNode row = oldCell.parent(); - assert(row && row.is("row")); - TNode cell = doc.create("cell"); - if (oldCell.next()) oldCell.next().insert(cell); - else row.append(cell); - TNode g = doc.createG(); - cell.append(g); - g.append(cursor); - return true; - } - else - { - logger.warning("alignment tab used outside matrix"); - return false; - } -} - -bool -TPushParser::do_eol() -{ - //if (cursor.parent()) cursor.remove(); - logger.warning("ignored token"); - return false; -} - -bool -TPushParser::do_parameter(const std::string& p) -{ - logger.warning("ignored token"); - return false; -} - -bool -TPushParser::do_subscript() -{ - TNode parent = cursor.parent(); - if (parent.isG()) - { - TNode prev = cursor.prev(); - if (!prev) - { - TNode elem = doc.create("sb", nextId++); - TNode g = doc.createG(); - cursor.replace(elem); - elem.append(g); - elem.append(cursor); - return true; - } - else - { - TNode elem = doc.create("sb", nextId++); - prev.replace(elem); - elem.append(prev); - elem.append(cursor); - return true; - } - } - else if (parent.isSb() && cursor == parent[1]) - { - if (parent["under"] == "1") - { - logger.warning("already under"); - return false; - } - else - { - parent["under"] = "1"; - return true; - } - } - else - { - logger.warning("ignored token"); - return false; - } -} - -bool -TPushParser::do_superscript() -{ - TNode parent = cursor.parent(); - if (parent.isG()) - { - TNode prev = cursor.prev(); - if (!prev) - { - TNode elem = doc.create("sp", nextId++); - TNode g = doc.createG(); - cursor.replace(elem); - elem.append(g); - elem.append(cursor); - return true; - } - else - { - TNode elem = doc.create("sp", nextId++); - prev.replace(elem); - elem.append(prev); - elem.append(cursor); - return true; - } - } - else if (parent.isSp() && cursor == parent[1]) - { - if (parent["over"] == "1") - { - logger.warning("already over"); - return false; - } - else - { - parent["over"] = "1"; - return true; - } - } - else - { - logger.warning("ignored token"); - return false; - } -} - -bool -TPushParser::do_ignorablespace(const std::string& s) -{ - // At the moment, do nothing -} - -bool -TPushParser::do_space(const std::string&) -{ - TNode elem = doc.createS(nextId++); - cursor.replace(elem); - advance(elem); - return true; -} - -bool -TPushParser::do_letter(const std::string& s) -{ - //TNode parent = cursor.parent(); - TNode elem = doc.createI(s, nextId++); - cursor.replace(elem); - advance(elem); - return true; -} - -bool -TPushParser::do_digit(const std::string& s) -{ - TNode elem = doc.createN(s, nextId++); - cursor.replace(elem); - advance(elem); - return true; -} - -bool -TPushParser::isPrimes(const TNode& node) const -{ - assert(node); - return node.isG() && node.last() && node.last().is("o") && node.last()["name"] == "prime"; -} - -bool -TPushParser::do_apostrophe() -{ - if (cursor.parent() && cursor.parent().isG()) - { - if (TNode prev = cursor.prev()) - { - if (prev.isSp() && prev[1] && isPrimes(prev[1])) - { - prev[1].append(PRIME()); - return true; - } - else if (prev.isSb() && prev[0] && - prev[0].isSp() && prev[0][1] && - isPrimes(prev[0][1])) - { - prev[0][1].append(PRIME()); - return true; - } - else - { - TNode elem = doc.create("sp"); - TNode g = doc.createG(); - prev.replace(elem); - elem.append(prev); - elem.append(g); - g.append(PRIME()); - return true; - } - } - else - { - // is it an error? - logger.warning("you have to insert an identifier before a ''"); - return false; - } - } - else - { - logger.warning("cursor has to be in a group"); - return false; - } -} - -bool -TPushParser::do_other(const std::string& s) -{ - switch (s[0]) - { - case '\'': - return do_apostrophe(); - break; - default: - /*cout << "TPushParser::do_other " << s << endl; - cout << "DOCUMENT: " << static_cast(cursor.element().get_ownerDocument()) << endl;*/ - TNode elem = doc.createT("o", s, nextId++); - cursor.replace(elem); - advance(elem); - return true; - break; - } -} - -bool -TPushParser::do_active(const std::string&) -{ - // ??? space? - logger.warning("ignored token"); - return false; -} - -bool -TPushParser::do_comment() -{ - // ??? - return false; -} - -bool -TPushParser::do_cr() -{ - TNode parent = cursor.parent(); - if (parent && parent.isG() && - parent.parent() && parent.parent().is("cell") && - parent.parent().parent() && parent.parent().parent().is("row")) - { - TNode oldRow = parent.parent().parent(); - assert(oldRow); - TNode table = oldRow.parent(); - assert(table); - TNode row = doc.create("row"); - TNode cell = doc.create("cell"); - TNode g = doc.createG(); - if (oldRow.next()) oldRow.next().insert(row); - else table.append(row); - row.append(cell); - cell.append(g); - g.append(cursor); - return true; - } - else - { - // at the moment, \cr can only be used inside a table - logger.warning("cr used outside a table"); - return false; - } -} - -bool -TPushParser::do_control(const std::string& name) -{ - if (name == "cr") return do_cr(); - else - { - TNode parent = cursor.parent(); - const TDictionary::Entry& entry = dictionary.find(name); - switch (entry.cls) - { - case TDictionary::IDENTIFIER: - { - TNode t = doc.createI(entry.value, nextId++); - t["name"] = name; - cursor.replace(t); - advance(t); - return true; - } - break; - case TDictionary::OPERATOR: - { - TNode t = doc.createO(entry.value, nextId++); - t["name"] = name; - cursor.replace(t); - advance(t); - return true; - } - break; - case TDictionary::NUMBER: - { - TNode t = doc.createN(entry.value, nextId++); - t["name"] = name; - cursor.replace(t); - advance(t); - return true; - } - break; - case TDictionary::MACRO: - { - if (parent.isG()) - { - TNode m = doc.createC(name, nextId++); - cursor.replace(m); - if (entry.leftOpen && entry.rightOpen) - { - assert(entry.pattern.empty()); - assert(parent.isG()); - TNode g1 = doc.createG(); - g1["left-open"] = "1"; - g1.append(parent.first(), m); - m.append(g1); - TNode g2 = doc.createG(); - g2.append(cursor); - m.append(g2); - frames.push(Frame(entry)); - } - else if (entry.leftOpen) - { - assert(parent.isG()); - TNode g = doc.createG(); - g["left-open"] = "1"; - g.append(parent.first(), m); - m.append(g); - advance(m); - } - else if (entry.rightOpen) - { - assert(entry.pattern.empty()); - assert(parent.isG()); - TNode g = doc.createG(); - g.append(cursor); - m.append(g); - frames.push(Frame(entry)); - } - else if (!entry.pattern.empty()) - { - frames.push(Frame(entry)); - if (entry.paramDelimited(0)) - { - TNode g = doc.createG(); - m.append(g); - g.append(cursor); - } - else - m.append(cursor); - } - else - { - // it's an empty macro - advance(m); - } - return true; - } - else if (!entry.pattern.size() && !entry.rightOpen && !entry.leftOpen) - { - // a macro with no arguments and no right open and no left open, can be child of anything - TNode m = doc.createC(name, nextId++); - cursor.replace(m); - advance(m); - return true; - } - else - { - // a macro with arguments or a rightOpen or leftOpen macro must be a group's child - logger.warning("ignored token: this macro should be in a group"); - return false; - } - } - break; - case TDictionary::UNDEFINED: - { - logger.warning("using undefined macro " + name); - TNode m = doc.createC(name, nextId++); - cursor.replace(m); - advance(m); - return true; - } - break; - default: - { - //assert(0); - logger.warning("ignored token"); - return false; - } - } - } -} - -std::string -TPushParser::drop_prev_token(bool special) -{ - assert(cursor.prev()); - assert(cursor.parent()); - TNode prev = cursor.prev(); - assert(prev.isT()); - - DOM::UCS4String ucs4val = prev.element().getAttribute("val"); - bool macro = prev.element().hasAttribute("name"); - std::string utf8name; - if (macro) utf8name = prev.element().getAttribute("name"); - - cursor.remove(); - prev.replace(cursor); - - if (cursor.parent().isC()) - { - // in this case we have removed an element of a MACRO. - // we can assert that this element was a non delimited argument - assert(!frames.empty()); - Frame& frame = frames.top(); - assert(frame.pos > 0); - frame.pos--; - } - - if ((ucs4val.length() > 1)) - { - if (!macro) - { - // in this case we can return the content of ucs4val, but we have - // to convert it in a utf8 - DOM::GdomeString gdsval(ucs4val); - std::string utf8val(gdsval); - switch (utf8val[utf8val.length() - 1]) - { - case '-': - case '_': - return (special) ? std::string(utf8val, 0, utf8val.length() - 1) + "\\" : std::string(utf8val, 0, utf8val.length() - 1); - default: return (special) ? "" : std::string(utf8val, 0, utf8val.length() - 1); - } - } - else - { - // in this case, the content of val could be in unicode, - // but we have the attribute name, which doesn't contain character not representable - // with a byte. - return (special) ? "\\" + utf8name : ""; - } - } - else if (macro && special) return "\\" + utf8name; - else return ""; -} - -std::string -TPushParser::drop_prev_script(bool special) -{ - // this method deletes an sp or an sb preceding the cursor - assert(cursor.prev()); - assert(cursor.parent()); - TNode prev = cursor.prev(); - assert(prev.is("sp") || prev.is("sb")); - cursor.remove(); - prev.append(cursor); - // we can invoke the drop_prev, because a sp (sb) MUST have two children - // but we cannot invoke do_drop_script because it assumes when called, the first - // child has been removed yet. - if (cursor.prev().isG() && !prev.hasId()) - { - // in this case, the user has inserted a sequence of '. - // Hence, we force a normal deletion, because the behavior must be the same - // for the two kind of deletion - return drop_prev(false); - } - else return drop_prev(special); -} - -std::string -TPushParser::drop_prev_group(bool special) -{ - assert(cursor.prev() && cursor.prev().isG()); - TNode parent = cursor.parent(); - TNode prev = cursor.prev(); - cursor.remove(); - prev.append(cursor); - - if (parent.isC() && prev.hasId()) - { - // this previous group is a macro's argument. Entering inside it means that - // this argument becomes incomplete. Hence, we have to decrement the member pos. - assert(!frames.empty()); - frames.top().pos--; - } - - if (special) return ""; - else - { - // a group could have no children, so the drop_prev is not appropriate - // so, this method is not equivalent to the one above - return do_drop(special); - } -} - -std::string -TPushParser::drop_prev_macro(bool special) -{ - assert(cursor.parent()); - assert(cursor.prev()); - TNode prev = cursor.prev(); - assert(prev.isC()); - - std::string macro_name = prev.nameC(); - - TNode parent = cursor.parent(); - - const TDictionary::Entry& entry = dictionary.find(prev["name"]); - - if (!entry.defined()) - { - // In this case, with a normal deletion, we completely remove the macro. - // With a special deletion, we remove the last character of the macro's name. - cursor.remove(); - prev.replace(cursor); - if (cursor.parent().isC()) - { - // we have removed a macro's child - assert(!frames.empty()); - frames.top().pos--; - } - if (special) return "\\" + macro_name.erase(macro_name.length() - 1, 1); // we remove the last char, because an undefined macro's name is visible - return ""; - } - else - { - // we start to remove a MACRO. Different actions must be taken, based on the nature - // of the MACRO. In some cases, we can't remove the MACRO immediately, in other - // cases it's correct. In the first set of cases, we have to update the stack, pushing - // a frame in it with a correct value of pos, in the - // second one, we must not push a frame in the stack - - if (entry.rightOpen) - { - // In this fragment of code we also handle the leftOpen && rightOpen MACRO. - // since the control element is rightOpen, the cursor should be placed after - // the last child of the control element's last child, and than, we try to remove something. - // A frame MUST be pushed in the stack, because we dont' know if the following actions - // will completely remove the MACRO. - frames.push(Frame(entry)); - - // Since the MACRO is rightOpen, the last child of the MACRO must be a phantom group - assert(prev.last().isG() && !prev.last().hasId()); - - cursor.remove(); - prev.last().append(cursor); - - if (special) return ""; - else - { - // the drop_prev is not appropriate, because the last child of the MACRO could have no children - return do_drop_phantom_group(special); - } - } - else if (entry.leftOpen) - { - // the leftOpen MACRO MUST have one and only one child, which MUST be a phantom group - // In this case, we do not have to push a frame in the stack, because we remove the - // MACRO immediately, substituting it with the content of the phantom group. - // We could remove the last child of the phantom group, but - // it's not clear if it's the correct behavior of the graphical deletion. - // At the moment, to give a standard behavior, we remove the last element. - // With a special deletion, we do not remove it. - assert(prev.first()); - assert(prev.first().isG()); - assert(prev.first() == prev.last()); - - TNode g = prev.first(); - if (g.size()) - { - // in this case, the phantom group has at least one child, so we can call the - // TNode::replace. - g.remove(); - prev.replace(g.first(), TNode()); - parent.append(cursor); - if (special) return "\\" + macro_name; - else return do_drop(special); - } - else - { - // otherwise, the phantom group has no children, so we remove it, also the MACRO. - cursor.remove(); - g.remove(); - prev.replace(cursor); - if (special) return "\\" + macro_name; - else - { - // Once removed this empty macro, we could try to remove something else. - // This would be justified by the fact that, generally, an empty macro gives no visual information - // about it. - return do_drop(special); // special is false - } - } - } - else if (!entry.pattern.empty()) - { - // we have to start to remove a MACRO which accepts arguments. - // If the MACRO accepts arguments, the MACRO has at least one child - assert(prev.size() >= 1); - - // Differnt actions must be taken, based on the nature of the last child - // of the MACRO. We have to distinguish the case in which it's a delimited argument, - // frome the one in which it's a not delimited argument. - if (prev.last().isG() && !prev.last().hasId()) - { - if (special) - { - // in this case, we have to start removing the last delimiter - frames.push(Frame(entry, entry.pattern.size() - 2)); - - cursor.remove(); - prev.last().append(cursor); - - std::string last_del = entry.pattern[entry.pattern.size() - 1].value; - - return "\\" + last_del; - } - else - { - // the last argument of the MACRO is a delimited argumet. We ideally remove - // the sequence of delimiters - cursor.remove(); - prev.last().append(cursor); - // we have to push a frame with a correct value of pos - assert(entry.previousParam(entry.pattern.size()) != entry.pattern.size()); - - unsigned sequence_length = entry.pattern.size() - entry.previousParam(entry.pattern.size()) - 1; - unsigned p = entry.pattern.size() - sequence_length - 1; - // now, p is the correct value of pos, and we can push the frame. - frames.push(Frame(entry, p)); - - // To give a standard behavior to the graphical deletion, we remove the last - // element of the macro. Since we are in a phantom group, we can invoke the - // do_drop_phantom_group(special). - return do_drop_phantom_group(special); - } - } - else - { - // in this case, the last child of the MACRO is not a delimited argument, so we try - // to remove it, but we have to take differnt actions if the MACRO is a table with rows or not. - cursor.remove(); - if (entry.table == 1 && prev.last().is("row")) - { - // in this case the cursor has to be appended to the group associated to - // the last cell of the last row of the table - assert(prev.last().last().is("cell") && prev.last().last().first().isG()); - prev.last().last().first().append(cursor); - - // we have to push a frame in the stack. Since tables has a pattern size = 1, we have to - // set pos at 0, because appending the cursor to the last cell means that this argument - // is not whole inserted. - // We don't call frames.push(Frame(entry)), because it incoditionaly set pos at 0. The - // following line is more general - frames.push(Frame(entry, entry.pattern.size() - 1)); - if (special) - { - // to type a table with rows and cells, the user had typed a - // "{", and to exit from it, the user had inserted a "}". - // Since we are in a special deletion, we just idealy remove the "}" - return ""; - } - else return do_drop_phantom_group(special); - } - else - { - // we push a frame in the stack with a correct value of member pos. - // This correct value is the size of the pattern - 1, because we have been started to delete - // a MACRO. It means that all of the MACRO's arguments have been inserted, but - frames.push(Frame(entry, entry.pattern.size())); - prev.append(cursor); - return drop_prev(special); - } - - } // end of the else of the if (prev.last().isG() && !prev.last().hasId()) - - } // end of if (!entry.pattern.empty()) - else - { - // if we are here, the MACRO preceding the cursor, is !(rightOpen || leftOpen), - // and has no pattern. It means that it has no children. - // We can replace it with the cursor - assert(prev.size() == 0); - cursor.remove(); - prev.replace(cursor); - if (cursor.parent().isC()) - { - // we have removed an empty macro, which was a non delimited argument of a macro. - // We have to decrement pos - assert(!frames.empty()); - frames.top().pos--; - } - - if (special) return "\\" + macro_name; - else return ""; - - // now we could start to remove something else. This behavior would be justified by the - // fact that, generally, an empty MACRO gives no visual information about it. - // To adopt this behavior, just remove the comment to the following instruction - // return do_drop(special); - } - } // end of defined MACRO - -} - -std::string -TPushParser::drop_prev(bool special) -{ - // if in this function, the prev of cursor does exist, also the parent and we want a graphical deletion. - - assert(cursor.prev()); - assert(cursor.parent()); - - TNode prev = cursor.prev(); - - if (prev.isT()) - { - return drop_prev_token(special); - } - else if (prev.isSp() || prev.isSb()) - { - return drop_prev_script(special); - } - else if (prev.isG()) - { - return drop_prev_group(special); - } - else if (prev.isC()) - { - // here, we also treat the case in which the MACRO is a table - return drop_prev_macro(special); - } - else - { - // not handled. Future cases... - return ""; - } - -} // end of method - -void -TPushParser::rgreplace_father() -{ - // this method MUST only be invoked, when the cursor - // is the only child of a group with id. This function - // replaces the group with the cursor. But if the new parent - // is a group with id and the cursor is the only child of the - // group, the new parent is replaced...and so on. - // r stands for recursive, g stands for graphical. - assert(cursor.parent()); - assert(cursor.parent().isG() && cursor.parent().hasId()); - - TNode parent = cursor.parent(); - - while (parent.isG() && parent.hasId() && (parent.first() == cursor)) - { - parent.replace(cursor); - parent = cursor.parent(); - } -} - -std::string -TPushParser::do_drop_script(bool special) -{ - // If we are here, the cursor is child of a script (sp or sb) and - // this means that a prev does exist and that there is one and only one - // element preceding the cursor. The sp's (or sb's) parent - // MUST NOT be a MACRO. - // The element preceding the cursor is the base of the script. - - assert(cursor.parent() && (cursor.parent().isSp() || cursor.parent().isSb())); - TNode parent = cursor.parent(); - - assert(parent.size() == 2); - assert(parent.parent() && !parent.parent().isC()); - - TNode prev = cursor.prev(); - cursor.remove(); - if (prev.isG() /*&& !prev.hasId()*/ && (prev.size() == 0)) - { - // in this case, the script's base is a group with no elements, so - // we have to remove the entire MACRO, replacing it with the cursor. - // This situation occurs when the user had typed something like this - // $....{}^ - // or this - // $^ - // or this - // $...{^ - // - if (special && prev.hasId()) - { - // in this case, the user has typed: ...{}^ - // hence we idealy remove the ^ - parent.replace(prev); - prev.parent().append(cursor); - return ""; - } - else if (!prev.hasId()) - { - // we idealy remove the ^, but the phantom group - // has to be removed, also - prev.remove(); - parent.replace(cursor); - return ""; - } - else - { - prev.remove(); - parent.replace(cursor); - - // since the script had no children, we can try to remove something else. - // Since we don't know who is cursor's parent, and who is cursor's preceding - // element, we invoke the do_drop() - return do_drop(special); - } - } - else - { - // in this case, the prev has to replace the script. - parent.replace(prev); - prev.parent().append(cursor); - // now prev have a preceding element - assert(cursor.parent().size() > 1); - - if (special) return ""; - else - { - // to give a standard behavior, we try to remove the element, which was - // the script's base. - return do_drop(special); - } - } - -} // end of method do_drop_script - -std::string -TPushParser::do_drop_macro(bool special) -{ - // If we are here, the cursor is a child of a MACRO and this means - // that there is an open frame for the control element - // and this element is closed at either side (no leftOpen no rightOpen) - // and the MACRO is waiting for a not delimited argument, so - // we can assert that frame.entry.pattern.size() >= 1 - assert(cursor.parent() && cursor.parent().isC()); - TNode parent = cursor.parent(); - - // this string is useful iff we have a special deletion. - std::string macro_name = parent.nameC(); - - assert(!frames.empty()); - Frame& frame = frames.top(); - assert(frame.entry.pattern.size() >= 1); - - // we have to take different actions, based on if a preceding element exists - // or not - TNode prev = cursor.prev(); - if (!prev) - { - // in this case, a prev does not exist, so the actions of deleting means - // that we have to remove the MACRO. So we have to pop the stack. - assert(frame.pos == 0); - - parent.replace(cursor); - frames.pop(); - - if (special) return "\\" + macro_name; - else - { - // Since the macro had no children and this is a graphical deletion, we try - // to remove something else - return do_drop(special); - } - } - else - { - // a prev does exist, we have to control if it's a delimited argument or not. - if (prev.isG() && !prev.hasId()) - { - // in this case, prev is a delimited argument, so we have - // to ideally remove the sequence of delimiters - Frame& frame = frames.top(); - assert(frame.pos > 1); - cursor.remove(); - prev.append(cursor); - assert(frame.entry.previousParam(frame.pos) != frame.entry.pattern.size()); - - if (special) - { - // in this case we have to start removing the last delimimeter. - // It means that we return in a situation where the user has not entirely - // inserted the delimited argument. So, we have to decrement frame.pos of - // two units: the delimiter and the actual argument - std::string last_del = frame.entry.pattern[frame.pos - 1].value; - frame.pos = frame.pos - 2; - return "\\" + last_del; - } - else - { - // these 3 lines of code update the member pos. - unsigned sequence_length = frame.pos - frame.entry.previousParam(frame.pos) - 1; - assert(sequence_length); - frame.pos = frame.pos - sequence_length - 1; - - // since it's a graphical deletion, we have to remove the current preceding element. - // We don't invoke the drop_prev(), because a do_drop_phantom_group is more general. - return do_drop_phantom_group(special); - } - } - else - { - // the prev is not a delimited argument, so we have to try to remove it. - // We "try", because the prev might be something that - // a simple deletion cannot remove completely - return drop_prev(special); - } - } - -} - -std::string -TPushParser::do_drop_groupId(bool special) -{ - // if we are here, the cursor's parent is a group with Id - assert(cursor.parent() && cursor.parent().isG() && cursor.parent().hasId()); - TNode parent = cursor.parent(); - - // we have to take different actions based on if the cursor has a preceding - // element or not - TNode prev = cursor.prev(); - if (prev) - { - // the cursor has a preceding element, so we try to remove it - if (special) return drop_prev(special); - else - { - std::string str = drop_prev(special); - - // We control if the group has to be removed, because the cursor - // might be the only element of the group. - // But we have to be careful, because drop_prev could change the TML tree - // more than we think...parent could no longer exist! - parent = cursor.parent(); - if ((parent.first() == cursor) && parent.isG() && parent.hasId()) - rgreplace_father(); - - return str; - } - } - else - { - // the cursor has no preceding elements, so we have to remove the - // group. - if (special) - { - parent.replace(cursor); - return ""; - } - else - { - rgreplace_father(); - // we have to re-start the process, because it' a graphical deletion - return do_drop(special); - } - } - -} // end of method do_drop_groupId() - -std::string -TPushParser::do_drop_phantom_group(bool special) -{ - // if we are here, the cursor MUST be a child of a - // phantom group. - assert(cursor.parent() && cursor.parent().isG() && !cursor.parent().hasId()); - - TNode parent = cursor.parent(); - - // now we have to control if the cursor has a preceding element or not - TNode prev = cursor.prev(); - if (prev) - { - if (parent.parent() && parent.parent().isC()) - { - // there is a frame in the stack - assert(!frames.empty()); - if (frames.top().entry.pattern.size()) - { - Frame& frame = frames.top(); - if (special) - { - // we are in a delimited argument. If the user has inserted a proper subset of the - // delimiters'sequence, we start to remove the previous delimiter. Start to remove - // a delimiter means that that delimiter must be removed from the count of inserted delimiters. - // It means that we have to decrement the member pos. - if (frame.entry.pattern[frame.pos].category != TToken::PARAMETER) - { - std::string del = frame.entry.pattern[frame.pos].value; - frame.pos--; - return "\\" + del; - } - } - else - { - // we are in a delimited argument. If the user has inserted a proper subset of the delimiters'sequence, - // we have to remove the portion the user has inserted. - while (frame.entry.pattern[frame.pos].category != TToken::PARAMETER) frame.pos--; - } - } - } - - // the cursor has a preceding element, so we try to remove it - std::string str = drop_prev(special); - - if (special) return str; - else - { - // now we have to control the parent, to handle the case of primes. But we have returned from a drop_prev(), which - // could change the TML tree. So not asssuming that cursor's parent is unchanged is convenient. - parent = cursor.parent(); - if (parent.isG() && !parent.hasId() && (parent.size() == 1) && parent.parent().isSp()) - { - // in this case the drop_prev has removed the only element preceding the cursor. - // Since the phantom group is an sp's child, the user has removed all \' in the - // phantom group. - // Now we have some possibilities: - // - we can replace the phantom group with the cursor, giving the user the chance to insert a new - // exponent - // - we can remove the phantom group and the sp element, recreating the state before the user inserted the first - // prime. - // At the moment we implement the second one. - assert(parent.parent().size() == 2); - TNode gparent = parent.parent(); - TNode base = gparent.first(); - cursor.remove(); - parent.remove(); - gparent.replace(base); - // now base's parent is no more gparent - base.parent().append(cursor); - - return str; - } - else if (parent.isG() && !parent.hasId() && parent.parent().isSp()) - { - // in this case we have to place the cursor after the sp element - cursor.remove(); - assert(parent.parent().parent()); - parent.parent().parent().append(cursor); - return str; - } - else return str; - } - } - else - { - // in this case the cursor is the only element of the phantom group, - // so we have to remove it. But, a phantom group has a special role, - // so we have to control the grand father of the cursor. - TNode gfather = parent.parent(); - if (!gfather) - { - // If here, the TML tree is in an inconsistent state - logger.error("TML tree in a inconsistent state"); - return ""; - } - else if (gfather.isC()) - { - // in this case the phantom group is child of a MACRO. - // We have to control the nature of this MACRO. - assert(!frames.empty()); - Frame& frame = frames.top(); - - // this variable is useful in a special deletion - std::string macro_name = gfather.nameC(); - - if (frame.entry.leftOpen && frame.entry.rightOpen) - { - // in this case, the cursor'parent is in the second and last child - // of the MACRO. We can assert that the grand father has two - // children, which are both phantom groups - assert(gfather.size() == 2); - assert((gfather.last() == parent) && (gfather.first().isG() && !gfather.first().hasId())); - assert(frame.pos == 0); - - TNode ggfather = gfather.parent(); - assert(ggfather); - cursor.remove(); - parent.remove(); - // we have to replace the gfather with the elements of its first child, but this group may have no - // children. - if (gfather.first().size()) - { - gfather.replace(gfather.first().first(), TNode()); - ggfather.append(cursor); - } - else - { - // in this case, the MACRO has to be replaced with the cursor - gfather.first().remove(); - gfather.replace(cursor); - } - // now we have the situation preceding the insertion of the leftOpen and rightOpen MACRO. - // this MACRO no longer exists. - frames.pop(); - - if (special) return "\\" + macro_name; - else - { - // to give a standard behavior to the graphical deletion, we call the do_drop. - return do_drop(special); - } - } - else if (frame.entry.rightOpen) - { - // the user has inserted a rightOpen MACRO, and now, this MACRO has no children (excluding the - // phantom group), so we remove the MACRO. - // We can assert that cursor's parent is the only child of the MACRO - assert(gfather.size() == 1); - assert(frame.pos == 0); - cursor.remove(); - parent.remove(); - gfather.replace(cursor); - - // now we have the situation preceding the rightOpen MACRO, so we have to pop the frame - frames.pop(); - - if (special) return "\\" + macro_name; - else - { - // to give a standard behavior to the graphical deletion, we call the do_drop. - return do_drop(special); - } - - } - else if (frame.entry.leftOpen) - { - // this situation will never occur. - logger.error("the parser has generated a wrong TML tree"); - return ""; - } - else if (!frame.entry.pattern.empty()) - { - // the MACRO accepts arguments, and the phantom group in which - // the cursor is, rappresents a delimited argument. - // We have to control if the cursor's parent has a preceding element, - // or not. - TNode uncle = parent.prev(); - if (!uncle) - { - // the parent is the only element of the MACRO. - // we can assert that frame.pos == 0. - // In this case we can replace the MACRO with the cursor - assert(frame.pos == 0); - cursor.remove(); - parent.remove(); - gfather.replace(cursor); - frames.pop(); - - if (special) return "\\" + macro_name; - else - { - // once we have replaced the empty macro with the cursor, we can remove - // something else - return do_drop(special); - } - } - else - { - // the parent has a preceding element. Now we have - // to control if the uncle is a delimited argument or not. - if (uncle.isG() && !uncle.hasId()) - { - // cursor's uncle is a delimited argument - cursor.remove(); - parent.remove(); - uncle.append(cursor); - if (special) - { - // we have to start removing the last delimiter of the delimited - // argument. - std::string last_del = frame.entry.pattern[frame.pos - 1].value; - frame.pos = frame.pos - 2; - return "\\" + last_del; - } - else - { - // the uncle is a delimited argument. So we have to ideally - // remove the sequence of delimiters. - assert(frame.pos > 1); - unsigned sequence_length = frame.pos - frame.entry.previousParam(frame.pos) - 1; - assert(frame.entry.previousParam(frame.pos) != frame.entry.pattern.size()); - assert(sequence_length); - // sequence_length is the length of the delimiters sequence which separates - // the current parameter and the previous parameter - frame.pos = frame.pos - sequence_length - 1; - - // once removed the sequnce of delimiters, we can start to remove the actual - // parameter. We can call the do_drop_phantom_group() because a delimited argument - // is always a phantom group's child - return do_drop_phantom_group(special); - } - } - else - { - // the uncle is a not delimited argument, so we try to remove it. - cursor.remove(); - parent.replace(cursor); - parent = cursor.parent(); // we update the parent (it should be the MACRO) - assert(parent.isC()); - - // now we try to remove the uncle (now it' the preceding element) - return drop_prev(special); - } - } // this is the else's end, that handles the case in which an uncle exists - } // end of if (!frame.entry.pattern.empty()) - else - { - // the entry has no arguments, is not rightOpen and is not leftOpen. - logger.error("TML tree in a strange state"); - return ""; - } - } // end of if (gfather.isC()) - else if (gfather.is("cell")) - { - // A table is a control sequence, so there is a frame in the stack - assert(!frames.empty()); - assert(frames.top().pos == 0); - assert(frames.top().entry.table == 1); - - // a cell MUST be a row's child, which in turn is a table's child - assert(gfather.parent() && gfather.parent().is("row") && gfather.parent().parent()); - - // this variable is useful to handle the special deletion - std::string table_name = gfather.parent().parent().nameC(); - - TNode row = gfather.parent(); - - // in this case the cell has no element, so the user wants to delete this cell. - TNode prev_cell = gfather.prev(); - cursor.remove(); - parent.remove(); - gfather.remove(); - // now the cell no longer exists - - if (!prev_cell) - { - // in this case, the cell was the only cell in the row. - // So, we assume that the user wants to delete the entire row. - TNode table = row.parent(); - TNode prev_row = row.prev(); - row.remove(); - - if (!prev_row) - { - if (special) - { - // Since there was a cell (and a row), the user has typed a "{" to - // We ideally remove this character. - table.append(cursor); - return ""; - } - else - { - // the row was the only child of the table. - // so we have to delete the entire table - assert(table.parent()); - TNode parent_table = table.parent(); - table.remove(); - frames.pop(); - parent_table.append(cursor); - return ""; - } - } - else - { - // there are other rows (one or more) - assert(prev_row.is("row")); - assert(prev_row.last()); - TNode last_cell = prev_row.last(); - assert(last_cell.is("cell")); - assert(last_cell.size() == 1); - assert(last_cell.first().isG() && !last_cell.first().hasId()); - last_cell.first().append(cursor); - // Since cells and rows are separated by spaces and CRs - // (and the user can see this spaces and CRs), a special deletion - // is equivalent to a normal deletion - return ""; - } - } // end of if (!prev_cell) - else - { - // being here means that there is a previous cell, - // so we append the cursor to group. - assert(prev_cell.size() == 1); - assert(prev_cell.first().isG() && !prev_cell.first().hasId()); - prev_cell.first().append(cursor); - return ""; - } - } // end of if (gfather.is("cell")) - else if (gfather.isSp()) - { - // we cannot be here because a phantom group can be a Sp child only - // in two cases. If the user has typed somethong like: - // $^ - // the cursor is not phantom group's child. - // If the user has typed somethong like - // ..'' - // In this case the sequence of ' is placed in a phantom group, - // which becomes the exponent of the script. But, the cursor is - // always outside the phantom group - logger.error("TML tree in a strange state"); - return ""; - } - else if (gfather.is("math")) - { - // in this case we ignore the user's will of deleting - // but we could also decide to remove the math mode. - logger.warning("nothing to delete"); - return ""; - } - else - { - // cursor's grand father is undefined - logger.error("TML tree is in an unknown state"); - return ""; - } - } // end of the else of the if (prev) - -} - - -std::string -TPushParser::do_drop(bool special) -{ - // we have to handle the case in wich the cursor has a parent or not - if (!cursor.parent()) - { - // it's not a good situation...at the moment we do not take actions - logger.error("TML tree not well structured"); - return ""; - } - else - { - // a parent exists. We have to take differnt actions, based on the nature of - // the parent - TNode parent = cursor.parent(); - if (parent.is("math")) - { - // we ca do two thing...we can remove the math mode (it implies controlling the display attribute), we can do nothing - // At the moment, the user's will of deleting is simply ignored - logger.warning("nothing to delete"); - return ""; - } - else if (parent.isG()) - { - // the cursor's parent is a group. We have to control if it's a phantom group or not - if (parent.hasId()) - { - return do_drop_groupId(special); - } - else - { - return do_drop_phantom_group(special); - } - } // end of parent is group - else if (parent.isC()) - { - return do_drop_macro(special); - } // end of parent is a MACRO - else if (parent.isSp() || parent.isSb()) - { - return do_drop_script(special); - } // end of parent is sp or sb - } // end of the else which consider the case in which parent exists - -} // end of method do_drop - -bool -TPushParser::process(const TToken& token) -{ - switch (token.category) - { - case TToken::BEGIN: return do_begin(); - case TToken::END: return do_end(); - case TToken::SHIFT: return do_shift(); - case TToken::ALIGN: return do_align(); - case TToken::EOL: return do_eol(); - case TToken::PARAMETER: return do_parameter(token.value); - case TToken::SUPERSCRIPT: return do_superscript(); - case TToken::SUBSCRIPT: return do_subscript(); - case TToken::IGNORABLE_SPACE: return do_ignorablespace(token.value); - case TToken::SPACE: return do_space(token.value); - case TToken::LETTER: return do_letter(token.value); - case TToken::DIGIT: return do_digit(token.value); - case TToken::OTHER: return do_other(token.value); - case TToken::ACTIVE: return do_active(token.value); - case TToken::COMMENT: return do_comment(); - case TToken::CONTROL: return do_control(token.value); - } -} - -void -TPushParser::push(const TToken& token) -{ - TNode parent = cursor.parent(); - // If the cursor has no parent then it is detached from the editing - // tree, which means this token will be ignored - - if (parent) - // If the parent is a phantom group and the grand-parent is a - // control sequence, there are two cases: - // a. we are parsing a delimited argument of a entry - // b. we are parsing a side of a right- or left-open entry - if (parent.isG() && !parent.hasId() && parent.parent().isC()) - { - // There must be an open frame, for the grand-parent is a control sequence - assert(!frames.empty()); - Frame& frame = frames.top(); - if (!frame.entry.pattern.empty()) - { - // The entry pattern is not empty. By our conventions this means - // the entry cannot be open at either end, hence we are parsing - // a delimited argument - assert(frame.pos + 1 < frame.entry.pattern.size()); - assert(frame.entry.pattern[frame.pos + 1].category != TToken::PARAMETER); - if (frame.entry.pattern[frame.pos + 1] == token) - { - // The token matches with a delimiter of the argument, - // hence we increment the frame.pos - frame.pos++; - - if (frame.entry.lastDelimiter(frame.pos)) - { - // this delimiter is the last one for the argumet, - // so the argument is completed - cursor.remove(); - advance(parent); - } - } - else - { - // Delimiter mismatch. - if (frame.entry.pattern[frame.pos].category != TToken::PARAMETER) - { - // in this case, there is a sequence of delimiters that delimitates - // the argument, and the user has correctly inserted a portion of this - // sequence, but now has inserted a wrong delimiter. - // Here, there are some possibilities: - // - ignore the token, and wait for the correct delimiter - // - ignore the token, wait for the correct delimiter and emit an error - // At the moment, we implement the second possibily - logger.warning("it's not the correct delimiter...you have to type '" + frame.entry.pattern[frame.pos + 1].value + "'"); - } - else - { - // in this case, the sequence of delimiters is composed of one - // delimiter. It means that we have to process the token - process(token); - } - } - } - else - { - // The entry pattern is empty, hence we are parsing a right-open - // entry. What happens if we actually are in the left side? - // This could happen only when re-editing an entered expression - // We'll see... - assert(frame.entry.rightOpen); - process(token); - } - } - else if (parent.isC()) - { - // We are parsing a non-delimited argument entry - // or a fixed token - Frame& frame = frames.top(); - assert(frame.pos < frame.entry.pattern.size()); - - if (frame.entry.pattern[frame.pos].category == TToken::PARAMETER) - { - // As by the TeX parsing rules of undelimited parameters, - // empty spaces are ignored - if ((token.category != TToken::SPACE) && (token.category != TToken::IGNORABLE_SPACE)) process(token); - } - else if (frame.entry.pattern[frame.pos] == token) - { - // The token has been accepted - frame.pos++; - if (frame.pos < frame.entry.pattern.size() && - frame.entry.paramDelimited(frame.pos)) - { - // If the next is a delimited argument we have to place - // the phantom group with the cursor inside - TNode g = doc.createG(); - cursor.replace(g); - g.append(cursor); - } - else - { - cursor.remove(); - advance(parent); - } - } - else - { - // There is a mismatch. Emit an error and ignore the token? - logger.warning("ignored token: " + token.value); - } - } - else - process(token); - else - { - logger.warning("ignored token"); - } - - if (factory && doc.dirtyNode() && !frozen()) factory->documentModified(doc); -} - -std::string -TPushParser::drop(bool special) -{ - std::string str = do_drop(special); - if (factory && doc.dirtyNode() && !frozen()) factory->documentModified(doc); - return str; -} - -void -TPushParser::advance(const TNode& node) -{ - assert(node); - - if (!node.parent()) - { - // this is an error - logger.error("wrong TML tree"); - } - else if (node.parent().isG()) - { - TNode next = node.next(); - if (next) next.insert(cursor); - else node.parent().append(cursor); - } - else if (node.parent().isC()) - { - assert(!frames.empty()); - if ((frames.top().pos + 1 == frames.top().entry.pattern.size()) || (frames.top().entry.pattern.empty())) - { - // we are here when we have a right open macro, or the inserted element is the last one - if (frames.top().entry.rightOpen) - { - // we have to remove the frame from the stack - frames.pop(); - advance(node.parent().parent()); - } - else - { - frames.pop(); - advance(node.parent()); - } - } - else if (frames.top().entry.paramDelimited(frames.top().pos + 1)) - { - // the next argument is delimited, so we have to create a phantom group - TNode g = doc.createG(); - g.append(cursor); - node.parent().append(g); - frames.top().pos++; - } - else - { - // the next argumet is not delimited, so we have to append the cursor - // to the MACRO - node.parent().append(cursor); - frames.top().pos++; - } - } - else advance(node.parent()); -} - -void -TPushParser::setCursorHint(const std::string& c) -{ - if (cursor["val"] != c) - { - cursor["val"] = c; - if (factory && doc.dirtyNode() && !frozen()) factory->documentModified(doc); - } -} - -bool -TPushParser::hideCursor() -{ - if (hiddenCursor++ == 0) - { - cursor["visible"] = "0"; - if (factory && doc.dirtyNode() && !frozen()) factory->documentModified(doc); - return true; - } - else - return false; -} - -bool -TPushParser::showCursor() -{ - if (hiddenCursor > 0 && --hiddenCursor == 0) - { - cursor["visible"] = "1"; - if (factory && doc.dirtyNode() && !frozen()) factory->documentModified(doc); - return true; - } - else - return false; -} - -bool -TPushParser::thaw() -{ - if (APushParser::thaw() && factory && doc.dirtyNode()) - { - factory->documentModified(doc); - return true; - } - else - return false; -} diff --git a/helm/DEVEL/mathml_editor/src/TPushParser.hh b/helm/DEVEL/mathml_editor/src/TPushParser.hh deleted file mode 100644 index a94402fbf..000000000 --- a/helm/DEVEL/mathml_editor/src/TPushParser.hh +++ /dev/null @@ -1,113 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __TPushParser_hh__ -#define __TPushParser_hh__ - -#include -#include -#include "TToken.hh" -#include "APushParser.hh" -#include "TDictionary.hh" -#include "TDocument.hh" -#include "TNode.hh" - -class TPushParser : public APushParser -{ -public: - TPushParser(class ALogger&, const class TDictionary&); - TPushParser(class ALogger&, class AMathMLFactory&, const class TDictionary&); - virtual ~TPushParser(); - - virtual void reset(void); - virtual void push(const TToken&); - virtual std::string drop(bool); - virtual void setCursorHint(const std::string&); - virtual bool hideCursor(void); - virtual bool showCursor(void); - - virtual bool thaw(void); - - DOM::Document document(void) const { return doc.document().cloneNode(true); } - -private: - void init(void); - - TNode PRIME(void); - bool isPrimes(const TNode&) const; - - bool do_begin(void); - bool do_end(void); - bool do_shift(void); - bool do_align(void); - bool do_eol(void); - bool do_parameter(const std::string&); - bool do_superscript(void); - bool do_subscript(void); - bool do_ignorablespace(const std::string&); - bool do_space(const std::string&); - bool do_letter(const std::string&); - bool do_digit(const std::string&); - bool do_other(const std::string&); - bool do_active(const std::string&); - bool do_comment(void); - bool do_control(const std::string&); - - std::string drop_prev_token(bool); - std::string drop_prev_script(bool); - std::string drop_prev_group(bool); - std::string drop_prev_macro(bool); - std::string drop_prev(bool); - void rgreplace_father(void); - std::string do_drop_script(bool); - std::string do_drop_macro(bool); - std::string do_drop_groupId(bool); - std::string do_drop_phantom_group(bool); - std::string do_drop(bool); - - bool do_cr(void); - bool do_apostrophe(void); - void advance(const TNode&); - bool correctBrace(void); - - bool process(const TToken&); - - struct Frame - { - Frame(const TDictionary::Entry& e) : entry(e), pos(0) { }; - Frame(const TDictionary::Entry&e, unsigned p) : entry(e), pos(p) { }; - const TDictionary::Entry& entry; - unsigned pos; - }; - - std::stack frames; - unsigned nextId; - TDocument doc; - TNode cursor; - unsigned hiddenCursor; - const class TDictionary& dictionary; -}; - -#endif // __TPushParser_hh__ diff --git a/helm/DEVEL/mathml_editor/src/TToken.hh b/helm/DEVEL/mathml_editor/src/TToken.hh deleted file mode 100644 index 0ea74e551..000000000 --- a/helm/DEVEL/mathml_editor/src/TToken.hh +++ /dev/null @@ -1,63 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __TToken_hh__ -#define __TToken_hh__ - -#include - -struct TToken -{ - enum TCat - { - BEGIN, - END, - SHIFT, - ALIGN, - EOL, - PARAMETER, - SUPERSCRIPT, - SUBSCRIPT, - IGNORABLE_SPACE, - SPACE, - LETTER, - DIGIT, - OTHER, - ACTIVE, - COMMENT, - CONTROL - }; - - TToken(TCat c) : category(c) { }; - TToken(TCat c, char ch) : category(c), value(std::string(1, ch)) { }; - TToken(TCat c, const std::string& v) : category(c), value(v) { }; - - bool operator==(const TToken& token) const { return category == token.category && value == token.value; }; - - TCat category; - std::string value; -}; - -#endif // __TToken_hh__ diff --git a/helm/DEVEL/mathml_editor/src/TTokenizer.cc b/helm/DEVEL/mathml_editor/src/TTokenizer.cc deleted file mode 100644 index 14eeaadb0..000000000 --- a/helm/DEVEL/mathml_editor/src/TTokenizer.cc +++ /dev/null @@ -1,69 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include -#include - -#include "TTokenizer.hh" -#include "TPushLexer.hh" - -std::vector -TTokenizer::tokenize(const std::string& s) -{ - TPushLexer lexer(logger, *this); - - tokens.clear(); - for (std::string::const_iterator p = s.begin(); - p != s.end(); - p++) - lexer.push(*p); - - lexer.flush(); - - std::vector res; - res.reserve(tokens.size()); - copy(tokens.begin(), tokens.end(), back_inserter(res)); - - return res; -} - -void -TTokenizer::reset() -{ - assert(0); -} - -void -TTokenizer::push(const TToken& token) -{ - tokens.push_back(token); -} - -std::string -TTokenizer::drop(bool alt) -{ - assert(0); - return ""; -} diff --git a/helm/DEVEL/mathml_editor/src/TTokenizer.hh b/helm/DEVEL/mathml_editor/src/TTokenizer.hh deleted file mode 100644 index f78acafe4..000000000 --- a/helm/DEVEL/mathml_editor/src/TTokenizer.hh +++ /dev/null @@ -1,54 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __TTokenizer_hh__ -#define __TTokenizer_hh__ - -#include -#include -#include - -#include "TToken.hh" -#include "APushParser.hh" - -class TTokenizer : private APushParser -{ -public: - TTokenizer(class ALogger& l) : APushParser(l) { }; - - std::vector tokenize(const std::string&); - -private: - virtual void reset(void); - virtual void push(const TToken&); - virtual std::string drop(bool = false); - virtual void setCursorHint(const std::string&) { }; - virtual bool hideCursor(void) { return false; }; - virtual bool showCursor(void) { return false; }; - - std::list tokens; -}; - -#endif // __TTokenizer_hh__ diff --git a/helm/DEVEL/mathml_editor/src/config.dirs.in b/helm/DEVEL/mathml_editor/src/config.dirs.in deleted file mode 100644 index 1ce2d0a5e..000000000 --- a/helm/DEVEL/mathml_editor/src/config.dirs.in +++ /dev/null @@ -1,3 +0,0 @@ - -#define PKGDATADIR "@prefix@/share/@PACKAGE@" - diff --git a/helm/DEVEL/mathml_editor/src/dom.hh b/helm/DEVEL/mathml_editor/src/dom.hh deleted file mode 100644 index d09505fd5..000000000 --- a/helm/DEVEL/mathml_editor/src/dom.hh +++ /dev/null @@ -1,53 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __dom_hh__ -#define __dom_hh__ - -#include -#include - -namespace DOM = GdomeSmartDOM; -namespace DOMX = GdomeSmartDOMExt; - -typedef DOM::Char32 TChar; -typedef DOM::UCS4String TString; - -inline bool isUnicodeSpace(TChar ch) -{ - return ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r';; -} - -inline bool isUnicodeAlpha(TChar ch) -{ - return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'); -} - -inline bool isUnicodeDigit(TChar ch) -{ - return (ch >= '0' && ch <= '9'); -} - -#endif // __dom_hh__ diff --git a/helm/DEVEL/mathml_editor/src/globals.hh b/helm/DEVEL/mathml_editor/src/globals.hh deleted file mode 100644 index 3270a49ab..000000000 --- a/helm/DEVEL/mathml_editor/src/globals.hh +++ /dev/null @@ -1,33 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __globals_hh__ -#define __globals_hh__ - -#define TML_NS_URI "http://helm.cs.unibo.it/2002/TML" -#define XMLNS_NS_URI "http://www.w3.org/2000/xmlns/" -#define MATHML_NS_URI "http://www.w3.org/1998/Math/MathML" - -#endif // __globals_hh__ diff --git a/helm/DEVEL/mathml_editor/src/timer.cc b/helm/DEVEL/mathml_editor/src/timer.cc deleted file mode 100644 index d8b6119cd..000000000 --- a/helm/DEVEL/mathml_editor/src/timer.cc +++ /dev/null @@ -1,38 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include - -#include - -#include "timer.hh" - -long -getTimer() -{ - struct timeval time; - gettimeofday(&time, 0); - return time.tv_sec * 1000000 + time.tv_usec; -} diff --git a/helm/DEVEL/mathml_editor/src/timer.hh b/helm/DEVEL/mathml_editor/src/timer.hh deleted file mode 100644 index 8737422e9..000000000 --- a/helm/DEVEL/mathml_editor/src/timer.hh +++ /dev/null @@ -1,31 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef __timer_hh__ -#define __timer_hh__ - -long getTimer(void); - -#endif // __timer_hh__ diff --git a/helm/DEVEL/mathml_editor/test/.cvsignore b/helm/DEVEL/mathml_editor/test/.cvsignore deleted file mode 100644 index bdefc79b9..000000000 --- a/helm/DEVEL/mathml_editor/test/.cvsignore +++ /dev/null @@ -1,5 +0,0 @@ -.deps -.libs -Makefile -Makefile.in -editor diff --git a/helm/DEVEL/mathml_editor/test/Makefile.am b/helm/DEVEL/mathml_editor/test/Makefile.am deleted file mode 100644 index edf73ee18..000000000 --- a/helm/DEVEL/mathml_editor/test/Makefile.am +++ /dev/null @@ -1,21 +0,0 @@ - -noinst_PROGRAMS = editor - -editor_SOURCES = editor.cc guiGTK.c aux.cc - -noinst_HEADERS = guiGTK.h - -LDADDS = \ - $(GMETADOM_LIBS) \ - $(GDOMEXSLT_LIBS) \ - $(GTKMATHVIEW_LIBS) \ - $(top_builddir)/src/.libs/libeditex.a - -editor_LDADD = $(LDADDS) - -INCLUDES = \ - $(GMETADOM_CFLAGS) \ - $(GDOMEXSLT_CFLAGS) \ - $(GTKMATHVIEW_CFLAGS) \ - -I$(top_srcdir)/src - diff --git a/helm/DEVEL/mathml_editor/test/Makefile.in b/helm/DEVEL/mathml_editor/test/Makefile.in deleted file mode 100644 index df6bac536..000000000 --- a/helm/DEVEL/mathml_editor/test/Makefile.in +++ /dev/null @@ -1,396 +0,0 @@ -# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am - -# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - -SHELL = @SHELL@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include - -DESTDIR = - -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ - -top_builddir = .. - -ACLOCAL = @ACLOCAL@ -AUTOCONF = @AUTOCONF@ -AUTOMAKE = @AUTOMAKE@ -AUTOHEADER = @AUTOHEADER@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -transform = @program_transform_name@ - -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -host_alias = @host_alias@ -host_triplet = @host@ -AS = @AS@ -CC = @CC@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -DLLTOOL = @DLLTOOL@ -ECHO = @ECHO@ -EDITEX_VERSION_INFO = @EDITEX_VERSION_INFO@ -EXEEXT = @EXEEXT@ -GDOMEXSLT_CFLAGS = @GDOMEXSLT_CFLAGS@ -GDOMEXSLT_LIBS = @GDOMEXSLT_LIBS@ -GMETADOM_CFLAGS = @GMETADOM_CFLAGS@ -GMETADOM_LIBS = @GMETADOM_LIBS@ -GTKMATHVIEW_CFLAGS = @GTKMATHVIEW_CFLAGS@ -GTKMATHVIEW_LIBS = @GTKMATHVIEW_LIBS@ -HAVE_OCAMLC = @HAVE_OCAMLC@ -HAVE_OCAMLDEP = @HAVE_OCAMLDEP@ -HAVE_OCAMLFIND = @HAVE_OCAMLFIND@ -HAVE_OCAMLMKLIB = @HAVE_OCAMLMKLIB@ -HAVE_OCAMLOPT = @HAVE_OCAMLOPT@ -LDFLAGS = @LDFLAGS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -MAKEINFO = @MAKEINFO@ -MLGDOME_CFLAGS = @MLGDOME_CFLAGS@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OCAMLC = @OCAMLC@ -OCAMLDEP = @OCAMLDEP@ -OCAMLFIND = @OCAMLFIND@ -OCAMLMKLIB = @OCAMLMKLIB@ -OCAMLOPT = @OCAMLOPT@ -OCAMLSTDLIBDIR = @OCAMLSTDLIBDIR@ -OCAMLSTUBDIR = @OCAMLSTUBDIR@ -OCAML_INCLUDE_DIR = @OCAML_INCLUDE_DIR@ -PACKAGE = @PACKAGE@ -RANLIB = @RANLIB@ -STRIP = @STRIP@ -VERSION = @VERSION@ - -noinst_PROGRAMS = editor - -editor_SOURCES = editor.cc guiGTK.c aux.cc - -noinst_HEADERS = guiGTK.h - -LDADDS = $(GMETADOM_LIBS) $(GDOMEXSLT_LIBS) $(GTKMATHVIEW_LIBS) $(top_builddir)/src/.libs/libeditex.a - - -editor_LDADD = $(LDADDS) - -INCLUDES = $(GMETADOM_CFLAGS) $(GDOMEXSLT_CFLAGS) $(GTKMATHVIEW_CFLAGS) -I$(top_srcdir)/src - -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = ../config.h -CONFIG_CLEAN_FILES = -noinst_PROGRAMS = editor$(EXEEXT) -PROGRAMS = $(noinst_PROGRAMS) - - -DEFS = @DEFS@ -I. -I$(srcdir) -I.. -LIBS = @LIBS@ -editor_OBJECTS = editor.$(OBJEXT) guiGTK.$(OBJEXT) aux.$(OBJEXT) -editor_DEPENDENCIES = $(top_builddir)/src/.libs/libeditex.a -editor_LDFLAGS = -CXXFLAGS = @CXXFLAGS@ -CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ -COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ -HEADERS = $(noinst_HEADERS) - -DIST_COMMON = Makefile.am Makefile.in - - -DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) - -TAR = tar -GZIP_ENV = --best -DEP_FILES = .deps/aux.P .deps/editor.P .deps/guiGTK.P -SOURCES = $(editor_SOURCES) -OBJECTS = $(editor_OBJECTS) - -all: all-redirect -.SUFFIXES: -.SUFFIXES: .S .c .cc .lo .o .obj .s -$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - - -mostlyclean-noinstPROGRAMS: - -clean-noinstPROGRAMS: - -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) - -distclean-noinstPROGRAMS: - -maintainer-clean-noinstPROGRAMS: - -# FIXME: We should only use cygpath when building on Windows, -# and only if it is available. -.c.obj: - $(COMPILE) -c `cygpath -w $<` - -.s.o: - $(COMPILE) -c $< - -.S.o: - $(COMPILE) -c $< - -mostlyclean-compile: - -rm -f *.o core *.core - -rm -f *.$(OBJEXT) - -clean-compile: - -distclean-compile: - -rm -f *.tab.c - -maintainer-clean-compile: - -.s.lo: - $(LIBTOOL) --mode=compile $(COMPILE) -c $< - -.S.lo: - $(LIBTOOL) --mode=compile $(COMPILE) -c $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -maintainer-clean-libtool: - -editor$(EXEEXT): $(editor_OBJECTS) $(editor_DEPENDENCIES) - @rm -f editor$(EXEEXT) - $(CXXLINK) $(editor_LDFLAGS) $(editor_OBJECTS) $(editor_LDADD) $(LIBS) -.cc.o: - $(CXXCOMPILE) -c $< -.cc.obj: - $(CXXCOMPILE) -c `cygpath -w $<` -.cc.lo: - $(LTCXXCOMPILE) -c $< - -tags: TAGS - -ID: $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS)'; \ - unique=`for i in $$list; do echo $$i; done | \ - awk ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - here=`pwd` && cd $(srcdir) \ - && mkid -f$$here/ID $$unique $(LISP) - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS)'; \ - unique=`for i in $$list; do echo $$i; done | \ - awk ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ - || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) - -mostlyclean-tags: - -clean-tags: - -distclean-tags: - -rm -f TAGS ID - -maintainer-clean-tags: - -distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) - -subdir = test - -distdir: $(DISTFILES) - here=`cd $(top_builddir) && pwd`; \ - top_distdir=`cd $(top_distdir) && pwd`; \ - distdir=`cd $(distdir) && pwd`; \ - cd $(top_srcdir) \ - && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu test/Makefile - @for file in $(DISTFILES); do \ - d=$(srcdir); \ - if test -d $$d/$$file; then \ - cp -pr $$d/$$file $(distdir)/$$file; \ - else \ - test -f $(distdir)/$$file \ - || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ - || cp -p $$d/$$file $(distdir)/$$file || :; \ - fi; \ - done - -DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) - --include $(DEP_FILES) - -mostlyclean-depend: - -clean-depend: - -distclean-depend: - -rm -rf .deps - -maintainer-clean-depend: - -%.o: %.c - @echo '$(COMPILE) -c $<'; \ - $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< - @-cp .deps/$(*F).pp .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm .deps/$(*F).pp - -%.lo: %.c - @echo '$(LTCOMPILE) -c $<'; \ - $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< - @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ - < .deps/$(*F).pp > .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm -f .deps/$(*F).pp - -%.o: %.cc - @echo '$(CXXCOMPILE) -c $<'; \ - $(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< - @-cp .deps/$(*F).pp .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm .deps/$(*F).pp - -%.lo: %.cc - @echo '$(LTCXXCOMPILE) -c $<'; \ - $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< - @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ - < .deps/$(*F).pp > .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm -f .deps/$(*F).pp -info-am: -info: info-am -dvi-am: -dvi: dvi-am -check-am: all-am -check: check-am -installcheck-am: -installcheck: installcheck-am -install-exec-am: -install-exec: install-exec-am - -install-data-am: -install-data: install-data-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -install: install-am -uninstall-am: -uninstall: uninstall-am -all-am: Makefile $(PROGRAMS) $(HEADERS) -all-redirect: all-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install -installdirs: - - -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -rm -f Makefile $(CONFIG_CLEAN_FILES) - -rm -f config.cache config.log stamp-h stamp-h[0-9]* - -maintainer-clean-generic: -mostlyclean-am: mostlyclean-noinstPROGRAMS mostlyclean-compile \ - mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ - mostlyclean-generic - -mostlyclean: mostlyclean-am - -clean-am: clean-noinstPROGRAMS clean-compile clean-libtool clean-tags \ - clean-depend clean-generic mostlyclean-am - -clean: clean-am - -distclean-am: distclean-noinstPROGRAMS distclean-compile \ - distclean-libtool distclean-tags distclean-depend \ - distclean-generic clean-am - -rm -f libtool - -distclean: distclean-am - -maintainer-clean-am: maintainer-clean-noinstPROGRAMS \ - maintainer-clean-compile maintainer-clean-libtool \ - maintainer-clean-tags maintainer-clean-depend \ - maintainer-clean-generic distclean-am - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - -maintainer-clean: maintainer-clean-am - -.PHONY: mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \ -clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \ -mostlyclean-compile distclean-compile clean-compile \ -maintainer-clean-compile mostlyclean-libtool distclean-libtool \ -clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ -distclean-tags clean-tags maintainer-clean-tags distdir \ -mostlyclean-depend distclean-depend clean-depend \ -maintainer-clean-depend info-am info dvi-am dvi check check-am \ -installcheck-am installcheck install-exec-am install-exec \ -install-data-am install-data install-am install uninstall-am uninstall \ -all-redirect all-am all installdirs mostlyclean-generic \ -distclean-generic clean-generic maintainer-clean-generic clean \ -mostlyclean distclean maintainer-clean - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/helm/DEVEL/mathml_editor/test/aux.cc b/helm/DEVEL/mathml_editor/test/aux.cc deleted file mode 100644 index bb17013fb..000000000 --- a/helm/DEVEL/mathml_editor/test/aux.cc +++ /dev/null @@ -1,261 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include -#include - -#include -#include -#include - -//#include "gmetadom.hh" - -namespace DOM = GdomeSmartDOM; - -static unsigned -getDepth(const DOM::Element& elem) -{ - unsigned length = 0; - DOM::Element p = elem; - - while (p) - { - p = p.get_parentNode(); - length++; - } - - return length; -} - -static DOM::Element -findCommonAncestor(const DOM::Element& first, const DOM::Element& last) -{ - assert(first); - assert(last); - - DOM::Element p(first); - DOM::Element q(last); - - if (p != q) - { - unsigned pDepth = getDepth(p); - unsigned qDepth = getDepth(q); - - while (p && pDepth > qDepth) - { - p = p.get_parentNode(); - pDepth--; - } - - while (q && qDepth > pDepth) - { - q = q.get_parentNode(); - qDepth--; - } - - assert(pDepth == qDepth); - - while (p && q && p != q) - { - p = p.get_parentNode(); - q = q.get_parentNode(); - } - } - - return p; -} - -static void -findCommonSiblings(const DOM::Element& first, const DOM::Element& last, - DOM::Element& firstS, DOM::Element& lastS) -{ - assert(first); - assert(last); - - DOM::Element p(first); - DOM::Element q(last); - - if (p != q) - { - unsigned pDepth = getDepth(p); - unsigned qDepth = getDepth(q); - - while (p && pDepth > qDepth) - { - p = p.get_parentNode(); - pDepth--; - } - - while (q && qDepth > pDepth) - { - q = q.get_parentNode(); - qDepth--; - } - - assert(pDepth == qDepth); - - while (p && q && p.get_parentNode() != q.get_parentNode()) - { - p = p.get_parentNode(); - q = q.get_parentNode(); - } - } - - firstS = p; - lastS = q; -} - -static DOM::Element -findElementWithRef(const DOM::Element& el) -{ - DOM::Element p = el; - while (p && !p.hasAttribute("xref")) p = p.get_parentNode(); - return p; -} - -static DOM::Node -leftmostChild(const DOM::Node& node) -{ - if (!node) return node; - - DOM::Node firstChild = node.get_firstChild(); - if (!firstChild) return node; - - return leftmostChild(firstChild); -} - -static DOM::Node -rightmostChild(const DOM::Node& node) -{ - if (!node) return node; - - DOM::Node lastChild = node.get_lastChild(); - if (!lastChild) return node; - - return rightmostChild(lastChild); -} - -static DOM::Node -leftSibling(const DOM::Node& node) -{ - DOM::Node p = node; - - if (!p) return p; - - while (p.get_parentNode() && p.get_parentNode().get_firstChild() == p) - p = p.get_parentNode(); - - if (!p.get_parentNode()) return DOM::Node(0); - - DOM::Node prevSibling = p.get_previousSibling(); - assert(prevSibling); - - return rightmostChild(prevSibling); -} - -static DOM::Node -rightSibling(const DOM::Node& node) -{ - DOM::Node p = node; - - if (!p) return p; - - DOM::Node firstChild = p.get_firstChild(); - if (firstChild) return firstChild; - - while (p.get_parentNode() && p.get_parentNode().get_lastChild() == p) - p = p.get_parentNode(); - - if (!p.get_parentNode()) return DOM::Node(0); - - DOM::Node nextSibling = p.get_nextSibling(); - assert(nextSibling); - - return leftmostChild(nextSibling); -} - -extern "C" GdomeElement* -find_common_ancestor(GdomeElement* first, GdomeElement* last) -{ - if (GdomeNode* n = findCommonAncestor(DOM::Element(first), DOM::Element(last)).gdome_object()) - { - GdomeElement* res = gdome_cast_el(n); - g_assert(res != NULL); - return res; - } - else - return NULL; -} - -extern "C" void -find_common_siblings(GdomeElement* first, GdomeElement* last, - GdomeElement** firstS, GdomeElement** lastS) -{ - DOM::Element fs(0); - DOM::Element ls(0); - - findCommonSiblings(DOM::Element(first), DOM::Element(last), fs, ls); - - if (firstS != NULL) *firstS = gdome_cast_el(fs.gdome_object()); - if (lastS != NULL) *lastS = gdome_cast_el(ls.gdome_object()); -} - -extern "C" GdomeElement* -find_element_with_ref(GdomeElement* elem) -{ - if (GdomeNode* n = findElementWithRef(DOM::Element(elem)).gdome_object()) - { - GdomeElement* res = gdome_cast_el(n); - g_assert(res != NULL); - return res; - } - else - return NULL; -} - -extern "C" GdomeElement* -find_common_ancestor_with_ref(GdomeElement* first, GdomeElement* last) -{ - if (GdomeNode* n = findElementWithRef(findCommonAncestor(DOM::Element(first), DOM::Element(last))).gdome_object()) - { - GdomeElement* res = gdome_cast_el(n); - g_assert(res != NULL); - return res; - } - else - return NULL; -} - -extern "C" void -delete_element(GdomeElement* elem) -{ - DOM::Element p(elem); - - DOM::Element parent = p.get_parentNode(); - assert(parent); - - parent.removeChild(p); -} - diff --git a/helm/DEVEL/mathml_editor/test/editor.cc b/helm/DEVEL/mathml_editor/test/editor.cc deleted file mode 100644 index 3efc17cee..000000000 --- a/helm/DEVEL/mathml_editor/test/editor.cc +++ /dev/null @@ -1,196 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include - -#include "dom.hh" -#include "TPushParser.hh" -#include "timer.hh" - -#include "ILPushLexer.hh" -#include "TDictionary.hh" -#include "CLoggerConsole.hh" -#include "CMathMLFactoryXSLT.hh" -#include "CMathMLFactoryXSLTDiff.hh" -#include "AMathMLConsumer.hh" - -#include "guiGTK.h" - -extern void *parseMathMLFile(char *); - -struct Context -{ - /* - Context(const std::string& s, TPushLexer& l, TPushParser& p) : buffer(s), i(0), lexer(l), parser(p) { }; - */ - Context(const std::string& s, APushLexer& l, TPushParser& p, DOMX::XSLTStylesheet& ts) - : buffer(s), i(0), lexer(l), parser(p), texStyle(ts) { }; - - void send(void) - { - if (i < buffer.length()) lexer.push(buffer[i++]); - } - - std::string buffer; - unsigned i; - APushLexer& lexer; - TPushParser& parser; - DOMX::XSLTStylesheet& texStyle; -}; - -extern "C" void -edit_output_tex(Context* data) -{ - assert(data); - DOM::Document res = data->texStyle.apply(data->parser.document()); -#if 0 - res.normalize(); - DOM::Node c = res.get_firstChild(); - if (c) std::cout << "HEY, there is a child! " << c.get_nodeName() << " " << c.get_nodeValue() << std::endl; -#endif - //data->texStyle.save(res, stdout); -} - -extern "C" int -edit_timeout(Context* data) -{ - assert(data); - GUI_freeze(); - data->send(); - GUI_thaw(); - return 1; -} - -extern "C" void -edit_push_char(Context* context, gchar ch) -{ - assert(context != NULL); - long t0 = getTimer(); - GUI_freeze(); - std::cout << "*** SENDING " << ch << std::endl; - context->lexer.push(ch); - GUI_thaw(); - long t1 = getTimer(); - std::cout << "=== OVERALL TIME = " << (t1 - t0) / 1000 << std::endl; -} - -#include - -extern "C" void -edit_push_string(Context* context, const gchar* s) -{ - assert(context != NULL); - assert(s != NULL); -#if 0 -// GUI_freeze(); -// context->parser.freeze(); - for (unsigned i = 0; s[i]; i++) - { - GUI_freeze(); - context->lexer.push(s[i]); - GUI_thaw(); - usleep(100000); - usleep(100000); - } -// context->parser.thaw(); -// GUI_thaw(); -#endif - context->buffer = s; -} - -extern "C" void -edit_drop(Context* context, gboolean alt, gboolean control) -{ - // At the moment, the last parameter is not used, but it will - // be useful when we will handle the "fast" deletion - assert(context != NULL); - GUI_freeze(); - context->lexer.drop(alt); - GUI_thaw(); -} - -extern "C" void -edit_reset_tex(Context* context) -{ - assert(context != NULL); - GUI_freeze(); - context->lexer.reset(); - context->parser.reset(); - GUI_thaw(); -} - -extern "C" void -edit_complete(Context* context) -{ - assert(context != NULL); - GUI_freeze(); - if (!context->lexer.complete()) context->lexer.push('\t'); - GUI_thaw(); -} - -int -main(int argc, char* argv[]) -{ - CLoggerConsole logger; - logger.verbosity(ALogger::Debug); - - TDictionary dictionary(logger); - logger.info("loading the dictionary..."); - dictionary.load("./dict/dictionary-tex.xml"); - - logger.info("loading the stylesheet..."); - DOM::DOMImplementation di; - DOM::Document mmlStyleDoc = di.createDocumentFromURI("./xsl/tml-mmlp.xsl"); - DOMX::XSLTStylesheet mmlStyle(mmlStyleDoc); - - DOM::Document texStyleDoc = di.createDocumentFromURI("./xsl/tml-texid.xsl"); - DOMX::XSLTStylesheet texStyle(texStyleDoc); - - CMathMLFactoryXSLT factory(logger, mmlStyle); - TPushParser parser(logger, factory, dictionary); - ILPushLexer lexer(logger, parser, dictionary); - -#if 0 - lexer.push('$'); - lexer.push(' '); - assert(result); -#endif - -#if 0 - DOM::Document doc = parser.document().document(); - std::vector< std::pair > np; - result = style.apply(doc, np); - style.save(result, stdout); -#endif - - Context context("", lexer, parser, texStyle); - - GUI_init(&argc, &argv, "EditTeX", 500, 600, &context); - GUI_load_document(gdome_cast_doc(static_cast(factory.document()))); - GUI_run(); - GUI_uninit(); - GUI_unload_document(); - -} diff --git a/helm/DEVEL/mathml_editor/test/guiGTK.c b/helm/DEVEL/mathml_editor/test/guiGTK.c deleted file mode 100644 index ce6c31ef2..000000000 --- a/helm/DEVEL/mathml_editor/test/guiGTK.c +++ /dev/null @@ -1,649 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include -#include -#include -#include - -#include "guiGTK.h" - -#define XLINK_NS_URI "http://www.w3.org/1999/xlink" - -static GtkWidget* window; -static GtkWidget* main_area; -static GtkWidget* scrolled_area; - -static gpointer context = NULL; -static gchar* doc_name = NULL; -static GdomeElement* first_selected = NULL; -static GdomeElement* root_selected = NULL; - -static void create_widget_set(gpointer); -static GtkWidget* get_main_menu(void); -static void file_open(GtkWidget*, gpointer); -static void file_re_open(GtkWidget*, gpointer); -static void file_close(GtkWidget*, gpointer); -static void file_output_tex(GtkWidget*, gpointer); -static void options_set_font_size(GtkWidget*, gpointer); -static void options_change_font_size(GtkWidget*, gboolean); -static void options_verbosity(GtkWidget*, guint); -static void edit_delete_selection(GtkWidget*, gpointer); -static void edit_select_parent(GtkWidget*, gpointer); -static void edit_reset_selection(GtkWidget*, gpointer); -static void edit_reset(GtkWidget*, gpointer); -static void edit_insert(GtkWidget*, gpointer); -static void help_about(GtkWidget*, gpointer); - -static GtkItemFactoryEntry menu_items[] = { - { "/_File", NULL, NULL, 0, "" }, - { "/File/_Open...", "O", file_open, 0, NULL }, - { "/File/_Reopen", NULL, file_re_open, 0, NULL }, - { "/File/_Close", "W", file_close, 0, NULL }, - { "/File/Output _TeX", NULL, file_output_tex, 0, NULL }, - { "/File/sep1", NULL, NULL, 0, "" }, - { "/File/_Quit", "Q", gtk_main_quit, 0, NULL }, - - { "/_Edit", NULL, NULL, 0, "" }, - { "/Edit/Reset Selection", NULL, edit_reset_selection, 0, NULL }, - { "/Edit/Delete Selection", NULL, edit_delete_selection, 0, NULL }, - { "/Edit/Select Parent", NULL, edit_select_parent, 0, NULL }, - { "/Edit/sep1", NULL, NULL, 0, "" }, - { "/Edit/_Reset", NULL, edit_reset, 0, NULL }, - { "/Edit/Insert...", "I", edit_insert, 0, NULL }, - - { "/_Options", NULL, NULL, 0, "" }, - { "/Options/Default _Font Size", NULL, NULL, 0, "" }, - { "/Options/Default Font Size/Set...", NULL, options_set_font_size, 0, NULL }, - { "/Options/Default Font Size/sep1", NULL, NULL, 0, "" }, - { "/Options/Default Font Size/Larger", NULL, options_change_font_size, TRUE, NULL }, - { "/Options/Default Font Size/Smaller", NULL, options_change_font_size, FALSE, NULL }, - { "/Options/Verbosity", NULL, NULL, 0, "" }, - { "/Options/Verbosity/_Errors", NULL, options_verbosity, 0, "" }, - { "/Options/Verbosity/_Warnings", NULL, options_verbosity, 1, "/Options/Verbosity/Errors" }, - { "/Options/Verbosity/_Info", NULL, options_verbosity, 2, "/Options/Verbosity/Errors" }, - { "/Options/Verbosity/_Debug", NULL, options_verbosity, 3, "/Options/Verbosity/Errors" }, - - { "/_Help" , NULL, NULL, 0, "" }, - { "/Help/About...", NULL, help_about, 0, NULL } -}; - -static void -quick_message(const char* msg) -{ - GtkWidget* dialog; - GtkWidget* label; - GtkWidget* okay_button; - - /* Create the widgets */ - - dialog = gtk_dialog_new(); - label = gtk_label_new (msg); - okay_button = gtk_button_new_with_label("OK"); - - gtk_widget_set_usize(dialog, 300, 100); - - /* Ensure that the dialog box is destroyed when the user clicks ok. */ - - gtk_signal_connect_object (GTK_OBJECT (okay_button), "clicked", - GTK_SIGNAL_FUNC (gtk_widget_destroy), dialog); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), - okay_button); - - /* Add the label, and show everything we've added to the dialog. */ - - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); - gtk_widget_show_all (dialog); -} - -static void -load_error_msg(const char* name) -{ - char* msg = g_strdup_printf("Could not load\n`%s'", name); - quick_message(msg); - g_free(msg); -} - -static guint edit_timeout_id; -extern void edit_timeout(gpointer); - -void -GUI_init(int* argc, char*** argv, char* title, guint width, guint height, gpointer c) -{ - gtk_init(argc, argv); - - window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(window), title); - gtk_window_set_default_size(GTK_WINDOW(window), width, height); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", (GtkSignalFunc) gtk_main_quit, NULL); - create_widget_set(context); - - gtk_widget_show(window); - - context = c; - /*edit_timeout_id = gtk_timeout_add(50, edit_timeout, context);*/ -} - -void -GUI_uninit() -{ - GdomeException exc = 0; - - if (first_selected != NULL) - { - gdome_el_unref(first_selected, &exc); - g_assert(exc == 0); - first_selected = NULL; - } - - if (root_selected != NULL) - { - gdome_el_unref(root_selected, &exc); - g_assert(exc == 0); - root_selected = NULL; - } - - context = NULL; -} - -int -GUI_load_document(GdomeDocument* doc) -{ - GtkMathView* math_view; - - g_return_val_if_fail(doc != NULL, -1); - g_return_val_if_fail(main_area != NULL, -1); - g_return_val_if_fail(GTK_IS_MATH_VIEW(main_area), -1); - - math_view = GTK_MATH_VIEW(main_area); - - if (!gtk_math_view_load_document(math_view, doc)) return -1; - - return 0; -} - -void -GUI_freeze() -{ - gtk_math_view_freeze(GTK_MATH_VIEW(main_area)); -} - -void -GUI_thaw() -{ - gtk_math_view_thaw(GTK_MATH_VIEW(main_area)); -} - -void -GUI_unload_document() -{ - GtkMathView* math_view; - - g_return_if_fail(main_area != NULL); - g_return_if_fail(GTK_IS_MATH_VIEW(main_area)); - - math_view = GTK_MATH_VIEW(main_area); - - gtk_math_view_unload(math_view); - - if (doc_name != NULL) g_free(doc_name); - doc_name = NULL; -} - -void -GUI_run() -{ - gtk_main(); -} - -#if 0 -void -GUI_set_font_manager(FontManagerId id) -{ - gboolean t1; - GtkMathView* math_view; - - g_return_if_fail(id != FONT_MANAGER_UNKNOWN); - g_return_if_fail(main_area != NULL); - g_return_if_fail(GTK_IS_MATH_VIEW(main_area)); - - t1 = id == FONT_MANAGER_T1; - - math_view = GTK_MATH_VIEW(main_area); - - gtk_math_view_freeze(math_view); - - if (id != gtk_math_view_get_font_manager_type(math_view)) - gtk_math_view_set_font_manager_type(math_view, id); - - gtk_widget_set_sensitive(anti_aliasing(math_view, GTK_CHECK_MENU_ITEM(anti_aliasing_item)->active); - gtk_math_view_set_transparency(math_view, GTK_CHECK_MENU_ITEM(transparency_item)->active); - } - - gtk_math_view_thaw(math_view); -} -#endif - -static void -store_filename(GtkFileSelection* selector, GtkWidget* user_data) -{ - gchar* selected_filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION(user_data)); - if (selected_filename != NULL) - GUI_load_document(selected_filename); -} - -static void -file_close(GtkWidget* widget, gpointer data) -{ - GUI_unload_document(); -} - -static void -file_re_open(GtkWidget* widget, gpointer data) -{ - if (doc_name != NULL) { - GUI_load_document(doc_name); - } -} - -static void -file_open(GtkWidget* widget, gpointer data) -{ - GtkWidget* fs = gtk_file_selection_new("Open File"); - - gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(fs)->ok_button), - "clicked", GTK_SIGNAL_FUNC (store_filename), (gpointer) fs); - - /* Ensure that the dialog box is destroyed when the user clicks a button. */ - - gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(fs)->ok_button), - "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), - (gpointer) fs); - - gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(fs)->cancel_button), - "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), - (gpointer) fs); - - /* Display that dialog */ - - gtk_widget_show (fs); -} - -static void -file_output_tex(GtkWidget* widget, gpointer data) -{ - g_assert(context != NULL); - edit_output_tex(context); -} - -#if 0 -static void -options_font_manager(GtkWidget* widget, FontManagerId id) -{ - g_return_if_fail(id != FONT_MANAGER_UNKNOWN); - GUI_set_font_manager(id); -} -#endif - -static void -options_verbosity(GtkWidget* widget, guint level) -{ - gtk_math_view_set_log_verbosity(GTK_MATH_VIEW(main_area), level); -} - -static void -edit_delete_selection(GtkWidget* widget, gpointer data) -{ - if (root_selected != NULL) - { - GdomeException exc; - gtk_math_view_freeze(GTK_MATH_VIEW(main_area)); - printf("about to remove element %p\n", root_selected); - delete_element(root_selected); - gdome_el_unref(root_selected, &exc); - g_assert(exc == 0); - root_selected = NULL; - gtk_math_view_thaw(GTK_MATH_VIEW(main_area)); - } -} - -static void -edit_select_parent(GtkWidget* widget, gpointer data) -{ - if (root_selected != NULL) - { - GdomeException exc = 0; - GdomeElement* parent = gdome_n_parentNode(root_selected, &exc); - g_assert(exc == 0); - gdome_el_unref(root_selected, &exc); - g_assert(exc == 0); - root_selected = parent; - /* gtk_math_view_set_selection(GTK_MATH_VIEW(main_area), root_selected); */ - } -} - -static void -edit_reset_selection(GtkWidget* widget, gpointer data) -{ - if (root_selected != NULL) - { - GdomeException exc = 0; - /* gtk_math_view_reset_selection(GTK_MATH_VIEW(main_area), root_selected); */ - gdome_el_unref(root_selected, &exc); - g_assert(exc == 0); - root_selected = NULL; - } -} - -static void -edit_reset(GtkWidget* widget, gpointer data) -{ - g_assert(context != NULL); - edit_reset_tex(context); -} - -static void -insert_tex(GtkWidget* widget, GtkEntry* entry) -{ - gchar* text; - g_return_if_fail(entry != NULL); - - text = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); - edit_push_string(context, text); - g_free(text); -} - -static void -edit_insert(GtkWidget* widget, gpointer data) -{ - GtkWidget* dialog; - GtkWidget* entry; - GtkWidget* ok; - GtkWidget* cancel; - - dialog = gtk_dialog_new(); - entry = gtk_entry_new(); - ok = gtk_button_new_with_label("OK"); - cancel = gtk_button_new_with_label("Cancel"); - - gtk_signal_connect (GTK_OBJECT (ok), "clicked", - GTK_SIGNAL_FUNC (insert_tex), (gpointer) entry); - - gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", - GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); - - gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", - GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); - - gtk_signal_connect_object (GTK_OBJECT (cancel), "clicked", - GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); - - gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), 5); - - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), entry); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), ok); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), cancel); - - gtk_widget_show_all (dialog); -} - -static void -help_about(GtkWidget* widget, gpointer data) -{ - GtkWidget* dialog; - GtkWidget* label; - GtkWidget* ok; - - dialog = gtk_dialog_new(); - label = gtk_label_new("\n MathML Editor \n Copyright (C) 2003 Luca Padovani \n"); - ok = gtk_button_new_with_label("Close"); - - gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", - GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), - ok); - - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); - - gtk_widget_show_all (dialog); -} - -static void -change_default_font_size(GtkWidget* widget, GtkSpinButton* spin) -{ - g_return_if_fail(spin != NULL); - gtk_math_view_set_font_size( GTK_MATH_VIEW(main_area), gtk_spin_button_get_value_as_int(spin)); -} - -static void -options_change_font_size(GtkWidget* widget, gboolean larger) -{ - gfloat size = gtk_math_view_get_font_size (GTK_MATH_VIEW(main_area)); - if (larger) size = size / 0.71; - else size = size * 0.71; - if (size < 1) size = 1; - gtk_math_view_set_font_size (GTK_MATH_VIEW(main_area), (gint) size + 0.5); -} - -static void -options_set_font_size(GtkWidget* widget, gpointer data) -{ - GtkWidget* dialog; - GtkWidget* label; - GtkWidget* ok; - GtkWidget* cancel; - GtkWidget* spin; - GtkObject* adj; - - dialog = gtk_dialog_new(); - label = gtk_label_new("Default font size:"); - ok = gtk_button_new_with_label("OK"); - cancel = gtk_button_new_with_label("Cancel"); - - adj = gtk_adjustment_new (gtk_math_view_get_font_size (GTK_MATH_VIEW(main_area)), 1, 200, 1, 1, 1); - spin = gtk_spin_button_new (GTK_ADJUSTMENT(adj), 1, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spin), TRUE); - - gtk_signal_connect (GTK_OBJECT (ok), "clicked", - GTK_SIGNAL_FUNC (change_default_font_size), (gpointer) spin); - - gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", - GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); - - gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", - GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); - - gtk_signal_connect_object (GTK_OBJECT (cancel), "clicked", - GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); - - gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), 5); - - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), ok); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), cancel); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), spin); - - gtk_widget_show_all (dialog); -} - -static void -select_begin(GtkMathView* math_view, GdomeElement* first, gint state) -{ - GdomeException exc = 0; - - g_return_if_fail(math_view != NULL); - g_return_if_fail(GTK_IS_MATH_VIEW(math_view)); - g_return_if_fail(first != NULL); - - gtk_math_view_freeze(math_view); - - if (root_selected != NULL) - { - gtk_math_view_unselect(math_view, root_selected); - gdome_el_unref(root_selected, &exc); - g_assert(exc == 0); - } - - root_selected = first_selected = find_element_with_ref(first); - - if (root_selected != NULL) - { - gtk_math_view_select(math_view, root_selected); - gdome_el_ref(root_selected, &exc); - g_assert(exc == 0); - } - - gtk_math_view_thaw(math_view); -} - -static void -select_over(GtkMathView* math_view, GdomeElement* elem, gint state) -{ - GdomeElement* new_selected = NULL; - GdomeException exc = 0; - - g_return_if_fail(math_view != NULL); - g_return_if_fail(GTK_IS_MATH_VIEW(math_view)); - g_return_if_fail(elem != NULL); - - if (first_selected == NULL || elem == NULL) - new_selected = NULL; - else - new_selected = find_common_ancestor_with_ref(first_selected, elem); - - if (new_selected != root_selected) - { - gtk_math_view_freeze(math_view); - if (root_selected != NULL) - { - gtk_math_view_unselect(math_view, root_selected); - gdome_el_unref(root_selected, &exc); - g_assert(exc == 0); - } - root_selected = new_selected; - if (root_selected != NULL) - gtk_math_view_select(math_view, root_selected); - gtk_math_view_thaw(math_view); - } - else if (new_selected != NULL) - { - gdome_el_unref(new_selected, &exc); - g_assert(exc == 0); - } - -} - -static gboolean -key_press_event(gpointer c, - GdkEventKey* event, - GtkWidget* widget) -{ - g_return_val_if_fail(widget != NULL, FALSE); - g_return_val_if_fail(event != NULL, FALSE); - g_return_val_if_fail(context != NULL, FALSE); - - if (event->type != GDK_KEY_PRESS) return FALSE; - - switch (event->keyval) - { - case GDK_BackSpace: - edit_drop(context, event->state & GDK_MOD1_MASK, event->state & GDK_CONTROL_MASK); - break; - case GDK_Tab: - edit_complete(context); - break; - default: - if ((event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) == 0 && event->keyval < 0x80) - edit_push_char(context, event->keyval); - return FALSE; - } - - return TRUE; -} - -static void -create_widget_set(gpointer context) -{ - GtkWidget* main_vbox; - GtkWidget* menu_bar; - - main_vbox = gtk_vbox_new(FALSE, 1); - gtk_container_border_width(GTK_CONTAINER(main_vbox), 1); - gtk_container_add(GTK_CONTAINER(window), main_vbox); - gtk_widget_show(main_vbox); - - menu_bar = get_main_menu(); - gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, FALSE, TRUE, 0); - gtk_widget_show(menu_bar); - - main_area = gtk_math_view_new(NULL, NULL); - gtk_widget_show(main_area); - - //gtk_math_view_set_log_verbosity(GTK_MATH_VIEW(main_area), 3); - - gtk_signal_connect_object (GTK_OBJECT (main_area), - "select_begin", GTK_SIGNAL_FUNC (select_begin), - (gpointer) main_area); - - gtk_signal_connect_object (GTK_OBJECT (main_area), - "select_over", GTK_SIGNAL_FUNC (select_over), - (gpointer) main_area); - - gtk_signal_connect_object (GTK_OBJECT(window), - "key_press_event", GTK_SIGNAL_FUNC(key_press_event), - context); - - gtk_widget_add_events(GTK_WIDGET(main_area), GDK_KEY_PRESS_MASK); - - scrolled_area = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_area), - GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - - gtk_widget_show(scrolled_area); - gtk_container_add(GTK_CONTAINER(scrolled_area), main_area); - gtk_box_pack_start(GTK_BOX(main_vbox), scrolled_area, TRUE, TRUE, 0); - - gtk_widget_show(main_vbox); -} - -GtkWidget* -get_main_menu() -{ - GtkItemFactory* item_factory; - GtkAccelGroup* accel_group; - GtkWidget* menu_item; - - gint nmenu_items = sizeof(menu_items) / sizeof(menu_items[0]); - - accel_group = gtk_accel_group_new(); - - item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "
", accel_group); - - gtk_item_factory_create_items(item_factory, nmenu_items, menu_items, NULL); - - gtk_window_add_accel_group(GTK_WINDOW(window), accel_group); - - return gtk_item_factory_get_widget(item_factory, "
"); -} diff --git a/helm/DEVEL/mathml_editor/test/guiGTK.h b/helm/DEVEL/mathml_editor/test/guiGTK.h deleted file mode 100644 index ee0ab347e..000000000 --- a/helm/DEVEL/mathml_editor/test/guiGTK.h +++ /dev/null @@ -1,57 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#ifndef guiGTK_h -#define guiGTK_h - -#include -#include - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - /* initGUI: some initialization stuff, creates the main window, sets it with a title */ - void GUI_init(int *, char ***, char *, guint, guint, gpointer); - void GUI_uninit(void); - - int GUI_load_document(GdomeDocument*); - int GUI_load_uri(const char*); - void GUI_unload_document(void); - void GUI_dump_entities(void); - - /* main: this is the main event loop, to be called when the program is ready to run */ - void GUI_run(void); - - void GUI_freeze(void); - void GUI_thaw(void); - -#ifdef __cplusplus -} -#endif - -#endif /* guiGTK_h */ diff --git a/helm/DEVEL/mathml_editor/textomml/.cvsignore b/helm/DEVEL/mathml_editor/textomml/.cvsignore deleted file mode 100644 index c54770a84..000000000 --- a/helm/DEVEL/mathml_editor/textomml/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -.deps -.libs -Makefile -Makefile.in -textomml -config.dirs diff --git a/helm/DEVEL/mathml_editor/textomml/Makefile.am b/helm/DEVEL/mathml_editor/textomml/Makefile.am deleted file mode 100644 index cd66658f5..000000000 --- a/helm/DEVEL/mathml_editor/textomml/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ - -noinst_PROGRAMS = textomml - -textomml_SOURCES = main.cc - -LDADDS = \ - $(GMETADOM_LIBS) \ - $(GDOMEXSLT_LIBS) \ - $(top_builddir)/src/.libs/libeditex.a - -textomml_LDADD = $(LDADDS) - -INCLUDES = \ - $(GMETADOM_CFLAGS) \ - $(GDOMEXSLT_CFLAGS) \ - -I$(top_srcdir)/src - diff --git a/helm/DEVEL/mathml_editor/textomml/config.dirs.in b/helm/DEVEL/mathml_editor/textomml/config.dirs.in deleted file mode 100644 index 49791891b..000000000 --- a/helm/DEVEL/mathml_editor/textomml/config.dirs.in +++ /dev/null @@ -1 +0,0 @@ -#define PKGDATADIR "@prefix@/share/@PACKAGE@" diff --git a/helm/DEVEL/mathml_editor/textomml/main.cc b/helm/DEVEL/mathml_editor/textomml/main.cc deleted file mode 100644 index 9da0f0993..000000000 --- a/helm/DEVEL/mathml_editor/textomml/main.cc +++ /dev/null @@ -1,192 +0,0 @@ -/* This file is part of EdiTeX, an editor of mathematical - * expressions based on TeX syntax. - * - * Copyright (C) 2002-2003 Luca Padovani , - * 2003 Paolo Marinelli . - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/editex/ - * or send an email to - */ - -#include -#include -#include - -#include "dom.hh" -#include "TPushParser.hh" -#include "TPushLexer.hh" -#include "TDictionary.hh" -#include "CLoggerConsole.hh" -#include "CMathMLFactoryXSLT.hh" -#include "CMathMLFactoryXSLTDiff.hh" -#include "AMathMLConsumer.hh" - -#include "config.dirs" - -enum CommandLineOptionId { - OPTION_VERSION = 256, - OPTION_HELP, - OPTION_VERBOSE, - OPTION_DICTIONARY, - OPTION_TML_XSLT, - OPTION_XSLT -}; - -static std::string tml_xslt = PKGDATADIR"/tml-mmlp.xsl"; -static std::string dictionary = PKGDATADIR"/dictionary-tex.xml"; -static bool xslt = true; - -static bool -parseBoolean(const char* s, bool& res) -{ - assert(s != NULL); - if (!strcmp(s, "yes")) { - res = true; - return true; - } else if (!strcmp(s, "no")) { - res = false; - return true; - } - - return false; -} - -static void -printVersion() -{ - std::cout << "TeX to MathML converter " << VERSION << " - Luca Padovani (C) 2003" << std::endl - << "This program is covered by the GNU Lesser General Public Licence" << std::endl; -} - -static void -printHelp() -{ - static char* helpMsg = "\ -Usage: textomml [options] file\n\n\ - -V, --version Output version information\n\ - -h, --help This small usage guide\n\ - -v, --verbose[=0-3] Display messages\n\ - --dictionary= Full path of the dictionary\n\ - --tml-xslt= Full path of the XSLT stylesheet\n\ - --xslt[=yes|no] Enable/disable XSLT transformation (default='yes')\n\ -"; - - std::cout << helpMsg << std::endl; - exit(0); -} - -static void -parseError(const char* option) -{ - assert(option != NULL); - std::cerr << "error while parsing option `" << option << "'" << std::endl << std::endl; - printHelp(); -} - -int -main(int argc, char* argv[]) -{ - CLoggerConsole logger; - - while (TRUE) { - int option_index = 0; - static struct option long_options[] = - { - { "version", no_argument, NULL, OPTION_VERSION }, - { "help", no_argument, NULL, OPTION_HELP }, - { "verbose", optional_argument, NULL, OPTION_VERBOSE }, - { "dictionary", required_argument, NULL, OPTION_DICTIONARY }, - { "tml-xslt", required_argument, NULL, OPTION_TML_XSLT }, - { "xslt", optional_argument, NULL, OPTION_XSLT }, - - { NULL, no_argument, NULL, 0 } - }; - - int c = getopt_long(argc, argv, "Vhv::", long_options, &option_index); - - if (c == -1) break; - - switch (c) { - case OPTION_VERSION: - case 'V': - printVersion(); - break; - - case OPTION_HELP: - case 'h': - printHelp(); - break; - - case OPTION_VERBOSE: - case 'v': - if (optarg == NULL) logger.verbosity(ALogger::Warning); - else logger.verbosity(ALogger::Level(*optarg - '0')); - break; - - case OPTION_DICTIONARY: - dictionary = optarg; - break; - - case OPTION_TML_XSLT: - tml_xslt = optarg; - break; - - case OPTION_XSLT: - if (optarg == NULL) printHelp(); - else if (!parseBoolean(optarg, xslt)) parseError("xslt"); - break; - - case '?': - break; - - default: - std::cerr << "*** getopt returned `" << c << "' value" << std::endl; - break; - } - } - - TDictionary dict(logger); - logger.info("loading dictionary: `" + dictionary + "'"); - dict.load("dictionary-test.xml"); - - logger.info("loading stylesheet: `" + tml_xslt + "'"); - DOM::DOMImplementation di; - DOM::Document docStyle = di.createDocumentFromURI("./xsl/tml-mmlp.xsl"); - DOMX::XSLTStylesheet style(docStyle); - - CMathMLFactoryXSLT factory(logger, style); - TPushParser parser(logger, factory, dict); - TPushLexer lexer(logger, parser); - - if (optind < argc) - { - std::ifstream file(argv[optind]); - if (!file) - { - std::cerr << "can't open input file `" << argv[optind] << "'" << std::endl; - exit(1); - } - - parser.freeze(); - char ch; - while (file.get(ch)) lexer.push(ch); - parser.thaw(); - } - else - printHelp(); -} diff --git a/helm/DEVEL/mathml_editor/xsl/.cvsignore b/helm/DEVEL/mathml_editor/xsl/.cvsignore deleted file mode 100644 index 282522db0..000000000 --- a/helm/DEVEL/mathml_editor/xsl/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/helm/DEVEL/mathml_editor/xsl/Makefile.am b/helm/DEVEL/mathml_editor/xsl/Makefile.am deleted file mode 100644 index 283941298..000000000 --- a/helm/DEVEL/mathml_editor/xsl/Makefile.am +++ /dev/null @@ -1,2 +0,0 @@ -pkgdata_DATA = d-xsl.xsl tml-mmlp.xsl tml-tex.xsl tml-litex.xsl tml-texid.xsl -EXTRA_DIST = d-xsl.xsl tml-mmlp.xsl tml-tex.xsl tml-litex.xsl tml-texid.xsl diff --git a/helm/DEVEL/mathml_editor/xsl/d-xsl.xsl b/helm/DEVEL/mathml_editor/xsl/d-xsl.xsl deleted file mode 100644 index 961989aeb..000000000 --- a/helm/DEVEL/mathml_editor/xsl/d-xsl.xsl +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /// CONTROL SEQUENCES /// - - - - - - - - - - - - - - - - - - - diff --git a/helm/DEVEL/mathml_editor/xsl/tml-litex.xsl b/helm/DEVEL/mathml_editor/xsl/tml-litex.xsl deleted file mode 100644 index a39c6f03b..000000000 --- a/helm/DEVEL/mathml_editor/xsl/tml-litex.xsl +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $$$$ - $$ - - - - - - \ - - - - - - - - - \ - - - - - - - - - \ - - - - - - - - - - - - - - - __ - - - _ - - - - - - - - ^^ - - - ^ - - - - - {} - - {} - - - - - - - \cr - - - - & - - - - - - \ - - - - - \ - - - - - - - - - - - - - - - diff --git a/helm/DEVEL/mathml_editor/xsl/tml-mmlp.xsl b/helm/DEVEL/mathml_editor/xsl/tml-mmlp.xsl deleted file mode 100644 index 73d2ab049..000000000 --- a/helm/DEVEL/mathml_editor/xsl/tml-mmlp.xsl +++ /dev/null @@ -1,1160 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - block - - block - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - − - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - I - - - - - - - - - - - - I - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ - - - - - - - - - - - - λ - - : - - . - - - - - - - - - - - - - ̸ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ̂ - - - - - - - - - - - - - ̂ - - - - - - - - - - - - - ̌ - - - - - - - - - - - - - ̃ - - - - - - - - - - - - - ̃ - > - - - - - - - - - - - - ́ - - - - - - - - - - - - - ̀ - > - - - - - - - - - - - - ̇ - - - - - - - - - - - - - ̈ - - - - - - - - - - - - - ̆ - - - - - - - - - - - - - ̄ - - - - - - - - - - - - - - - - - - - - - - - - - - ̅ - - - - - - - - - - - - - ̲ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ( - - - - - ) - - - - - - - - - - - - { - - - - - } - - - - - - - - - - - - [ - - - - - ] - - - - - - - - - - - - - - - - - - - - - - - - - - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ( - - mod - - - ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ( - - - - ) - - - - - - - - - - - - - - - - - - - - - - - ( - - - - - - ) - - - - - - - - - - - - - - - - - ???? - > - - - - - - - - - - - - ???? - - - - - - - - - - - - { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/DEVEL/mathml_editor/xsl/tml-tex.xsl b/helm/DEVEL/mathml_editor/xsl/tml-tex.xsl deleted file mode 100644 index ea0a6b94e..000000000 --- a/helm/DEVEL/mathml_editor/xsl/tml-tex.xsl +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $$$$ - $$ - - - - - - \ - - - - {\rm } - - - - - - \ - - - - {\rm } - - - - - - \ - - - - - - - - - - - - - - - __ - - - _ - - - - - - - - ^^ - - - ^ - - - - - {} - - {} - - - - - - - \cr - - - - & - - - - - - \ - - - - - \ - - - - - - - - - - - {\rm } - - - - - diff --git a/helm/DEVEL/mathml_editor/xsl/tml-texid.xsl b/helm/DEVEL/mathml_editor/xsl/tml-texid.xsl deleted file mode 100644 index 20de507a4..000000000 --- a/helm/DEVEL/mathml_editor/xsl/tml-texid.xsl +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - {\id{}{}} - - - - - - - - - - $${\id{}{}}$$ - ${\id{}{}}$ - - - - - - $$$$ - $$ - - - - - - \ - - - - - - - - - \ - - - - - - - - - \ - - - - - - - - - - - - - - __ - - - _ - - - - - - - - ^^ - - - ^ - - - - - {} - - - \cr - - - - & - - - - - - \ - - - - - \ - - - - - - diff --git a/helm/DEVEL/ocaml-http/.cvsignore b/helm/DEVEL/ocaml-http/.cvsignore deleted file mode 100644 index 391f4f58e..000000000 --- a/helm/DEVEL/ocaml-http/.cvsignore +++ /dev/null @@ -1,8 +0,0 @@ -*.cmi -*.cmo -*.cmx -*.cma -*.cmxa -*.o -*.a -*.deb diff --git a/helm/DEVEL/ocaml-http/.depend b/helm/DEVEL/ocaml-http/.depend deleted file mode 100644 index 7c4762fd1..000000000 --- a/helm/DEVEL/ocaml-http/.depend +++ /dev/null @@ -1,49 +0,0 @@ -http_common.cmo: http_types.cmi http_constants.cmi http_common.cmi -http_common.cmx: http_types.cmx http_constants.cmx http_common.cmi -http_constants.cmo: http_constants.cmi -http_constants.cmx: http_constants.cmi -http_daemon.cmo: http_types.cmi http_tcp_server.cmi http_request.cmi \ - http_parser_sanity.cmi http_parser.cmi http_misc.cmi http_constants.cmi \ - http_common.cmi http_daemon.cmi -http_daemon.cmx: http_types.cmx http_tcp_server.cmx http_request.cmx \ - http_parser_sanity.cmx http_parser.cmx http_misc.cmx http_constants.cmx \ - http_common.cmx http_daemon.cmi -http_message.cmo: http_types.cmi http_parser_sanity.cmi http_misc.cmi \ - http_constants.cmi http_common.cmi http_message.cmi -http_message.cmx: http_types.cmx http_parser_sanity.cmx http_misc.cmx \ - http_constants.cmx http_common.cmx http_message.cmi -http_misc.cmo: http_types.cmi http_misc.cmi -http_misc.cmx: http_types.cmx http_misc.cmi -http_parser.cmo: http_types.cmi http_parser_sanity.cmi http_constants.cmi \ - http_common.cmi http_parser.cmi -http_parser.cmx: http_types.cmx http_parser_sanity.cmx http_constants.cmx \ - http_common.cmx http_parser.cmi -http_parser_sanity.cmo: http_types.cmi http_constants.cmi \ - http_parser_sanity.cmi -http_parser_sanity.cmx: http_types.cmx http_constants.cmx \ - http_parser_sanity.cmi -http_request.cmo: http_types.cmi http_parser.cmi http_misc.cmi \ - http_message.cmi http_common.cmi http_request.cmi -http_request.cmx: http_types.cmx http_parser.cmx http_misc.cmx \ - http_message.cmx http_common.cmx http_request.cmi -http_response.cmo: http_types.cmi http_misc.cmi http_message.cmi \ - http_daemon.cmi http_constants.cmi http_common.cmi http_response.cmi -http_response.cmx: http_types.cmx http_misc.cmx http_message.cmx \ - http_daemon.cmx http_constants.cmx http_common.cmx http_response.cmi -http_tcp_server.cmo: http_threaded_tcp_server.cmi http_tcp_server.cmi -http_tcp_server.cmx: http_threaded_tcp_server.cmi http_tcp_server.cmi -http_types.cmo: http_types.cmi -http_types.cmx: http_types.cmi -http_user_agent.cmo: http_parser.cmi http_misc.cmi http_common.cmi \ - http_user_agent.cmi -http_user_agent.cmx: http_parser.cmx http_misc.cmx http_common.cmx \ - http_user_agent.cmi -http_common.cmi: http_types.cmi -http_constants.cmi: http_types.cmi -http_daemon.cmi: http_types.cmi -http_message.cmi: http_types.cmi -http_parser.cmi: http_types.cmi -http_request.cmi: http_types.cmi -http_response.cmi: http_types.cmi -http_tcp_server.cmi: http_types.cmi -http_user_agent.cmi: http_types.cmi diff --git a/helm/DEVEL/ocaml-http/.ocamlinit b/helm/DEVEL/ocaml-http/.ocamlinit deleted file mode 100644 index 64694a213..000000000 --- a/helm/DEVEL/ocaml-http/.ocamlinit +++ /dev/null @@ -1,5 +0,0 @@ -#use "topfind";; -#require "unix";; -#require "pcre";; -#require "netstring";; -#load "http.cma";; diff --git a/helm/DEVEL/ocaml-http/INSTALL b/helm/DEVEL/ocaml-http/INSTALL deleted file mode 100644 index dc1a772e1..000000000 --- a/helm/DEVEL/ocaml-http/INSTALL +++ /dev/null @@ -1,37 +0,0 @@ - -In order to build ocaml-http you will need: - - - the ocaml compiler - [ http://caml.inria.fr ] - - - findlib - [ http://www.ocaml-programming.de/packages/documentation/findlib/ ] - - - ocamlnet - [ http://sourceforge.net/projects/ocamlnet ] - - - pcre-ocaml - [ http://www.ai.univie.ac.at/~markus/home/ocaml_sources.html ] - -To build the bytecode library: - - $ make all - -To build the nativecode library (only if you have an ocaml native code -compiler): - - $ make opt - -To install the built stuff in the OCaml standard library directory (as root): - - # make install - -To install the built stuff in another directory: - - $ make install DESTDIR=another_directory - -To build a debian package of the library (please note that to build a debian -package you will also need some additional stuff like debhelper, fakeroot, ...): - - $ fakeroot debian/rules binary - diff --git a/helm/DEVEL/ocaml-http/LICENSE b/helm/DEVEL/ocaml-http/LICENSE deleted file mode 100644 index f1c4ea8c3..000000000 --- a/helm/DEVEL/ocaml-http/LICENSE +++ /dev/null @@ -1,483 +0,0 @@ - - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if -you distribute copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide -complete object files to the recipients so that they can relink them -with the library, after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, so that any problems introduced by others will not reflect on -the original authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary -GNU General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary -one; be sure to read it in full, and don't assume that anything in it is -the same as in the ordinary license. - - The reason we have a separate public license for some libraries is that -they blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in -a textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to achieve -this as regards changes in header files, but we have achieved it as regards -changes in the actual functions of the Library.) The hope is that this -will lead to faster development of free libraries. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, while the latter only -works together with the library. - - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which -contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - d) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the source code distributed need not include anything that is normally -distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Library General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - diff --git a/helm/DEVEL/ocaml-http/META.in b/helm/DEVEL/ocaml-http/META.in deleted file mode 100644 index 8c325462e..000000000 --- a/helm/DEVEL/ocaml-http/META.in +++ /dev/null @@ -1,8 +0,0 @@ -description = "OCaml HTTP daemon library" -version = "@DISTVERSION@" -requires = "unix,pcre,netstring" -requires(mt) = "unix,pcre,netstring,threads" -archive(byte) = "http.cma" -archive(native) = "http.cmxa" -archive(mt,byte) = "http_mt.cma" -archive(mt,native) = "http_mt.cmxa" diff --git a/helm/DEVEL/ocaml-http/Makefile b/helm/DEVEL/ocaml-http/Makefile deleted file mode 100644 index 572a7f258..000000000 --- a/helm/DEVEL/ocaml-http/Makefile +++ /dev/null @@ -1,137 +0,0 @@ -include Makefile.defs - -MODULES = \ - http_constants http_types http_parser_sanity http_misc http_common \ - http_tcp_server http_parser http_message http_request http_daemon \ - http_response http_user_agent - -THREADED_SRV = http_threaded_tcp_server -MODULES_MT = $(patsubst http_tcp_server, mt/$(THREADED_SRV) http_tcp_server, $(MODULES)) -MODULES_NON_MT = $(patsubst http_tcp_server, non_mt/$(THREADED_SRV) http_tcp_server, $(MODULES)) -PUBLIC_MODULES = \ - http_types \ - http_common \ - http_message \ - http_request \ - http_daemon \ - http_response \ - http_user_agent -OCAMLDOC_STUFF = *.mli -DOCDIR = doc/html -DOTDIR = doc/dot -TEXDIR = doc/latex -DESTDIR = $(shell $(OCAMLFIND) printconf destdir) - -all: all_non_mt all_mt -opt: opt_non_mt opt_mt -all_non_mt: http.cma -opt_non_mt: http.cmxa -all_mt: http_mt.cma -opt_mt: http_mt.cmxa -world: all opt -doc: all $(DOCDIR)/index.html $(DOTDIR)/ocaml-http.ps $(TEXDIR)/ocaml-http.ps $(OCAMLDOC_STUFF) -$(DOCDIR)/index.html: - $(OCAMLDOC) -html -d $(DOCDIR) $(OCAMLDOC_STUFF) -$(TEXDIR)/ocaml-http.tex: $(OCAMLDOC_STUFF) - $(OCAMLDOC) -latex -o $@ $^ -$(TEXDIR)/ocaml-http.ps: $(TEXDIR)/ocaml-http.tex - cd $(TEXDIR); \ - latex ocaml-http; \ - latex ocaml-http; \ - dvips ocaml-http -$(DOTDIR)/ocaml-http.ps: $(DOTDIR)/ocaml-http.dot - $(DOT) -Tps $< > $@ -$(DOTDIR)/ocaml-http.dot: *.ml *.mli - $(OCAMLDOC) -dot -o $(DOTDIR)/ocaml-http.dot *.ml *.mli - -examples: - $(MAKE) -C examples/ -examples.opt: - $(MAKE) -C examples/ opt - -include .depend - -depend: - $(OCAMLDEP) *.ml *.mli > .depend - -%.cmi: %.mli - $(OCAMLC) -c $< -%.cmo: %.ml %.cmi - $(OCAMLC) -c $< -%.cmx: %.ml %.cmi - $(OCAMLOPT) -c $< - -non_mt/$(THREADED_SRV).cmo: non_mt/$(THREADED_SRV).ml $(THREADED_SRV).cmi - cp $(THREADED_SRV).{cmi,mli} non_mt/ - $(OCAMLC) -c $< -non_mt/$(THREADED_SRV).cmx: non_mt/$(THREADED_SRV).ml $(THREADED_SRV).cmi - cp $(THREADED_SRV).{cmi,mli} non_mt/ - $(OCAMLOPT) -c $< - -mt/$(THREADED_SRV).cmo: mt/$(THREADED_SRV).ml $(THREADED_SRV).cmi - cp $(THREADED_SRV).{cmi,mli} mt/ - $(OCAMLC) $(THREADS_FLAGS) -c $< -mt/$(THREADED_SRV).cmx: mt/$(THREADED_SRV).ml $(THREADED_SRV).cmi - cp $(THREADED_SRV).{cmi,mli} mt/ - $(OCAMLOPT) $(THREADS_FLAGS) -c $< - -http.cma: $(patsubst %,%.cmo,$(MODULES_NON_MT)) - $(OCAMLC) -a -o $@ $^ -http.cmxa: $(patsubst %,%.cmx,$(MODULES_NON_MT)) - $(OCAMLOPT) -a -o $@ $^ -http_mt.cma: $(patsubst %,%.cmo,$(MODULES_MT)) - $(OCAMLC) -a -o $@ $^ -http_mt.cmxa: $(patsubst %,%.cmx,$(MODULES_MT)) - $(OCAMLOPT) -a -o $@ $^ - -meta: META -META: META.in - cat META.in | sed -e 's/@DISTVERSION@/$(DISTVERSION)/' > META - -clean: - $(MAKE) -C examples/ clean - for d in . mt non_mt; do \ - rm -f $$d/*.cm[ioax] $$d/*.cmxa $$d/*.[ao] $$d/test{,.opt}; \ - done - rm -f {mt,non_mt}/$(THREADED_SRV).mli -docclean: - -rm -f \ - $(DOCDIR)/*.html $(DOCDIR)/*.css \ - $(DOTDIR)/*.dot $(DOTDIR)/*.ps \ - $(TEXDIR)/*.{dvi,ps,ps.gz,pdf,aux,log,out,toc,tmp,haux,sty,tex} -distclean: clean - $(MAKE) -C examples/ distclean - rm -f META -dist: distreal distrm -distdoc: all doc - if [ -d $(DISTDIR) ]; then rm -rf $(DISTDIR); else true; fi - mkdir -p $(DISTDIR)/doc/ - cp -r doc/html/ $(DISTDIR)/doc/ - cp doc/dot/ocaml-http.ps $(DISTDIR)/doc/modules.ps - cp doc/latex/ocaml-http.ps $(DISTDIR)/doc/ -distreal: distdoc distclean depend - for f in \ - $(patsubst %, %.ml, $(MODULES)) \ - $(patsubst %, %.mli, $(MODULES) $(THREADED_SRV)) \ - mt/ non_mt/ $(EXTRA_DIST) examples/ debian/; \ - do \ - cp -r $$f $(DISTDIR)/; \ - done - -find $(DISTDIR)/ -type d -name CVS -exec rm -rf {} \; - -find $(DISTDIR)/ -type f -name ".cvs*" -exec rm -f {} \; - tar cvzf $(DISTDIR).tar.gz $(DISTDIR)/ -distrm: - rm -rf $(DISTDIR)/ -deb: docclean distreal - (cd $(DISTDIR)/ && debuild) - rm -rf $(DISTDIR)/ -install: META - $(OCAMLFIND) install -destdir $(DESTDIR) $(PKGNAME) \ - $(patsubst %, %.mli, $(PUBLIC_MODULES)) \ - $(patsubst %, %.cmi, $(PUBLIC_MODULES)) \ - $(wildcard *.cma *.cmxa *.a) META - -.PHONY: \ - all opt world all_non_mt all_mt opt_non_mt opt_mt \ - examples examples.opt depend clean distclean dist \ - install meta doc deb distreal distrm diff --git a/helm/DEVEL/ocaml-http/Makefile.defs b/helm/DEVEL/ocaml-http/Makefile.defs deleted file mode 100644 index 4d9f7c5ca..000000000 --- a/helm/DEVEL/ocaml-http/Makefile.defs +++ /dev/null @@ -1,24 +0,0 @@ -PKGNAME = http -DISTVERSION = $(shell dpkg-parsechangelog | egrep '^Version: ' | sed 's/^Version: //' | sed 's/-.*//') - -DEBUG_FLAGS = -REQUIRES = unix str pcre netstring -COMMON_FLAGS = $(DEBUG_FLAGS) -pp camlp4o -package "$(REQUIRES)" -THREADS_FLAGS = -package threads -thread -OCAMLFIND = ocamlfind -OCAMLC = $(OCAMLFIND) ocamlc $(COMMON_FLAGS) -OCAMLOPT = $(OCAMLFIND) ocamlopt $(COMMON_FLAGS) -OCAMLDEP = $(OCAMLFIND) ocamldep $(COMMON_FLAGS) -OCAMLDOC := \ - ocamldoc -stars \ - $(shell $(OCAMLFIND) query -i-format unix) \ - $(shell $(OCAMLFIND) query -i-format pcre) \ - $(shell $(OCAMLFIND) query -i-format netstring) -DOT = dot - -DISTNAME = ocaml-http -DISTDIR = $(DISTNAME)-$(DISTVERSION) -EXTRA_DIST = \ - INSTALL LICENSE README META.in Makefile Makefile.defs \ - .depend - diff --git a/helm/DEVEL/ocaml-http/README b/helm/DEVEL/ocaml-http/README deleted file mode 100644 index 1566b8e8b..000000000 --- a/helm/DEVEL/ocaml-http/README +++ /dev/null @@ -1,4 +0,0 @@ - -OCaml HTTP is a simple OCaml library for creating HTTP daemons, it is largely -inspired to the Perl's HTTP:: modules family. - diff --git a/helm/DEVEL/ocaml-http/TODO b/helm/DEVEL/ocaml-http/TODO deleted file mode 100644 index 7fc3c6bb6..000000000 --- a/helm/DEVEL/ocaml-http/TODO +++ /dev/null @@ -1 +0,0 @@ -- support for HTTPS diff --git a/helm/DEVEL/ocaml-http/debian/changelog b/helm/DEVEL/ocaml-http/debian/changelog deleted file mode 100644 index c7f6e581d..000000000 --- a/helm/DEVEL/ocaml-http/debian/changelog +++ /dev/null @@ -1,147 +0,0 @@ -ocaml-http (0.1.2-1) unstable; urgency=low - - * avoid exceptions for closing connection twice during finaliztion of - connection objects (thanks to Eric Strokes - for the patch) - - -- Stefano Zacchiroli Wed, 14 Sep 2005 18:03:40 +0200 - -ocaml-http (0.1.1-1) unstable; urgency=low - - * added ?default parameter to "param" method - * fixed bug in response status line parsing - * integrated patch for HTTP/1.1 persistent connections from - Eric Cooper : - - added support for persistent connections to http_daemon.ml: server - now loops until End_of_file (or any exception) occurs when trying - to parse the next request - * debian/control - - bumped pcre and ocamlnet dependencies - - bumped standards-version to 3.6.2 - - -- Stefano Zacchiroli Wed, 16 Mar 2005 09:24:07 +0100 - -ocaml-http (0.1.0-2) unstable; urgency=low - - * rebuilt against ocaml 3.08.3 - - -- Stefano Zacchiroli Tue, 29 Mar 2005 11:39:24 +0200 - -ocaml-http (0.1.0-1) unstable; urgency=low - - * first debian official package - - -- Stefano Zacchiroli Tue, 8 Feb 2005 22:45:54 +0100 - -ocaml-http (0.1.0) unstable; urgency=low - - * added "daemon specifications": a unified way of specifying daemons - behaviour including old parameters of Http_daemon.start together - with authentication requirements and exception handling - * added new way of building daemons starting from specifications, old - ways (e.g. Http_daemon.start) are now deprecated - * added sigpipe handling to avoid daemons dying for uncaught signals - * added exception handler (as part of a daemon specification), it can - be used to ensure that some code is execute before a process/thread - die for uncaught exception (e.g. unlocking a global mutex) - * added authentication requirements (as part of a daemon - specification): an handy way to specify required user name and - password for HTTP basic authentication - * added head_callback to Http_user_agent in order to have access to - response status and headers in HTTP requests - * changed license from GPL to LGPL - * improved ocamldoc documentation and debian packaging - - -- Stefano Zacchiroli Thu, 3 Feb 2005 23:08:14 +0100 - -ocaml-http (0.0.10) unstable; urgency=low - - * renamed Http_client module to Http_user_agent to avoid compatibility - issues with Netclient. Renamed that module functions removing - "http_" prefix (e.g., summarizing, Http_client.http_get -> - Http_user_agent.get) - * ported to ocaml 3.08 - * debian/control - - bumped standards version to 3.6.1.1 - - changed deps to ocaml 3.08 and -nox - - -- Stefano Zacchiroli Thu, 5 Aug 2004 15:06:49 +0200 - -ocaml-http (0.0.9) unstable; urgency=low - - * Added support for HTTP Basic authentication - * Restyled Http_daemon API so that correct invocations of them are - statically typechecked - * Added support for HEAD requests to Http_client - * ~addr parameter now support not only ip addresses but also hostnames - * debian/control - - bumped Standards-Version to 3.6.1.0 - * debian/rules - - moved debhelper compatibility level to debian/compat - - -- Stefano Zacchiroli Tue, 16 Dec 2003 18:01:41 +0100 - -ocaml-http (0.0.8) unstable; urgency=low - - * Added support for "ancient" HTTP requests which specify no HTTP - version - - 'version' method on message now has type 'version option' - * Http_daemon now use debugging prints from Http_common like other - modules - * Added debugging print of requests parse error - * Shutdown server socket on abnormal exit (actually: uncaught - exceptions or SIGTERM received) - * Added a lot of ocamldoc documentation - * Added minimal HTTP 1.0/1.1 client support - - -- Stefano Zacchiroli Fri, 10 Jan 2003 10:36:53 +0100 - -ocaml-http (0.0.7) unstable; urgency=low - - * Added support for POST requests - * Implemented a commont 'message' class from which 'request' and - 'response' inherit - * Changed constructor of 'request' objects, requests are now buildable - directly (and only) from an input channel - * Added client IP address information to Http_request.request class - * Added OO daemon interfaces ("daemon" and "connection" classes) - * Use Pcre to perform sanity test on headers instead of home made - parsing - * Callback functions can raise Http_types.Quit to have main daemon - quit - * Case-insensitive handling of header names - - -- Stefano Zacchiroli Wed, 25 Dec 2002 16:22:31 +0100 - -ocaml-http (0.0.6) unstable; urgency=low - - * Ship multithreaded and non multithreaded cm{x,}aS - * Added support for multiple binding of the same parameter in request - objects (new method 'paramAll') - * Added support for 'empty' bindings in query arguments (e.g. - "/foo?b=" or "/foo?b") - * Added some sanity checks - * Bumped Standards-Version to 3.5.8 - * Use versioned dependencies lib{pcre,ocamlnet}-ocaml-dev- - * Added 'Provides libhttp-ocaml-dev-' - * Removed GPL from debian/copyright, added reference to - /usr/share/common-licenses/GPL - - -- Stefano Zacchiroli Mon, 25 Nov 2002 11:04:49 +0100 - -ocaml-http (0.0.5) unstable; urgency=low - - * Fixed bug for HTTP encoded GET parameters which contain '?' or '&' - characters - * Added support for chdir in a given document root before starting - * Added support for multi threaded daemons - * Added a generic 'Http_daemon.respond' function - * Added 'toString' method to response objects - - -- Stefano Zacchiroli Fri, 22 Nov 2002 11:29:37 +0100 - -ocaml-http (0.0.3) unstable; urgency=low - - * First release. - - -- Stefano Zacchiroli Sun, 17 Nov 2002 17:41:41 +0100 diff --git a/helm/DEVEL/ocaml-http/debian/compat b/helm/DEVEL/ocaml-http/debian/compat deleted file mode 100644 index b8626c4cf..000000000 --- a/helm/DEVEL/ocaml-http/debian/compat +++ /dev/null @@ -1 +0,0 @@ -4 diff --git a/helm/DEVEL/ocaml-http/debian/control b/helm/DEVEL/ocaml-http/debian/control deleted file mode 100644 index 9a3d6c384..000000000 --- a/helm/DEVEL/ocaml-http/debian/control +++ /dev/null @@ -1,23 +0,0 @@ -Source: ocaml-http -Section: devel -Priority: optional -Maintainer: Stefano Zacchiroli -Build-Depends: debhelper (>> 4.0.0), ocaml-nox-3.08.3, ocaml-findlib, libpcre-ocaml-dev (>= 5.10.0), libocamlnet-ocaml-dev (>= 1.1) -Standards-Version: 3.6.2 - -Package: libhttp-ocaml-dev -Architecture: any -Depends: ocaml-nox-3.08.3, libpcre-ocaml-dev (>= 5.10.0), libocamlnet-ocaml-dev (>= 1.1) -Description: OCaml library for writing HTTP servers - OCaml HTTP is a library for the Objective Caml programming language, - used to build simple HTTP servers, largely inspired to Perl's - HTTP::Daemon module. - . - In order to implement an HTTP servers the programmer has to provide a - daemon specification which contains, among other parameters, a callback - function invoked by OCaml HTTP on well formed HTTP requests received. - HTTP responses could be sent over an out_channel connected with client - socket, accessible from the callback. - . - The library contains also facility functions that helps in creating - well formed HTTP responses and a tiny HTTP client. diff --git a/helm/DEVEL/ocaml-http/debian/copyright b/helm/DEVEL/ocaml-http/debian/copyright deleted file mode 100644 index 38cb08c98..000000000 --- a/helm/DEVEL/ocaml-http/debian/copyright +++ /dev/null @@ -1,15 +0,0 @@ - -Author: Stefano Zacchiroli - -Copyright: - - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - OCaml HTTP is distributed under the term of the GNU Library General - Public License version 2, on Debian systems you can find a copy of the - license in: - - /usr/share/common-licenses/LGPL-2 - diff --git a/helm/DEVEL/ocaml-http/debian/dirs b/helm/DEVEL/ocaml-http/debian/dirs deleted file mode 100644 index 45f0546bf..000000000 --- a/helm/DEVEL/ocaml-http/debian/dirs +++ /dev/null @@ -1 +0,0 @@ -/usr/lib/ocaml/3.08.3 diff --git a/helm/DEVEL/ocaml-http/debian/doc-base b/helm/DEVEL/ocaml-http/debian/doc-base deleted file mode 100644 index 29b950dab..000000000 --- a/helm/DEVEL/ocaml-http/debian/doc-base +++ /dev/null @@ -1,12 +0,0 @@ -Document: ocaml-http -Title: OCaml HTTP API reference manual -Author: Stefano Zacchiroli -Abstract: API reference manual for OCaml HTTP, an Objective Caml library for writing HTTP servers -Section: Apps/Programming - -Format: HTML -Index: /usr/share/doc/libhttp-ocaml-dev/html/index.html -Files: /usr/share/doc/libhttp-ocaml-dev/html/* - -Format: PostScript -Files: /usr/share/doc/libhttp-ocaml-dev/ocaml-http.ps.gz diff --git a/helm/DEVEL/ocaml-http/debian/docs b/helm/DEVEL/ocaml-http/debian/docs deleted file mode 100644 index 2e098492d..000000000 --- a/helm/DEVEL/ocaml-http/debian/docs +++ /dev/null @@ -1,2 +0,0 @@ -README -doc/* diff --git a/helm/DEVEL/ocaml-http/debian/examples b/helm/DEVEL/ocaml-http/debian/examples deleted file mode 100644 index 6e72ae207..000000000 --- a/helm/DEVEL/ocaml-http/debian/examples +++ /dev/null @@ -1 +0,0 @@ -examples/*.ml diff --git a/helm/DEVEL/ocaml-http/debian/rules b/helm/DEVEL/ocaml-http/debian/rules deleted file mode 100755 index 83dee8f5c..000000000 --- a/helm/DEVEL/ocaml-http/debian/rules +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/make -f - -#export DH_VERBOSE=1 - -TARGETDIR = $(CURDIR)/debian/libhttp-ocaml-dev -OCAML_LIB_DIR = $(shell ocamlc -where) - -build: build-stamp -build-stamp: - dh_testdir - $(MAKE) all - if [ -x /usr/bin/ocamlopt ]; then $(MAKE) opt; else true; fi - touch build-stamp - -clean: - dh_testdir - dh_testroot - rm -f build-stamp - -$(MAKE) distclean - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - $(MAKE) install DESTDIR=$(TARGETDIR)$(OCAML_LIB_DIR) - -binary-arch: build install - dh_testdir - dh_testroot - dh_installdocs - dh_installexamples - dh_installchangelogs - dh_link - dh_strip - dh_compress - dh_fixperms - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-arch -.PHONY: build clean binary-arch binary install diff --git a/helm/DEVEL/ocaml-http/doc/dot/.cvsignore b/helm/DEVEL/ocaml-http/doc/dot/.cvsignore deleted file mode 100644 index 269c66077..000000000 --- a/helm/DEVEL/ocaml-http/doc/dot/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -*.dot -*.ps diff --git a/helm/DEVEL/ocaml-http/doc/html/.cvsignore b/helm/DEVEL/ocaml-http/doc/html/.cvsignore deleted file mode 100644 index d0098b437..000000000 --- a/helm/DEVEL/ocaml-http/doc/html/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -*.css -*.html diff --git a/helm/DEVEL/ocaml-http/doc/latex/.cvsignore b/helm/DEVEL/ocaml-http/doc/latex/.cvsignore deleted file mode 100644 index 01564af35..000000000 --- a/helm/DEVEL/ocaml-http/doc/latex/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.tex diff --git a/helm/DEVEL/ocaml-http/examples/.cvsignore b/helm/DEVEL/ocaml-http/examples/.cvsignore deleted file mode 100644 index cf7440d52..000000000 --- a/helm/DEVEL/ocaml-http/examples/.cvsignore +++ /dev/null @@ -1,18 +0,0 @@ -*.cmi -*.cmo -*.cmx -*.cma -*.cmxa -always_ok_daemon -basic_auth -chdir -client_address -damned_recursion -dont_fork -dump_args -highlander -obj_foo -oo_daemon -threads -timeout -webfsd diff --git a/helm/DEVEL/ocaml-http/examples/Makefile b/helm/DEVEL/ocaml-http/examples/Makefile deleted file mode 100644 index 9209563f6..000000000 --- a/helm/DEVEL/ocaml-http/examples/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -include ../Makefile.defs -OBJS_NON_MT = ../http.cma -OBJS_NON_MT_OPT = ../http.cmxa -OBJS_MT = ../http_mt.cma -OBJS_MT_OPT = ../http_mt.cmxa -EXAMPLES_FLAGS = -I .. -linkpkg - -EXAMPLES := \ - always_ok_daemon.ml \ - basic_auth.ml \ - chdir.ml \ - client_address.ml \ - damned_recursion.ml \ - dump_args.ml \ - highlander.ml \ - oo_daemon.ml \ - threads.ml \ - timeout.ml \ - webfsd.ml -EXAMPLES := $(patsubst %.ml,%,$(EXAMPLES)) - -all: $(EXAMPLES) -opt: $(patsubst %,%.opt,$(EXAMPLES)) -%: %.ml $(OBJS_NON_MT) - $(OCAMLC) $(EXAMPLES_FLAGS) $(OBJS_NON_MT) -o $@ $< -%.opt: %.ml $(OBJS_NON_MT_OPT) - $(OCAMLOPT) $(EXAMPLES_FLAGS) $(OBJS_NON_MT_OPT) -o $@ $< - -threads: threads.ml $(OBJS_MT) - $(OCAMLC) $(EXAMPLES_FLAGS) $(OBJS_MT) $(THREADS_FLAGS) -o $@ $< -threads.opt: threads.ml $(OBJS_MT_OPT) - $(OCAMLOPT) $(EXAMPLES_FLAGS) $(OBJS_MT_OPT) $(THREADS_FLAGS) -o $@ $< - -damned_recursion: damned_recursion.ml $(OBJS_MT) - $(OCAMLC) $(EXAMPLES_FLAGS) $(OBJS_MT) $(THREADS_FLAGS) -o $@ $< -damned_recursion.opt: damned_recursion.ml $(OBJS_MT_OPT) - $(OCAMLOPT) $(EXAMPLES_FLAGS) $(OBJS_MT_OPT) $(THREADS_FLAGS) -o $@ $< - -distclean: clean -clean: - -rm -f *.cm[ioax] *.o $(EXAMPLES) $(patsubst %,%.opt,$(EXAMPLES)) diff --git a/helm/DEVEL/ocaml-http/examples/always_ok_daemon.ml b/helm/DEVEL/ocaml-http/examples/always_ok_daemon.ml deleted file mode 100644 index caa0d4516..000000000 --- a/helm/DEVEL/ocaml-http/examples/always_ok_daemon.ml +++ /dev/null @@ -1,33 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2004> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -open Http_types - - (* start an http daemon that alway respond with a 200 status code and an empty - content *) -let spec = - { Http_daemon.default_spec with - callback = (fun _ outchan -> Http_daemon.respond outchan); - port = 9999; - } - -let _ = Http_daemon.main spec - diff --git a/helm/DEVEL/ocaml-http/examples/basic_auth.ml b/helm/DEVEL/ocaml-http/examples/basic_auth.ml deleted file mode 100644 index bdfb2b949..000000000 --- a/helm/DEVEL/ocaml-http/examples/basic_auth.ml +++ /dev/null @@ -1,50 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2004> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -open Http_types - -(* the easy way: specify authentication requirements within a daemon_spec *) -let spec = - { Http_daemon.default_spec with - (* requires basic authentication, username "foo", password "bar" *) - auth = Some ("my realm", `Basic ("foo", "bar")); - callback = (fun _ outchan -> Http_daemon.respond ~body:"secret" outchan); - port = 9999; - } - -(* -(* the hard^Wother way: manual handling of authorization *) -let callback req outchan = - match req#authorization with - | Some (`Basic (username, password)) - when username = "foo" && password = "bar" -> - Http_daemon.respond ~code:(`Code 200) ~body:"secret" outchan - | _ -> raise (Unauthorized "my secret site") - -let spec = - { Http_daemon.default_spec with - callback = callback; - port = 9999; - } -*) - -let _ = Http_daemon.main spec - diff --git a/helm/DEVEL/ocaml-http/examples/chdir.ml b/helm/DEVEL/ocaml-http/examples/chdir.ml deleted file mode 100644 index bcba1ebc3..000000000 --- a/helm/DEVEL/ocaml-http/examples/chdir.ml +++ /dev/null @@ -1,34 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2004> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -open Printf -open Http_types - -let spec = - { Http_daemon.default_spec with - callback = (fun _ outchan -> - Http_daemon.respond ~body:(sprintf "%s\n" (Sys.getcwd ())) outchan); - port = 9999; - root_dir = Some "/etc"; - } - -let _ = Http_daemon.main spec - diff --git a/helm/DEVEL/ocaml-http/examples/client_address.ml b/helm/DEVEL/ocaml-http/examples/client_address.ml deleted file mode 100644 index 79d4ff836..000000000 --- a/helm/DEVEL/ocaml-http/examples/client_address.ml +++ /dev/null @@ -1,42 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2004> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -open Printf -open Http_types - -let callback req outchan = - let body = - sprintf - "Hi, this is your personal assistant, you are connected from %s:%d\n" - req#clientAddr - req#clientPort - in - let res = new Http_response.response ~body () in - Http_daemon.respond_with res outchan - -let spec = - { Http_daemon.default_spec with - callback = callback; - port = 9999 - } - -let _ = Http_daemon.main spec - diff --git a/helm/DEVEL/ocaml-http/examples/damned_recursion.ml b/helm/DEVEL/ocaml-http/examples/damned_recursion.ml deleted file mode 100644 index be2e30629..000000000 --- a/helm/DEVEL/ocaml-http/examples/damned_recursion.ml +++ /dev/null @@ -1,51 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2004> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -open Printf -open Http_types - -let port = 9999 - -let callback (req: Http_types.request) outchan = - let i = int_of_string (req#param "x") in - let body = - match i with - | 0 -> "0" - | x when x > 0 -> - let data = - Http_user_agent.get (sprintf "http://127.0.0.1:%d/foo?x=%d" - port (x - 1)) - in - sprintf "%s %d" data x - | _ -> assert false - in - Http_daemon.respond ~code:(`Code 200) ~body outchan; - close_out outchan (* Http_user_agent relies on EOF, not Content-Length *) - -let spec = - { Http_daemon.default_spec with - callback = callback; - port = port; - mode = `Thread; - } - -let _ = Http_daemon.main spec - diff --git a/helm/DEVEL/ocaml-http/examples/dump_args.ml b/helm/DEVEL/ocaml-http/examples/dump_args.ml deleted file mode 100644 index ab082112a..000000000 --- a/helm/DEVEL/ocaml-http/examples/dump_args.ml +++ /dev/null @@ -1,48 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2004> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -open Printf -open Http_types - -let callback req outchan = - let str = - (sprintf "request path = %s\n" req#path) ^ - (sprintf "request GET params = %s\n" - (String.concat ";" - (List.map (fun (h,v) -> String.concat "=" [h;v]) req#params_GET))) ^ - (sprintf "request POST params = %s\n" - (String.concat ";" - (List.map (fun (h,v) -> String.concat "=" [h;v]) req#params_POST))) ^ - (sprintf "request ALL params = %s\n" - (String.concat ";" - (List.map (fun (h,v) -> String.concat "=" [h;v]) req#params))) ^ - (sprintf "request BODY = '%s'\n\n" req#body) - in - Http_daemon.respond ~code:(`Code 200) ~body: str outchan - -let spec = - { Http_daemon.default_spec with - callback = callback; - port = 9999; - } - -let _ = Http_daemon.main spec - diff --git a/helm/DEVEL/ocaml-http/examples/highlander.ml b/helm/DEVEL/ocaml-http/examples/highlander.ml deleted file mode 100644 index d42445481..000000000 --- a/helm/DEVEL/ocaml-http/examples/highlander.ml +++ /dev/null @@ -1,41 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2004> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -(* test for fast rebinding of the tcp port *) - -open Printf -open Http_types - -let spec = - { Http_daemon.default_spec with - callback = (fun _ outchan -> Http_daemon.respond ~body:"foo" outchan); - port = 9999; - mode = `Single; - } - -let _ = - Sys.catch_break true; - while true do - try - Http_daemon.main spec; - with Sys.Break -> prerr_endline "RESURRECTION!!!!" - done - diff --git a/helm/DEVEL/ocaml-http/examples/oo_daemon.ml b/helm/DEVEL/ocaml-http/examples/oo_daemon.ml deleted file mode 100644 index 91197e3f7..000000000 --- a/helm/DEVEL/ocaml-http/examples/oo_daemon.ml +++ /dev/null @@ -1,47 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2004> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -open Http_daemon -open Http_response - - (* the simple way *) -let d = new daemon ~addr:"127.0.0.1" ~port:9999 () - -let _ = - while true do - let (req, conn) = d#getRequest in (* wait for valid request *) - conn#respond_with (new response ~body:"foo\n" ()); - conn#close - done - -(* - (* the hard^Wother way *) -let d = new daemon ~addr:"127.0.0.1" ~port:9999 () in -let _ = - while true do - let conn = d#accept in (* wait for client connection *) - (match conn#getRequest with - | None -> () (* invalid request received *) - | Some req -> conn#respond_with (new response ~body:"foo\n" ())); - conn#close (* close socket *) - done -*) - diff --git a/helm/DEVEL/ocaml-http/examples/threads.ml b/helm/DEVEL/ocaml-http/examples/threads.ml deleted file mode 100644 index 01f6dae4c..000000000 --- a/helm/DEVEL/ocaml-http/examples/threads.ml +++ /dev/null @@ -1,63 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2004> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -open Http_types - -let m = Mutex.create () -let m_locked = ref true - -let critical f = - Mutex.lock m; - m_locked := true; - Lazy.force f; - m_locked := false; - Mutex.unlock m - - (** ocaml's Thread.unlock suspend the invoking process if the mutex is already - * unlocked, therefore we unlock it only if we know that it's currently locked - *) -let safe_unlock _ _ = if !m_locked then Mutex.unlock m - -let i = ref 10 -let dump_i outchan = - Http_daemon.respond ~body:(Printf.sprintf "i = %d\n" !i) outchan - -let callback req outchan = - match req#path with - | "/incr" -> critical (lazy (incr i; dump_i outchan; Unix.sleep 5)) - | "/decr" -> critical (lazy (decr i; dump_i outchan; Unix.sleep 5)) - | "/get" -> critical (lazy (dump_i outchan)) - | bad_request -> Http_daemon.respond_error outchan - -let spec = - { Http_daemon.default_spec with - port = 9999; - mode = `Thread; - callback = callback; - exn_handler = Some safe_unlock; - (** ocaml-http's default exn_handler is Pervasives.ignore. This means - * that threads holding the "m" mutex above may die without unlocking it. - * Using safe_unlock as an exception handler we ensure that "m" mutex is - * unlocked in case of exceptions (e.g. SIGPIPE) *) - } - -let _ = Http_daemon.main spec - diff --git a/helm/DEVEL/ocaml-http/examples/timeout.ml b/helm/DEVEL/ocaml-http/examples/timeout.ml deleted file mode 100644 index d39f6be7a..000000000 --- a/helm/DEVEL/ocaml-http/examples/timeout.ml +++ /dev/null @@ -1,31 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2004> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -open Http_types - -let spec = - { Http_daemon.default_spec with - callback = (fun _ outchan -> Http_daemon.respond ~body:"foo" outchan); - timeout = Some 10; - } - -let _ = Http_daemon.main spec - diff --git a/helm/DEVEL/ocaml-http/examples/webfsd.ml b/helm/DEVEL/ocaml-http/examples/webfsd.ml deleted file mode 100644 index c7a984b03..000000000 --- a/helm/DEVEL/ocaml-http/examples/webfsd.ml +++ /dev/null @@ -1,50 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2004> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -open Http_types - -let def_port = 80 -let def_addr = "0.0.0.0" -let def_root = Sys.getcwd () - -let port = ref def_port -let addr = ref def_addr -let root = ref def_root -let argspec = - [ "-p", Arg.Int (fun p -> port := p), - "TCP port on which listen, default: " ^ string_of_int !port; - "-a", Arg.String (fun a -> addr := a), - "IP address on which listen, default: " ^ !addr; - "-r", Arg.String (fun r -> root := r), - "DocumentRoot, default: current working directory"; - ] - -let _ = - Arg.parse argspec (fun _ -> ()) ""; - let spec = - { Http_daemon.default_spec with - address = !addr; - port = !port; - root_dir = Some !root - } - in - Http_daemon.Trivial.main spec - diff --git a/helm/DEVEL/ocaml-http/http_common.ml b/helm/DEVEL/ocaml-http/http_common.ml deleted file mode 100644 index affbdb23a..000000000 --- a/helm/DEVEL/ocaml-http/http_common.ml +++ /dev/null @@ -1,162 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -open Http_types;; -open Printf;; - -let debug = ref false -let debug_print s = - if !debug then - prerr_endline (sprintf "[OCaml HTTP] DEBUG: %s" s) - -let http_version = Http_constants.version -let server_string = Http_constants.server_string - -let string_of_version = function - | `HTTP_1_0 -> "HTTP/1.0" - | `HTTP_1_1 -> "HTTP/1.1" - -let version_of_string = function - | "HTTP/1.0" -> `HTTP_1_0 - | "HTTP/1.1" -> `HTTP_1_1 - | invalid_version -> raise (Invalid_HTTP_version invalid_version) - -let string_of_method = function - | `GET -> "GET" - | `POST -> "POST" - -let method_of_string = function - | "GET" -> `GET - | "POST" -> `POST - | invalid_method -> raise (Invalid_HTTP_method invalid_method) - -let status_of_code = function - | 100 -> `Informational `Continue - | 101 -> `Informational `Switching_protocols - | 200 -> `Success `OK - | 201 -> `Success `Created - | 202 -> `Success `Accepted - | 203 -> `Success `Non_authoritative_information - | 204 -> `Success `No_content - | 205 -> `Success `Reset_content - | 206 -> `Success `Partial_content - | 300 -> `Redirection `Multiple_choices - | 301 -> `Redirection `Moved_permanently - | 302 -> `Redirection `Found - | 303 -> `Redirection `See_other - | 304 -> `Redirection `Not_modified - | 305 -> `Redirection `Use_proxy - | 307 -> `Redirection `Temporary_redirect - | 400 -> `Client_error `Bad_request - | 401 -> `Client_error `Unauthorized - | 402 -> `Client_error `Payment_required - | 403 -> `Client_error `Forbidden - | 404 -> `Client_error `Not_found - | 405 -> `Client_error `Method_not_allowed - | 406 -> `Client_error `Not_acceptable - | 407 -> `Client_error `Proxy_authentication_required - | 408 -> `Client_error `Request_time_out - | 409 -> `Client_error `Conflict - | 410 -> `Client_error `Gone - | 411 -> `Client_error `Length_required - | 412 -> `Client_error `Precondition_failed - | 413 -> `Client_error `Request_entity_too_large - | 414 -> `Client_error `Request_URI_too_large - | 415 -> `Client_error `Unsupported_media_type - | 416 -> `Client_error `Requested_range_not_satisfiable - | 417 -> `Client_error `Expectation_failed - | 500 -> `Server_error `Internal_server_error - | 501 -> `Server_error `Not_implemented - | 502 -> `Server_error `Bad_gateway - | 503 -> `Server_error `Service_unavailable - | 504 -> `Server_error `Gateway_time_out - | 505 -> `Server_error `HTTP_version_not_supported - | invalid_code -> raise (Invalid_code invalid_code) - -let code_of_status = function - | `Informational `Continue -> 100 - | `Informational `Switching_protocols -> 101 - | `Success `OK -> 200 - | `Success `Created -> 201 - | `Success `Accepted -> 202 - | `Success `Non_authoritative_information -> 203 - | `Success `No_content -> 204 - | `Success `Reset_content -> 205 - | `Success `Partial_content -> 206 - | `Redirection `Multiple_choices -> 300 - | `Redirection `Moved_permanently -> 301 - | `Redirection `Found -> 302 - | `Redirection `See_other -> 303 - | `Redirection `Not_modified -> 304 - | `Redirection `Use_proxy -> 305 - | `Redirection `Temporary_redirect -> 307 - | `Client_error `Bad_request -> 400 - | `Client_error `Unauthorized -> 401 - | `Client_error `Payment_required -> 402 - | `Client_error `Forbidden -> 403 - | `Client_error `Not_found -> 404 - | `Client_error `Method_not_allowed -> 405 - | `Client_error `Not_acceptable -> 406 - | `Client_error `Proxy_authentication_required -> 407 - | `Client_error `Request_time_out -> 408 - | `Client_error `Conflict -> 409 - | `Client_error `Gone -> 410 - | `Client_error `Length_required -> 411 - | `Client_error `Precondition_failed -> 412 - | `Client_error `Request_entity_too_large -> 413 - | `Client_error `Request_URI_too_large -> 414 - | `Client_error `Unsupported_media_type -> 415 - | `Client_error `Requested_range_not_satisfiable -> 416 - | `Client_error `Expectation_failed -> 417 - | `Server_error `Internal_server_error -> 500 - | `Server_error `Not_implemented -> 501 - | `Server_error `Bad_gateway -> 502 - | `Server_error `Service_unavailable -> 503 - | `Server_error `Gateway_time_out -> 504 - | `Server_error `HTTP_version_not_supported -> 505 - -let is_informational code = - match status_of_code code with - | `Informational _ -> true - | _ -> false - -let is_success code = - match status_of_code code with - | `Success _ -> true - | _ -> false - -let is_redirection code = - match status_of_code code with - | `Redirection _ -> true - | _ -> false - -let is_client_error code = - match status_of_code code with - | `Client_error _ -> true - | _ -> false - -let is_server_error code = - match status_of_code code with - | `Server_error _ -> true - | _ -> false - -let is_error code = is_client_error code || is_server_error code - diff --git a/helm/DEVEL/ocaml-http/http_common.mli b/helm/DEVEL/ocaml-http/http_common.mli deleted file mode 100644 index 6029a7031..000000000 --- a/helm/DEVEL/ocaml-http/http_common.mli +++ /dev/null @@ -1,80 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** Common functionalities shared by other OCaml HTTP modules *) - -open Http_types;; - - (** whether debugging messages are enabled or not, can be changed at runtime - *) -val debug: bool ref - - (** print a string on stderr only if debugging is enabled *) -val debug_print: string -> unit - - (** see {!Http_constants.version} *) -val http_version: version - - (** see {!Http_constants.server_string} *) -val server_string: string - - (** pretty print an HTTP version *) -val string_of_version: version -> string - - (** parse an HTTP version from a string - @raise Invalid_HTTP_version if given string doesn't represent a supported HTTP - version *) -val version_of_string: string -> version - - (** pretty print an HTTP method *) -val string_of_method: meth -> string - - (** parse an HTTP method from a string - @raise Invalid_HTTP_method if given string doesn't represent a supported - method *) -val method_of_string: string -> meth - - (** converts an integer HTTP status to the corresponding status value - @raise Invalid_code if given integer isn't a valid HTTP status code *) -val status_of_code: int -> status - - (** converts an HTTP status to the corresponding integer value *) -val code_of_status: [< status] -> int - - (** @return true on "informational" status codes, false elsewhere *) -val is_informational: int -> bool - - (** @return true on "success" status codes, false elsewhere *) -val is_success: int -> bool - - (** @return true on "redirection" status codes, false elsewhere *) -val is_redirection: int -> bool - - (** @return true on "client error" status codes, false elsewhere *) -val is_client_error: int -> bool - - (** @return true on "server error" status codes, false elsewhere *) -val is_server_error: int -> bool - - (** @return true on "client error" and "server error" status code, false - elsewhere *) -val is_error: int -> bool - diff --git a/helm/DEVEL/ocaml-http/http_constants.ml b/helm/DEVEL/ocaml-http/http_constants.ml deleted file mode 100644 index fa9f49536..000000000 --- a/helm/DEVEL/ocaml-http/http_constants.ml +++ /dev/null @@ -1,34 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -let version = `HTTP_1_1 ;; -let server_string = "OCaml HTTP Daemon" ;; -let crlf = "\r\n" ;; - -let default_addr = "0.0.0.0" -let default_auth = None -let default_callback = fun _ _ -> () -let default_mode = `Fork -let default_port = 80 -let default_root_dir = None -let default_exn_handler = Some (fun exn outchan -> ()) -let default_timeout = Some 300 - diff --git a/helm/DEVEL/ocaml-http/http_constants.mli b/helm/DEVEL/ocaml-http/http_constants.mli deleted file mode 100644 index 46db79067..000000000 --- a/helm/DEVEL/ocaml-http/http_constants.mli +++ /dev/null @@ -1,43 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** Constants *) - - (** default HTTP version *) -val version: Http_types.version - - (** string returned as value of "Server:" response header *) -val server_string: string - - (** "\r\n" string *) -val crlf: string - - (** {2 daemon default values} *) - -val default_addr: string -val default_auth: (string * Http_types.auth_info) option -val default_callback: Http_types.request -> out_channel -> unit -val default_mode: Http_types.daemon_mode -val default_port: int -val default_root_dir: string option -val default_exn_handler: (exn -> out_channel -> unit) option -val default_timeout: int option - diff --git a/helm/DEVEL/ocaml-http/http_daemon.ml b/helm/DEVEL/ocaml-http/http_daemon.ml deleted file mode 100644 index 629d1286c..000000000 --- a/helm/DEVEL/ocaml-http/http_daemon.ml +++ /dev/null @@ -1,501 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -open Printf - -open Http_common -open Http_types -open Http_constants -open Http_parser - -exception Http_daemon_failure of string - - (** send raw data on outchan, flushing it afterwards *) -let send_raw ~data outchan = - output_string outchan data; - flush outchan - -let send_CRLF = send_raw ~data:crlf - -let send_header ~header ~value = - Http_parser_sanity.heal_header (header, value); - send_raw ~data:(header ^ ": " ^ value ^ crlf) - -let send_headers ~headers outchan = - List.iter (fun (header, value) -> send_header ~header ~value outchan) headers - - (** internal: low level for send_status_line *) -let send_status_line' ~version code = - let status_line = - String.concat - " " - [ string_of_version version; - string_of_int code; - Http_misc.reason_phrase_of_code code ] - in - send_raw ~data:(status_line ^ crlf) - -let int_of_code = function - | `Code code -> code - | `Status status -> code_of_status status - -let send_status_line ?(version = http_version) ~(code: status_code) outchan = - send_status_line' ~version (int_of_code code) outchan - - (* FIXME duplication of code between this and response#addBasicHeaders *) -let send_basic_headers ?(version = http_version) ~(code: status_code) outchan = - send_status_line' ~version (int_of_code code) outchan; - send_headers - ~headers:["Date", Http_misc.date_822 (); "Server", server_string] - outchan - - (** internal: given a status code and an additional body return a string - representing an HTML document that explains the meaning of given status code. - Additional data can be added to the body via 'body' argument *) -let foo_body code body = - let reason_phrase = Http_misc.reason_phrase_of_code code in - sprintf -" - -%d %s - -

%d - %s

%s -" - code reason_phrase code reason_phrase body - - (** internal: send a fooish body explaining in HTML form the 'reason phrase' - of an HTTP response; body, if given, will be appended to the body *) -let send_foo_body code body = send_raw ~data:(foo_body code body) - - (* Warning: keep default values in sync with Http_response.response class *) -let respond ?(body = "") ?(headers = []) ?version ?(code = `Code 200) outchan = - send_basic_headers ?version ~code outchan; - send_headers ~headers outchan; - send_header "Content-Length" (string_of_int (String.length body)) outchan; - send_CRLF outchan; - send_raw ~data:body outchan - - (** internal: low level for respond_redirect, respond_error, ... - This function send a status line corresponding to a given code, some basic - headers, the additional headers (if given) and an HTML page containing the - reason phrase; if body is given it will be included in the body of the HTML - page *) -let send_empty_response - func_name ?(is_valid_status = fun _ -> true) ?(headers=[]) ?(body="") () = - fun ?version code outchan -> - if not (is_valid_status (int_of_code code)) then - failwith - (sprintf "'%d' isn't a valid status code for %s" - (int_of_code code) func_name) - else begin (* status code suitable for answering *) - let headers = - [ "Content-Type", "text/html; charset=iso-8859-1" ] @ headers - in - let body = (foo_body (int_of_code code) body) ^ body in - respond ?version ~code ~headers ~body outchan - end - -let respond_redirect - ~location ?body ?version ?(code = `Code 301) outchan - = - send_empty_response "Daemon.respond_redirect" ~is_valid_status:is_redirection - ~headers:["Location", location] ?body () ?version code outchan - -let respond_error ?body ?version ?(code = `Code 400) outchan = - send_empty_response "Daemon.respond_error" ~is_valid_status:is_error - ?body () ?version code outchan - -let respond_not_found ~url ?version outchan = - send_empty_response "Daemon.respond_not_found" () ?version (`Code 404) outchan - -let respond_forbidden ~url ?version outchan = - send_empty_response "Daemon.respond_permission_denied" () ?version - (`Code 403) outchan - -let respond_unauthorized ?version ?(realm = server_string) outchan = - let body = - sprintf "401 - Unauthorized - Authentication failed for realm \"%s\"" realm - in - respond ~headers:["WWW-Authenticate", sprintf "Basic realm=\"%s\"" realm] - ~code:(`Code 401) ~body outchan - -let send_file ~src outchan = - let buflen = 1024 in - let buf = String.make buflen ' ' in - - let (file, cleanup) = - match src with - | FileSrc fname -> (* if we open the file, we close it before returning *) - let f = open_in fname in - f, (fun () -> close_in f) - | InChanSrc inchan -> inchan, ignore - in - try - while true do - let bytes = input file buf 0 buflen in - if bytes = 0 then - raise End_of_file - else - output outchan buf 0 bytes - done; - assert false - with End_of_file -> - begin - flush outchan; - cleanup () - end - - (* TODO interface is too ugly to advertise this function in .mli *) - (** create a minimal HTML directory listing of a given directory and send it - over an out_channel, directory is passed as a dir_handle; name is the - directory name, used for pretty printing purposes; path is the opened dir - path, used to test its contents with stat *) -let send_dir_listing ~dir ~name ~path outchan = - fprintf outchan "\n%s\n\n" name; - let (dirs, files) = - List.partition (fun e -> Http_misc.is_directory (path ^ e)) (Http_misc.ls dir) - in - List.iter - (fun d -> fprintf outchan "%s/
\n" d d) - (List.sort compare dirs); - List.iter - (fun f -> fprintf outchan "%s
\n" f f) - (List.sort compare files); - fprintf outchan "\n"; - flush outchan - -let respond_file ~fname ?(version = http_version) outchan = - (** ASSUMPTION: 'fname' doesn't begin with a "/"; it's relative to the current - document root (usually the daemon's cwd) *) - let droot = Sys.getcwd () in (* document root *) - let path = droot ^ "/" ^ fname in (* full path to the desired file *) - if not (Sys.file_exists path) then (* file not found *) - respond_not_found ~url:fname outchan - else begin - try - if Http_misc.is_directory path then begin (* file found, is a dir *) - let dir = Unix.opendir path in - send_basic_headers ~version ~code:(`Code 200) outchan; - send_header "Content-Type" "text/html" outchan; - send_CRLF outchan; - send_dir_listing ~dir ~name:fname ~path outchan; - Unix.closedir dir - end else begin (* file found, is something else *) - let file = open_in fname in - send_basic_headers ~version ~code:(`Code 200) outchan; - send_header - ~header:"Content-Length" - ~value:(string_of_int (Http_misc.filesize fname)) - outchan; - send_CRLF outchan; - send_file ~src:(InChanSrc file) outchan; - close_in file - end - with - | Unix.Unix_error (Unix.EACCES, _, _) - | Sys_error _ -> - respond_forbidden ~url:fname ~version outchan - end - -let respond_with (res: Http_types.response) outchan = - res#serialize outchan; - flush outchan - - (** internal: this exception is raised after a malformed request has been read - by a serving process to signal main server (or itself if mode = `Single) to - skip to next request *) -exception Again;; - -let pp_parse_exc e = - sprintf "HTTP request parse error: %s" (Printexc.to_string e) - - (* given a Http_parser.parse_request like function, wrap it in a function that - do the same and additionally catch parsing exception sending HTTP error - messages back to client as needed. Returned function raises Again when it - encounter a parse error (name 'Again' is intended for future versions that - will support http keep alive signaling that a new request has to be parsed - from client) *) -let rec wrap_parse_request_w_safety parse_function inchan outchan = - (try - parse_function inchan - with - | (Malformed_request req) as e -> - debug_print (pp_parse_exc e); - respond_error ~code:(`Code 400) - ~body:("request 1st line format should be: " ^ - "'<method> <url> <version>'" ^ - "
\nwhile received request 1st line was:
\n" ^ req) - outchan; - raise Again - | (Invalid_HTTP_method meth) as e -> - debug_print (pp_parse_exc e); - respond_error ~code:(`Code 501) - ~body:("Method '" ^ meth ^ "' isn't supported (yet)") - outchan; - raise Again - | (Malformed_request_URI uri) as e -> - debug_print (pp_parse_exc e); - respond_error ~code:(`Code 400) ~body:("Malformed URL: '" ^ uri ^ "'") - outchan; - raise Again - | (Invalid_HTTP_version version) as e -> - debug_print (pp_parse_exc e); - respond_error ~code:(`Code 505) - ~body:("HTTP version '" ^ version ^ "' isn't supported (yet)") - outchan; - raise Again - | (Malformed_query query) as e -> - debug_print (pp_parse_exc e); - respond_error ~code:(`Code 400) - ~body:(sprintf "Malformed query string '%s'" query) outchan; - raise Again - | (Malformed_query_part (binding, query)) as e -> - debug_print (pp_parse_exc e); - respond_error ~code:(`Code 400) - ~body:(sprintf "Malformed query part '%s' in query '%s'" binding query) - outchan; - raise Again) - - (* wrapper around Http_parser.parse_request which catch parsing exceptions and - return error messages to client as needed - @param inchan in_channel from which read incoming requests - @param outchan out_channl on which respond with error messages if needed - *) -let safe_parse_request = wrap_parse_request_w_safety parse_request - - (* as above but for OO version (Http_parser.parse_request') *) -let safe_parse_request' = wrap_parse_request_w_safety (new Http_request.request) - -let chdir_to_document_root = function (* chdir to document root *) - | Some dir -> Sys.chdir dir - | None -> () - -let server_of_mode = function - | `Single -> Http_tcp_server.simple - | `Fork -> Http_tcp_server.fork - | `Thread -> Http_tcp_server.thread - - (* TODO what happens when a Quit exception is raised by a callback? Do other - callbacks keep on living until the end or are them all killed immediatly? - The right semantics should obviously be the first one *) - -let handle_manual_auth outchan f = - try - f () - with - | Unauthorized realm -> respond_unauthorized ~realm outchan - | Again -> () - -let handle_auth req spec outchan = - try - (match (spec.auth, req#authorization) with - | None, _ -> spec.callback req outchan (* no auth required *) - | Some (realm, `Basic (spec_username, spec_password)), - Some (`Basic (username, password)) - when (username = spec_username) && (password = spec_password) -> - (* auth ok *) - spec.callback req outchan - | Some (realm, _), _ -> raise (Unauthorized realm)) (* auth failure *) - with - | Unauthorized realm -> respond_unauthorized ~realm outchan - | Again -> () - - (* TODO support also chroot to 'root', not only chdir *) - (* TODO deprecated: remove from future versions *) - (* curried request *) -let start - ?(addr = default_addr) ?(port = default_port) - ?(timeout = default_timeout) ?(mode = default_mode) ?root callback - = - Http_misc.warn - "Http_daemon.start is deprecated in favour of Http_daemon.main and will be removed in future versions of the library"; - chdir_to_document_root root; - let sockaddr = Http_misc.build_sockaddr (addr, port) in - let daemon_callback inchan outchan = - handle_manual_auth outchan (fun () -> - let (path, parameters) = safe_parse_request inchan outchan in - callback path parameters outchan; - flush outchan); - in - try - (server_of_mode mode) ~sockaddr ~timeout daemon_callback - with Quit -> () - - (* OO request *) - (* TODO deprecated: remove from future versions *) -let start' - ?(addr = default_addr) ?(port = default_port) - ?(timeout = default_timeout) ?(mode = default_mode) ?root callback -= - Http_misc.warn - "Http_daemon.start' is deprecated in favour of Http_daemon.main and will be removed in future versions of the library"; - chdir_to_document_root root; - let sockaddr = Http_misc.build_sockaddr (addr, port) in - let daemon_callback inchan outchan = - handle_manual_auth outchan (fun () -> - let req = safe_parse_request' inchan outchan in - callback req outchan; - flush outchan) - in - try - (server_of_mode mode) ~sockaddr ~timeout daemon_callback - with Quit -> () - -let main spec = - chdir_to_document_root spec.root_dir; - let sockaddr = Http_misc.build_sockaddr (spec.address, spec.port) in - let daemon_callback inchan outchan = - let next_req () = - try Some (safe_parse_request' inchan outchan) - with _ -> None - in - let rec loop n = - match next_req () with - | Some req -> - debug_print (sprintf "request #%d" n); - handle_auth req spec outchan; - flush outchan; - loop (n + 1) - | None -> - debug_print "server exiting"; - () - in - debug_print "server starting"; - try loop 1 - with exn -> - debug_print (sprintf "uncaught exception: %s" (Printexc.to_string exn)); - (match spec.exn_handler with - | Some f -> - debug_print "executing handler"; - f exn outchan - | None -> - debug_print "no handler given: re-raising"; - raise exn) - in - try - (server_of_mode spec.mode) ~sockaddr ~timeout:spec.timeout daemon_callback - with Quit -> () - -module Trivial = - struct - let heading_slash_RE = Pcre.regexp "^/" - - let trivial_callback req outchan = - let path = req#path in - if not (Pcre.pmatch ~rex:heading_slash_RE path) then - respond_error ~code:(`Code 400) outchan - else - respond_file ~fname:(Http_misc.strip_heading_slash path) outchan - - let callback = trivial_callback - - let main spec = main { spec with callback = trivial_callback } - end - - (** @param inchan input channel connected to client - @param outchan output channel connected to client - @param sockaddr client socket address *) -class connection inchan outchan sockaddr = - (* ASSUMPTION: inchan and outchan are channels built on top of the same - Unix.file_descr thus closing one of them will close also the other *) - let close' o = try o#close with Http_daemon_failure _ -> () in - object (self) - - initializer Gc.finalise close' self - - val mutable closed = false - - method private assertNotClosed = - if closed then - raise (Http_daemon_failure - "Http_daemon.connection: connection is closed") - - method getRequest = - self#assertNotClosed; - try - Some (safe_parse_request' inchan outchan) - with _ -> None - - method respond_with res = - self#assertNotClosed; - respond_with res outchan - - method close = - self#assertNotClosed; - close_in inchan; (* this close also outchan *) - closed <- true - - end - -class daemon ?(addr = "0.0.0.0") ?(port = 80) () = - object (self) - - val suck = - Http_tcp_server.init_socket (Http_misc.build_sockaddr (addr, port)) - - method accept = - let (cli_suck, cli_sockaddr) = Unix.accept suck in (* may block *) - let (inchan, outchan) = - (Unix.in_channel_of_descr cli_suck, Unix.out_channel_of_descr cli_suck) - in - new connection inchan outchan cli_sockaddr - - method getRequest = - let conn = self#accept in - match conn#getRequest with - | None -> - conn#close; - self#getRequest - | Some req -> (req, conn) - - end - -open Http_constants - -let default_spec = { - address = default_addr; - auth = default_auth; - callback = default_callback; - mode = default_mode; - port = default_port; - root_dir = default_root_dir; - exn_handler = default_exn_handler; - timeout = default_timeout; -} - -let daemon_spec - ?(address = default_addr) ?(auth = default_auth) - ?(callback = default_callback) ?(mode = default_mode) ?(port = default_port) - ?(root_dir = default_root_dir) ?(exn_handler = default_exn_handler) - ?(timeout = default_timeout) - () -= - { default_spec with - address = address; - auth = auth; - callback = callback; - mode = mode; - port = port; - root_dir = root_dir; - exn_handler = exn_handler; - timeout = timeout; - } - diff --git a/helm/DEVEL/ocaml-http/http_daemon.mli b/helm/DEVEL/ocaml-http/http_daemon.mli deleted file mode 100644 index 59a408d87..000000000 --- a/helm/DEVEL/ocaml-http/http_daemon.mli +++ /dev/null @@ -1,205 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** Main OCaml HTTP module. - Here you can find two set of functions: - - functions which let you start an HTTP Daemon (start* functions) - - facility functions which let you sent responses back to clients *) - - (** send a CRLF sequence on the given output channel, this is mandatory after - the last header was sent and before start sending the response body *) -val send_CRLF: out_channel -> unit - - (** send response status line, version is the http version used in response, - either code or status must be given (not both, not none) which represent the - HTTP response code, outchan is the output channel to which send status line *) -val send_status_line: - ?version:Http_types.version -> code:Http_types.status_code -> - out_channel -> - unit - - (** like send_status_line but additionally will also send "Date" and "Server" - standard headers *) -val send_basic_headers: - ?version: Http_types.version -> code:Http_types.status_code -> - out_channel -> - unit - - (** send an HTTP header on outchan *) -val send_header: header: string -> value: string -> out_channel -> unit - - (** as send_header, but for a list of pairs *) -val send_headers: headers:(string * string) list -> out_channel -> unit - -(* - (** send a file through an out_channel, file can be passed as an in_channel - (if 'file' is given) or as a file name (if 'name' is given) *) -val send_file: ?name:string -> ?file:in_channel -> out_channel -> unit -*) - (** send a file through an out_channel *) -val send_file: src:Http_types.file_source -> out_channel -> unit - - (** high level response function, respond on outchan sending: basic headers - (including Content-Length computed using 'body' argument), headers probided - via 'headers' argument, body given via 'body' argument. Default response - status is 200, default response HTTP version is Http_common.http_version *) -val respond: - ?body:string -> ?headers:(string * string) list -> - ?version:Http_types.version -> ?code:Http_types.status_code -> - out_channel -> - unit - - (** send a 404 (not found) HTTP response *) -val respond_not_found: - url:string -> ?version: Http_types.version -> out_channel -> unit - - (** send a 403 (forbidden) HTTP response *) -val respond_forbidden: - url:string -> ?version: Http_types.version -> out_channel -> unit - - (** send a "redirection" class response, optional body argument contains data - that will be displayed in the body of the response, default response status is - 301 (moved permanently), only redirection status are accepted by this - function, other values will raise Failure *) -val respond_redirect: - location:string -> ?body:string -> - ?version: Http_types.version -> ?code:Http_types.status_code -> - out_channel -> - unit - - (** respond with a 401 (Unauthorized) response asking for authentication - * against given realm (default is the server name) *) -val respond_unauthorized: - ?version: Http_types.version -> ?realm:string -> out_channel -> unit - - (** send an "error" response (i.e. 400 <= status < 600), optional body - argument as per send_redirect, default response status is 400 (bad request), - only error status are accepted by this function, other values will - raise Failure *) -val respond_error: - ?body:string -> - ?version: Http_types.version -> ?code:Http_types.status_code -> - out_channel -> - unit - - (** tipical static pages http daemon behaviour, if requested url is a file, - return it, it it is a directory return a directory listing of it *) -val respond_file: - fname:string -> ?version: Http_types.version -> out_channel -> unit - - (** respond using a prebuilt Http_types.response object *) -val respond_with: Http_types.response -> out_channel -> unit - - (** start an HTTP daemon - * @param spec specification of daemon behaviour - *) -val main: Http_types.daemon_spec -> unit - - (** default daemon specification: - * - listen on 0.0.0.0, port 80 - * - "always ok" callback (return an empty response, response code 200) - * - fork a child for each request - * - do not change to a root directory (i.e. keep cwd) - * - 300 seconds timeout - * - ignores exceptions - * - no authentication required *) -val default_spec: Http_types.daemon_spec - - (** currified daemon_spec constructor. Each parameter of this function - * corresponds to one field of Http_types.daemon_spec and defaults to the - * corresponding field of Http_daemon.default_spec *) -val daemon_spec: - ?address:string -> - ?auth:(string * Http_types.auth_info) option -> - ?callback:(Http_types.request -> out_channel -> unit) -> - ?mode:(Http_types.daemon_mode) -> - ?port:int -> - ?root_dir:string option -> - ?exn_handler:(exn -> out_channel -> unit) option -> - ?timeout:int option -> - unit -> - Http_types.daemon_spec - - (** starts an HTTP daemon (deprecated function) - * - * @deprecated This function will be removed in future versions, please switch - * to Http_daemon.main below. - * - * see {!Http_types.daemon_spec} for a detailed description of parameters - * - * @param addr like the "address" field of Http_types.daemon_spec, defaults to - * the wildcard address "0.0.0.0" - * @param port like the "port" field of Http_types.daemon_spec, defaults to 80 - * @param timeout like the "timeout" field of Http_types.daemon_spec, defaults - * to Some 300 - * @param mode like the "mode" field of Http_types.daemon_spec, defaults to - * `Fork - * @param root like the "root_dir" field of Http_types.daemon_spec, defaults to - * None - * @param callback functional version of the "callback" field of - * Http_types.daemon_spec. 1st argument is the request path, 2nd argument - * the decoded query string, 3rd argument an output channel connect to the - * client - *) -val start: - ?addr: string -> ?port: int -> - ?timeout: int option -> ?mode: Http_types.daemon_mode -> ?root: string -> - (string -> (string * string) list -> out_channel -> unit) -> - unit - - (** starts an HTTP daemon (deprecated function) - * - * @deprecated This function will be removed in future versions, please switch - * to Http_daemon.main below. - * - * parameters as per {!Http_daemon.start} except for the callback, in this case - * it behaves as the "callback" field of Http_types.daemon_spec - *) -val start': - ?addr: string -> ?port: int -> - ?timeout: int option -> ?mode: Http_types.daemon_mode -> ?root: string -> - (Http_types.request -> out_channel -> unit) -> - unit - - (** Object oriented interface to HTTP daemons. - * @param addr address on which daemon will listen for connections - * @param port port which daemon will bind - * see {!Http_types.daemon} *) -class daemon: - ?addr: string -> ?port: int -> - unit -> - Http_types.daemon - - (** Trivial static pages HTTP daemon. - * Daemons created using this module will serve directory indexes and files - * found starting from the working directory *) -module Trivial : - sig - (** callback function, exposed if you like to use it as a basis to define - a more powerful daemon *) - val callback : Http_types.request -> out_channel -> unit - - (** start the "trivial" HTTP daemon - * @param spec trivial HTTP daemon specification, "callback" field is - * ignored and set to the callback above *) - val main : Http_types.daemon_spec -> unit - end - diff --git a/helm/DEVEL/ocaml-http/http_message.ml b/helm/DEVEL/ocaml-http/http_message.ml deleted file mode 100644 index 5dc0f0472..000000000 --- a/helm/DEVEL/ocaml-http/http_message.ml +++ /dev/null @@ -1,118 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -open Http_common;; -open Http_constants;; -open Http_types;; -open Printf;; - - (* remove all bindings of 'name' from hashtbl 'tbl' *) -let rec hashtbl_remove_all tbl name = - if not (Hashtbl.mem tbl name) then - raise (Header_not_found name); - Hashtbl.remove tbl name; - if Hashtbl.mem tbl name then hashtbl_remove_all tbl name -;; - -class virtual message ~body ~headers ~version ~clisockaddr ~srvsockaddr = - - let ((cliaddr, cliport), (srvaddr, srvport)) = - (Http_misc.explode_sockaddr clisockaddr, - Http_misc.explode_sockaddr srvsockaddr) - in - - object (self) - - val _contentsBuf = Buffer.create 1024 - val _headers = Hashtbl.create 11 - val mutable _version: version option = version - - initializer - self#setBody body; - self#addHeaders headers - - method version = _version - method setVersion v = _version <- Some v - - method body = Buffer.contents _contentsBuf - method setBody c = - Buffer.clear _contentsBuf; - Buffer.add_string _contentsBuf c - method bodyBuf = _contentsBuf - method setBodyBuf b = - Buffer.clear _contentsBuf; - Buffer.add_buffer _contentsBuf b - method addBody s = Buffer.add_string _contentsBuf s - method addBodyBuf b = Buffer.add_buffer _contentsBuf b - - method addHeader ~name ~value = - let name = String.lowercase name in - Http_parser_sanity.heal_header (name, value); - Hashtbl.add _headers name value - method addHeaders = - List.iter (fun (name, value) -> self#addHeader ~name ~value) - method replaceHeader ~name ~value = - let name = String.lowercase name in - Http_parser_sanity.heal_header (name, value); - Hashtbl.replace _headers name value - method replaceHeaders = - List.iter (fun (name, value) -> self#replaceHeader ~name ~value) - method removeHeader ~name = - let name = String.lowercase name in - hashtbl_remove_all _headers name - method hasHeader ~name = - let name = String.lowercase name in - Hashtbl.mem _headers name - method header ~name = - if not (self#hasHeader name) then raise (Header_not_found name); - let name = String.lowercase name in - String.concat ", " (List.rev (Hashtbl.find_all _headers name)) - method headers = - List.rev - (Hashtbl.fold - (fun name _ headers -> (name, self#header ~name)::headers) - _headers - []) - - method clientSockaddr = clisockaddr - method clientAddr = cliaddr - method clientPort = cliport - - method serverSockaddr = srvsockaddr - method serverAddr = srvaddr - method serverPort = srvport - - method private virtual fstLineToString: string - method toString = - self#fstLineToString ^ (* {request,status} line *) - crlf ^ - (String.concat (* headers, crlf terminated *) - "" - (List.map (fun (h,v) -> h ^ ": " ^ v ^ crlf) self#headers)) ^ - (sprintf "Content-Length: %d" (String.length self#body)) ^ crlf ^ - crlf ^ - self#body (* body *) - method serialize outchan = - output_string outchan self#toString; - flush outchan - - end - diff --git a/helm/DEVEL/ocaml-http/http_message.mli b/helm/DEVEL/ocaml-http/http_message.mli deleted file mode 100644 index 0a30b3eec..000000000 --- a/helm/DEVEL/ocaml-http/http_message.mli +++ /dev/null @@ -1,130 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** Object Oriented representation of HTTP messages *) - -open Http_types;; - - (** OO representation of an HTTP message - @param entity body included in the message - @param headers message headers shipped with the message *) -class virtual message: - body: string -> headers: (string * string) list -> version: version option -> - clisockaddr: Unix.sockaddr -> srvsockaddr: Unix.sockaddr -> - object - - (** @return message HTTP version, it can be None because older version - of the HTTP protocol don't require HTTP version to be told between - message source and destination *) - method version: version option - - (** set message HTTP version *) - method setVersion: version -> unit - - (** @return message body *) - method body: string - - (** set message body *) - method setBody: string -> unit - - (** @return a Buffer.t connected to message body (Warning: changing this - buffer will change message body too) *) - method bodyBuf: Buffer.t - - (** set a new Buffer.t used to keep message body *) - method setBodyBuf: Buffer.t -> unit - - (** append a string to message body *) - method addBody: string -> unit - - (** append a whole buffer to message body *) - method addBodyBuf: Buffer.t -> unit - - (** {i header name comparison are performed in a case-insensitive manner - as required by RFC2616, actually the implementation works converting all - header names in lowercase} *) - - (** add an HTTP header - @param name header's name - @param value header's value *) - method addHeader: name:string -> value:string -> unit - - (** add a list of HTTP headers - @param headers a list of pairs: header_name, header_value *) - method addHeaders: (string * string) list -> unit - - (** like addHeader but replace previous definition of the same header *) - method replaceHeader: name:string -> value:string -> unit - - (** like addHeaders but replace previous definition of headers that were - already defined *) - method replaceHeaders: (string * string) list -> unit - - (** remove _all_ occurences of an HTTP header from the message - @param name name of the header to be removed *) - method removeHeader: name:string -> unit - - (** @return true if given header exists in message, false otherwise *) - method hasHeader: name:string -> bool - - (** @return value associated to a given header - @param name name of the header to lookup - @raise Header_not_found if given header wasn't defined in message *) - method header: name:string -> string - - (** @return the full set of headers defined for this message, the value - returned is an association list from headers name to headers value, an - header may occurs more that once in the list *) - method headers: (string * string) list - - - (** @return client Unix.sockaddr *) - method clientSockaddr: Unix.sockaddr - - (** @return client address pretty printed *) - method clientAddr: string - - (** @return client port *) - method clientPort: int - - (** @return server Unix.sockaddr *) - method serverSockaddr: Unix.sockaddr - - (** @return server address pretty printed *) - method serverAddr: string - - (** @return server port *) - method serverPort: int - - - (** @return for requests first request line, for responses first - response line. - User by derived requests and responses to implement toString method *) - method private virtual fstLineToString: string - - (** @return a string representation of the message *) - method toString: string - - (** serialize the message over an output channel *) - method serialize: out_channel -> unit - - end - diff --git a/helm/DEVEL/ocaml-http/http_misc.ml b/helm/DEVEL/ocaml-http/http_misc.ml deleted file mode 100644 index abe6702c2..000000000 --- a/helm/DEVEL/ocaml-http/http_misc.ml +++ /dev/null @@ -1,146 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -open Printf - -open Http_types - -let date_822 () = - Netdate.mk_mail_date ~zone:Netdate.localzone (Unix.time ()) - -let is_directory name = - match Unix.lstat name with - | { Unix.st_kind = Unix.S_DIR } -> true - | _ -> false - -let filesize fname = (Unix.stat fname).Unix.st_size - -let strip_trailing_slash = - let rex = Pcre.regexp "/$" in - fun s -> Pcre.replace ~rex ~templ:"" s - -let strip_heading_slash = - let rex = Pcre.regexp "^/" in - fun s -> Pcre.replace ~rex ~templ:"" s - -let ls dir = - let rec ls' entries = - try ls' ((Unix.readdir dir)::entries) with End_of_file -> entries - in - ls' [] - -let string_explode s = - let rec string_explode' acc = function - | "" -> acc - | s -> string_explode' (s.[0] :: acc) (String.sub s 1 (String.length s - 1)) - in - List.rev (string_explode' [] s) - -let string_implode = List.fold_left (fun s c -> s ^ (String.make 1 c)) "" - -let reason_phrase_of_code = function - | 100 -> "Continue" - | 101 -> "Switching protocols" - | 200 -> "OK" - | 201 -> "Created" - | 202 -> "Accepted" - | 203 -> "Non authoritative information" - | 204 -> "No content" - | 205 -> "Reset content" - | 206 -> "Partial content" - | 300 -> "Multiple choices" - | 301 -> "Moved permanently" - | 302 -> "Found" - | 303 -> "See other" - | 304 -> "Not modified" - | 305 -> "Use proxy" - | 307 -> "Temporary redirect" - | 400 -> "Bad request" - | 401 -> "Unauthorized" - | 402 -> "Payment required" - | 403 -> "Forbidden" - | 404 -> "Not found" - | 405 -> "Method not allowed" - | 406 -> "Not acceptable" - | 407 -> "Proxy authentication required" - | 408 -> "Request time out" - | 409 -> "Conflict" - | 410 -> "Gone" - | 411 -> "Length required" - | 412 -> "Precondition failed" - | 413 -> "Request entity too large" - | 414 -> "Request URI too large" - | 415 -> "Unsupported media type" - | 416 -> "Requested range not satisfiable" - | 417 -> "Expectation failed" - | 500 -> "Internal server error" - | 501 -> "Not implemented" - | 502 -> "Bad gateway" - | 503 -> "Service unavailable" - | 504 -> "Gateway time out" - | 505 -> "HTTP version not supported" - | invalid_code -> raise (Invalid_code invalid_code) - -let build_sockaddr (addr, port) = - try - Unix.ADDR_INET ((Unix.gethostbyname addr).Unix.h_addr_list.(0), port) - with Not_found -> failwith ("OCaml-HTTP, can't resolve hostname: " ^ addr) - -let explode_sockaddr = function - | Unix.ADDR_INET (addr, port) -> (Unix.string_of_inet_addr addr, port) - | _ -> assert false (* can explode only inet address *) - -let peername_of_out_channel outchan = - Unix.getpeername (Unix.descr_of_out_channel outchan) -let peername_of_in_channel inchan = - Unix.getpeername (Unix.descr_of_in_channel inchan) -let sockname_of_out_channel outchan = - Unix.getsockname (Unix.descr_of_out_channel outchan) -let sockname_of_in_channel inchan = - Unix.getsockname (Unix.descr_of_in_channel inchan) - -let buf_of_inchan ?limit ic = - let buf = Buffer.create 10240 in - let tmp = String.make 1024 '\000' in - let rec buf_of_inchan' limit = - (match limit with - | None -> - let bytes = input ic tmp 0 1024 in - if bytes > 0 then begin - Buffer.add_substring buf tmp 0 bytes; - buf_of_inchan' None - end - | Some lim -> (* TODO what about using a single really_input call? *) - let bytes = input ic tmp 0 (min lim 1024) in - if bytes > 0 then begin - Buffer.add_substring buf tmp 0 bytes; - buf_of_inchan' (Some (lim - bytes)) - end) - in - (try buf_of_inchan' limit with End_of_file -> ()); - buf - -let list_assoc_all key pairs = - snd (List.split (List.filter (fun (k, v) -> k = key) pairs)) - -let warn msg = prerr_endline (sprintf "ocaml-http WARNING: %s" msg) -let error msg = prerr_endline (sprintf "ocaml-http ERROR: %s" msg) - diff --git a/helm/DEVEL/ocaml-http/http_misc.mli b/helm/DEVEL/ocaml-http/http_misc.mli deleted file mode 100644 index b6e28e2bc..000000000 --- a/helm/DEVEL/ocaml-http/http_misc.mli +++ /dev/null @@ -1,88 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** Helpers and other not better classified functions which should not be -exposed in the final API *) - - (** @return the current date compliant to RFC 1123, which updates RFC 822 - zone info are retrieved from UTC *) -val date_822: unit -> string - - (** @return true if 'name' is a directory on the file system, false otherwise - *) -val is_directory: string -> bool - - (** @return the filesize of fname *) -val filesize: string -> int - - (** strip trailing '/', if any, from a string and @return the new string *) -val strip_trailing_slash: string -> string - - (** strip heading '/', if any, from a string and @return the new string *) -val strip_heading_slash: string -> string - - (** given a dir handle @return a list of entries contained *) -val ls: Unix.dir_handle -> string list - - (** explode a string in a char list *) -val string_explode: string -> char list - - (** implode a char list in a string *) -val string_implode: char list -> string - - (** given an HTTP response code return the corresponding reason phrase *) -val reason_phrase_of_code: int -> string - - (** build a Unix.sockaddr inet address from a string representation of an IP - address and a port number *) -val build_sockaddr: string * int -> Unix.sockaddr - - (** explode an _inet_ Unix.sockaddr address in a string representation of an - IP address and a port number *) -val explode_sockaddr: Unix.sockaddr -> string * int - - (** given an out_channel build on top of a socket, return peername related to - that socket *) -val peername_of_out_channel: out_channel -> Unix.sockaddr - - (** as above but works on in_channels *) -val peername_of_in_channel: in_channel -> Unix.sockaddr - - (** given an out_channel build on top of a socket, return sockname related to - that socket *) -val sockname_of_out_channel: out_channel -> Unix.sockaddr - - (** as above but works on in_channels *) -val sockname_of_in_channel: in_channel -> Unix.sockaddr - - (* TODO replace with Buffer.add_channel which does almost the same :-((( *) - (** reads from an input channel till it End_of_file and returns what has been - read; if limit is given returned buffer will contains at most first 'limit' - bytes read from input channel *) -val buf_of_inchan: ?limit: int -> in_channel -> Buffer.t - - (** like List.assoc but return all bindings of a given key instead of the - leftmost one only *) -val list_assoc_all: 'a -> ('a * 'b) list -> 'b list - -val warn: string -> unit (** print a warning msg to stderr. Adds trailing \n *) -val error: string -> unit (** print an error msg to stderr. Adds trailing \n *) - diff --git a/helm/DEVEL/ocaml-http/http_parser.ml b/helm/DEVEL/ocaml-http/http_parser.ml deleted file mode 100644 index af371bb1e..000000000 --- a/helm/DEVEL/ocaml-http/http_parser.ml +++ /dev/null @@ -1,160 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -open Printf;; - -open Http_common;; -open Http_types;; -open Http_constants;; - -let (bindings_sep, binding_sep, pieces_sep, header_sep) = - (Pcre.regexp "&", Pcre.regexp "=", Pcre.regexp " ", Pcre.regexp ":") -let header_RE = Pcre.regexp "([^:]*):(.*)" - -let url_decode url = Netencoding.Url.decode ~plus:true url - -let split_query_params query = - let bindings = Pcre.split ~rex:bindings_sep query in - match bindings with - | [] -> raise (Malformed_query query) - | bindings -> - List.map - (fun binding -> - match Pcre.split ~rex:binding_sep binding with - | [ ""; b ] -> (* '=b' *) - raise (Malformed_query_part (binding, query)) - | [ a; b ] -> (* 'a=b' *) (url_decode a, url_decode b) - | [ a ] -> (* 'a=' || 'a' *) (url_decode a, "") - | _ -> raise (Malformed_query_part (binding, query))) - bindings - - (** internal, used by generic_input_line *) -exception Line_completed;; - - (** given an input channel and a separator - @return a line read from it (like Pervasives.input_line) - line is returned only after reading a separator string; separator string isn't - included in the returned value - TODO what about efficiency?, input is performed char-by-char - *) -let generic_input_line ~sep ~ic = - let sep_len = String.length sep in - if sep_len < 1 then - failwith ("Separator '" ^ sep ^ "' is too short!") - else (* valid separator *) - let line = ref "" in - let sep_pointer = ref 0 in - try - while true do - if !sep_pointer >= String.length sep then (* line completed *) - raise Line_completed - else begin (* incomplete line: need to read more *) - let ch = input_char ic in - if ch = String.get sep !sep_pointer then (* next piece of sep *) - incr sep_pointer - else begin (* useful char *) - for i = 0 to !sep_pointer - 1 do - line := !line ^ (String.make 1 (String.get sep i)) - done; - sep_pointer := 0; - line := !line ^ (String.make 1 ch) - end - end - done; - assert false (* unreacheable statement *) - with Line_completed -> !line - -let patch_empty_path = function "" -> "/" | s -> s -let debug_dump_request path params = - debug_print - (sprintf - "recevied request; path: %s; params: %s" - path - (String.concat ", " (List.map (fun (n, v) -> n ^ "=" ^ v) params))) - -let parse_request_fst_line ic = - let request_line = generic_input_line ~sep:crlf ~ic in - debug_print (sprintf "HTTP request line (not yet parsed): %s" request_line); - try - (match Pcre.split ~rex:pieces_sep request_line with - | [ meth_raw; uri_raw ] -> (* ancient HTTP request line *) - (method_of_string meth_raw, (* method *) - Http_parser_sanity.url_of_string uri_raw, (* uri *) - None) (* no version given *) - | [ meth_raw; uri_raw; http_version_raw ] -> (* HTTP 1.{0,1} *) - (method_of_string meth_raw, (* method *) - Http_parser_sanity.url_of_string uri_raw, (* uri *) - Some (version_of_string http_version_raw)) (* version *) - | _ -> raise (Malformed_request request_line)) - with Malformed_URL url -> raise (Malformed_request_URI url) - -let parse_response_fst_line ic = - let response_line = generic_input_line ~sep:crlf ~ic in - debug_print (sprintf "HTTP response line (not yet parsed): %s" response_line); - try - (match Pcre.split ~rex:pieces_sep response_line with - | version_raw :: code_raw :: _ -> - (version_of_string version_raw, (* method *) - status_of_code (int_of_string code_raw)) (* status *) - | _ -> raise (Malformed_response response_line)) - with - | Malformed_URL _ | Invalid_code _ | Failure "int_of_string" -> - raise (Malformed_response response_line) - -let parse_path uri = patch_empty_path (String.concat "/" (Neturl.url_path uri)) -let parse_query_get_params uri = - try (* act on HTTP encoded URIs *) - split_query_params (Neturl.url_query ~encoded:true uri) - with Not_found -> [] - -let parse_headers ic = - (* consume also trailing "^\r\n$" line *) - let rec parse_headers' headers = - match generic_input_line ~sep:crlf ~ic with - | "" -> List.rev headers - | line -> - (let subs = - try - Pcre.extract ~rex:header_RE line - with Not_found -> raise (Invalid_header line) - in - let header = - try - subs.(1) - with Invalid_argument "Array.get" -> raise (Invalid_header line) - in - let value = - try - Http_parser_sanity.normalize_header_value subs.(2) - with Invalid_argument "Array.get" -> "" - in - Http_parser_sanity.heal_header (header, value); - parse_headers' ((header, value) :: headers)) - in - parse_headers' [] - -let parse_request ic = - let (meth, uri, version) = parse_request_fst_line ic in - let path = parse_path uri in - let query_get_params = parse_query_get_params uri in - debug_dump_request path query_get_params; - (path, query_get_params) - diff --git a/helm/DEVEL/ocaml-http/http_parser.mli b/helm/DEVEL/ocaml-http/http_parser.mli deleted file mode 100644 index 58e616bd7..000000000 --- a/helm/DEVEL/ocaml-http/http_parser.mli +++ /dev/null @@ -1,68 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** HTTP messages parsing *) - -open Http_types;; - - (** given an HTTP like query string (e.g. "name1=value1&name2=value2&...") - @return a list of pairs [("name1", "value1"); ("name2", "value2")] - @raise Malformed_query if the string isn't a valid query string - @raise Malformed_query_part if some piece of the query isn't valid - *) -val split_query_params: string -> (string * string) list - - (** parse 1st line of an HTTP request - @param inchan input channel from which parse request - @return a triple meth * url * version, meth is the HTTP method invoked, url is - the requested url, version is the HTTP version specified or None if no version - was specified - @raise Malformed_request if request 1st linst isn't well formed - @raise Malformed_request_URI if requested URI isn't well formed *) -val parse_request_fst_line: in_channel -> meth * Neturl.url * version option - - (** parse 1st line of an HTTP response - * @param inchan input channel from which parse response - * @raise Malformed_response if first line isn't well formed - *) -val parse_response_fst_line: in_channel -> version * status - - (** parse HTTP GET parameters from an URL; paramater which were passed with no - value (like 'x' in "/foo.cgi?a=10&x=&c=9") are returned associated with the - empty ("") string. - @return a list of pairs param_name * param_value *) -val parse_query_get_params: Neturl.url -> (string * string) list - - (** parse the base path (removing query string, fragment, ....) from an URL *) -val parse_path: Neturl.url -> string - - (** parse HTTP headers. Consumes also trailing CRLF at the end of header list - @param inchan input channel from which parse headers - @return a list of pairs header_name * header_value - @raise Invalid_header if a not well formed header is encountered *) -val parse_headers: in_channel -> (string * string) list - - (** given an input channel, reads from it a GET HTTP request and - @return a pair where path is a string representing the - requested path and query_params is a list of pairs (the GET - parameters) *) -val parse_request: in_channel -> string * (string * string) list - diff --git a/helm/DEVEL/ocaml-http/http_parser_sanity.ml b/helm/DEVEL/ocaml-http/http_parser_sanity.ml deleted file mode 100644 index 7fe08cf93..000000000 --- a/helm/DEVEL/ocaml-http/http_parser_sanity.ml +++ /dev/null @@ -1,115 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -open Printf - -open Http_types -open Http_constants - -(* -type url_syntax_option = - Url_part_not_recognized - | Url_part_allowed - | Url_part_required - -* (1) scheme://user:password@host:port/path;params?query#fragment -*) - -let request_uri_syntax = -{ - Neturl.url_enable_scheme = Neturl.Url_part_not_recognized; - url_enable_user = Neturl.Url_part_not_recognized; - url_enable_user_param = Neturl.Url_part_not_recognized; - url_enable_password = Neturl.Url_part_not_recognized; - url_enable_host = Neturl.Url_part_not_recognized; - url_enable_port = Neturl.Url_part_not_recognized; - url_enable_path = Neturl.Url_part_required; - url_enable_param = Neturl.Url_part_not_recognized; - url_enable_query = Neturl.Url_part_allowed; - url_enable_fragment = Neturl.Url_part_not_recognized; - url_enable_other = Neturl.Url_part_not_recognized; - url_accepts_8bits = false; - url_enable_relative = true; - url_is_valid = (fun _ -> true); -} - - (* convention: - foo_RE_raw is the uncompiled regexp matching foo - foo_RE is the compiled regexp matching foo - is_foo is the predicate over string matching foo - *) - -let separators_RE_raw = "()<>@,;:\\\\\"/\\[\\]?={} \t" -let ctls_RE_raw = "\\x00-\\x1F\\x7F" -let token_RE_raw = "[^" ^ separators_RE_raw ^ ctls_RE_raw ^ "]+" -let lws_RE_raw = "(\r\n)?[ \t]" -let quoted_string_RE_raw = "\"(([^\"])|(\\\\\"))*\"" -let text_RE_raw = "(([^" ^ ctls_RE_raw ^ "])|(" ^ lws_RE_raw ^ "))+" -let field_content_RE_raw = - sprintf - "^(((%s)|(%s)|(%s))|(%s))*$" - token_RE_raw - separators_RE_raw - quoted_string_RE_raw - text_RE_raw -(* - (* following RFC 2616 specifications *) -let field_value_RE_raw = "((" ^ field_content_RE_raw ^ ")|(" ^ lws_RE_raw^ "))*" -*) - (* smarter implementation: TEXT production is included in the regexp below *) -let field_value_RE_raw = - sprintf - "^((%s)|(%s)|(%s)|(%s))*$" - token_RE_raw - separators_RE_raw - quoted_string_RE_raw - lws_RE_raw - -let token_RE = Pcre.regexp ("^" ^ token_RE_raw ^ "$") -let field_value_RE = Pcre.regexp ("^" ^ field_value_RE_raw ^ "$") -let heading_lws_RE = Pcre.regexp (sprintf "^%s*" lws_RE_raw) -let trailing_lws_RE = Pcre.regexp (sprintf "%s*$" lws_RE_raw) - -let is_token s = Pcre.pmatch ~rex:token_RE s -let is_field_name = is_token -let is_field_value s = Pcre.pmatch ~rex:field_value_RE s - -let heal_header_name s = - if not (is_field_name s) then raise (Invalid_header_name s) else () - -let heal_header_value s = - if not (is_field_value s) then raise (Invalid_header_value s) else () - -let normalize_header_value s = - Pcre.replace ~rex:trailing_lws_RE - (Pcre.replace ~rex:heading_lws_RE s) - -let heal_header (name, value) = - heal_header_name name; - heal_header_value name - -let url_of_string s = - try - Neturl.url_of_string request_uri_syntax s - with Neturl.Malformed_URL -> raise (Malformed_URL s) - -let string_of_url = Neturl.string_of_url - diff --git a/helm/DEVEL/ocaml-http/http_parser_sanity.mli b/helm/DEVEL/ocaml-http/http_parser_sanity.mli deleted file mode 100644 index a869f182f..000000000 --- a/helm/DEVEL/ocaml-http/http_parser_sanity.mli +++ /dev/null @@ -1,46 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** Sanity test functions related to HTTP message parsing *) - - (** @param name an HTTP header name - @raise Invalid_header_name if name isn't a valid HTTP header name *) -val heal_header_name: string -> unit - - (** @param value an HTTP header value - @raise Invalid_header_value if value isn't a valid HTTP header value *) -val heal_header_value: string -> unit - - (** @param header a pair header_name * header_value - @raise Invalid_header_name if name isn't a valid HTTP header name - @raise Invalid_header_value if value isn't a valid HTTP header value *) -val heal_header: string * string -> unit - - (** remove heading and/or trailing LWS sequences as per RFC2616 *) -val normalize_header_value: string -> string - - (** parse an URL from a string. - @raise Malformed_URL if an invalid URL is encountered *) -val url_of_string: string -> Neturl.url - - (** pretty print an URL *) -val string_of_url: Neturl.url -> string - diff --git a/helm/DEVEL/ocaml-http/http_request.ml b/helm/DEVEL/ocaml-http/http_request.ml deleted file mode 100644 index cd2dcd165..000000000 --- a/helm/DEVEL/ocaml-http/http_request.ml +++ /dev/null @@ -1,145 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -open Printf;; - -open Http_common;; -open Http_types;; - -let debug_dump_request path params = - debug_print ("request path = " ^ path); - debug_print ( - sprintf"request params = %s" - (String.concat ";" - (List.map (fun (h,v) -> String.concat "=" [h;v]) params))) - -let auth_sep_RE = Pcre.regexp ":" -let basic_auth_RE = Pcre.regexp "^Basic\\s+" - -exception Fallback;; (* used internally by request class *) - -class request ic = - let (meth, uri, version) = Http_parser.parse_request_fst_line ic in - let uri_str = Neturl.string_of_url uri in - let path = Http_parser.parse_path uri in - let query_get_params = Http_parser.parse_query_get_params uri in - let (headers, body) = - (match version with - | None -> [], "" (* No version given, use request's 1st line only *) - | Some version -> (* Version specified, parse also headers and body *) - let headers = - List.map (* lowercase header names to ease lookups before having a - request object *) - (fun (h,v) -> (String.lowercase h, v)) - (Http_parser.parse_headers ic) (* trailing \r\n consumed! *) - in - let body = - (* TODO fallback on size defined in Transfer-Encoding if - Content-Length isn't defined *) - if meth = `POST then - Buffer.contents - (try (* read only Content-Length bytes *) - let limit_raw = - (try - List.assoc "content-length" headers - with Not_found -> raise Fallback) - in - let limit = - (try (* TODO supports only a maximum content-length of 1Gb *) - int_of_string limit_raw - with Failure "int_of_string" -> - raise (Invalid_header ("content-length: " ^ limit_raw))) - in - Http_misc.buf_of_inchan ~limit ic - with Fallback -> Http_misc.buf_of_inchan ic) (* read until EOF *) - else (* TODO empty body for methods other than POST, is ok? *) - "" - in - (headers, body)) - in - let query_post_params = - match meth with - | `POST -> - let ct = try List.assoc "content-type" headers with Not_found -> "" in - if ct = "application/x-www-form-urlencoded" then - Http_parser.split_query_params body - else [] - | _ -> [] - in - let params = query_post_params @ query_get_params in (* prefers POST params *) - let _ = debug_dump_request path params in - let (clisockaddr, srvsockaddr) = - (Http_misc.peername_of_in_channel ic, Http_misc.sockname_of_in_channel ic) - in - - object (self) - - inherit - Http_message.message ~body ~headers ~version ~clisockaddr ~srvsockaddr - - val params_tbl = - let tbl = Hashtbl.create (List.length params) in - List.iter (fun (n,v) -> Hashtbl.add tbl n v) params; - tbl - - method meth = meth - method uri = uri_str - method path = path - method param ?(meth: meth option) ?(default: string option) name = - try - (match meth with - | None -> Hashtbl.find params_tbl name - | Some `GET -> List.assoc name query_get_params - | Some `POST -> List.assoc name query_post_params) - with Not_found -> - (match default with - | None -> raise (Param_not_found name) - | Some value -> value) - method paramAll ?meth name = - (match (meth: meth option) with - | None -> List.rev (Hashtbl.find_all params_tbl name) - | Some `GET -> Http_misc.list_assoc_all name query_get_params - | Some `POST -> Http_misc.list_assoc_all name query_post_params) - method params = params - method params_GET = query_get_params - method params_POST = query_post_params - - method private fstLineToString = - let method_string = string_of_method self#meth in - match self#version with - | Some version -> - sprintf "%s %s %s" method_string self#uri (string_of_version version) - | None -> sprintf "%s %s" method_string self#uri - - method authorization: auth_info option = - try - let credentials = - Netencoding.Base64.decode - (Pcre.replace ~rex:basic_auth_RE (self#header "authorization")) - in - debug_print ("HTTP Basic auth credentials: " ^ credentials); - (match Pcre.split ~rex:auth_sep_RE credentials with - | [username; password] -> Some (`Basic (username, password)) - | l -> raise Exit) - with Header_not_found _ | Invalid_argument _ | Exit -> None - - end - diff --git a/helm/DEVEL/ocaml-http/http_request.mli b/helm/DEVEL/ocaml-http/http_request.mli deleted file mode 100644 index 23da0cc9b..000000000 --- a/helm/DEVEL/ocaml-http/http_request.mli +++ /dev/null @@ -1,29 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** Object Oriented representation of HTTP requests *) - -open Http_types;; - - (** OO representation of an HTTP request - @param inchan input channel from which parse an HTTP request *) -class request: in_channel -> Http_types.request - diff --git a/helm/DEVEL/ocaml-http/http_response.ml b/helm/DEVEL/ocaml-http/http_response.ml deleted file mode 100644 index 58308d307..000000000 --- a/helm/DEVEL/ocaml-http/http_response.ml +++ /dev/null @@ -1,118 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -open Http_types;; -open Http_constants;; -open Http_common;; -open Http_daemon;; -open Printf;; - -let status_line_RE = Pcre.regexp "^(HTTP/\\d\\.\\d) (\\d{3}) (.*)$" - -let anyize = function - | Some addr -> addr - | None -> Unix.ADDR_INET (Unix.inet_addr_any, -1) - -class response - (* Warning: keep default values in sync with Http_daemon.respond function *) - ?(body = "") ?(headers = []) ?(version = http_version) - ?clisockaddr ?srvsockaddr (* optional because response have to be easily - buildable in callback functions *) - ?(code = 200) ?status - () - = - - (** if no address were supplied for client and/or server, use a foo address - instead *) - let (clisockaddr, srvsockaddr) = (anyize clisockaddr, anyize srvsockaddr) in - - (* "version code reason_phrase" *) - object (self) - - (* note that response objects can't be created with a None version *) - inherit - Http_message.message - ~body ~headers ~version:(Some version) ~clisockaddr ~srvsockaddr - - val mutable _code = - match status with - | None -> code - | Some (s: Http_types.status) -> code_of_status s - val mutable _reason: string option = None - - method private getRealVersion = - match self#version with - | None -> - failwith ("Http_response.fstLineToString: " ^ - "can't serialize an HTTP response with no HTTP version defined") - | Some v -> string_of_version v - - method code = _code - method setCode c = - ignore (status_of_code c); (* sanity check on c *) - _code <- c - method status = status_of_code _code - method setStatus (s: Http_types.status) = _code <- code_of_status s - method reason = - match _reason with - | None -> Http_misc.reason_phrase_of_code _code - | Some r -> r - method setReason r = _reason <- Some r - method statusLine = - String.concat " " - [self#getRealVersion; string_of_int self#code; self#reason] - method setStatusLine s = - try - let subs = Pcre.extract ~rex:status_line_RE s in - self#setVersion (version_of_string subs.(1)); - self#setCode (int_of_string subs.(2)); - self#setReason subs.(3) - with Not_found -> - raise (Invalid_status_line s) - - method isInformational = is_informational _code - method isSuccess = is_success _code - method isRedirection = is_redirection _code - method isClientError = is_client_error _code - method isServerError = is_server_error _code - method isError = is_error _code - - (* FIXME duplication of code between this and send_basic_headers *) - method addBasicHeaders = - self#addHeader ~name:"Date" ~value:(Http_misc.date_822 ()); - self#addHeader ~name:"Server" ~value:server_string - - method contentType = self#header "Content-Type" - method setContentType t = self#replaceHeader "Content-Type" t - method contentEncoding = self#header "Content-Encoding" - method setContentEncoding e = self#replaceHeader "Content-Encoding" e - method date = self#header "Date" - method setDate d = self#replaceHeader "Date" d - method expires = self#header "Expires" - method setExpires t = self#replaceHeader "Expires" t - method server = self#header "Server" - method setServer s = self#replaceHeader "Server" s - - method private fstLineToString = - sprintf "%s %d %s" self#getRealVersion self#code self#reason - - end - diff --git a/helm/DEVEL/ocaml-http/http_response.mli b/helm/DEVEL/ocaml-http/http_response.mli deleted file mode 100644 index 694eb22c0..000000000 --- a/helm/DEVEL/ocaml-http/http_response.mli +++ /dev/null @@ -1,33 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** Object Oriented representation of HTTP responses *) - -open Http_types;; - - (** OO representation of an HTTP response. *) -class response: - ?body:string -> ?headers:(string * string) list -> ?version: version -> - ?clisockaddr: Unix.sockaddr -> ?srvsockaddr: Unix.sockaddr -> - ?code:int -> ?status:Http_types.status -> - unit -> - Http_types.response - diff --git a/helm/DEVEL/ocaml-http/http_tcp_server.ml b/helm/DEVEL/ocaml-http/http_tcp_server.ml deleted file mode 100644 index cbe01add1..000000000 --- a/helm/DEVEL/ocaml-http/http_tcp_server.ml +++ /dev/null @@ -1,172 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - - - (** raised when a client timeouts *) -exception Timeout - -let backlog = 10 - - (** if timeout is given (Some _) @return a new callback which establish - timeout_callback as callback for signal Sys.sigalrm and register an alarm - (expiring after timeout seconds) before invoking the real callback given. If - timeout is None, callback is returned unchanged. *) -let wrap_callback_w_timeout ~callback ~timeout ~timeout_callback = - match timeout with - | None -> callback - | Some timeout -> (* wrap callback setting an handler for ALRM signal and an - alarm that ring after timeout seconds *) - (fun inchan outchan -> - ignore (Sys.signal Sys.sigalrm (Sys.Signal_handle timeout_callback)); - ignore (Unix.alarm timeout); - callback inchan outchan) - - (* try to close nicely a socket *) -let shutdown_socket suck = - try - Unix.shutdown suck Unix.SHUTDOWN_ALL - with Unix.Unix_error(_, "shutdown", "") -> () - -let nice_unix_accept suck = - try - Unix.accept suck - with e -> (* clean up socket before exit *) - shutdown_socket suck; - raise e - -let init_socket sockaddr = - let suck = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in - (* shutdown socket on SIGTERM *) - ignore (Sys.signal Sys.sigterm - (Sys.Signal_handle - (fun _ -> shutdown_socket suck; exit 17))); - Unix.setsockopt suck Unix.SO_REUSEADDR true; - Unix.bind suck sockaddr; - Unix.listen suck backlog; - suck - -let init_callback callback timeout = - let timeout_callback signo = - if signo = Sys.sigalrm then - raise Timeout - in - wrap_callback_w_timeout ~callback ~timeout ~timeout_callback - - (** try to close an outchannel connected to a socket, ignore Sys_error since - * this probably means that socket is already closed (e.g. on sigpipe) *) -let try_close_out ch = try close_out ch with Sys_error _ -> () - - (** like Unix.establish_server, but shutdown sockets when receiving SIGTERM - and before exiting for an uncaught exception *) -let my_establish_server server_fun sockaddr = - let suck = init_socket sockaddr in - while true do - let (s, caller) = nice_unix_accept suck in - (** "double fork" trick, see {!Unix.establish_server} implementation *) - match Unix.fork() with - | 0 -> (* parent *) - (try - if Unix.fork () <> 0 then - exit 0; (* The son exits, the grandson works *) - let inchan = Unix.in_channel_of_descr s in - let outchan = Unix.out_channel_of_descr s in - server_fun inchan outchan; - try_close_out outchan; (* closes also inchan: socket is the same *) - exit 0 - with e -> - shutdown_socket suck; (* clean up socket before exit *) - raise e) - | child when (child > 0) -> (* child *) - Unix.close s; - ignore (Unix.waitpid [] child) (* Reclaim the son *) - | _ (* < 0 *) -> - failwith "Can't fork" - done - - (** tcp_server which forks a new process for each request *) -let fork ~sockaddr ~timeout callback = - let timeout_callback signo = - if signo = Sys.sigalrm then - exit 2 - in - my_establish_server - (wrap_callback_w_timeout ~callback ~timeout ~timeout_callback) - sockaddr - - (** tcp_server which doesn't fork, requests are server sequentially and in the - same address space of the calling process *) -let simple ~sockaddr ~timeout callback = - let suck = init_socket sockaddr in - let callback = init_callback callback timeout in - try - while true do - let (client, _) = Unix.accept suck in - (* client is now connected *) - let (inchan, outchan) = - (Unix.in_channel_of_descr client, Unix.out_channel_of_descr client) - in - (try - callback inchan outchan; - ignore (Unix.alarm 0) (* reset alarm *) - with Timeout -> ()); - try_close_out outchan (* this close also inchan: socket is the same *) - done - with e -> (* clean up socket before exit *) - shutdown_socket suck; - raise e - - (** tcp_server which creates a new thread for each request to be served *) -let thread ~sockaddr ~timeout callback = - let suck = init_socket sockaddr in - let callback = init_callback callback timeout in - let callback (i, o) = - (try - callback i o - with - | Timeout -> () - | e -> - try_close_out o; - raise e); - try_close_out o - in - while true do - let (client, _) = nice_unix_accept suck in - (* client is now connected *) - let (inchan, outchan) = - (Unix.in_channel_of_descr client, Unix.out_channel_of_descr client) - in - Http_threaded_tcp_server.serve callback (inchan, outchan) - done - - (** @param server an Http_types.tcp_server - * @return an Http_types.tcp_server which takes care of ignoring SIGPIPE during - * server execution and restoring previous handler when (if ever) the server - * returns *) -let handle_sigpipe server = - fun ~sockaddr ~timeout callback -> - let old_sigpipe_behavior = Sys.signal Sys.sigpipe Sys.Signal_ignore in - server ~sockaddr ~timeout callback; - ignore (Sys.signal Sys.sigpipe old_sigpipe_behavior) - -let simple = handle_sigpipe simple -let thread = handle_sigpipe thread -let fork = handle_sigpipe fork - diff --git a/helm/DEVEL/ocaml-http/http_tcp_server.mli b/helm/DEVEL/ocaml-http/http_tcp_server.mli deleted file mode 100644 index e94f84f95..000000000 --- a/helm/DEVEL/ocaml-http/http_tcp_server.mli +++ /dev/null @@ -1,39 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** TCP servers used as low-levels for HTTP daemons *) - -(** {2 servers} *) - - (** single process server *) -val simple: Http_types.tcp_server - - (** multi threaded server *) -val thread: Http_types.tcp_server - - (** multi process server *) -val fork: Http_types.tcp_server - -(** {2 low level functions} *) - - (** initialize a passive socket listening on given Unix.sockaddr *) -val init_socket: Unix.sockaddr -> Unix.file_descr - diff --git a/helm/DEVEL/ocaml-http/http_threaded_tcp_server.mli b/helm/DEVEL/ocaml-http/http_threaded_tcp_server.mli deleted file mode 100644 index 6504f7e01..000000000 --- a/helm/DEVEL/ocaml-http/http_threaded_tcp_server.mli +++ /dev/null @@ -1,26 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** Multithreaded part of Http_tcp_server *) - - (** serve an HTTP request for a multi threaded TCP server *) -val serve : ('a -> 'b) -> 'a -> unit - diff --git a/helm/DEVEL/ocaml-http/http_types.ml b/helm/DEVEL/ocaml-http/http_types.ml deleted file mode 100644 index 5c88b212e..000000000 --- a/helm/DEVEL/ocaml-http/http_types.ml +++ /dev/null @@ -1,219 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** Type definitions *) - -type version = [ `HTTP_1_0 | `HTTP_1_1 ] -type meth = [ `GET | `POST ] -type daemon_mode = [ `Single | `Fork | `Thread ] - -type tcp_server = - sockaddr:Unix.sockaddr -> timeout:int option -> - (in_channel -> out_channel -> unit) -> - unit - -type auth_info = - [ `Basic of string * string (* username, password *) - ] - -type informational_substatus = - [ `Continue - | `Switching_protocols - ] -type success_substatus = - [ `OK - | `Created - | `Accepted - | `Non_authoritative_information - | `No_content - | `Reset_content - | `Partial_content - ] -type redirection_substatus = - [ `Multiple_choices - | `Moved_permanently - | `Found - | `See_other - | `Not_modified - | `Use_proxy - | `Temporary_redirect - ] -type client_error_substatus = - [ `Bad_request - | `Unauthorized - | `Payment_required - | `Forbidden - | `Not_found - | `Method_not_allowed - | `Not_acceptable - | `Proxy_authentication_required - | `Request_time_out - | `Conflict - | `Gone - | `Length_required - | `Precondition_failed - | `Request_entity_too_large - | `Request_URI_too_large - | `Unsupported_media_type - | `Requested_range_not_satisfiable - | `Expectation_failed - ] -type server_error_substatus = - [ `Internal_server_error - | `Not_implemented - | `Bad_gateway - | `Service_unavailable - | `Gateway_time_out - | `HTTP_version_not_supported - ] -type informational_status = [ `Informational of informational_substatus ] -type success_status = [ `Success of success_substatus ] -type redirection_status = [ `Redirection of redirection_substatus ] -type client_error_status = [ `Client_error of client_error_substatus ] -type server_error_status = [ `Server_error of server_error_substatus ] -type error_status = - [ client_error_status - | server_error_status - ] -type status = - [ informational_status - | success_status - | redirection_status - | client_error_status - | server_error_status - ] - -type status_code = [ `Code of int | `Status of status ] - -type file_source = - | FileSrc of string - | InChanSrc of in_channel - -exception Invalid_header of string -exception Invalid_header_name of string -exception Invalid_header_value of string -exception Invalid_HTTP_version of string -exception Invalid_HTTP_method of string -exception Invalid_code of int -exception Malformed_URL of string -exception Malformed_query of string -exception Malformed_query_part of string * string -exception Malformed_request_URI of string -exception Malformed_request of string -exception Malformed_response of string -exception Param_not_found of string -exception Invalid_status_line of string -exception Header_not_found of string -exception Quit -exception Unauthorized of string - -class type message = object - method version: version option - method setVersion: version -> unit - method body: string - method setBody: string -> unit - method bodyBuf: Buffer.t - method setBodyBuf: Buffer.t -> unit - method addBody: string -> unit - method addBodyBuf: Buffer.t -> unit - method addHeader: name:string -> value:string -> unit - method addHeaders: (string * string) list -> unit - method replaceHeader: name:string -> value:string -> unit - method replaceHeaders: (string * string) list -> unit - method removeHeader: name:string -> unit - method hasHeader: name:string -> bool - method header: name:string -> string - method headers: (string * string) list - method clientSockaddr: Unix.sockaddr - method clientAddr: string - method clientPort: int - method serverSockaddr: Unix.sockaddr - method serverAddr: string - method serverPort: int - method toString: string - method serialize: out_channel -> unit - end - -class type request = object - inherit message - method meth: meth - method uri: string - method path: string - method param: ?meth:meth -> ?default:string -> string -> string - method paramAll: ?meth:meth -> string -> string list - method params: (string * string) list - method params_GET: (string * string) list - method params_POST: (string * string) list - method authorization: auth_info option - end - -class type response = object - inherit message - method code: int - method setCode: int -> unit - method status: status - method setStatus: status -> unit - method reason: string - method setReason: string -> unit - method statusLine: string - method setStatusLine: string -> unit - method isInformational: bool - method isSuccess: bool - method isRedirection: bool - method isClientError: bool - method isServerError: bool - method isError: bool - method addBasicHeaders: unit - method contentType: string - method setContentType: string -> unit - method contentEncoding: string - method setContentEncoding: string -> unit - method date: string - method setDate: string -> unit - method expires: string - method setExpires: string -> unit - method server: string - method setServer: string -> unit - end - -class type connection = - object - method getRequest: request option - method respond_with: response -> unit - method close: unit - end -class type daemon = - object - method accept: connection - method getRequest: request * connection - end - -type daemon_spec = { - address: string; - auth: (string * auth_info) option; - callback: request -> out_channel -> unit; - mode: daemon_mode; - port: int; - root_dir: string option; - exn_handler: (exn -> out_channel -> unit) option; - timeout: int option; -} - diff --git a/helm/DEVEL/ocaml-http/http_types.mli b/helm/DEVEL/ocaml-http/http_types.mli deleted file mode 100644 index 8d5832655..000000000 --- a/helm/DEVEL/ocaml-http/http_types.mli +++ /dev/null @@ -1,451 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** Type definitions *) - - (** HTTP version, actually only 1.0 and 1.1 are supported. Note that - 'supported' here means only 'accepted inside a HTTP request line', no - different behaviours are actually implemented depending on HTTP version *) -type version = - [ `HTTP_1_0 - | `HTTP_1_1 - ] - - (** HTTP method, actually only GET and POST methods are supported *) -type meth = - [ `GET - | `POST - ] - - (** Daemon behaviour wrt request handling. `Single mode use a single process - to handle all requests, no request is served until a previous one has been - fully served. `Fork mode fork a new process for each request, the new process - will execute the callback function and then exit. `Thread mode create a new - thread for each request, the new thread will execute the callback function and - then exit, threads can communicate using standard OCaml Thread library. *) -type daemon_mode = [ `Single | `Fork | `Thread ] - - (** A TCP server is a function taking an address on which bind and listen for - connections, an optional timeout after which abort client connections and a - callback function which in turn takes an input and an output channel as - arguments. After receiving this argument a TCP server sits and waits for - connection, on each connection it apply the callback function to channels - connected to client. *) -type tcp_server = - sockaddr:Unix.sockaddr -> timeout:int option -> - (in_channel -> out_channel -> unit) -> - unit - - (** authentication information *) -type auth_info = - [ `Basic of string * string (* username, password *) -(* | `Digest of ... (* TODO digest authentication *) *) - ] - - (** @see "RFC2616" informational HTTP status *) -type informational_substatus = - [ `Continue - | `Switching_protocols - ] - - (** @see "RFC2616" success HTTP status *) -type success_substatus = - [ `OK - | `Created - | `Accepted - | `Non_authoritative_information - | `No_content - | `Reset_content - | `Partial_content - ] - - (** @see "RFC2616" redirection HTTP status *) -type redirection_substatus = - [ `Multiple_choices - | `Moved_permanently - | `Found - | `See_other - | `Not_modified - | `Use_proxy - | `Temporary_redirect - ] - - (** @see "RFC2616" client error HTTP status *) -type client_error_substatus = - [ `Bad_request - | `Unauthorized - | `Payment_required - | `Forbidden - | `Not_found - | `Method_not_allowed - | `Not_acceptable - | `Proxy_authentication_required - | `Request_time_out - | `Conflict - | `Gone - | `Length_required - | `Precondition_failed - | `Request_entity_too_large - | `Request_URI_too_large - | `Unsupported_media_type - | `Requested_range_not_satisfiable - | `Expectation_failed - ] - - (** @see "RFC2616" server error HTTP status *) -type server_error_substatus = - [ `Internal_server_error - | `Not_implemented - | `Bad_gateway - | `Service_unavailable - | `Gateway_time_out - | `HTTP_version_not_supported - ] - -type informational_status = [ `Informational of informational_substatus ] -type success_status = [ `Success of success_substatus ] -type redirection_status = [ `Redirection of redirection_substatus ] -type client_error_status = [ `Client_error of client_error_substatus ] -type server_error_status = [ `Server_error of server_error_substatus ] - -type error_status = - [ client_error_status - | server_error_status - ] - - (** HTTP status *) -type status = - [ informational_status - | success_status - | redirection_status - | client_error_status - | server_error_status - ] - -type status_code = [ `Code of int | `Status of status ] - - (** File sources *) -type file_source = - | FileSrc of string (** filename *) - | InChanSrc of in_channel (** input channel *) - - (** {2 Exceptions} *) - - (** invalid header encountered *) -exception Invalid_header of string - - (** invalid header name encountered *) -exception Invalid_header_name of string - - (** invalid header value encountered *) -exception Invalid_header_value of string - - (** unsupported or invalid HTTP version encountered *) -exception Invalid_HTTP_version of string - - (** unsupported or invalid HTTP method encountered *) -exception Invalid_HTTP_method of string - - (** invalid HTTP status code integer representation encountered *) -exception Invalid_code of int - - (** invalid URL encountered *) -exception Malformed_URL of string - - (** invalid query string encountered *) -exception Malformed_query of string - - (** invalid query string part encountered, arguments are parameter name and - parameter value *) -exception Malformed_query_part of string * string - - (** invalid request URI encountered *) -exception Malformed_request_URI of string - - (** malformed request received *) -exception Malformed_request of string - - (** malformed response received, argument is response's first line *) -exception Malformed_response of string - - (** a parameter you were looking for was not found *) -exception Param_not_found of string - - (** invalid HTTP status line encountered *) -exception Invalid_status_line of string - - (** an header you were looking for was not found *) -exception Header_not_found of string - - (** raisable by callbacks to make main daemon quit, this is the only - * 'clean' way to make start functions return *) -exception Quit - - (** raisable by callbacks to force a 401 (unauthorized) HTTP answer. - * This exception should be raised _before_ sending any data over given out - * channel. - * @param realm authentication realm (usually needed to prompt user) *) -exception Unauthorized of string - - (** {2 OO representation of HTTP messages} *) - - (** HTTP generic messages. See {! Http_message.message} *) -class type message = object - - method version: version option - method setVersion: version -> unit - - method body: string - method setBody: string -> unit - method bodyBuf: Buffer.t - method setBodyBuf: Buffer.t -> unit - method addBody: string -> unit - method addBodyBuf: Buffer.t -> unit - - method addHeader: name:string -> value:string -> unit - method addHeaders: (string * string) list -> unit - method replaceHeader: name:string -> value:string -> unit - method replaceHeaders: (string * string) list -> unit - method removeHeader: name:string -> unit - method hasHeader: name:string -> bool - method header: name:string -> string - method headers: (string * string) list - - method clientSockaddr: Unix.sockaddr - method clientAddr: string - method clientPort: int - - method serverSockaddr: Unix.sockaddr - method serverAddr: string - method serverPort: int - - method toString: string - method serialize: out_channel -> unit - - end - - (** HTTP requests *) -class type request = object - - (** an HTTP request is a flavour of HTTP message *) - inherit message - - (** @return request method *) - method meth: meth - - (** @return requested URI (including query string, fragment, ...) *) - method uri: string - - (** @return requested path *) - method path: string - - (** lookup a given parameter - @param meth if given restrict the lookup area (e.g. if meth = POST than - only parameters received via POST are searched), if not given both GET - and POST parameter are searched in an unspecified order (actually the - implementation prefers POST parameters but this is not granted, you've - been warned) - @param default if provided, this value will be returned in case no - parameter of that name is available instead of raising Param_not_found - @param name name of the parameter to lookup - @return value associated to parameter name - @raise Param_not_found if parameter name was not found *) - method param: ?meth:meth -> ?default:string -> string -> string - - (** like param above but return a list of values associated to given - parameter (a parameter could be defined indeed more than once: passed more - than once in a query string or passed both insider the url (the GET way) - and inside message body (the POST way)) *) - method paramAll: ?meth:meth -> string -> string list - - (** @return the list of all received parameters *) - method params: (string * string) list - - (** @return the list of all parameters received via GET *) - method params_GET: (string * string) list - - (** @return the list of all parameter received via POST *) - method params_POST: (string * string) list - - (** @return authorization information, if given by the client *) - method authorization: auth_info option - - end - - (** HTTP responses *) -class type response = object - - inherit message - - (** @return response code *) - method code: int - - (** set response code *) - method setCode: int -> unit - - (** @return response status *) - method status: status - - (** set response status *) - method setStatus: status -> unit - - (** @return reason string *) - method reason: string - - (** set reason string *) - method setReason: string -> unit - - (** @return status line *) - method statusLine: string - - (** set status line - @raise Invalid_status_line if an invalid HTTP status line was passed *) - method setStatusLine: string -> unit - - (** response is an informational one *) - method isInformational: bool - - (** response is a success one *) - method isSuccess: bool - - (** response is a redirection one *) - method isRedirection: bool - - (** response is a client error one *) - method isClientError: bool - - (** response is a server error one *) - method isServerError: bool - - (** response is either a client error or a server error response *) - method isError: bool - - (** add basic headers to response, see {!Http_daemon.send_basic_headers} - *) - method addBasicHeaders: unit - - (** facilities to access some frequently used headers *) - - (** @return Content-Type header value *) - method contentType: string - - (** set Content-Type header value *) - method setContentType: string -> unit - - (** @return Content-Encoding header value *) - method contentEncoding: string - - (** set Content-Encoding header value *) - method setContentEncoding: string -> unit - - (** @return Date header value *) - method date: string - - (** set Date header value *) - method setDate: string -> unit - - (** @return Expires header value *) - method expires: string - - (** set Expires header value *) - method setExpires: string -> unit - - (** @return Server header value *) - method server: string - - (** set Server header value *) - method setServer: string -> unit - - end - - (** {2 Daemon specification} *) - - (** daemon specification, describe the behaviour of an HTTP daemon. - * - * The default daemon specification is {!Http_daemon.default_spec} - *) -type daemon_spec = { - address: string; - (** @param address adress on which daemon will be listening, can be both a - * numeric address (e.g. "127.0.0.1") and an hostname (e.g. "localhost") *) - auth: (string * auth_info) option; - (** authentication requirements (currently only basic authentication is - * supported). If set to None no authentication is required. If set to Some - * ("realm", `Basic ("foo", "bar")), only clients authenticated with baisc - * authentication, for realm "realm", providing username "foo" and password - * "bar" are accepted; others are rejected with a 401 response code *) - callback: request -> out_channel -> unit; - (** function which will be called each time a correct HTTP request will be - * received. 1st callback argument is an Http_types.request object - * corresponding to the request received; 2nd argument is an output channel - * corresponding to the socket connected to the client *) - mode: daemon_mode; - (** requests handling mode, it can have three different values: - * - `Single -> all requests will be handled by the same process, - * - `Fork -> each request will be handled by a child process, - * - `Thread -> each request will be handled by a (new) thread *) - port: int; (** TCP port on which the daemon will be listening *) - root_dir: string option; - (** directory to which ocaml http will chdir before starting handling - * requests; if None, no chdir will be performed (i.e. stay in the current - * working directory) *) - exn_handler: (exn -> out_channel -> unit) option; - (** what to do when executing callback raises an exception. If None, the - * exception will be re-raised: in `Fork/`Thread mode the current - * process/thread will be terminated. in `Single mode the exception is - * ignored and the client socket closed. If Some callback, the callback will - * be executed before acting as per None; the callback is meant to perform - * some clean up actions, like releasing global mutexes in `Thread mode *) - timeout: int option; - (** timeout in seconds after which an incoming HTTP request will be - * terminated closing the corresponding TCP connection; None disable the - * timeout *) -} - - (** {2 OO representation of other HTTP entities} *) - - (** an HTTP connection from a client to a server *) -class type connection = - object - (** @return next request object, may block if client hasn't submitted any - request yet, may be None if client request was ill-formed *) - method getRequest: request option - - (** respond to client sending it a response *) - method respond_with: response -> unit - - (** close connection to client. Warning: this object can't be used any - longer after this method has been called *) - method close: unit - end - - (** an HTTP daemon *) -class type daemon = - object - (** @return a connection to a client, may block if no client has connected - yet *) - method accept: connection - - (** shortcut method, blocks until a client has submit a request and - return a pair request * connection *) - method getRequest: request * connection - end - diff --git a/helm/DEVEL/ocaml-http/http_user_agent.ml b/helm/DEVEL/ocaml-http/http_user_agent.ml deleted file mode 100644 index f5317d685..000000000 --- a/helm/DEVEL/ocaml-http/http_user_agent.ml +++ /dev/null @@ -1,101 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -open Printf - -open Http_common - -exception Http_error of (int * string) (* code, body *) - -let http_scheme_RE = Pcre.regexp ~flags:[`CASELESS] "^http://" -let url_RE = Pcre.regexp "^([\\w.-]+)(:(\\d+))?(/.*)?$" - -let tcp_bufsiz = 4096 (* for TCP I/O *) - -let parse_url url = - try - let subs = - Pcre.extract ~rex:url_RE (Pcre.replace ~rex:http_scheme_RE url) - in - (subs.(1), - (if subs.(2) = "" then 80 else int_of_string subs.(3)), - (if subs.(4) = "" then "/" else subs.(4))) - with exc -> - failwith - (sprintf "Can't parse url: %s (exception: %s)" - url (Printexc.to_string exc)) - -let init_socket addr port = - let inet_addr = (Unix.gethostbyname addr).Unix.h_addr_list.(0) in - let sockaddr = Unix.ADDR_INET (inet_addr, port) in - let suck = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in - Unix.connect suck sockaddr; - let outchan = Unix.out_channel_of_descr suck in - let inchan = Unix.in_channel_of_descr suck in - (inchan, outchan) - -let submit_request kind url = - let (address, port, path) = parse_url url in - let (inchan, outchan) = init_socket address port in - let req_string = match kind with `GET -> "GET" | `HEAD -> "HEAD" in - output_string outchan (sprintf "%s %s HTTP/1.0\r\n" req_string path); - output_string outchan (sprintf "Host: %s\r\n\r\n" address); - flush outchan; - (inchan, outchan) - -let head url = - let (inchan, outchan) = submit_request `HEAD url in - let (_, status) = Http_parser.parse_response_fst_line inchan in - (match code_of_status status with - | 200 -> () - | code -> raise (Http_error (code, ""))); - let buf = Http_misc.buf_of_inchan inchan in - close_in inchan; (* close also outchan, same fd *) - Buffer.contents buf - -let get_iter ?(head_callback = fun _ _ -> ()) callback url = - let (inchan, outchan) = submit_request `GET url in - let buf = String.create tcp_bufsiz in - let (_, status) = Http_parser.parse_response_fst_line inchan in - (match code_of_status status with - | 200 -> () - | code -> raise (Http_error (code, ""))); - let headers = Http_parser.parse_headers inchan in - head_callback status headers; - (try - while true do - match input inchan buf 0 tcp_bufsiz with - | 0 -> raise End_of_file - | bytes when bytes = tcp_bufsiz -> (* buffer full, no need to slice it *) - callback buf - | bytes when bytes < tcp_bufsiz -> (* buffer not full, slice it *) - callback (String.sub buf 0 bytes) - | _ -> (* ( bytes < 0 ) || ( bytes > tcp_bufsiz ) *) - assert false - done - with End_of_file -> ()); - close_in inchan (* close also outchan, same fd *) - -let get ?head_callback url = - let buf = Buffer.create 10240 in - get_iter ?head_callback (Buffer.add_string buf) url; - Buffer.contents buf - diff --git a/helm/DEVEL/ocaml-http/http_user_agent.mli b/helm/DEVEL/ocaml-http/http_user_agent.mli deleted file mode 100644 index 79f2d696e..000000000 --- a/helm/DEVEL/ocaml-http/http_user_agent.mli +++ /dev/null @@ -1,53 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002-2005> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Library General Public License as - published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA -*) - -(** Minimal implementation of an HTTP 1.0/1.1 client. Interface is similar to - * Gerd Stoplmann's Http_client module. Implementation is simpler and doesn't - * handle HTTP redirection, proxies, ecc. The only reason for the existence of - * this module is for performances and incremental elaboration of response's - * bodies *) - -open Http_types - -exception Http_error of (int * string) (* code, body *) - - (** @param head_callback optional calllback invoked on response's status and - * headers. If not provided no callback will be invoked - * @param url an HTTP url - * @return HTTP response's body - * @raise Http_error when response code <> 200 *) -val get: - ?head_callback:(status -> (string * string) list -> unit) -> - string -> - string - - (** as above but iter callback function on HTTP response's body instead of - * returning it as a string *) -val get_iter: - ?head_callback:(status -> (string * string) list -> unit) -> - (string -> unit) -> string -> - unit - - (** @param url an HTTP url - * @return HTTP HEAD raw response - * @raise Http_error when response code <> 200 *) -val head: string -> string - diff --git a/helm/DEVEL/ocaml-http/mt/.cvsignore b/helm/DEVEL/ocaml-http/mt/.cvsignore deleted file mode 100644 index 977cc04b5..000000000 --- a/helm/DEVEL/ocaml-http/mt/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -*.cmi -*.cmo -*.cmx -*.cma -*.cmxa -*.mli diff --git a/helm/DEVEL/ocaml-http/mt/http_threaded_tcp_server.ml b/helm/DEVEL/ocaml-http/mt/http_threaded_tcp_server.ml deleted file mode 100644 index acdef6105..000000000 --- a/helm/DEVEL/ocaml-http/mt/http_threaded_tcp_server.ml +++ /dev/null @@ -1,23 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -let serve callback arg = ignore (Thread.create callback arg) - diff --git a/helm/DEVEL/ocaml-http/non_mt/.cvsignore b/helm/DEVEL/ocaml-http/non_mt/.cvsignore deleted file mode 100644 index 977cc04b5..000000000 --- a/helm/DEVEL/ocaml-http/non_mt/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -*.cmi -*.cmo -*.cmx -*.cma -*.cmxa -*.mli diff --git a/helm/DEVEL/ocaml-http/non_mt/http_threaded_tcp_server.ml b/helm/DEVEL/ocaml-http/non_mt/http_threaded_tcp_server.ml deleted file mode 100644 index 9c92d7112..000000000 --- a/helm/DEVEL/ocaml-http/non_mt/http_threaded_tcp_server.ml +++ /dev/null @@ -1,26 +0,0 @@ - -(* - OCaml HTTP - do it yourself (fully OCaml) HTTP daemon - - Copyright (C) <2002> Stefano Zacchiroli - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -let serve _ _ = - failwith - ("Threaded server not supported by the non threaded version " ^ - "of ocaml-http, please link against http_mt.cm{,x}a") - diff --git a/helm/DEVEL/profile-manager/Makefile b/helm/DEVEL/profile-manager/Makefile deleted file mode 100644 index 556644338..000000000 --- a/helm/DEVEL/profile-manager/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -BIN_DIR = /usr/local/bin -REQUIRES = http -PREDICATES = -OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)" -pp camlp4o -OCAMLFIND = ocamlfind -OCAMLC = $(OCAMLFIND) ocamlc -thread $(OCAMLOPTIONS) -OCAMLOPT = $(OCAMLFIND) ocamlopt -thread $(OCAMLOPTIONS) -OCAMLDEP = ocamldep -pp camlp4o - -LIBRARIES = $(shell $(OCAMLFIND) query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES)) -LIBRARIES_OPT = $(shell $(OCAMLFIND) query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES)) - -OBJS = response.cmo profile.cmo profile_manager_env.cmo profile_manager.cmo - -profile-manager: $(OBJS) $(LIBRARIES) - $(OCAMLC) -linkpkg -o $@ $(OBJS) - -profile-manager.opt: $(OBJS:.cmo=.cmx) $(LIBRARIES_OPT) - $(OCAMLOPT) -linkpkg -o $@ $(OBJS:.cmo=.cmx) - -.SUFFIXES: .ml .mli .cmo .cmi .cmx -.ml.cmo: - $(OCAMLC) -c $< -.mli.cmi: - $(OCAMLC) -c $< -.ml.cmx: - $(OCAMLOPT) -c $< - -$(OBJS): $(LIBRARIES) -$(OBJS:.cmo=.cmx)): $(LIBRARIES_OPT) - -clean: - rm -f *.cm[iox] *.o rdfly rdfly.opt - -.PHONY: install uninstall clean - diff --git a/helm/DEVEL/profile-manager/control.html b/helm/DEVEL/profile-manager/control.html deleted file mode 100644 index 2feb02fe9..000000000 --- a/helm/DEVEL/profile-manager/control.html +++ /dev/null @@ -1,240 +0,0 @@ - - - -Profile Manager Control Panel - - - - - - - - - - - -
Profile Manager Control Panel
- -
- -
-This is a control panel for the profile manager. You can control a -local or remote profile manager by filling the appropriate field below -and sending the desired commands. Any command issued to the profile -manager results into an XML response. Note that in order to use this -page you must have JavaScript enabled. If you have troubles, -please send an email to the author: lpadovan at cs dot unibo dot it. -
- -

-

-WARNING: the information stored in a profile, -including the password, IS NOT encrypted in the profile nor while it -is travelling from your computer to the profile manager. DO NOT USE -THE PROFILE MANAGER FOR STORING SENSIBLE INFORMATION LIKE PASSWORDS -FOR SECURE ACCOUNTS OR ANY OTHER PERSONAL DATA.
-

- -
-
- - - - - - - - - - - - - - - - - - - - - - - -
-
- Profile Manager URL - - -
-
-
- List the profiles currently stored in the Profile Manager
- -
-
-
- Create a new profile
- - - -
Profile ID: (leave blank if you want an ID to be assigned automatically)
Password: (optional)
- -
-
-
- Delete an existing profile
- - - -
Profile ID:
Password: (optional)
- -
-
-
- Retrieve an existing profile
- - - -
Profile ID:
Password: (optional)
- -
-
-
- Set the value for a field in an existing profile
- - - - - -
Profile ID:
Password: (optional)
Field:
Value: (optional, if blank will remove the field from the profile)
- -
-
-
- Set/Change the password for a profile
- - - - -
Profile ID:
Old password: (optional)
New password: (optional)
- -
-
-
- Set the access capabilities for a profile
- - - - - - -
Profile ID:
Password: (optional)
Read access: - -
Write access: - -
Profile access: - -
- -
-
-
- - - - - diff --git a/helm/DEVEL/profile-manager/index.html b/helm/DEVEL/profile-manager/index.html deleted file mode 100644 index caeebcf24..000000000 --- a/helm/DEVEL/profile-manager/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/helm/DEVEL/profile-manager/profile-manager.xsl b/helm/DEVEL/profile-manager/profile-manager.xsl deleted file mode 100644 index e32d58739..000000000 --- a/helm/DEVEL/profile-manager/profile-manager.xsl +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/helm/DEVEL/profile-manager/profile.ml b/helm/DEVEL/profile-manager/profile.ml deleted file mode 100644 index 9c19b3c9d..000000000 --- a/helm/DEVEL/profile-manager/profile.ml +++ /dev/null @@ -1,119 +0,0 @@ - -exception Permission_denied -exception Invalid_access of string - -type access_t = - Allowed - | Denied - | Password - -let access_of_string old = - function - None -> old - | Some "allowed" -> Allowed - | Some "denied" -> Denied - | Some "password" -> Password - | Some s -> raise (Invalid_access s) - -let string_of_access = - function - Allowed -> "allowed" - | Denied -> "denied" - | Password -> "password" - -type t = - { id : string; - mutable password : string; - mutable read_access : access_t; - mutable write_access : access_t; - mutable profile_access : access_t; - data : (string, string) Hashtbl.t; - } - -let serialize profile with_data = - let serialize_data data = - let sl = ref [] in - Hashtbl.iter - (fun field value -> - sl := (" " ^ (Response.quote value) ^ "\n")::!sl) - data ; - List.fold_left (^) "" !sl - in - "\n" ^ (if with_data then serialize_data profile.data else "") ^ "" - -let create key pwd = - let access, pwd' = - match pwd with - Some s -> Password, s - | None -> Allowed, "" - in - let profile = - { id = key; - password = pwd'; - read_access = access; - write_access = access; - profile_access = access; - data = Hashtbl.create 11 - } - in - profile - -let test_read_access profile pwd = - match pwd, profile.read_access with - Some s, Password when s = profile.password -> () - | None, Password when profile.password = "" -> () - | _, Allowed -> () - | _ -> raise Permission_denied - -let test_write_access profile pwd = - match pwd, profile.write_access with - Some s, Password when s = profile.password -> () - | None, Password when profile.password = "" -> () - | _, Allowed -> () - | _ -> raise Permission_denied - -let test_profile_access profile pwd = - match pwd, profile.profile_access with - Some s, Password when s = profile.password -> () - | None, Password when profile.password = "" -> () - | _, Allowed -> () - | _ -> raise Permission_denied - -let get profile pwd = - test_read_access profile pwd ; - serialize profile true - -let set profile field value pwd = - test_write_access profile pwd ; - begin - match value with - Some value' -> Hashtbl.replace profile.data field value' - | None -> Hashtbl.remove profile.data field - end ; - Response.ok () - -let del profile pwd = - test_profile_access profile pwd ; - Response.ok () - -let set_password profile new_pwd pwd = - test_profile_access profile pwd ; - let new_pwd' = - match new_pwd with - Some s -> s - | None -> "" - in - prerr_endline ("old " ^ profile.password ^ " new " ^ new_pwd') ; - profile.password <- new_pwd' ; - Response.ok () - -let set_access profile read_access write_access profile_access pwd = - test_profile_access profile pwd ; - profile.read_access <- access_of_string profile.read_access read_access ; - profile.write_access <- access_of_string profile.write_access write_access ; - profile.profile_access <- access_of_string profile.profile_access profile_access ; - Response.ok () diff --git a/helm/DEVEL/profile-manager/profile_manager.ml b/helm/DEVEL/profile-manager/profile_manager.ml deleted file mode 100644 index 1c61e6a3f..000000000 --- a/helm/DEVEL/profile-manager/profile_manager.ml +++ /dev/null @@ -1,177 +0,0 @@ -(* - * Copyright (C) 2003: - * Stefano Zacchiroli - * for the HELM Team http://helm.cs.unibo.it/ - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -exception Impossible - -let (profile_db : (string, Profile.t) Hashtbl.t) = - try - let ch = open_in Profile_manager_env.profile_db_path in - input_value ch - with - _ -> Hashtbl.create 211 - -let get_param_opt (req : Http_types.request) p = - try - match req#param p with - "" -> None - | s -> Some s - with - Http_types.Param_not_found _ -> None - -let new_key () = - let hex_of_nibble n = - if n >= 0 && n < 10 then - string_of_int n - else if n >= 10 && n < 16 then - String.make 1 (Char.chr (n - 10 + (Char.code 'A'))) - else - raise Impossible - in - let rec aux s = - function - 0 -> s - | n -> aux ((hex_of_nibble (Random.int 16)) ^ s) (n - 1) - in - aux "" 4 - -let new_unique_key = - let rec aux () = - let key = new_key () in - if Hashtbl.mem profile_db key then - aux () - else - key - in - aux - -let list_profiles () = - let pl = ref [] in - Hashtbl.iter - (fun _ profile -> pl := (Profile.serialize profile false) :: !pl) - profile_db ; - "" ^ (List.fold_left (^) "" !pl) ^ "" - -let get_profile id pwd = - let profile = Hashtbl.find profile_db id in - Profile.get profile pwd - -let new_profile id pwd = - match id with - Some id' when Hashtbl.mem profile_db id' -> get_profile id' pwd - | Some id' -> - let profile = Profile.create id' pwd in - Hashtbl.add profile_db profile.Profile.id profile ; - Profile.serialize profile true - | None -> - let profile = Profile.create (new_unique_key ()) None in - Hashtbl.add profile_db profile.Profile.id profile ; - Profile.serialize profile true - -let set_profile id field value pwd = - let profile = Hashtbl.find profile_db id in - Profile.set profile field value pwd - -let del_profile id pwd = - let profile = Hashtbl.find profile_db id in - let res = Profile.del profile pwd in - Hashtbl.remove profile_db id ; - res - -let set_password id new_pwd pwd = - let profile = Hashtbl.find profile_db id in - Profile.set_password profile new_pwd pwd - -let set_access id read_access write_access profile_access pwd = - let profile = Hashtbl.find profile_db id in - Profile.set_access profile read_access write_access profile_access pwd - -let callback (req : Http_types.request) outchan = - let res = - try - prerr_endline ("Connection from " ^ req#clientAddr) ; - prerr_endline ("Received request: " ^ req#path) ; - begin - match req#path with - "/list" -> list_profiles () - | "/get" -> - let id = req#param "id" - and pwd = get_param_opt req "password" in - get_profile id pwd - | "/set" -> - let id = req#param "id" - and field = req#param "field" - and value = get_param_opt req "value" - and pwd = get_param_opt req "password" in - set_profile id field value pwd - | "/del" -> - let id = req#param "id" - and pwd = get_param_opt req "password" in - del_profile id pwd - | "/new" -> - let id = get_param_opt req "id" - and pwd = get_param_opt req "password" in - new_profile id pwd - | "/password" -> - let id = req#param "id" - and old_pwd = get_param_opt req "old_password" - and new_pwd = get_param_opt req "new_password" in - set_password id new_pwd old_pwd - | "/access" -> - let id = req#param "id" - and pwd = get_param_opt req "password" - and read_access = get_param_opt req "read" - and write_access = get_param_opt req "write" - and profile_access = get_param_opt req "profile" in - set_access id read_access write_access profile_access pwd - | s -> Response.error ("unrecognized command: " ^ s) - end - with - Not_found -> Response.error "unknown profile" - | Profile.Permission_denied -> Response.error "permission denied" - | e -> Response.error ("uncaught exception: " ^ (Printexc.to_string e)) - in - Http_daemon.respond - ~body:res ~headers:["Content-Type", "text/xml"] outchan - - (* daemon initialization *) - -let save_db () = - let ch = open_out Profile_manager_env.profile_db_path in - output_value ch profile_db ; - close_out ch - -let main () = - at_exit save_db ; - Sys.catch_break true ; - try - Http_daemon.start' ~timeout:(Some 600) ~port:58099 ~mode:`Thread callback - with - Sys.Break -> () -in -main () - diff --git a/helm/DEVEL/profile-manager/profile_manager_env.ml b/helm/DEVEL/profile-manager/profile_manager_env.ml deleted file mode 100644 index cac43bd4e..000000000 --- a/helm/DEVEL/profile-manager/profile_manager_env.ml +++ /dev/null @@ -1,6 +0,0 @@ - -let profile_db_path = - try - Sys.getenv "PROFILE_MANAGER_DB_PATH" - with - Not_found -> "/tmp/profile.db" diff --git a/helm/DEVEL/profile-manager/response.ml b/helm/DEVEL/profile-manager/response.ml deleted file mode 100644 index e47a66651..000000000 --- a/helm/DEVEL/profile-manager/response.ml +++ /dev/null @@ -1,8 +0,0 @@ - -let quote_attribute s = s - -let quote s = s - -let error s = "" ^ (quote s) ^ "" - -let ok () = "" diff --git a/helm/DEVEL/profile-manager/welcome.html b/helm/DEVEL/profile-manager/welcome.html deleted file mode 100644 index f6fbed438..000000000 --- a/helm/DEVEL/profile-manager/welcome.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/helm/DEVEL/rdfly/.cvsignore b/helm/DEVEL/rdfly/.cvsignore deleted file mode 100644 index 5424f8c69..000000000 --- a/helm/DEVEL/rdfly/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.o *.cm[iox] rdfly rdfly.opt diff --git a/helm/DEVEL/rdfly/Makefile b/helm/DEVEL/rdfly/Makefile deleted file mode 100644 index 779bb7b44..000000000 --- a/helm/DEVEL/rdfly/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -BIN_DIR = /usr/local/bin -REQUIRES = mysql http helm-registry -PREDICATES = -OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)" -pp camlp4o -OCAMLFIND = ocamlfind -OCAMLC = $(OCAMLFIND) ocamlc -thread $(OCAMLOPTIONS) -OCAMLOPT = $(OCAMLFIND) ocamlopt -thread $(OCAMLOPTIONS) -OCAMLDEP = ocamldep -pp camlp4o - -LIBRARIES = $(shell $(OCAMLFIND) query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES)) -LIBRARIES_OPT = $(shell $(OCAMLFIND) query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES)) - -OBJS = rdfly.cmo - -all: rdfly -opt: rdfly.opt - -rdfly: $(OBJS) $(LIBRARIES) - $(OCAMLC) -linkpkg -o $@ $(OBJS) - -rdfly.opt: $(OBJS:.cmo=.cmx) $(LIBRARIES_OPT) - $(OCAMLOPT) -linkpkg -o rdfly.opt $(OBJS:.cmo=.cmx) - -.SUFFIXES: .ml .mli .cmo .cmi .cmx -.ml.cmo: - $(OCAMLC) -c $< -.mli.cmi: - $(OCAMLC) -c $< -.ml.cmx: - $(OCAMLOPT) -c $< - -$(OBJS): $(LIBRARIES) -$(OBJS:.cmo=.cmx)): $(LIBRARIES_OPT) - -clean: - rm -f *.cm[iox] *.o rdfly rdfly.opt - -.PHONY: install uninstall clean - diff --git a/helm/DEVEL/rdfly/rdfly.conf.xml.sample b/helm/DEVEL/rdfly/rdfly.conf.xml.sample deleted file mode 100644 index 5d479dacf..000000000 --- a/helm/DEVEL/rdfly/rdfly.conf.xml.sample +++ /dev/null @@ -1,12 +0,0 @@ - - -
-
- localhost - helm - mowgli - 3306 -
- 58086 -
-
diff --git a/helm/DEVEL/rdfly/rdfly.ml b/helm/DEVEL/rdfly/rdfly.ml deleted file mode 100644 index b9a79d139..000000000 --- a/helm/DEVEL/rdfly/rdfly.ml +++ /dev/null @@ -1,192 +0,0 @@ - -module M = Mysql - - (* First of all we load the configuration *) -let _ = - let configuration_file = "/projects/helm/etc/rdfly.conf.xml" in - Helm_registry.load_from configuration_file -;; - -let open_db ?host ?database ?port ?password ?user = - try - M.quick_connect ?host ?database ?port ?password ?user - with - M.Error e as exc -> - prerr_endline e ; - raise exc - -let extract_position s = - let sharp_pos = String.rindex s '#' + 1 in - String.sub s sharp_pos ((String.length s) - sharp_pos) - -let mk_new_msg () = ref [] - -let msg_output_string msg s = msg := s::!msg - -let msg_serialize msg = - String.concat "" (List.rev !msg) - -let msg_output_header msg obj = - msg_output_string msg "\n\n" ; - msg_output_string msg ("\n \n") - -let msg_output_trailer msg = - msg_output_string msg " \n\n" - -let msg_output_dc_header msg obj = - msg_output_string msg "\n\n" ; - msg_output_string msg ("\n") ; - msg_output_string msg " " -;; - -let msg_output_dc_trailer msg = - msg_output_string msg " \n" -;; - -let value_of_optional_value = - function - None -> assert false - | Some v -> v -;; - -let forward_metadata db obj = - let res = M.exec db ("SELECT * FROM refObj WHERE source = '" ^ obj ^ "';") in - let msg = mk_new_msg () in - msg_output_header msg obj ; - M.iter res - ~f:(function cols -> - let position = extract_position (value_of_optional_value (cols.(2))) in - let occurrence = value_of_optional_value (cols.(1)) in - msg_output_string msg " \n \n" ; - msg_output_string msg (" " ^ position ^ "\n") ; - msg_output_string msg (" " ^ occurrence ^ "\n") ; - msg_output_string msg " \n \n" - ) ; - msg_output_trailer msg ; - msg_serialize msg -;; - -let backward_metadata db obj = - let res = M.exec db ("SELECT * FROM refObj WHERE h_occurrence = '" ^ obj ^ "';") in - let msg = mk_new_msg () in - msg_output_header msg obj ; - M.iter res - ~f:(function cols -> - let position = extract_position (value_of_optional_value (cols.(2))) in - let occurrence = value_of_optional_value (cols.(0)) in - msg_output_string msg " \n \n" ; - msg_output_string msg (" " ^ position ^ "\n") ; - msg_output_string msg (" " ^ occurrence ^ "\n") ; - msg_output_string msg " \n \n" - ) ; - msg_output_trailer msg ; - msg_serialize msg -;; - -let dc_metadata db obj = - let tables = - [ "dc:creator","dccreator" ; - "dc:date","dcdate" ; - "dc:description","dcdescription" ; - "dc:format","dcformat" ; - "dc:identifier","dcidentifier" ; - "dc:language","dclanguage" ; - "dc:publisher","dcpublisher" ; - "dcq:RelationType","dcqRelationType" ; - "dc:relation","dcrelation" ; - "dc:rights","dcrights" ; - "dc:source","dcsource" ; - "dc:subject","dcsubject" ; - "dc:title","dctitle" ; - "hth:ResourceFormat","hthResourceFormat" ; - "hth:contact","hthcontact" ; - "hth:firstVersion","hthfirstVersion" ; - "hth:institution","hthinstitution" ; - "hth:modified","hthmodified" - ] - in - let msg = mk_new_msg () in - msg_output_dc_header msg obj ; - List.iter - (fun (propertyname,tablename) -> - let res = - M.exec db - ("SELECT * FROM " ^ tablename ^ " WHERE uri = '" ^ obj ^ "';") in - M.iter res - ~f:(function cols -> - let value = value_of_optional_value (cols.(0)) in - msg_output_string msg - (" <" ^ propertyname ^ ">" ^ value ^ "\n") ; - ) ; - ) tables ; - msg_output_dc_trailer msg ; - msg_serialize msg -;; - -let debug_print s = prerr_endline ("[RDFly] " ^ s) - -let mk_return_fun contype msg outchan = - Http_daemon.respond - ~body:msg ~headers:["Content-Type", contype] outchan - -let return_html = mk_return_fun "text/html" -let return_xml = mk_return_fun "text/xml" -let return_400 body ch = - Http_daemon.respond_error ~code:(`Code 400) ~body ch -let return_html_error s = return_html ("" ^ s ^ "") - -let get_option key = - try - Some (Helm_registry.get key) - with Helm_registry.Key_not_found _ -> None - -let get_int_option key = - try - Some (Helm_registry.get_int key) - with Helm_registry.Key_not_found _ -> None - -let host = get_option "rdfly.mysql_connection.host";; -let database = get_option "rdfly.mysql_connection.database";; -let port = get_int_option "rdfly.mysql_connection.port";; -let password = get_option "rdfly.mysql_connection.password";; -let user = get_option "rdfly.mysql_connection.user";; -let daemonport = Helm_registry.get_int "rdfly.port";; - -let callback (req: Http_types.request) ch = - try - debug_print ("Connection from " ^ req#clientAddr) ; - debug_print ("Received request: " ^ req#uri) ; - (match req#path with - | "/help" -> - return_html_error "yeah right..." ch - | "/get" -> - let obj = req#param "object" - and kind = req#param "kind" in - let db = open_db ?host ?database ?port ?password ?user () in - begin - match kind with - "forward" -> return_xml (forward_metadata db obj) ch - | "backward" -> return_xml (backward_metadata db obj) ch - | "dc" -> return_xml (dc_metadata db obj) ch - | s -> return_html_error ("unsupported kind: " ^ s) ch - end ; - M.disconnect db - | invalid_request -> - Http_daemon.respond_error ~code:(`Status (`Client_error `Bad_request)) - ch) - with - | Http_types.Param_not_found attr_name -> - return_400 (Printf.sprintf "Parameter '%s' is missing" attr_name) ch - | exc -> - return_html_error ("Uncaught exception: " ^ (Printexc.to_string exc)) ch - -let main () = - Sys.catch_break true; - try - Http_daemon.start' - ~timeout:(Some 600) ~port:daemonport callback - with Sys.Break -> () -in - -main () - diff --git a/helm/EXPORT/cshrc b/helm/EXPORT/cshrc deleted file mode 100755 index e5519d719..000000000 --- a/helm/EXPORT/cshrc +++ /dev/null @@ -1,4 +0,0 @@ -setenv PATH /home/projects/helm/EXPORT/INSTALLED_V7/usr/local/bin:$PATH - -# Per uris_of_filenames.pl -setenv PATH /home/projects/helm/V7/interface:$PATH diff --git a/helm/EXPORT/export_Bordeaux_EXCEPTIONS/Makefile b/helm/EXPORT/export_Bordeaux_EXCEPTIONS/Makefile deleted file mode 100644 index 484f0972f..000000000 --- a/helm/EXPORT/export_Bordeaux_EXCEPTIONS/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -all: objects theories - -objects: - coqc -R EXCEPTIONS Bordeaux.EXCEPTIONS EXCEPTIONS/*.v - echo "Load Verbose prova_Bordeaux_EXCEPTIONS." | coqtop.byte -R EXCEPTIONS Bordeaux.EXCEPTIONS - -theories: - ./exporttheories.sh - -clean: - rm -f *.vo EXCEPTIONS/*.vo diff --git a/helm/EXPORT/export_Bordeaux_EXCEPTIONS/exporttheories.sh b/helm/EXPORT/export_Bordeaux_EXCEPTIONS/exporttheories.sh deleted file mode 100755 index 532827348..000000000 --- a/helm/EXPORT/export_Bordeaux_EXCEPTIONS/exporttheories.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -echo "Exporting theory $1"; - -for i in EXCEPTIONS/*.v - do - basename=$(basename $i | sed s/\\.v//) - cat $i | ../mktheory.pl "Bordeaux/EXCEPTIONS/$basename" > \ - examples/Bordeaux/EXCEPTIONS/$basename.theory.xml - done diff --git a/helm/EXPORT/export_Bordeaux_EXCEPTIONS/prova_Bordeaux_EXCEPTIONS.v b/helm/EXPORT/export_Bordeaux_EXCEPTIONS/prova_Bordeaux_EXCEPTIONS.v deleted file mode 100644 index 07c14ef3d..000000000 --- a/helm/EXPORT/export_Bordeaux_EXCEPTIONS/prova_Bordeaux_EXCEPTIONS.v +++ /dev/null @@ -1,5 +0,0 @@ -Require Export Xml. - -Require leavemult. - -Print XML Module Disk "examples" leavemult. diff --git a/helm/EXPORT/export_Marseille_CCS/Makefile b/helm/EXPORT/export_Marseille_CCS/Makefile deleted file mode 100644 index 7c30db4a5..000000000 --- a/helm/EXPORT/export_Marseille_CCS/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -all: objects theories - -objects: - coqc -R CCS Marseille.CCS CCS/*.v - echo "Load Verbose prova_Marseille_CCS." | coqtop.byte -R CCS Marseille.CCS - -theories: - ./exporttheories.sh - -clean: - rm -f *.vo CCS/*.vo diff --git a/helm/EXPORT/export_Marseille_CCS/exporttheories.sh b/helm/EXPORT/export_Marseille_CCS/exporttheories.sh deleted file mode 100755 index 24fce6c39..000000000 --- a/helm/EXPORT/export_Marseille_CCS/exporttheories.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -echo "Exporting theory $1"; - -for i in CCS/*.v - do - basename=$(basename $i | sed s/\\.v//) - cat $i | ../mktheory.pl "Marseille/CCS/$basename" > \ - examples/Marseille/CCS/$basename.theory.xml - done diff --git a/helm/EXPORT/export_Marseille_CCS/prova_Marseille_CCS.v b/helm/EXPORT/export_Marseille_CCS/prova_Marseille_CCS.v deleted file mode 100644 index e44066736..000000000 --- a/helm/EXPORT/export_Marseille_CCS/prova_Marseille_CCS.v +++ /dev/null @@ -1,5 +0,0 @@ -Require Export Xml. - -Require Trans_Sys. - -Print XML Module Disk "examples" Trans_Sys. diff --git a/helm/EXPORT/export_Nijmegen_Rem/Makefile b/helm/EXPORT/export_Nijmegen_Rem/Makefile deleted file mode 100644 index 3421cc0a6..000000000 --- a/helm/EXPORT/export_Nijmegen_Rem/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -all: objects theories - -objects: - coqc -R Rem Nijmegen.Rem Rem/*.v - echo "Load Verbose prova_Nijmegen_Rem." | coqtop.byte -R Rem Nijmegen.Rem - -theories: - ./exporttheories.sh - -clean: - rm -f *.vo Rem/*.vo diff --git a/helm/EXPORT/export_Nijmegen_Rem/exporttheories.sh b/helm/EXPORT/export_Nijmegen_Rem/exporttheories.sh deleted file mode 100755 index 8e64b90c5..000000000 --- a/helm/EXPORT/export_Nijmegen_Rem/exporttheories.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -echo "Exporting theory $1"; - -for i in Rem/*.v - do - basename=$(basename $i | sed s/\\.v//) - cat $i | ../mktheory.pl "Nijmegen/Rem/$basename" > \ - examples/Nijmegen/Rem/$basename.theory.xml - done diff --git a/helm/EXPORT/export_Nijmegen_Rem/prova_Nijmegen_Rem.v b/helm/EXPORT/export_Nijmegen_Rem/prova_Nijmegen_Rem.v deleted file mode 100644 index 04244aa30..000000000 --- a/helm/EXPORT/export_Nijmegen_Rem/prova_Nijmegen_Rem.v +++ /dev/null @@ -1,5 +0,0 @@ -Require Export Xml. - -Require Rem. - -Print XML Module Disk "examples" Rem. diff --git a/helm/EXPORT/export_Paris_ZF/Makefile b/helm/EXPORT/export_Paris_ZF/Makefile deleted file mode 100644 index ee2f95e1b..000000000 --- a/helm/EXPORT/export_Paris_ZF/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -all: objects theories - -objects: - coqc -R ZF/src Paris.ZF ZF/src/nothing.v - coqc -R ZF/src Paris.ZF ZF/src/useful.v - coqc -R ZF/src Paris.ZF ZF/src/ZFbasis.v - coqc -R ZF/src Paris.ZF ZF/src/axs_extensionnalite.v - coqc -R ZF/src Paris.ZF ZF/src/axs_paire.v - coqc -R ZF/src Paris.ZF ZF/src/axs_reunion.v - coqc -R ZF/src Paris.ZF ZF/src/axs_parties.v - coqc -R ZF/src Paris.ZF ZF/src/axs_comprehension.v - coqc -R ZF/src Paris.ZF ZF/src/axs_remplacement.v - coqc -R ZF/src Paris.ZF ZF/src/couples.v - coqc -R ZF/src Paris.ZF ZF/src/applications.v - coqc -R ZF/src Paris.ZF ZF/src/axs_choice.v - coqc -R ZF/src Paris.ZF ZF/src/axs_fundation.v - coqc -R ZF/src Paris.ZF ZF/src/ZFrelations.v - coqc -R ZF/src Paris.ZF ZF/src/MSetBasis.v - echo "Load Verbose prova_Paris_ZF." | coqtop.byte -R ZF/src Paris.ZF - -theories: - ./exporttheories.sh - -clean: - rm -f *.vo ZF/src/*.vo diff --git a/helm/EXPORT/export_Paris_ZF/exporttheories.sh b/helm/EXPORT/export_Paris_ZF/exporttheories.sh deleted file mode 100755 index 3a0db3d49..000000000 --- a/helm/EXPORT/export_Paris_ZF/exporttheories.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -echo "Exporting theory $1"; - -for i in ZF/src/*.v - do - basename=$(basename $i | sed s/\\.v//) - cat $i | ../mktheory.pl "Paris/ZF/$basename" > \ - examples/Paris/ZF/$basename.theory.xml - done diff --git a/helm/EXPORT/export_Paris_ZF/prova_Paris_ZF.v b/helm/EXPORT/export_Paris_ZF/prova_Paris_ZF.v deleted file mode 100644 index 03f59427f..000000000 --- a/helm/EXPORT/export_Paris_ZF/prova_Paris_ZF.v +++ /dev/null @@ -1,33 +0,0 @@ -Require Export Xml. - -Require nothing. -Require useful. -Require ZFbasis. -Require axs_extensionnalite. -Require axs_paire . -Require axs_reunion. -Require axs_parties. -Require axs_comprehension. -Require axs_remplacement. -Require couples. -Require applications . -Require axs_choice. -Require axs_fundation. -Require ZFrelations. -Require MSetBasis . - -Print XML Module Disk "examples" nothing. -Print XML Module Disk "examples" useful. -Print XML Module Disk "examples" ZFbasis. -Print XML Module Disk "examples" axs_extensionnalite. -Print XML Module Disk "examples" axs_paire . -Print XML Module Disk "examples" axs_reunion. -Print XML Module Disk "examples" axs_parties. -Print XML Module Disk "examples" axs_comprehension. -Print XML Module Disk "examples" axs_remplacement. -Print XML Module Disk "examples" couples. -Print XML Module Disk "examples" applications . -Print XML Module Disk "examples" axs_choice. -Print XML Module Disk "examples" axs_fundation. -Print XML Module Disk "examples" ZFrelations. -Print XML Module Disk "examples" MSetBasis . diff --git a/helm/EXPORT/export_Rocq_CHECKER/Makefile b/helm/EXPORT/export_Rocq_CHECKER/Makefile deleted file mode 100644 index 76fe9308a..000000000 --- a/helm/EXPORT/export_Rocq_CHECKER/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -all: objects theories - -objects: - coqc -R CHECKER Rocq.CHECKER CHECKER/Functions.v CHECKER/Checker.v - echo "Load Verbose prova_Rocq_CHECKER." | coqtop.byte -R CHECKER Rocq.CHECKER - -theories: - ./exporttheories.sh - -clean: - rm -f *.vo CHECKER/*.vo diff --git a/helm/EXPORT/export_Rocq_CHECKER/exporttheories.sh b/helm/EXPORT/export_Rocq_CHECKER/exporttheories.sh deleted file mode 100755 index e0152041f..000000000 --- a/helm/EXPORT/export_Rocq_CHECKER/exporttheories.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -echo "Exporting theory $1"; - -for i in CHECKER/*.v - do - basename=$(basename $i | sed s/\\.v//) - cat $i | ../mktheory.pl "Rocq/CHECKER/$basename" > \ - examples/Rocq/CHECKER/$basename.theory.xml - done diff --git a/helm/EXPORT/export_Rocq_CHECKER/prova_Rocq_CHECKER.v b/helm/EXPORT/export_Rocq_CHECKER/prova_Rocq_CHECKER.v deleted file mode 100644 index 190588474..000000000 --- a/helm/EXPORT/export_Rocq_CHECKER/prova_Rocq_CHECKER.v +++ /dev/null @@ -1,7 +0,0 @@ -Require Export Xml. - -Require Functions. -Require Checker. - -Print XML Module Disk "examples" Functions. -Print XML Module Disk "examples" Checker. diff --git a/helm/EXPORT/export_Rocq_HIGMAN/Makefile b/helm/EXPORT/export_Rocq_HIGMAN/Makefile deleted file mode 100644 index f5161ba4e..000000000 --- a/helm/EXPORT/export_Rocq_HIGMAN/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -all: objects theories - -objects: - coqc -R HIGMAN Rocq.HIGMAN HIGMAN/*.v - echo "Load Verbose prova_Rocq_HIGMAN." | coqtop.byte -R HIGMAN Rocq.HIGMAN - -theories: - ./exporttheories.sh - -clean: - rm -f *.vo HIGMAN/*.vo diff --git a/helm/EXPORT/export_Rocq_HIGMAN/exporttheories.sh b/helm/EXPORT/export_Rocq_HIGMAN/exporttheories.sh deleted file mode 100755 index d19281688..000000000 --- a/helm/EXPORT/export_Rocq_HIGMAN/exporttheories.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -echo "Exporting theory $1"; - -for i in HIGMAN/*.v - do - basename=$(basename $i | sed s/\\.v//) - cat $i | ../mktheory.pl "Rocq/HIGMAN/$basename" > \ - examples/Rocq/HIGMAN/$basename.theory.xml - done diff --git a/helm/EXPORT/export_Rocq_HIGMAN/prova_Rocq_HIGMAN.v b/helm/EXPORT/export_Rocq_HIGMAN/prova_Rocq_HIGMAN.v deleted file mode 100644 index 9abc11a52..000000000 --- a/helm/EXPORT/export_Rocq_HIGMAN/prova_Rocq_HIGMAN.v +++ /dev/null @@ -1,5 +0,0 @@ -Require Export Xml. - -Require Higman. - -Print XML Module Disk "examples" Higman. diff --git a/helm/EXPORT/export_Rocq_SHUFFLE/Makefile b/helm/EXPORT/export_Rocq_SHUFFLE/Makefile deleted file mode 100644 index ba2ab5712..000000000 --- a/helm/EXPORT/export_Rocq_SHUFFLE/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -all: objects theories - -objects: - coqc -R SHUFFLE Rocq.SHUFFLE SHUFFLE/Words.v - coqc -R SHUFFLE Rocq.SHUFFLE SHUFFLE/Alternate.v - coqc -R SHUFFLE Rocq.SHUFFLE SHUFFLE/Opposite.v - coqc -R SHUFFLE Rocq.SHUFFLE SHUFFLE/Paired.v - coqc -R SHUFFLE Rocq.SHUFFLE SHUFFLE/Shuffle.v - coqc -R SHUFFLE Rocq.SHUFFLE SHUFFLE/Gilbreath.v - echo "Load Verbose prova_Rocq_SHUFFLE." | coqtop.byte -R SHUFFLE Rocq.SHUFFLE - -theories: - ./exporttheories.sh - -clean: - rm -f *.vo SHUFFLE/*.vo diff --git a/helm/EXPORT/export_Rocq_SHUFFLE/exporttheories.sh b/helm/EXPORT/export_Rocq_SHUFFLE/exporttheories.sh deleted file mode 100755 index acd865a42..000000000 --- a/helm/EXPORT/export_Rocq_SHUFFLE/exporttheories.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -echo "Exporting theory $1"; - -for i in SHUFFLE/*.v - do - basename=$(basename $i | sed s/\\.v//) - cat $i | ../mktheory.pl "Rocq/SHUFFLE/$basename" > \ - examples/Rocq/SHUFFLE/$basename.theory.xml - done diff --git a/helm/EXPORT/export_Rocq_SHUFFLE/prova_Rocq_SHUFFLE.v b/helm/EXPORT/export_Rocq_SHUFFLE/prova_Rocq_SHUFFLE.v deleted file mode 100644 index 1b17a93bc..000000000 --- a/helm/EXPORT/export_Rocq_SHUFFLE/prova_Rocq_SHUFFLE.v +++ /dev/null @@ -1,16 +0,0 @@ -Require Export Xml. - -Require Alternate. -Require Gilbreath. -Require Opposite. -Require Paired. -Require Shuffle. -Require Words. - - -Print XML Module Disk "examples" Alternate. -Print XML Module Disk "examples" Gilbreath. -Print XML Module Disk "examples" Opposite. -Print XML Module Disk "examples" Paired. -Print XML Module Disk "examples" Shuffle. -Print XML Module Disk "examples" Words. diff --git a/helm/EXPORT/export_Utrecht_Ramsey/Makefile b/helm/EXPORT/export_Utrecht_Ramsey/Makefile deleted file mode 100644 index 576b198db..000000000 --- a/helm/EXPORT/export_Utrecht_Ramsey/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -all: objects theories - -objects: - coqc -R Ramsey Utrecht.Ramsey Ramsey/*.v - echo "Load Verbose prova_Utrecht_Ramsey." | coqtop.byte -R Ramsey Utrecht.Ramsey - -theories: - ./exporttheories.sh - -clean: - rm -f *.vo Ramsey/*.vo diff --git a/helm/EXPORT/export_Utrecht_Ramsey/exporttheories.sh b/helm/EXPORT/export_Utrecht_Ramsey/exporttheories.sh deleted file mode 100755 index b2dd5f8aa..000000000 --- a/helm/EXPORT/export_Utrecht_Ramsey/exporttheories.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -echo "Exporting theory $1"; - -for i in Ramsey/*.v - do - basename=$(basename $i | sed s/\\.v//) - cat $i | ../mktheory.pl "Utrecht/Ramsey/$basename" > \ - examples/Utrecht/Ramsey/$basename.theory.xml - done diff --git a/helm/EXPORT/export_Utrecht_Ramsey/prova_Utrecht_Ramsey.v b/helm/EXPORT/export_Utrecht_Ramsey/prova_Utrecht_Ramsey.v deleted file mode 100644 index aa0500f15..000000000 --- a/helm/EXPORT/export_Utrecht_Ramsey/prova_Utrecht_Ramsey.v +++ /dev/null @@ -1,5 +0,0 @@ -Require Export Xml. - -Require Ramsey. - -Print XML Module Disk "examples" Ramsey. diff --git a/helm/EXPORT/exportcoq/Makefile b/helm/EXPORT/exportcoq/Makefile deleted file mode 100644 index 5026ec526..000000000 --- a/helm/EXPORT/exportcoq/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -all: objects theories - -objects: - echo "Load Verbose provacoq." | coqtop.byte - -theories: - ./exporttheories.sh diff --git a/helm/EXPORT/exportcoq/export_contrib_theory.sh b/helm/EXPORT/exportcoq/export_contrib_theory.sh deleted file mode 100755 index afc191889..000000000 --- a/helm/EXPORT/exportcoq/export_contrib_theory.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -echo "Exporting theory $1"; - -for i in ../V7/contrib/$1/*.v - do - basename=$(basename $i | sed s/\\.v//) - cat $i | ../mktheory.pl "Coq/$1/$basename" 0 > \ - examples/Coq/$1/$basename.theory.xml -# cat $i | ../mktheory.pl "Coq/$1/$basename" 1 > \ -# examples/Coq/$1/"$basename"_with_types.theory.xml - done diff --git a/helm/EXPORT/exportcoq/export_theory_theory.sh b/helm/EXPORT/exportcoq/export_theory_theory.sh deleted file mode 100755 index 1a23583eb..000000000 --- a/helm/EXPORT/exportcoq/export_theory_theory.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -echo "Exporting theory $1"; - -for i in ../V7/theories/$1/*.v - do - basename=$(basename $i | sed s/\\.v//) - cat $i | ../mktheory.pl "Coq/$1/$basename" 0 > \ - examples/Coq/$1/$basename.theory.xml -# cat $i | ../mktheory.pl "Coq/$1/$basename" 1 > \ -# examples/Coq/$1/"$basename"_with_types.theory.xml - done diff --git a/helm/EXPORT/exportcoq/exporttheories.sh b/helm/EXPORT/exportcoq/exporttheories.sh deleted file mode 100755 index 5fdc47378..000000000 --- a/helm/EXPORT/exportcoq/exporttheories.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -./export_theory_theory.sh Arith -./export_theory_theory.sh Bool -./export_theory_theory.sh Init -./export_theory_theory.sh Lists -./export_theory_theory.sh Logic -./export_theory_theory.sh Reals -./export_theory_theory.sh Relations -./export_theory_theory.sh Sets -#./export_theory_theory.sh SORTING -#./export_theory_theory.sh TREES -./export_theory_theory.sh Wellfounded -./export_theory_theory.sh Zarith - -./export_contrib_theory.sh omega -./export_contrib_theory.sh ring diff --git a/helm/EXPORT/exportcoq/provacoq.v b/helm/EXPORT/exportcoq/provacoq.v deleted file mode 100644 index 99b52ebc7..000000000 --- a/helm/EXPORT/exportcoq/provacoq.v +++ /dev/null @@ -1,14 +0,0 @@ -Load Verbose provacoqArith. -Load Verbose provacoqBool. -Load Verbose provacoqInit. -Load Verbose provacoqLists. -Load Verbose provacoqLogic. -Load Verbose provacoqReals. -Load Verbose provacoqRelations. -Load Verbose provacoqSets. -(*Load Verbose provacoqSorting.*) -(*Load Verbose provacoqTrees.*) -Load Verbose provacoqZArith. - -Load Verbose provacoqcontribRing. -Load Verbose provacoqcontribOmega. diff --git a/helm/EXPORT/exportcoq/provacoqArith.v b/helm/EXPORT/exportcoq/provacoqArith.v deleted file mode 100644 index 1fdc4f943..000000000 --- a/helm/EXPORT/exportcoq/provacoqArith.v +++ /dev/null @@ -1,31 +0,0 @@ -Require Export Xml. - -Require Arith. -Require Compare. -Require Compare_dec. -(*Require Div.*) -Require Div2. -Require EqNat. -Require Euclid_def. -Require Euclid_proof. -Require Peano_dec. - -Print XML Module Disk "examples" Arith. -Print XML Module Disk "examples" Between. -Print XML Module Disk "examples" Compare. -Print XML Module Disk "examples" Compare_dec. -(*Print XML Module Disk "examples" Div.*) -Print XML Module Disk "examples" Div2. -Print XML Module Disk "examples" EqNat. -Print XML Module Disk "examples" Euclid_def. -Print XML Module Disk "examples" Euclid_proof. -Print XML Module Disk "examples" Even. -Print XML Module Disk "examples" Gt. -Print XML Module Disk "examples" Le. -Print XML Module Disk "examples" Lt. -Print XML Module Disk "examples" Min. -Print XML Module Disk "examples" Minus. -Print XML Module Disk "examples" Mult. -Print XML Module Disk "examples" Peano_dec. -Print XML Module Disk "examples" Plus. -Print XML Module Disk "examples" Wf_nat. diff --git a/helm/EXPORT/exportcoq/provacoqBool.v b/helm/EXPORT/exportcoq/provacoqBool.v deleted file mode 100644 index a898237be..000000000 --- a/helm/EXPORT/exportcoq/provacoqBool.v +++ /dev/null @@ -1,13 +0,0 @@ -Require Export Xml. - -Require Bool. -Require DecBool. -Require IfProp. -Require Sumbool. -Require Zerob. - -Print XML Module Disk "examples" Bool. -Print XML Module Disk "examples" DecBool. -Print XML Module Disk "examples" IfProp. -Print XML Module Disk "examples" Sumbool. -Print XML Module Disk "examples" Zerob. diff --git a/helm/EXPORT/exportcoq/provacoqInit.v b/helm/EXPORT/exportcoq/provacoqInit.v deleted file mode 100644 index d40ea3ee5..000000000 --- a/helm/EXPORT/exportcoq/provacoqInit.v +++ /dev/null @@ -1,13 +0,0 @@ -Require Export Xml. - -Print XML Module Disk "examples" Datatypes. -Print XML Module Disk "examples" DatatypesSyntax. -Print XML Module Disk "examples" Logic. -Print XML Module Disk "examples" LogicSyntax. -Print XML Module Disk "examples" Specif. -Print XML Module Disk "examples" SpecifSyntax. -Print XML Module Disk "examples" Peano. -Print XML Module Disk "examples" Wf. -Print XML Module Disk "examples" Prelude. -Print XML Module Disk "examples" Logic_Type. -Print XML Module Disk "examples" Logic_TypeSyntax. diff --git a/helm/EXPORT/exportcoq/provacoqLists.v b/helm/EXPORT/exportcoq/provacoqLists.v deleted file mode 100644 index 91b74ef0a..000000000 --- a/helm/EXPORT/exportcoq/provacoqLists.v +++ /dev/null @@ -1,15 +0,0 @@ -Require Export Xml. - -Require List. -Require ListSet. -Require PolyList. -(*Require PolyListSyntax.*) -Require Streams. -Require TheoryList. - -Print XML Module Disk "examples" List. -Print XML Module Disk "examples" ListSet. -Print XML Module Disk "examples" PolyList. -(*Print XML Module Disk "examples" PolyListSyntax.*) -Print XML Module Disk "examples" Streams. -Print XML Module Disk "examples" TheoryList. diff --git a/helm/EXPORT/exportcoq/provacoqLogic.v b/helm/EXPORT/exportcoq/provacoqLogic.v deleted file mode 100644 index e2296a51f..000000000 --- a/helm/EXPORT/exportcoq/provacoqLogic.v +++ /dev/null @@ -1,17 +0,0 @@ -Require Export Xml. - -Require Classical. -Require Classical_Pred_Set. -Require Classical_Pred_Type. -Require Classical_Prop. -Require Classical_Type. -Require Eqdep. -Require Eqdep_dec. - -Print XML Module Disk "examples" Classical. -Print XML Module Disk "examples" Classical_Pred_Set. -Print XML Module Disk "examples" Classical_Pred_Type. -Print XML Module Disk "examples" Classical_Prop. -Print XML Module Disk "examples" Classical_Type. -Print XML Module Disk "examples" Eqdep. -Print XML Module Disk "examples" Eqdep_dec. diff --git a/helm/EXPORT/exportcoq/provacoqReals.v b/helm/EXPORT/exportcoq/provacoqReals.v deleted file mode 100644 index 445f9f988..000000000 --- a/helm/EXPORT/exportcoq/provacoqReals.v +++ /dev/null @@ -1,23 +0,0 @@ -Require Export Xml. - -Require R_Ifp. -Require Raxioms. -Require Rdefinitions. -Require Rbase. -Require Rbasic_fun. -Require Rderiv. -Require Reals. -Require Rfunctions. -Require Rlimit. -Require TypeSyntax. - -Print XML Module Disk "examples" R_Ifp. -Print XML Module Disk "examples" Raxioms. -Print XML Module Disk "examples" Rdefinitions. -Print XML Module Disk "examples" Rbase. -Print XML Module Disk "examples" Rbasic_fun. -Print XML Module Disk "examples" Rderiv. -Print XML Module Disk "examples" Reals. -Print XML Module Disk "examples" Rfunctions. -Print XML Module Disk "examples" Rlimit. -Print XML Module Disk "examples" TypeSyntax. diff --git a/helm/EXPORT/exportcoq/provacoqRelations.v b/helm/EXPORT/exportcoq/provacoqRelations.v deleted file mode 100644 index c588b30f3..000000000 --- a/helm/EXPORT/exportcoq/provacoqRelations.v +++ /dev/null @@ -1,33 +0,0 @@ -Require Export Xml. - -Require Newman. -Require Operators_Properties. -Require Relation_Definitions. -Require Relation_Operators. -Require Relations. -Require Rstar. -(*Require Disjoint_Union.*) -(*Require Inclusion.*) -(*Require Inverse_Image.*) -(*Require Lexicographic_Exponentiation.*) -(*Require Lexicographic_Product.*) -(*Require Transitive_Closure.*) -(*Require Union.*) -(*Require Well_Ordering.*) -(*Require Wellfounded.*) - -Print XML Module Disk "examples" Newman. -Print XML Module Disk "examples" Operators_Properties. -Print XML Module Disk "examples" Relation_Definitions. -Print XML Module Disk "examples" Relation_Operators. -Print XML Module Disk "examples" Relations. -Print XML Module Disk "examples" Rstar. -(*Print XML Module Disk "examples/WELLFOUNDED" Disjoint_Union.*) -(*Print XML Module Disk "examples/WELLFOUNDED" Inclusion.*) -(*Print XML Module Disk "examples/WELLFOUNDED" Inverse_Image.*) -(*Print XML Module Disk "examples/WELLFOUNDED" Lexicographic_Exponentiation.*) -(*Print XML Module Disk "examples/WELLFOUNDED" Lexicographic_Product.*) -(*Print XML Module Disk "examples/WELLFOUNDED" Transitive_Closure.*) -(*Print XML Module Disk "examples/WELLFOUNDED" Union.*) -(*Print XML Module Disk "examples/WELLFOUNDED" Well_Ordering.*) -(*Print XML Module Disk "examples/WELLFOUNDED" Wellfounded.*) diff --git a/helm/EXPORT/exportcoq/provacoqSets.v b/helm/EXPORT/exportcoq/provacoqSets.v deleted file mode 100644 index 9502861b0..000000000 --- a/helm/EXPORT/exportcoq/provacoqSets.v +++ /dev/null @@ -1,48 +0,0 @@ -Require Export Xml. - -Require Classical_sets. -Require Constructive_sets. -Require Cpo. -Require Ensembles. -Require Finite_sets. -Require Finite_sets_facts. -Require Image. -Require Infinite_sets. -Require Integers. -Require Multiset. -Require Partial_Order. -Require Permut. -(*Require CSCPermut.*) -Require Powerset. -Require Powerset_Classical_facts. -Require Powerset_facts. -Require Relations_1. -Require Relations_1_facts. -Require Relations_2. -Require Relations_2_facts. -Require Relations_3. -Require Relations_3_facts. -Require Uniset. - -Print XML Module Disk "examples" Classical_sets. -Print XML Module Disk "examples" Constructive_sets. -Print XML Module Disk "examples" Cpo. -Print XML Module Disk "examples" Ensembles. -Print XML Module Disk "examples" Finite_sets. -Print XML Module Disk "examples" Finite_sets_facts. -Print XML Module Disk "examples" Image. -Print XML Module Disk "examples" Infinite_sets. -Print XML Module Disk "examples" Integers. -Print XML Module Disk "examples" Multiset. -Print XML Module Disk "examples" Partial_Order. -Print XML Module Disk "examples" Permut. -Print XML Module Disk "examples" Powerset. -Print XML Module Disk "examples" Powerset_Classical_facts. -Print XML Module Disk "examples" Powerset_facts. -Print XML Module Disk "examples" Relations_1. -Print XML Module Disk "examples" Relations_1_facts. -Print XML Module Disk "examples" Relations_2. -Print XML Module Disk "examples" Relations_2_facts. -Print XML Module Disk "examples" Relations_3. -Print XML Module Disk "examples" Relations_3_facts. -Print XML Module Disk "examples" Uniset. diff --git a/helm/EXPORT/exportcoq/provacoqSorting.v b/helm/EXPORT/exportcoq/provacoqSorting.v deleted file mode 100644 index ff940fd22..000000000 --- a/helm/EXPORT/exportcoq/provacoqSorting.v +++ /dev/null @@ -1,13 +0,0 @@ -(* -Require Export Xml. - -Require Generic. -Require Heap. -Require Permutation. -Require Sorting. - -Print XML Module Disk "examples" Generic. -Print XML Module Disk "examples" Heap. -Print XML Module Disk "examples" Permutation. -Print XML Module Disk "examples" Sorting. -*) diff --git a/helm/EXPORT/exportcoq/provacoqTrees.v b/helm/EXPORT/exportcoq/provacoqTrees.v deleted file mode 100644 index a90b04122..000000000 --- a/helm/EXPORT/exportcoq/provacoqTrees.v +++ /dev/null @@ -1,7 +0,0 @@ -(* -Require Export Xml. - -Require Btree. - -Print XML Module Disk "examples" Btree. -*) diff --git a/helm/EXPORT/exportcoq/provacoqZArith.v b/helm/EXPORT/exportcoq/provacoqZArith.v deleted file mode 100644 index ff43bbd23..000000000 --- a/helm/EXPORT/exportcoq/provacoqZArith.v +++ /dev/null @@ -1,19 +0,0 @@ -Require Export Xml. - -Require Wf_Z. -Require ZArith. -Require ZArith_dec. -Require Zmisc. -Require Zsyntax. -Require auxiliary. -Require fast_integer. -Require zarith_aux. - -Print XML Module Disk "examples" Wf_Z. -Print XML Module Disk "examples" ZArith. -Print XML Module Disk "examples" ZArith_dec. -Print XML Module Disk "examples" Zmisc. -Print XML Module Disk "examples" Zsyntax. -Print XML Module Disk "examples" auxiliary. -Print XML Module Disk "examples" fast_integer. -Print XML Module Disk "examples" zarith_aux. diff --git a/helm/EXPORT/exportcoq/provacoqcontribOmega.v b/helm/EXPORT/exportcoq/provacoqcontribOmega.v deleted file mode 100644 index 04d299423..000000000 --- a/helm/EXPORT/exportcoq/provacoqcontribOmega.v +++ /dev/null @@ -1,11 +0,0 @@ -Require Export Xml. - -Require Omega. -Require Zlogarithm. -Require OmegaSyntax. -Require Zpower. - -Print XML Module Disk "examples" Omega. -Print XML Module Disk "examples" Zlogarithm. -Print XML Module Disk "examples" OmegaSyntax. -Print XML Module Disk "examples" Zpower. diff --git a/helm/EXPORT/exportcoq/provacoqcontribRing.v b/helm/EXPORT/exportcoq/provacoqcontribRing.v deleted file mode 100644 index bfc2633be..000000000 --- a/helm/EXPORT/exportcoq/provacoqcontribRing.v +++ /dev/null @@ -1,17 +0,0 @@ -Require Export Xml. - -Require ArithRing. -Require Quote. -Require Ring. -Require Ring_abstract. -Require Ring_normalize. -Require Ring_theory. -Require ZArithRing. - -Print XML Module Disk "examples" ArithRing. -Print XML Module Disk "examples" Quote. -Print XML Module Disk "examples" Ring. -Print XML Module Disk "examples" Ring_abstract. -Print XML Module Disk "examples" Ring_normalize. -Print XML Module Disk "examples" Ring_theory. -Print XML Module Disk "examples" ZArithRing. diff --git a/helm/EXPORT/exportcsczfc/Makefile b/helm/EXPORT/exportcsczfc/Makefile deleted file mode 100644 index 7016b2865..000000000 --- a/helm/EXPORT/exportcsczfc/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -all: objects theories - -objects: - coqc -R csc_zfc csc_zfc csc_zfc/*.v - echo "Load Verbose provacsczfc." | ~/V7/bin/coqtop.byte -R csc_zfc csc_zfc - -theories: - ./exporttheories.sh - -clean: - rm -f *.vo csc_zfc/*.vo diff --git a/helm/EXPORT/exportcsczfc/csc_zfc/.cvsignore b/helm/EXPORT/exportcsczfc/csc_zfc/.cvsignore deleted file mode 100644 index 419956872..000000000 --- a/helm/EXPORT/exportcsczfc/csc_zfc/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.vo diff --git a/helm/EXPORT/exportcsczfc/csc_zfc/csc_eqdep.v b/helm/EXPORT/exportcsczfc/csc_zfc/csc_eqdep.v deleted file mode 100644 index 8019c08b3..000000000 --- a/helm/EXPORT/exportcsczfc/csc_zfc/csc_eqdep.v +++ /dev/null @@ -1,9 +0,0 @@ -Section Dependent_equality. - -Variable U:Type. -Variable P:U->Type. - -Inductive eq_depT [p:U;x:(P p)] : (q:U)(P q)->Prop := - eq_depT_intro : (eq_depT p x p x). - -End Dependent_equality. diff --git a/helm/EXPORT/exportcsczfc/csc_zfc/csc_zfc.v b/helm/EXPORT/exportcsczfc/csc_zfc/csc_zfc.v deleted file mode 100644 index a109239c0..000000000 --- a/helm/EXPORT/exportcsczfc/csc_zfc/csc_zfc.v +++ /dev/null @@ -1,1566 +0,0 @@ -(******************************************************************************) -(* Zermelo Set Theory + atomic sets *) -(* *) -(* Claudio Sacerdoti Coen *) -(* *) -(* Based on *) -(* *) -(* Zermolo Set Theory *) -(* *) -(* Benjamin Werner *) -(* *) -(******************************************************************************) - -(* This is an extension of Benjamin's encoding of usual Set Theory where I *) -(* assume the existence of exactly one atomic set for each object t of type T *) -(* where T is a Type in Coq: if (t:T) and (T:Type) then ((atom T t):Ens) *) -(* The usual axioms of set theory are modified so that they work in the *) -(* usual way if applied to "normal" sets, and in a reasonable way when *) -(* applied to atomic sets (for example (Union (atom T t) E) is equal to E for *) -(* each non-atomic set E) *) -(* All this has been already studied by Fraenkel and Mostowski in the '40, *) -(* but with totally different goals (in order to proove some independence *) -(* results in set theory) *) - -(* This is the introduction to the original encoding of Benjamin: *) -(* This is an encoding of usual Set Theory, simillar to Peter Aczel's work *) -(* in the early 80's. The main difference is that the propositions here *) -(* live in the impredicative world of "Prop". Thus, priority is given to *) -(* expressivity against constructivity. *) -(* *) -(* Since the definition of Sets is the same for both approaches, I added *) -(* most of Aczel's encoding of CZF at the end of the file. Many *) -(* definitions are common to both aproaches. *) - -(* In this work only the encoding of ZFC (and not that of CZF) has been *) -(* developed, but it should be straightforward to do. *) - -Require csc_eqdep. - -(******************************************************************************) -(* Useful data types *) -(******************************************************************************) - -Inductive Set F := . - -Inductive Set Un := void : Un. - -(* Existential quantification *) -Inductive EXType [P:Type; Q:P->Prop]: Prop := - EXTypei : (x:P)(Q x)->(EXType P Q). - -(* Sigma types -- i.e. computational existentials *) -Inductive sig [A:Type;P:A->Prop] : Type := - exist : (x:A)(P x)->(sig A P). - -(* Existential on the Type level *) -Inductive depprod [A:Type; P : A->Type] : Type := - dep_i : (x:A)(P x)->(depprod A P). - -(* Cartesian product in Type *) -Inductive prod_t [A,B:Type] : Type := - pair_t : A->B->(prod_t A B). - -(******************************************************************************) -(* Definition of Ens, EQ, IN *) -(******************************************************************************) - -(* The type representing sets (Ensemble = french for set) *) -Inductive Ens : Type := - sup : (A:Type)(A->Ens)->Ens - | atom : (A:Type)A->Ens. - -(* Recursive Definition of the extentional equality on sets *) -Definition EQ : Ens -> Ens -> Prop. -Induction 1. -Intros A f eq1. -Induction 1. -Intros B g eq2. -Apply and. -Exact (x:A) - (EXType ? [y:B](eq1 x (g y))). -Exact (y:B) - (EXType ? [x:A](eq1 x (g y))). - -Intros A' a'. -Exact False. - -Intros A a. -Induction 1. -Intros A' f eq1. -Exact False. - -Intros. -(*Exact (X == X0).*) -Exact (eq_depT Type [A:Type]A A a A0 y). -Save. - -Transparent EQ. - -(* Membership on sets *) -Definition IN: Ens -> Ens -> Prop := -[E1,E2:Ens] - Cases E2 of - (sup A f) => (EXType ? [y:A](EQ E1 (f y))) - | (atom A a) => False - end. -Transparent IN. - - -(******************************************************************************) -(* INCLUSION *) -(******************************************************************************) - -Definition INC : Ens -> Ens -> Prop := - [E1,E2:Ens] - Cases E1 E2 of - (sup A f) (sup B g) => (E:Ens)(IN E E1)->(IN E E2) - | (sup A f) (atom B b) => False - | (atom A a) (sup B g) => False (* ??? or True? *) - | (atom A a) (atom B b) => (EQ E1 E2) (* ??? or False? *) - end. - -(* EQ is an equivalence relation *) - -Theorem EQ_refl : (E:Ens)(EQ E E). -Induction E. -Intros; Split; Simpl; Intro. -Exists x; Exact (H x). -Exists y; Exact (H y). -Intros; Simpl; Constructor 1. -Qed. - -Theorem EQ_tran : (E1,E2,E3:Ens)(EQ E1 E2)->(EQ E2 E3)->(EQ E1 E3). -Induction E1; [Intros A1 f1 r1 | Intros A1 a1] ; -Induction E2; [Intros A2 f2 r2 | Intros A2 a2 | Intros A2 f2 r2 | Intros A2 a2]; -Induction E3; [Intros A3 f3 r3 | Auto | Contradiction | Auto | - Auto | Contradiction | Auto | Intros A3 a3]. -Simpl; Intros e1 e2; Split; Elim e1; Intros I1 I2; Elim e2; Intros I3 I4; - [ Intros a1; Elim (I1 a1) ; Intros a2 ; Elim (I3 a2) ; Intros a3 ; Exists a3 | - Intros a3; Elim (I4 a3) ; Intros a2 ; Elim (I2 a2) ; Intros a1 ; Exists a1 ]; - Apply r1 with (f2 a2); Assumption. - -Simpl ; Intros; Inversion H; Inversion H0; Assumption. -Qed. - -Theorem EQ_sym : (E1,E2:Ens)(EQ E1 E2)->(EQ E2 E1). -Induction E1 ; [ Intros A1 f1 r1 | Intros A1 a1 ]; -Induction E2 ; [Intros A2 f2 r2 | Contradiction | Contradiction |Intros A2 a2]. - -Induction 1; Intros e1 e2; Split; - [ Intros a2; Elim (e2 a2); Intros a1 H1; Exists a1 | - Intros a1; Elim (e1 a1); Intros a2 H2; Exists a2 ] ; Apply r1; Assumption. -Destruct 1; Apply EQ_refl. -Qed. - -Theorem EQ_INC : (E,E':Ens)(EQ E E')->(INC E E'). -Induction E ; [Intros A f r | Intros A a] ; Induction E' ; - [Intros A' f' r' | Contradiction | Contradiction | Intros A' a']. -Simpl; Destruct 1; Intros e1 e2. -Intros C; Induction 1; Intros a ea; Elim (e1 a); Intros a' ea'; Exists a'. -Apply EQ_tran with (f a); Assumption. -Destruct 1; Hnf; Constructor 1. -Qed. - -Hints Resolve EQ_sym EQ_refl EQ_INC : zfc. - -Theorem INC_EQ : (E,E':Ens)(INC E E')->(INC E' E)->(EQ E E'). -Induction E ; [Intros A f r | Intros A a] ; Induction E' ; - [Intros A' f' r' | Auto | Auto | Auto]. -Unfold INC; Simpl; Intros I1 I2; Split. -Intros a; Apply I1; Exists a; Apply EQ_refl. -Intros a'; Cut (EXType A [x:A](EQ (f' a')(f x))). -Induction 1; Intros a ea; Exists a; Apply EQ_sym; Exact ea. -Apply I2; Exists a'; Apply EQ_refl. -Qed. - -Hints Resolve INC_EQ : zfc. - -(* Membership is extentional (i.e. is stable w.r.t. EQ) *) - -Theorem IN_sound_left : - (E,E',E'':Ens) - (EQ E E')->(IN E E'')->(IN E' E''). -Induction E''; [Intros A'' f'' r'' e | Intros A'' a'' e]; Simpl. -Induction 1; Intros a'' p; Exists a''; Apply EQ_tran with E; - [Apply EQ_sym; Assumption | Assumption]. - -Intro; Assumption. -Qed. - -Theorem IN_sound_right : - (E,E',E'':Ens) - (EQ E' E'')->(IN E E')->(IN E E''). -Induction E'; [Intros A' f' r' | Intros A' a']; Induction E''; - [Intros A'' f'' r'' | Intros A'' a'' | Intros A'' f'' r'' | Intros A'' a'']; - Simpl. -Induction 1; Intros e1 e2; Induction 1; Intros a' e'; Elim (e1 a'); - Intros a'' e''; Exists a''; Apply EQ_tran with (f' a'); Assumption. -Intros; Assumption. -Intros; Elim H. -Intros; Assumption. -Qed. - -(* Inclusion is reflexive, transitive, extentional *) - -Theorem INC_refl : (E:Ens)(INC E E). -Induction E; Auto with zfc. -Qed. - -Theorem INC_tran : (E,E',E'':Ens)(INC E E')->(INC E' E'')->(INC E E''). -Induction E; Induction E'; Induction E''; Simpl; - Auto Orelse Contradiction Orelse (Intros; Elim H0; Assumption). -Qed. - -Theorem INC_sound_left : - (E,E',E'':Ens) - (EQ E E')->(INC E E'')->(INC E' E''). -Induction E; [Intros A f r | Intros A a]; Induction E'; - [Intros A' f' r' | Intros A' a' | Intros A' f' r' | Intros A' a']; - Induction E''; [Intros A'' f'' r'' | Contradiction | Contradiction | - Contradiction | Contradiction | Contradiction | Contradiction | - Intros A'' a'']. -Unfold INC; Intros; Apply H0; Apply IN_sound_right with (sup A' f'); - Auto with zfc. -Destruct 1; Auto. -Qed. - -Theorem INC_sound_right : - (E,E',E'':Ens) - (EQ E' E'')->(INC E E')->(INC E E''). -Induction E; [Intros A f r | Intros A a]; Induction E'; - [Intros A' f' r' | Intros A' a' | Intros A' f' r' | Intros A' a']; - Induction E''; [Intros A'' f'' r'' | Contradiction | Contradiction | - Contradiction | Contradiction | Contradiction | Contradiction | - Intros A'' a'']. -Unfold INC; Intros; Apply IN_sound_right with (sup A' f'); - [Assumption | Apply H0; Assumption]. -Destruct 1; Auto. -Qed. - -(******************************************************************************) -(* THE EMPTY SET *) -(******************************************************************************) - -(* The empty set (vide = french for empty) *) -Definition Vide : Ens := - (sup F [f:F]Cases f of end). - -Theorem Vide_est_vide : (E:Ens)(IN E Vide)->F. -Unfold Vide; Simpl; Intros E H; Cut False. -Induction 1. -Elim H; Intros x; Elim x. -Qed. - -(* CSC: This is different from Werner *) -Theorem tout_vide_est_Vide : - (A:Type)(f:A->Ens)((E':Ens)(IN E' (sup A f))->F)->(EQ (sup A f) Vide). -Intros; Hnf; Split. -Intro; Cut F. -Destruct 1. -Apply H with (f x); Unfold IN; Exists x; Apply EQ_refl. -Destruct y. -Qed. - -(******************************************************************************) -(* PAIRE *) -(******************************************************************************) - -Definition Paire : Ens -> Ens -> Ens := - [E1,E2:Ens] (sup bool [b:bool]Cases b of true => E1 | false => E2 end). - -(* The pair construction is extentional *) - -Theorem Paire_sound_left : (A,A',B:Ens) - (EQ A A')->(EQ (Paire A B)(Paire A' B)). -Unfold Paire . -Simpl. -(Intros; Split). -Induction x. -(Exists true; Auto with zfc). - -(Exists false; Auto with zfc). - -(Induction y; Simpl). -(Exists true; Auto with zfc). - -(Exists false; Auto with zfc). -Qed. - -Theorem Paire_sound_right : (A,B,B':Ens) - (EQ B B')->(EQ (Paire A B)(Paire A B')). -Unfold Paire; Simpl; Intros; Split. -Induction x. -(Exists true; Auto with zfc). -Exists false; Auto with zfc. -Induction y. -(Exists true; Auto with zfc). -Exists false; Auto with zfc. -Qed. - -Hints Resolve Paire_sound_right Paire_sound_left : zfc. - -Theorem IN_Paire_left : (E,E':Ens)(IN E (Paire E E')). -Unfold Paire; Exists true; Apply EQ_refl. -Qed. - -Theorem IN_Paire_right : (E,E':Ens)(IN E' (Paire E E')). -Unfold Paire; Exists false; Apply EQ_refl. -Qed. - -Theorem Paire_IN : (E,E',A:Ens)(IN A (Paire E E'))->(EQ A E)\/(EQ A E'). -Unfold Paire; Simpl. -Induction 1; Intros b; Elim b; Auto with zfc. -Save. - -Hints Resolve IN_Paire_left IN_Paire_right Vide_est_vide : zfc. - -(******************************************************************************) -(* SINGLETON *) -(******************************************************************************) - -(* CSC: This is different from Benjamin only because I like it more; *) -(* theorems are also simpler *) -(* In Benjamin's encoding (Sing E) was defined as (Paire E E) *) -Definition Sing : Ens -> Ens := - [E:Ens] (sup Un [x:Un]Cases x of void => E end). - -Theorem IN_Sing : (E:Ens)(IN E (Sing E)). -Simpl; Exists void; Apply EQ_refl. -Qed. - -Theorem IN_Sing_EQ : (E,E':Ens)(IN E (Sing E'))->(EQ E E'). -Simpl; Intros; Elim H; Destruct x; Trivial. -Qed. - -Hints Resolve IN_Sing IN_Sing_EQ : zfc. - -Theorem Sing_sound : (A,A':Ens)(EQ A A')->(EQ (Sing A)(Sing A')). -Intros; Hnf; Split; [Destruct x | Destruct y]; Exists void; Assumption. -Qed. - -Hints Resolve Sing_sound : zfc. - -Theorem EQ_Sing_EQ : (E1,E2:Ens)(EQ (Sing E1)(Sing E2))->(EQ E1 E2). -Intros; Hnf in H; Elim H; Intros; Elim (H0 void); Destruct x; Trivial. -Qed. - -Hints Resolve EQ_Sing_EQ : zfc. - -(******************************************************************************) -(* COMPREHENSION (OR SEPARATION) *) -(******************************************************************************) - -Definition Comp: Ens -> (Ens -> Prop) -> Ens. -Induction 1. -Intros A f fr P. -Apply (sup {x:A|(P (f x))}). -Induction 1; Intros x p; Exact (f x). -Intros. Exact X. -Qed. - -Transparent Comp. - -Theorem Comp_INC : (E:Ens)(P:Ens->Prop)(INC (Comp E P) E). -Destruct E. -Intros A f P; Simpl; Destruct E0; [Intros A' f' H | Intros A' a' H]; - Elim H; Destruct x; Intros x0 p eq; Exists x0; Exact eq. -Auto with zfc. -Qed. - -Theorem IN_Comp_P : - (E,A:Ens) - (P:Ens->Prop)((w1,w2:Ens)(P w1)->(EQ w1 w2)->(P w2))-> - (IN A (Comp E P))->(P A). -Induction E. -Simpl; Intros B f Hr A P H i; Elim i; Destruct x; Simpl; Intro b; Intros; - Apply H with (f b); Auto with zfc. -Contradiction. -Qed. - -Theorem IN_P_Comp : - (E,A:Ens) - (P:Ens ->Prop)((w1,w2:Ens)(P w1)->(EQ w1 w2)->(P w2))-> - (IN A E)->(P A)->(IN A (Comp E P)). -Induction E. -Simpl; Intros B f HR A P H i; Elim i; Simpl; Intros; Cut (P (f x)). -Intros Pf. -Exists (exist B [x:B](P (f x)) x Pf); Simpl; Auto with zfc. -Apply H with A; Auto with zfc. -Contradiction. -Qed. - -(* Again, extentionality is not stated, but easy *) - -(******************************************************************************) -(* UNION *) -(******************************************************************************) - -(* Projections of a set: *) -(* 1: its base type, F for atoms *) - -Definition pi1: Ens -> Type. -Induction 1. -Intros A f r. -Exact A. -Intros. -Exact F. -Save. - -Transparent pi1. - -(* 2: the function, [_:F]Vide for atoms *) - -Definition pi2 : (E:Ens)(pi1 E)->Ens. -Induction E. -Intros A f r. -Exact f. -Intros. -Exact Vide. -Save. - -Transparent pi2. - -Definition Union : (E:Ens)Ens. -Induction 1. -Intros A f r. -Apply (sup (depprod A [x:A](pi1 (f x)))). -Induction 1; Intros a b. -Exact (pi2 (f a) b). -Intros. -Exact Vide. -Save. - -Transparent Union. - -Theorem EQ_EXType : (E,E':Ens) - (EQ E E') - ->(a:(pi1 E)) - (EXType (pi1 E') [b:(pi1 E')](EQ (pi2 E a) (pi2 E' b))). -Induction E; [Intros A f r | Intros A a]; Induction E'; - [Intros A' f' r' | Intros A' a' | Intros A' f' r' | Intros A' a']. -Simpl; Destruct 1; Intros e1 e2 a; Apply e1. -Contradiction. -Contradiction. -Simpl; Destruct 2. -Qed. - -Transparent EQ_EXType. - -Theorem IN_EXType: (E,E':Ens)(IN E' E)-> - (EXType (pi1 E) [a:(pi1 E)](EQ E' (pi2 E a))). -Induction E. -Simpl; Intros A f r; Induction 1; Intros; Exists x; Assumption. -Destruct 1. -Qed. - -Theorem IN_Union : (E,E',E'':Ens) - (IN E' E)->(IN E'' E')->(IN E'' (Union E)). -Induction E. -2: Destruct 1. -Intros A f r. -Intros; Simpl. -Elim (IN_EXType (sup A f) E' H). -Intros x e. -Cut (EQ (pi2 (sup A f) x) E'). -2: Auto with zfc v62. -Intros e1. -Cut (IN E'' (pi2 (sup A f) x)). -Intros i1. -Elim (IN_EXType ? ? i1). -Intros x0 e2. -Simpl in x0. -Exists (dep_i A [x:A](pi1 (f x)) x x0). -Simpl. -Exact e2. -Apply IN_sound_right with E'; Assumption. -Qed. - -(* CSC: This is different from Benjamin *) -Theorem IN_INC_Union : - (A:Type)(f:A->Ens)(E:Ens)(IN (sup A f) E)->(INC (sup A f) (Union E)). -Induction E. -Intros A f r H; Hnf; Hnf in H; Intros; Elim H; Intros x e. -Cut (IN E0 (f0 x)). -Intro in_E0_f0x; Apply IN_Union with (f0 x). -Hnf; Split with x; Auto with zfc. - -Auto with zfc. -Apply IN_sound_right with (sup A f); Trivial. - -(Simpl; Destruct 2; Destruct x). -Qed. - -Theorem Union_IN : (E,E':Ens)(IN E' (Union E))-> - (EXType ? [E1:Ens](IN E1 E)/\(IN E' E1)). -Induction E. -2: (Simpl; Destruct 2; Destruct x). -Unfold Union ; Simpl; Intros A f r. -Induction 1. -Induction x. -(Intros a b; Simpl). -Intros. -Exists (f a). -Split. -(Exists a; Auto with zfc v62). - -(Apply IN_sound_left with (pi2 (f a) b); Auto with zfc v62). -Simpl. -(Generalize b ; Elim (f a); Simpl). -Intros. -(Exists b0; Auto with zfc v62). - -Destruct 2. -Qed. - -(* extentionality of union *) - -Theorem Union_sound - : (E,E':Ens)(EQ E E')->(EQ (Union E) (Union E')). -Unfold Union. -Induction E ; [Intros A f r | Intros A a] ; Induction E' ; - [Intros A' f' r' | Intros A' a' | Intros A' f' r' | Intros A' a']. - -Simpl; Induction 1; Intros e1 e2; Split. -Intros x; Elim x; Intros a aa; Elim (e1 a); Intros a' ea. -Elim (EQ_EXType (f a)(f' a') ea aa); Intros aa' eaa. -Exists (dep_i A' [x:A'](pi1 (f' x)) a' aa'); Simpl; Auto with zfc v62. -Intros c'; Elim c'; Intros a' aa'; Elim (e2 a'); Intros a ea. -Cut (EQ (f' a')(f a)). -2 : Auto with zfc v62. -Intros ea'; Elim (EQ_EXType (f' a')(f a) ea' aa'); Intros aa eaa. -Exists (dep_i A [x:A](pi1 (f x)) a aa); Auto with zfc v62. - -Contradiction. -Contradiction. -Destruct 1; Apply EQ_refl. -Qed. - -(* The union construction is monotone w.r.t. inclusion *) - -Theorem Union_mon : (E,E':Ens)(INC E E')->(INC (Union E)(Union E')). -Induction E ; [Intros A f r | Intros A a] ; Induction E'; - [Intros A' f' r' | Contradiction | Contradiction | Intros A' a']. -2: Auto with zfc. -Intro; Cut (E:Ens)(IN E (sup A f))->(IN E (sup A' f')). -2: Auto. -Intro XXX; Cut ((E:Ens)(IN E (Union (sup A f)))->(IN E (Union (sup A' f')))) - ->(INC (Union (sup A f)) (Union (sup A' f'))). -2: Auto. -Intros X; Apply X; Intros E0 Y; (Elim (Union_IN (sup A f) E0); Auto with zfc). -Destruct 1; Intros; Cut (IN x (sup A' f')). -2: Auto. -Intro; (Apply IN_Union with x; Auto). -Qed. - -(******************************************************************************) -(* INTERSECTION *) -(******************************************************************************) - -Definition Inter : (E:Ens)Ens := -[E:Ens] - Cases E of - (sup A f) => - (sup ? - [c:(depprod A - [a:A](depprod ? [b:(pi1 (f a))](x:A)(IN (pi2 (f a) b)(f x))) - ) - ] - Cases c of - (dep_i a (dep_i b p)) => (pi2 (f a) b) - end - ) - | (atom A a) => Vide - end. - -Theorem IN_Inter_all : (E,E':Ens) - (IN E' (Inter E))-> - (E'':Ens)(IN E'' E)->(IN E' E''). -Induction E; [Intros A f r | Contradiction]; Intros E'. -Induction 1; Intros c; Elim c; Intros a ca; Elim ca; Intros aa paa. -Intros e E'' e''. -Elim e''; Intros a1 ea1. -Apply IN_sound_right with (f a1); Auto with zfc v62. -Apply IN_sound_left with (pi2 (f a) aa); Auto with zfc v62. -Qed. - -Theorem all_IN_Inter : (E,E',E'':Ens) - (IN E'' E)-> - ((E'':Ens)(IN E'' E)->(IN E' E''))-> - (IN E' (Inter E)). -(Induction E; [Intros A f r | Contradiction]). -Intros E' E'' i H. -Elim (IN_EXType (sup A f) E'' i). -(Intros a e; Simpl in a). -Simpl in e. -(Cut (IN E' E''); Auto with zfc v62). -Intros i'. -(Cut (IN E' (f a)); Auto with zfc v62). -Intros i0. -Elim (IN_EXType (f a) E' i0). -Intros b e'. -Simpl. -Cut (x:A)(IN (pi2 (f a) b) (f x)). -Intros. -Exists (dep_i A - [a:A] - (depprod (pi1 (f a)) - [b:(pi1 (f a))](x:A)(IN (pi2 (f a) b) (f x))) - a - (dep_i (pi1 (f a)) - [b:(pi1 (f a))](x:A)(IN (pi2 (f a) b) (f x)) b H0)). -Simpl. -Auto with zfc v62. -Auto with zfc v62. -Intros. -Apply IN_sound_left with E'. -Auto with zfc v62. -Apply H. -Auto with zfc v62. -Simpl. -(Exists x; Auto with zfc v62). -(Apply IN_sound_right with E''; Auto with zfc v62). -Qed. - -(******************************************************************************) -(* POWERSET *) -(******************************************************************************) - -Definition Power : Ens -> Ens := -[E:Ens] - Cases E of - (sup A f) => - (sup ? - [P:A->Prop] - (sup ? - [c:(depprod A [a:A](P a))] - Cases c of - (dep_i a p) => (f a) - end - ) - ) - | (atom A a) => (Sing (atom A a)) (* ??? or Vide? *) - end. - -Theorem IN_Power_INC : (E,E':Ens)(IN E' (Power E))->(INC E' E). -Induction E. -Intros A f r; Unfold INC ; Simpl. -Intros E'; Induction 1; Intros P. -Elim E'. -Simpl. -Intros A' f' r'. -Induction 1; Intros HA HB. -Intros E''; Induction 1; Intros a' e. -Elim (HA a'). -Induction x; Intros a p. -Intros; Exists a. -Apply EQ_tran with (f' a'); Auto with zfc v62. -Contradiction. -Auto with zfc. -Qed. - -(* CSC: This is different from Benjamin *) -Theorem INC_IN_Power : (E,E':Ens)(INC E' E)->(IN E' (Power E)). -Induction E. -2: Induction E'. -2: Contradiction. -2: (Destruct 1; Unfold Power; Auto with zfc). -Intros A f r; Unfold INC; Simpl; Induction E'. -2: Contradiction. -Intros A' f' r' i. -Exists [a:A](IN (f a) (sup A' f')). -Simpl. -Split. -Intros. -Elim (i (f' x)). -Intros a e. -(Cut (EQ (f a) (f' x)); Auto with zfc v62). -Intros e1. -Exists (dep_i A [a:A](EXType A' [y:A'](EQ (f a) (f' y))) a - (EXTypei A' [y:A'](EQ (f a) (f' y)) x e1)). -Auto with zfc v62. -Simpl. -(Exists x; Auto with zfc v62). -Induction y; Induction 1; Intros. -(Exists x0; Auto with zfc v62). -Qed. - -Theorem Power_mon : (E,E':Ens)(INC E E')->(INC (Power E)(Power E')). -Induction E; [Intros A f r | Intros A a]; Induction E'; - [Intros A' f' r' | Contradiction | Contradiction | Destruct 1; Auto with zfc]. -Intro. -Hnf in H. -Cut ((E:Ens)(IN E (Power (sup A f)))->(IN E (Power (sup A' f')))) - ->(INC (Power (sup A f)) (Power (sup A' f'))). -2: Auto. -Intros. -Apply H0. -Intros. -Cut (INC E0 (sup A f)). -2: (Apply IN_Power_INC; Auto). -Intro. -Cut (INC E0 (sup A' f')). -Intro. -Apply INC_IN_Power. -Assumption. - -Generalize H2. -Elim E0. -Unfold INC. -Auto with zfc. - -Auto with zfc. -Qed. - -Theorem Power_sound : (E,E':Ens)(EQ E E')->(EQ (Power E)(Power E')). -Induction E; [Intros A f r | Intros A a]; Induction E'; - [Intros A' f' r' | Contradiction | Contradiction | Destruct 1; Auto with zfc]. -Intro. -Apply INC_EQ. -Cut ((E:Ens)(IN E (Power (sup A f)))->(IN E (Power (sup A' f')))) - ->(INC (Power (sup A f)) (Power (sup A' f'))). -2: Auto. -Intros; Apply H0; Clear H0; Intros; Cut (INC E0 (sup A f)). -2: (Apply IN_Power_INC; Auto with zfc). -Clear H0; Intro; Apply INC_IN_Power. -(Apply INC_sound_right with (sup A f); Auto). - -(* Using simmetry *) -Cut ((E:Ens)(IN E (Power (sup A' f')))->(IN E (Power (sup A f)))) - ->(INC (Power (sup A' f')) (Power (sup A f))). -2: Auto. -Intros; Apply H0; Clear H0; Intros; Cut (INC E0 (sup A' f')). -2: (Apply IN_Power_INC; Auto with zfc). -Clear H0; Intro; Apply INC_IN_Power. -(Apply INC_sound_right with (sup A' f'); Auto with zfc). -Qed. - -(******************************************************************************) -(* ORDERED COUPLES *) -(******************************************************************************) - -(* small lemmas *) - -Theorem not_EQ_Sing_Vide : (E:Ens)(EQ (Sing E) Vide)->F. -Intros E e; Cut False. -Induction 1. -Cut (IN E Vide). -Simpl; Induction 1; Intros xx; Elim xx; Induction 1. -Apply IN_sound_right with (Sing E); Auto with zfc v62. -Qed. - -Theorem not_EQ_Vide_Sing : (E:Ens)(EQ Vide (Sing E))->F. -Intros E e; Cut False. -Induction 1. -Cut (IN E Vide). -Simpl; Induction 1; Intros xx; Elim xx; Induction 1. -Apply IN_sound_right with (Sing E); Auto with zfc v62. -Qed. - -(* This definition of the ordered pair is slightly different from *) -(* the usual one, since we want it to work in an intuisionistic *) -(* setting. Works the same, neitherless. The soundness proofs are *) -(* unpleasant. *) - -Definition Couple := [E,E': Ens](Paire (Sing E) (Paire Vide (Sing E'))). - -Theorem Couple_inj_left : (A,A',B,B':Ens) - (EQ (Couple A A')(Couple B B'))->(EQ A B). -(Unfold Couple; Simpl); Induction 1; (Intros HA HB; Elim (HA true)). -(Intros x; Elim x; Simpl; Induction 1; Intros H3 H4; Elim (H3 void); - Simpl; Destruct x0). -Trivial. - -Elim (H4 false); Destruct x1; Intros; Cut (EQ (Sing B') Vide). -Simpl; Induction 1; Intros yy; Elim (yy void); Destruct x2. - -Apply EQ_tran with A. -Auto with zfc. - -Assumption. - -Intros; Cut (EQ (Sing B') Vide). -Simpl; Induction 1; Intros yy; Elim (yy void); Destruct x1. - -Apply EQ_tran with A. -Auto with zfc. - -Elim (H4 true); Destruct x1; Trivial. -Qed. - -Theorem Couple_inj_right : (A,A',B,B':Ens) - (EQ (Couple A A')(Couple B B'))->(EQ A' B'). -Unfold Couple; Simpl. -Induction 1; Intros H1 H2. -Elim (H1 false). -Intros bb1; Elim bb1. -Intros HF. -Change (EQ (Paire Vide (Sing A'))(Sing B)) in HF. -Cut F. -Induction 1. -Apply (not_EQ_Vide_Sing A'). -Apply EQ_tran with B. -Apply IN_Sing_EQ; Apply IN_sound_right with (Paire Vide (Sing A')); - Auto with zfc v62. -Apply EQ_sym; Apply IN_Sing_EQ; - Apply IN_sound_right with (Paire Vide (Sing A')); Auto with zfc v62. -Change (EQ (Paire Vide (Sing A'))(Paire Vide (Sing B')))->(EQ A' B'). -Intros HP; Cut (EQ (Sing A') (Sing B')). -Intros; Auto with zfc v62. -Cut (IN (Sing A')(Paire Vide (Sing B'))). -Intros HI; Elim (Paire_IN Vide (Sing B')(Sing A') HI). -Intros; Cut F. -Induction 1. -Apply not_EQ_Sing_Vide with A'; Assumption. -Trivial with zfc v62. -Apply IN_sound_right with (Paire Vide (Sing A')); Auto with zfc v62. -Qed. - -(******************************************************************************) -(* POWERSET *) -(******************************************************************************) - -(* Here we cheat. It is easier to define the cartesian product using *) -(* the type theoretical product, i.e. we here use non set-theoretical *) -(* constructions. We could however use the usual definitions. *) - -Definition Prod : Ens -> Ens -> Ens := -[E,E':Ens] - Cases E E' of - (sup A f) (sup A' f') => - (sup ? - [c:(prod_t A A')] - Cases c of - (pair_t a a') => (Couple (f a) (f' a')) - end - ) - | _ _ => Vide - end. - -Hints Resolve Paire_sound_left Paire_sound_right : zfc. - -Theorem Couple_sound_left : - (A,A',B:Ens)(EQ A A')->(EQ (Couple A B)(Couple A' B)). - Unfold Couple;Intros; Auto with zfc v62. -Save. - -Theorem Couple_sound_right: - (A,B,B':Ens)(EQ B B')->(EQ (Couple A B)(Couple A B')). - Unfold Couple;Intros; Auto with zfc v62. -Save. - -Theorem Couple_IN_Prod : (E1,E2,E1',E2':Ens) - (IN E1' E1)->(IN E2' E2)-> - (IN (Couple E1' E2')(Prod E1 E2)). -Induction E1; [Intros A1 f1 r1 | Contradiction]. -Induction E2; [Intros A2 f2 r2 | Contradiction]. -Intros E1' E2' i1 i2. -Elim (IN_EXType (sup A1 f1) E1'). -(Intros x e1; Simpl in x). -Elim (IN_EXType (sup A2 f2) E2'). -(Intros x0 e2; Simpl in x). -Apply IN_sound_left with (Couple (pi2 (sup A1 f1) x) (pi2 (sup A2 f2) x0)). -Apply EQ_tran with (Couple (pi2 (sup A1 f1) x) E2'). -Apply Couple_sound_right. -Auto with zfc v62. - -(Apply Couple_sound_left; Auto with zfc v62). - -Simpl. -Exists (pair_t ? ? x x0). -Simpl. -Split. - -Induction x1. -Exists true; Auto with zfc. -Exists false; Auto with zfc. - -Induction y. -Exists true; Auto with zfc. -Exists false; Auto with zfc. -Assumption. -Assumption. -Qed. - -Theorem Couple_Prod_IN : (E1,E2,E1',E2':Ens) - (IN (Couple E1' E2')(Prod E1 E2))-> - (IN E1' E1)/\(IN E2' E2). -Induction E1; [Intros A1 f1 r1 | Destruct 1; Destruct x]. -Induction E2; [Intros A2 f2 r2 | Destruct 1; Destruct x]. -Intros E1' E2' i. -Elim (IN_EXType (Prod (sup A1 f1) (sup A2 f2)) (Couple E1' E2') i). -Destruct x; Intros a1 a2 e. -Change (EQ (Couple E1' E2') (Couple (f1 a1) (f2 a2))) in e. -Cut (EQ E1' (f1 a1)). -Cut (EQ E2' (f2 a2)). -Intros e1 e2. -Split. -Apply IN_sound_left with (f1 a1); Auto with zfc v62; Simpl; Exists a1; - Auto with zfc v62. -Apply IN_sound_left with (f2 a2); Auto with zfc v62; Simpl; Exists a2; - Auto with zfc v62. -Apply Couple_inj_right with A:=E1' B:=(f1 a1); Auto with zfc v62. -Apply Couple_inj_left with E2' (f2 a2); Auto with zfc v62. -Qed. - -Theorem IN_Prod_EXType : (E,E',E'':Ens)(IN E'' (Prod E E'))-> - (EXType ? [A:Ens](EXType ? [B:Ens](EQ (Couple A B) E''))). -Induction E ; [Intros A f r | Destruct 1; Destruct x]. -Induction E'; [Intros A' f' r' | Destruct 1; Destruct x]. -Intros; Elim (IN_EXType (Prod (sup A f) (sup A' f')) E''). -Induction x. -Intros; Exists (f y); Exists (f' y0); Auto with zfc v62. -Auto with zfc v62. -Qed. - -(******************************************************************************) -(* ORDINALS *) -(******************************************************************************) - -Definition Succ := [E:Ens](Union (Paire E (Sing E))). - -Inductive Ord : Ens -> Prop := - Oo : (Ord Vide) -| So : (E:Ens)(Ord E)->(Ord (Succ E)) -| Lo : (E:Ens)((e:Ens)(IN e E)->(Ord e))->(Ord (Union E)) -| Eo : (E,E':Ens)(Ord E)->(EQ E E')->(Ord E'). - -Hints Resolve Oo So Lo : zfc. - -Definition Nat : nat ->Ens. -Induction 1; Intros. -Exact Vide. -Exact (Succ X). -Save. - -Transparent Nat. - -Theorem Nat_Ord : (n:nat)(Ord (Nat n)). -Induction n; Simpl; Auto with zfc v62. -Save. - -Definition Omega : Ens := - (sup nat Nat). - -Theorem IN_Succ : (E:Ens)(IN E (Succ E)). -Intros E; Unfold Succ; Apply IN_Union with (Sing E); Auto with zfc v62. -Qed. - -(* CSC: This is different from Werner *) -Theorem INC_Succ : (A:Type)(f:A->Ens)(INC (sup A f) (Succ (sup A f))). -Intros; Cut ((E:Ens)(IN E (sup A f))->(IN E (Succ (sup A f)))) - ->(INC (sup A f) (Succ (sup A f))). -Intros; Apply H; Unfold Succ; Intros. -Apply IN_Union with (sup A f); Auto with zfc. - -Intros; Exact H. -Qed. - -Hints Resolve IN_Succ INC_Succ : zfc. - -Theorem IN_Succ_or : (E,E':Ens)(IN E' (Succ E))->(EQ E E')\/(IN E' E). -Intros E E' i. -Unfold Succ in i. -Elim (Union_IN (Paire E (Sing E)) E' i). -Intros E1; Induction 1; Intros i1 i2. -Elim (Paire_IN E (Sing E) E1 i1). -Intros; Right; Apply IN_sound_right with E1; Auto with zfc v62. -Intros; Left; Cut (IN E' (Sing E)). -Auto with zfc v62. -Apply IN_sound_right with E1; Auto with zfc v62. -Qed. - -Theorem E_not_IN_E : (E:Ens)(IN E E)->F. -Induction E. -Intros A f r i. -Cut False. -Induction 1. -Elim (IN_EXType (sup A f) (sup A f) i); Intros a e. - -Simpl in a. -Change (EQ (sup A f) (f a)) in e. -Elim (r a). -Apply IN_sound_right with (sup A f); Auto with zfc v62. -Exists a; Auto with zfc v62. -Intros; Cut False; Contradiction. -Qed. - -Theorem Nat_IN_Omega : (n:nat)(IN (Nat n) Omega). -Intros; Simpl; Exists n; Auto with zfc v62. -Qed. -Hints Resolve Nat_IN_Omega : zfc. - -Theorem IN_Omega_EXType : (E:Ens)(IN E Omega)->(EXType ? [n:nat](EQ (Nat n) E)). -(Simpl; Induction 1). -Intros n e. -(Exists n; Auto with zfc v62). -Qed. - -Theorem IN_Nat_EXType : (n:nat)(E:Ens)(IN E (Nat n))->(EXType ? [p:nat](EQ E (Nat p))). -Induction n. -Simpl. -Induction 1. -Induction x. - -Intros. -Change (IN E (Succ (Nat n0))) in H0. -Elim (IN_Succ_or (Nat n0) E H0). -(Intros; Exists n0). -Auto with zfc v62. - -Intros. -(Elim (H E); Auto with zfc v62). -Qed. - -Theorem Omega_EQ_Union : (EQ Omega (Union Omega)). -Apply INC_EQ. -Cut ((E:Ens)(IN E Omega)->(IN E (Union Omega))) - ->(INC Omega (Union Omega)). -Intros; Apply H. -Clear H. -Intros. -Elim (IN_Omega_EXType E H). -Intros n e. -Apply IN_Union with (Nat (S n)). -Auto with zfc v62. - -Apply IN_sound_left with (Nat n). -Auto with zfc v62. - -(Change (IN (Nat n) (Succ (Nat n))); Auto with zfc v62). - -Intros. -Exact H. - -Cut ((E:Ens)(IN E (Union Omega))->(IN E Omega)) - ->(INC (Union Omega) Omega). -Intros; Apply H; Clear H. -Intros. -Elim (Union_IN Omega E H). -Intros e h. -Elim h. -Intros i1 i2. -Elim (IN_Omega_EXType e i1). -Intros n e1. -Cut (IN E (Nat n)). -Intros. -(Elim (IN_Nat_EXType n E H0); Intros). -(Apply IN_sound_left with (Nat x); Auto with zfc v62). - -(Apply IN_sound_right with e; Auto with zfc v62). - -Intros. -Exact H. -Qed. - -Theorem Omega_Ord : (Ord Omega). -Apply Eo with (Union Omega). -Apply Lo. -Intros. -Elim (IN_Omega_EXType e H). -Intros n ee. -Apply Eo with (Nat n); Auto with zfc v62. -Elim n. -Auto with zfc v62. -Auto with zfc v62. -Intros. -Change (Ord (Succ (Nat n0))); Auto with zfc v62. -Apply EQ_sym; Auto with zfc v62. -Apply Omega_EQ_Union. -Qed. - -Definition Alpha : Ens->Ens. -Induction 1. -Intros A f r. -Apply Union. -Apply (sup A). -Intros a. -Exact (Power (r a)). -Intros A a; Exact (atom A a). (* ??? or Vide? *) -Save. - -Transparent Alpha. - -(******************************************************************************) -(* AXIOM OF CHOICE *) -(******************************************************************************) - -(* A Type-theoretical axiom of choice gives us the collection axiom *) - -Definition collection := - (P:Ens->Ens->Prop) - ((x,x',y:Ens)(EQ x x')->(P x y)->(P x' y))-> - ((E:Ens)(EXType ? (P E)))-> - (E:Ens)(EXType ? [A:Ens](x:Ens)(IN x E)-> - (EXType ? [y:Ens](IN y A)/\(P x y))). - - -Definition choice := - (A,B:Type)(P:A->B->Prop) - ((a:A)(EXType ? [b:B](P a b)))-> - (EXType ? [f:A->B]((a:A)(P a (f a)))). - -Theorem Choice_Collection : choice -> collection. -Intro; Unfold collection; Intros P comp G E; - Cut (EXType ? [f:(Ens->Ens)](B:Ens)(P B (f B))). -Induction 1; Intros f Pf; Elim E. -Intros A g hr; Split with (sup A [a:A](f (g a))). -Simpl; Intros X i; Elim i; Intros a ea; Split with (f (g a)). -Split. -Exists a; Auto with zfc. - -Apply comp with (g a); Auto with zfc. - -Auto with zfc. - -Intros; Split with Vide; Contradiction. - -Unfold choice in H; Apply H; Intros; Elim (G a); Intros b hb; Exists b; - Assumption. -Qed. - -(* If we also assume the excluded middle, we can derive *) -(* the usual replacement schemata. *) - -Definition functional := - [P:Ens->Ens->Prop](x,y,y':Ens) - (P x y)->(P x y')->(EQ y y'). -Definition replacement := - (P:Ens->Ens->Prop) - (functional P)-> - ((x,y,y':Ens)(EQ y y')->(P x y)->(P x y'))-> - ((x,x',y:Ens)(EQ x x')->(P x y)->(P x' y))-> - (X:Ens)(EXType ? [Y:Ens](y:Ens) - (((IN y Y)->(EXType ? [x:Ens](IN x X)/\(P x y))) - /\((EXType ? [x:Ens](IN x X)/\(P x y))->(IN y Y)))). - -Theorem classical_Collection_Replacement : - ((S:Prop)S\/(S->False))-> - collection -> - replacement. -Unfold replacement; Intros EM Collection P fp comp_r comp_l X. -Cut (EXType ? [Y:Ens](y:Ens)((EXType ? [x:Ens](IN x X)/\(P x y))->(IN y Y))). -Induction 1; Intros Y HY. -Exists (Comp Y [y:Ens](EXType ? [x:Ens](IN x X)/\(P x y))). -Intros y; Split. -Intros HC. -Apply (IN_Comp_P Y y [y0:Ens](EXType Ens [x:Ens](IN x X)/\(P x y0))); Auto with zfc v62. -Intros w1 w2; Induction 1; Intros x; Induction 1; Intros Ix Px e. -Exists x; Split; Auto with zfc v62. -Apply comp_r with w1; Auto with zfc v62. -Intros He. -Apply IN_P_Comp. - -Intros w1 w2; Induction 1; Intros x; Induction 1; Intros Ix Px e. -Exists x; Split; Auto with zfc v62. -Apply comp_r with w1; Auto with zfc v62. -Apply HY; Auto with zfc v62. -Auto with zfc v62. - -Elim (Collection [x,y:Ens]((P x y)\/(((y':Ens)(P x y')->False)/\(EQ y Vide)))) - with X. -Intros Y HY. -Elim (EM (EXType ? [x:Ens](IN x X)/\(P x Vide))). -Intros Hvide; Elim Hvide; Intros xv Hxv; Exists Y. -Intros y; Induction 1; Intros x; Induction 1; Intros Hx1 Hx2. -Elim (HY x Hx1). -Intros y'; Induction 1; Intros Hy'1 Hy'2. -Elim Hy'2. -Intros Hy'3; Apply IN_sound_left with y'; Auto with zfc v62. -Apply fp with x; Auto with zfc v62. -Induction 1; Intros Hy'3 Hy'4. -Elim (Hy'3 y Hx2). -Intros HP; Exists (Comp Y [y:Ens]((EQ y Vide)->False)). -Intros y; Induction 1; Intros x; Induction 1; Intros Hx1 Hx2. -Apply IN_P_Comp. -Intros w1 w2 Hw1 Hw Hw2; Apply Hw1; Apply EQ_tran with w2; Auto with zfc v62. -Elim (HY x). -Intros y'; Induction 1; Intros Hy'1 Hy'2. -Elim Hy'2; Intros Hy'3. -Apply IN_sound_left with y'; Auto with zfc v62. -Apply fp with x; Auto with zfc v62. -Elim Hy'3; Intros Hy'4 Hy'5. -Elim (Hy'4 y); Auto with zfc v62. -Assumption. -Intros e; Apply HP; Exists x; Split; Auto with zfc v62; - Apply comp_r with y; Auto with zfc v62; Apply fp; Auto with zfc v62. -Intros x x' y e Hx; Elim Hx; Intros Hx1. -Left; Apply comp_l with x; Auto with zfc v62. -Right; Elim Hx1; Intros Hx2 Hx3; Split. -2 : Assumption. -Intros y' Hy'; Apply (Hx2 y'); Apply comp_l with x'; Auto with zfc v62. -Intros x; Elim (EM (EXType ? [y:Ens](P x y))); Intros Hx. -Elim Hx; Intros x0 Hx0; Exists x0; Left; Assumption. -Exists Vide; Right; Split; Auto with zfc v62. -Intros y Hy; Elim Hx; Exists y; Auto with zfc v62. -Qed. - -(******************************************************************************) -(* SMALL SETS AND THE BIG SET OF SMALL SETS *) -(******************************************************************************) - -(* Some definitions replicated on another type level *) - -Inductive EXType' [P:Type; Q:P->Prop]: Prop := - EXTypei' : (x:P)(Q x)->(EXType' P Q). - -Inductive prod_t' [A,B:Type] : Type := - pair_t' : A->B->(prod_t' A B). - -Inductive depprod'' [A:Type; P : A->Type] : Type := - dep_i'' : (x:A)(P x)->(depprod'' A P). - -(* The small sets *) -Inductive Ens' : Type := - sup' : (A:Type)(A->Ens')->Ens' - | atom' : (A:Type)A->Ens'. - -(* Equality on small sets *) -Definition EQ' : Ens' -> Ens' -> Prop. -Induction 1. -Intros A f eq1. -Induction 1. -Intros B g eq2. -Apply and. -Exact (x:A) - (EXType' ? [y:B](eq1 x (g y))). -Exact (y:B) - (EXType' ? [x:A](eq1 x (g y))). - -Intros A' a'. -Exact False. - -Intros A a. -Induction 1. -Intros A' f eq1. -Exact False. - -Intros. -(*Exact (X == X0).*) -Exact (eq_depT Type [A:Type]A A a A0 y). -Save. - -Transparent EQ'. - -(* small sets can be injected into big sets *) -Definition inj : Ens'->Ens. -Induction 1; [Intros A f fr ; Exact (sup A fr) | Intros A a ; Exact (atom A a)]. -Qed. - -Transparent inj. - -Theorem inj_sound : (E1,E2:Ens')(EQ' E1 E2)->(EQ (inj E1)(inj E2)). -Induction E1; [Intros A1 f1 r1 | Intros A a] ; Induction E2; - [Intros A2 f2 r2 | Contradiction | Contradiction | Intros A' a']. -(Induction 1; Intros HR1 HR2; Split). -(Intros a1; Elim (HR1 a1); Intros a2 Ha2; Exists a2; Auto with zfc v62). -(Intros a2; Elim (HR2 a2); Intros a1 Ha1; Exists a1; Auto with zfc v62). - -Auto with zfc. -Qed. - -Definition Sing' : Ens' -> Ens' := - [E:Ens'] (sup' Un [x:Un]Cases x of void => E end). - -Definition Power' : Ens' -> Ens' := -[E:Ens'] - Cases E of - (sup' A f) => - (sup' ? - [P:A->Prop] - (sup' ? - [c:(depprod'' A [a:A](P a))] - Cases c of - (dep_i'' a p) => (f a) - end - ) - ) - | (atom' A a) => (Sing' (atom' A a)) (* ??? or Vide? *) - end. - -Theorem Power_sound_inj : (E:Ens')(EQ (inj (Power' E))(Power (inj E))). -Induction E; [Intros A f HR | Intros A a]. -Simpl; Split. -Intros P; Exists P; Split. -Intros c; Elim c; Intros a p. -Exists (dep_i A [a0:A](P a0) a p); Simpl; Auto with zfc v62. -Intros c; Elim c; Intros a p. -Exists (dep_i'' A [a0:A](P a0) a p); Simpl; Auto with zfc v62. -Intros P; Exists P; Split. -Intros c; Elim c; Intros a p. -Exists (dep_i A [a0:A](P a0) a p); Simpl; Auto with zfc v62. -Intros c; Elim c; Intros a p. -Exists (dep_i'' A [a0:A](P a0) a p); Simpl; Auto with zfc v62. - -Simpl; Split. -Destruct x; Exists void; Auto with zfc. -Destruct y; Exists void; Auto with zfc. -Qed. - -(* The set of small sets *) -Definition Big := (sup Ens' inj). - -Theorem Big_is_big : (E:Ens')(IN (inj E) Big). -Intros E; Unfold Big; Simpl; Exists E; Auto with zfc. -Qed. - -Theorem IN_Big_small : (E:Ens)(IN E Big)->(EXType' ? [E':Ens'](EQ E (inj E'))). -Unfold Big; Simpl; Induction 1; Intros E' HE'; Exists E'; Assumption. -Qed. - -Theorem IN_small_small : (E:Ens)(E':Ens')(IN E (inj E'))-> - (EXType' ? [E1:Ens'](EQ E (inj E1))). -Induction E'; [Intros A' f' HR' | Contradiction]; Simpl; - Induction 1; Intros a' e'; Exists (f' a'); Assumption. -Qed. - -Theorem Big_closed_for_power : (E:Ens)(IN E Big)->(IN (Power E) Big). -Unfold Big; Simpl; Intros E; Induction 1; Intros E' HE'; Exists (Power' E'). -Apply EQ_tran with (Power (inj E')). -Apply Power_sound; Assumption. -Apply EQ_sym; Apply Power_sound_inj. -Qed. - -(******************************************************************************) -(* NO SET OF ALL SETS *) -(******************************************************************************) - -(* Just for fun : a proof that there is no set of all sets, using *) -(* Russell's paradox construction *) -(* There, of course, are other proofs (foundation, etc) *) - -Theorem Russell : (E:Ens)((E':Ens)(IN E' E))->False. -Intros U HU. -Cut ([x:Ens](IN x x)->False (Comp U [x:Ens](IN x x)->False)). -Intros HR. -Apply HR. -(Apply IN_P_Comp; Auto with zfc v62). -(Intros w1 w2 HF e i; Apply HF; Apply IN_sound_left with w2; Auto with zfc v62; - Apply IN_sound_right with w2; Auto with zfc v62). -Intros H. -Cut (IN (Comp U [x:Ens](IN x x)->False) (Comp U [x:Ens](IN x x)->False)). -Change ([x:Ens](IN x x)->False (Comp U [x:Ens](IN x x)->False)). -Cut (w1,w2:Ens)((IN w1 w1)->False)->(EQ w1 w2)->(IN w2 w2)->False. -Intros ww. -Exact (IN_Comp_P U (Comp U [x:Ens](IN x x)->False) - [x:Ens](IN x x)->False ww H). -(Intros w1 w2 HF e i; Apply HF; Apply IN_sound_left with w2; Auto with zfc v62; - Apply IN_sound_right with w2; Auto with zfc v62). -Assumption. -Qed. - -(******************************************************************************) -(* SOME AXIOMS AND STRANGE THINGS ;-( *) -(* *) -(* The need for axioms is due to the usage of dependent equality, or to my *) -(* ignorance about it ;-) *) -(* *) -(******************************************************************************) - -Axiom a_de_pi2 : - (T:Type)(n,m:T)(existT Type [A:Type]A T n)==(existT Type [A:Type]A T m)->n==m. - -(* The main consequence of the previous axiom *) -Theorem a_pi2 : (T:Type)(n,m:T)(atom T n)==(atom T m)->n==m. -Intros; Inversion H; Apply a_de_pi2; Assumption. -Qed. - -(* This theorem is really strange: I can prove this in general, but I can't *) -(* prove any of it's instance: for example I can't prove *) -(* ~(nat==bool)->~(atom nat O)==(atom bool true) due to an internal error of *) -(* Coq *) -Theorem a_npi1 : (T1,T2:Type)(t1:T1)(t2:T2)~T1==T2->~(atom T1 t1)==(atom T2 t2). -Unfold not; Intros; Apply H; Inversion H0; Reflexivity. -Qed. - -(******************************************************************************) -(* MAPPING A TYPE TO THE SET OF IT'S ELEMENTS *) -(******************************************************************************) - -(* (Ens_of_t T t) is thought as the coercion from an element (t:T) to a set *) -Definition Ens_of_t : (T:Type)T->Ens := - [T:Type][t:T](atom T t). - -(* (Ens_of_T T) is thought as the set of the elements of type T ... *) -Definition Ens_of_T : Type -> Ens := - [T:Type] (sup T [t:T](Ens_of_t T t)). - -(* ... and (Prop_on_Ens_of_Prop T P) is thought as the proposition on Ens *) -(* that is true only for (atom T t) where (t:T) and (P t) is true. *) -Inductive Prop_on_Ens_of_Prop [T:Type; P:T->Prop] : Ens->Prop := - cons : (t:T)(P t)->(Prop_on_Ens_of_Prop T P (atom T t)). - -Theorem Prop_on_Ens_of_Prop_atom_Prop : - (T:Type; P:(T->Prop); t:T)(Prop_on_Ens_of_Prop T P (atom T t))->(P t). -Intros; Inversion H; Replace t with t0. -Assumption. - -Apply a_de_pi2; Assumption. -Qed. - -Theorem Prop_on_Ens_of_Prop_t : - (T:Type; P:(T->Prop); E:Ens) - (Prop_on_Ens_of_Prop T P E) - ->(EXType T [t:T]E==(atom T t)/\(P t)). -Intros. -Inversion H. -Split with t. -Auto. -Qed. - -Lemma EQ_atom: (T:Type)(t:T)(E:Ens)(EQ (atom T t) E)->(atom T t)==E. -Destruct E. -Contradiction. - -Intros. -Inversion H. -Reflexivity. -Qed. - - -Theorem Prop_on_Ens_of_Prop_sound : - (E1,E2:Ens)(T:Type)(P:T->Prop) - (EQ E1 E2) - -> (Prop_on_Ens_of_Prop T P E1) - -> (Prop_on_Ens_of_Prop T P E2). -Intros. -Cut (EXType ? [t:T]E1==(atom T t)/\(P t)). -Destruct 1; Destruct 1. -Intros. -Rewrite H3 in H. -Cut (atom T x)==E2. -Intros. -Rewrite <- H5. -Constructor 1. -Assumption. - -Apply EQ_atom. -Assumption. - -Apply Prop_on_Ens_of_Prop_t. -Assumption. -Qed. - - -(******************************************************************************) -(* EXAMPLES OF USAGE *) -(******************************************************************************) - -(* We could define an implicit coercion from nat to Ens using Ens_of_t *) -Coercion Ens_of_nat := [n:nat](Ens_of_t nat n). - -(* CNat is the set of the natural numbers of Coq ... *) -Definition CNat : Ens := - (Ens_of_T nat). - -Mutual Inductive - is_even : nat->Prop := - is_even_O : (is_even O) - | is_even_S : (n:nat)(is_odd n)->(is_even (S n)) -with - is_odd : nat->Prop := - id_ood_S : (n:nat)(is_even n)->(is_odd (S n)). - -Lemma not_even_odd: (n:nat)(is_even n)->(is_odd n)->False. -Induction n. -Intros; Inversion H0. - -Intros; Apply H; [Inversion H1 | Inversion H0]; Assumption. -Qed. - -Definition Cis_even : Ens -> Prop := - (Prop_on_Ens_of_Prop nat is_even). - -Definition Cis_odd : Ens -> Prop := - (Prop_on_Ens_of_Prop nat is_odd). - -(* ... and CEven and COdd are the sets of even/odd natural numbers of Coq *) - -Definition CEven := (Comp CNat Cis_even). - -Definition COdd := (Comp CNat Cis_odd). - -(* And now an easy fact: the intersection of CEven with COdd is empty *) -Fact COdd_Inter_CEven_EQ_Vide: (EQ (Inter (Paire CEven COdd)) Vide). -Apply INC_EQ. -Cut (E:Ens)(IN E (Inter (Paire CEven COdd)))->(IN E Vide). -Auto. - -Intros. -Cut False. -Contradiction. - -Cut (IN E CEven)/\(IN E COdd). -Destruct 1. -Intros. -Unfold CEven in H1. -Cut (Cis_even E). -Unfold COdd in H2. -Cut (Cis_odd E). -Intros. -Inversion H3. -Inversion H4. -Rewrite <- H6 in H8. -Cut t0==t. -Intro. -Rewrite H9 in H7. -Apply not_even_odd with t; Assumption. - -Apply a_pi2; Assumption. - -Apply IN_Comp_P with CNat. -Intros. -Unfold Cis_odd. -Apply Prop_on_Ens_of_Prop_sound with w1; Assumption. - -Assumption. - -Apply IN_Comp_P with CNat. -Intros. -Unfold Cis_even. -Apply Prop_on_Ens_of_Prop_sound with w1; Assumption. - -Assumption. - -Split. -Apply IN_Inter_all with (Paire CEven COdd). -Assumption. - -Auto with zfc. - -Apply IN_Inter_all with (Paire CEven COdd). -Assumption. - -Auto with zfc. - -Simpl. -Destruct 1. -Destruct x. -Qed. - -(* Another easy fact: O is not in COdd *) -Fact O_not_IN_COdd : ~(IN O COdd). -Unfold not; Intro. -Cut (Cis_odd O). -Intro. -Inversion H0. -Simpl in H1. -Cut t==O. -Intro. -Rewrite H3 in H2. -Inversion H2. - -Apply a_de_pi2. -Assumption. - -Unfold COdd in H. -Apply IN_Comp_P with CNat. -Intros. -Unfold Cis_odd. -Apply Prop_on_Ens_of_Prop_sound with w1. -Assumption. - -Exact H0. - -Assumption. -Qed. diff --git a/helm/EXPORT/exportcsczfc/exporttheories.sh b/helm/EXPORT/exportcsczfc/exporttheories.sh deleted file mode 100755 index 419e33d53..000000000 --- a/helm/EXPORT/exportcsczfc/exporttheories.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -echo "Exporting theory $1"; - -for i in csc_eqdep.v csc_zfc.v - do - basename=$(basename $i | sed s/\\.v//) - cat $i | ../mktheory.pl "csczfc/$basename" > \ - examples/csczfc/$1/$basename.theory.xml - done diff --git a/helm/EXPORT/exportcsczfc/provacsczfc.v b/helm/EXPORT/exportcsczfc/provacsczfc.v deleted file mode 100644 index 81737d5a9..000000000 --- a/helm/EXPORT/exportcsczfc/provacsczfc.v +++ /dev/null @@ -1,6 +0,0 @@ -Require Xml. -Require csc_eqdep. -Require csc_zfc. - -Print XML Dir Disk "examples/csczfc" csc_eqdep. -Print XML Dir Disk "examples/csczfc" csc_zfc. diff --git a/helm/EXPORT/exportprove/Makefile b/helm/EXPORT/exportprove/Makefile deleted file mode 100644 index 4bd3a33e4..000000000 --- a/helm/EXPORT/exportprove/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -all: objects theories - -objects: - coqc -R prove Bologna.prove prove/*.v - echo "Load Verbose provaStruct." | coqtop.byte -R prove Bologna.prove - echo "Load Verbose provaFeIota." | coqtop.byte -R prove Bologna.prove - echo "Load Verbose provaCofix." | coqtop.byte -R prove Bologna.prove - echo "Load Verbose prova." | coqtop.byte -R prove Bologna.prove - -theories: - ./exporttheories.sh - -clean: - rm -f *.vo prove/*.vo diff --git a/helm/EXPORT/exportprove/exporttheories.sh b/helm/EXPORT/exportprove/exporttheories.sh deleted file mode 100755 index 0b609bf56..000000000 --- a/helm/EXPORT/exportprove/exporttheories.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -echo "Exporting theory $1"; - -for i in prove/*.v - do - basename=$(basename $i | sed s/\\.v//) - cat $i | ../mktheory.pl "prove/$basename" > \ - examples/Bologna/prove/$1/$basename.theory.xml - done diff --git a/helm/EXPORT/exportprove/prova.v b/helm/EXPORT/exportprove/prova.v deleted file mode 100644 index 0d98e5769..000000000 --- a/helm/EXPORT/exportprove/prova.v +++ /dev/null @@ -1,34 +0,0 @@ -Require Export Xml. - -Section prova. - -Inductive - tree : Set := node : forest -> tree -with - forest : Set := leaf : forest | cons : tree -> forest -> forest. - -Fixpoint tree_size [t:tree] : nat := - Cases t of (node f) => (S (forest_size f)) end -with forest_size [f:forest] : nat := - Cases f of leaf => (S O) | (cons t f') => (plus (tree_size t) (forest_size f')) - end. - -Theorem a_ab_b: (A,B:Prop)A->(A->B)->B. -Auto. -Qed. - -Axiom dummy_axiom: (n,m:nat)(le n m)\/(gt n m). - -End prova. - -Print XML Section Disk "examples/prove" prova. - -Theorem ab_ac_abc: (A,B,C:Prop)(A->B)->(A->C)->A->B/\C. -Intros A B C AB AC A1. -Split. - -Show XML File "examples/ab_ac_abc.xml" Proof. - -Auto. -Auto. -Qed. diff --git a/helm/EXPORT/exportprove/provaCofix.v b/helm/EXPORT/exportprove/provaCofix.v deleted file mode 100644 index d0f97294b..000000000 --- a/helm/EXPORT/exportprove/provaCofix.v +++ /dev/null @@ -1,4 +0,0 @@ -Require Xml. -Require provacofix. - -Print XML Module Disk "examples" provacofix. diff --git a/helm/EXPORT/exportprove/provaFeIota.v b/helm/EXPORT/exportprove/provaFeIota.v deleted file mode 100644 index bc5b2c022..000000000 --- a/helm/EXPORT/exportprove/provaFeIota.v +++ /dev/null @@ -1,6 +0,0 @@ -Require Xml. -Require provaF. -Require provaIota. - -Print XML Module Disk "examples" provaF. -Print XML Module Disk "examples" provaIota. diff --git a/helm/EXPORT/exportprove/provaStruct.v b/helm/EXPORT/exportprove/provaStruct.v deleted file mode 100644 index 06c952970..000000000 --- a/helm/EXPORT/exportprove/provaStruct.v +++ /dev/null @@ -1,16 +0,0 @@ -Require Export Xml. - -Require provastruct. -Print XML Module Disk "examples" provastruct. - -Require provastruct2. -Print XML Module Disk "examples" provastruct2. - -Require provastruct3. -Print XML Module Disk "examples" provastruct3. - -Require provastruct4. -Print XML Module Disk "examples" provastruct4. - -Require provastruct5. -Print XML Module Disk "examples" provastruct5. diff --git a/helm/EXPORT/exportprove/prove/.cvsignore b/helm/EXPORT/exportprove/prove/.cvsignore deleted file mode 100644 index 419956872..000000000 --- a/helm/EXPORT/exportprove/prove/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.vo diff --git a/helm/EXPORT/exportprove/prove/provaF.v b/helm/EXPORT/exportprove/prove/provaF.v deleted file mode 100644 index 072010f0c..000000000 --- a/helm/EXPORT/exportprove/prove/provaF.v +++ /dev/null @@ -1,33 +0,0 @@ -Definition int := (A:Prop)(A->A)->A->A. - -Definition O := [A:Prop][s:A->A][o:A]o. - -Definition S := [n:int][A:Prop][s:A->A][o:A](s (n A s o)). - -Definition Uno := [A:Prop][s:A->A][o:A](s o). - -Definition Due := [A:Prop][s:A->A][o:A](s (s o)). - -Definition Tre := [A:Prop][s:A->A][o:A](s (s (s o))). - -Definition id := [A:Prop][x:A]x. - -Definition id_Due := (id int Due). - -Definition difficult := ((S Due) (int -> int) (id (int -> int)) (id int)). - -Definition is_Zero := [n:int](n int [_:int]Uno O). - -Definition couple := [A:Prop][x:A][y:A][z:A->A->A](z x y). - -Definition Couple := [A:Prop](z:A->A->A)A. - -Definition fst := [A:Prop][x:A][y:A]x. - -Definition snd := [A:Prop][x:A][y:A]y. - -Definition next : (Couple int) -> (Couple int) := [x:(Couple int)](couple int (x (snd int)) (S (x (snd int)))). - -Definition pred := [n:int]((n (Couple int) next (couple int O O))(fst int)). - -Definition test := (((pred Tre) (int -> int))(id (int->int)) (id int)). diff --git a/helm/EXPORT/exportprove/prove/provaIota.v b/helm/EXPORT/exportprove/prove/provaIota.v deleted file mode 100644 index 74a510b5d..000000000 --- a/helm/EXPORT/exportprove/prove/provaIota.v +++ /dev/null @@ -1,53 +0,0 @@ -Inductive bool : Set := true : bool | false : bool. -Inductive nat : Set := O : nat | S : nat -> nat. - -Fixpoint plus [n:nat] : nat -> nat := - [m:nat] - Cases n of - O => m - | (S n) => (S (plus n m)) - end. - -Fixpoint mult [n:nat] : nat -> nat := - [m:nat] - Cases n of - O => O - | (S n) => (plus m (mult n m)) - end. - -Fixpoint fact [n:nat] : nat := - Cases n of - O => (S O) - | (S n) => (mult (S n) (fact n)) - end. - -Definition bnot := - [b:bool] - Cases b of - true => false - | false => true - end. - -Fixpoint is_even [n:nat] : bool := - Cases n of - O => true - | (S n) => (bnot (bnot (is_odd n))) - end -with is_odd [n:nat] : bool := - Cases n of - O => false - | (S n) => (bnot (bnot (is_even n))) - end -. - -Fixpoint idn [n:nat] : nat := - Cases n of - O => O - | (S n) => (S (idn n)) - end. - -Definition test1 := (is_even (S (S O))). -Definition test2 := (is_even (S (S (S O)))). -Definition test3 := (idn (idn (S O))). -Definition test4 := (is_odd (fact (S (S (O))))). -Definition test5 := (is_odd (fact (S (S (S (S (S (S O)))))))). diff --git a/helm/EXPORT/exportprove/prove/provacofix.v b/helm/EXPORT/exportprove/prove/provacofix.v deleted file mode 100644 index 199cadeb6..000000000 --- a/helm/EXPORT/exportprove/prove/provacofix.v +++ /dev/null @@ -1,45 +0,0 @@ -(* Let's define an infinite tree whose nodes are made of natural value and an *) -(* infinite forest of infinite trees whose nodes ... *) - -(* (obbrobrio_tree n) is used to build such a tree whose root value is n and *) -(* root forest is made of the corecursively defined tress whose roots values *) -(* are (n+1), (n+2), ... *) - -(* To finish, we provide also some destructors and a funny (?!?) theorem *) - -CoInductive tree : Set := - node : nat -> forest -> tree -with forest : Set := - nil : forest - | cons : tree -> forest -> forest. - -CoFixpoint obbrobrio_tree : nat -> tree := - [n:nat] - (node n (obbrobrio_forest (S n) nil)) -with obbrobrio_forest : nat -> forest -> forest := - [n:nat][f:forest] - (cons (obbrobrio_tree n) (obbrobrio_forest (S n) f)). - -Definition root_value : tree -> nat := - [t:tree] - Cases t of - (node n _) => n - end. - -Definition root_forest : tree -> forest := - [t:tree] - Cases t of - (node _ f) => f - end. - -Definition root_tree : forest -> tree := - [f:forest] - Cases f of - nil => (obbrobrio_tree (S (S (S O)))) - | (cons t _) => t - end. - -Theorem easy : (root_value (root_tree (root_forest (obbrobrio_tree O))))=(S O). -Proof. - Trivial. -Qed. diff --git a/helm/EXPORT/exportprove/prove/provastruct.v b/helm/EXPORT/exportprove/prove/provastruct.v deleted file mode 100644 index 503c7e0ac..000000000 --- a/helm/EXPORT/exportprove/prove/provastruct.v +++ /dev/null @@ -1,22 +0,0 @@ -Require Export Xml. - -Section a. - Variable A:Prop. - Section b1. - Variable B:Prop. - Axiom axiom: A -> (A -> B) ->B. - Theorem th1: A -> (A -> B) -> A/\B. - Intros A' H. - Split. - Assumption. - Apply axiom; Assumption. - Qed. - End b1. - Section b2. - Variable B:Set. - Axiom axiom': (A:Prop)A->A. - End b2. - Theorem th1': (A:Prop)A->A. - Auto. - Qed. -End a. diff --git a/helm/EXPORT/exportprove/prove/provastruct2.v b/helm/EXPORT/exportprove/prove/provastruct2.v deleted file mode 100644 index 0784e9794..000000000 --- a/helm/EXPORT/exportprove/prove/provastruct2.v +++ /dev/null @@ -1,42 +0,0 @@ -Section init. -Section a. - Section a1. - Section a11. - Section a111. - Local uno := (S O). - End a111. - Section a112. - End a112. - Section a113. - End a113. - End a11. - Local uno := (S O). - End a1. - Section a2. - Section a21. - Local uno := (S O). - End a21. - Section a22. - Section a221. - End a221. - End a22. - Section a23. - Section a231. - Section a2311. - Local uno := (S O). - End a2311. - Section a2312. - End a2312. - Section a2313. - End a2313. - End a231. - Section a232. - Section a2321. - End a2321. - End a232. - End a23. - Local uno := (S O). - End a2. - Definition uno := (S O). -End a. -End init. diff --git a/helm/EXPORT/exportprove/prove/provastruct3.v b/helm/EXPORT/exportprove/prove/provastruct3.v deleted file mode 100644 index d18933010..000000000 --- a/helm/EXPORT/exportprove/prove/provastruct3.v +++ /dev/null @@ -1,11 +0,0 @@ -Section a. - Section a1. - Variable A : Prop. - Variable B : Prop. - Inductive t1 : Set := k1 : A -> t1. - End a1. - - Inductive t2 [B:Set] : Set := k2 : (t2 B). - - Variable A : Prop. -End a. diff --git a/helm/EXPORT/exportprove/prove/provastruct4.v b/helm/EXPORT/exportprove/prove/provastruct4.v deleted file mode 100644 index 1307f46e5..000000000 --- a/helm/EXPORT/exportprove/prove/provastruct4.v +++ /dev/null @@ -1,8 +0,0 @@ -Section a. - Variables N,M:nat. - Section b. - Variable P:Prop. - Local SN := (S N). - Axiom A : N = M. - End b. -End a. diff --git a/helm/EXPORT/exportprove/prove/provastruct5.v b/helm/EXPORT/exportprove/prove/provastruct5.v deleted file mode 100644 index 952c9d21a..000000000 --- a/helm/EXPORT/exportprove/prove/provastruct5.v +++ /dev/null @@ -1,11 +0,0 @@ -Section a. - Variable A:Prop. - Theorem easy:(B:Prop)B->B. - Exact ([H:Prop][B:Prop][b:B]b A). - Qed. - Section b. - Theorem easy':(B:Prop)B->B. - Exact easy. - Qed. - End b. -End a. diff --git a/helm/EXPORT/mktheory.pl b/helm/EXPORT/mktheory.pl deleted file mode 100755 index 2be018e98..000000000 --- a/helm/EXPORT/mktheory.pl +++ /dev/null @@ -1,151 +0,0 @@ -#!/usr/bin/perl - -# Assumptions: -# Comments on one line are stripped -# Comments on many lines: -# nothing after *) (end of command) -# Commands could be nested (but see previous assumption) -# Commands don't span on several lines -# If a line is commented, the comment must begin at the begin of line and end -# at the end of line -# In a line, before a command only spaces are allowed - -$curi = $ARGV[0]; -$with_types = ($ARGV[1] ? ".types" : ""); -$ident = " "; -$cid = 1; -$opencom = 0; -$openscheme = 0; -$openfix = 0; -$opengoal = 0; - -print < - - - -EOT - -while () { - chomp; - if ($opencom > 0) { - $opencom-- if (/\*\)/ && !/\(\*.*\*\)/); - } else { - if (/\(\*.*\*\)/) { # (* comment *) - s/\(\*.*\*\)//; - } elsif (/\(\*/) { - # (* comment - $opencom++; - $_ = ""; - } - - if (/Require /) { - s/ *Require *(.*)\..*/$1/; - print "$ident\n"; - } elsif (/Goal /) { - $opengoal = 1; - } elsif (/Section /) { - s/ *Section *(.*)\..*/$1/; - print "$ident
\n"; - $ident = $ident." "; - } elsif (/Chapter /) { - s/ *Chapter *(.*)\..*/$1/; - print "$ident
\n"; - $ident = $ident." "; - } elsif (/End /) { - chop($ident); - print "$ident
\n"; - } elsif (/Variable(s?) /) { - s/ *Variable(s?) *([^:]*):.*/$2/; - s/ //g; - @vl = split /,/; - foreach (@vl) { - print "$ident\n"; - } - } elsif (/Hypothesis /) { - s/ *Hypothesis *([^ :]*)( |:).*/$1/; - @vl = split /,/; - foreach (@vl) { - print "$ident\n"; - } - } elsif (/^ *Inductive /) { - if (/ *Inductive *[^ :]+ ([^ :]*) :=/) { - s/ *Inductive *[^ :]+ ([^ :]*) *:=.*/$1/; - } elsif (/ *Inductive *[^ :]*( |:)/) { - s/ *Inductive *([^ :\[]*)( |:|\[).*/$1/; - } - print "$ident\n"; - } elsif (/ *CoInductive /) { - if (/ *CoInductive *[^ :]+ ([^ :]*) *:=/) { - s/ *CoInductive *[^ :]+ ([^ :]*) *:=.*/$1/; - } elsif (/ *CoInductive *[^ :]*( |:)/) { - s/ *CoInductive *([^ :]*)( |:).*/$1/; - } - print "$ident\n"; - } elsif (/^ *Fixpoint /) { - s/ *Fixpoint *([^ \[]*)( |\[).*/$1/; - print "$ident\n"; - $openfix = 1; - } elsif (/ *CoFixpoint /) { - s/ *CoFixpoint *([^ \[]*)( |\[).*/$1/; - print "$ident\n"; - $openfix = 1; - } elsif (/^ *Definition /) { - s/ *Definition *([^ :]*)( |:)?.*/$1/; - print "$ident\n"; - } elsif (/Local /) { - s/ *Local *([^ :]*)( |:)?.*/$1/; - print "$ident\n"; - } elsif (/Lemma /) { - s/ *Lemma *([^ :]*)( |:)?.*/$1/; - print "$ident\n"; - $cid++; - } elsif (/Theorem /) { - s/ *Theorem *([^ :]+)( |:)?.*/$1/; - print "$ident\n"; - $cid++; - } elsif (/Remark /) { - s/ *Remark *([^ :]*)( |:)?.*/$1/; - print "$ident\n"; - $cid++; - } elsif (/Scheme /) { - s/ *Scheme *([^ :]*)( |:)?.*/$1/; - print "$ident\n"; - $cid++; - $openscheme = 1; - } elsif (/Save / && $opengoal) { - s/ *Save *([^ \.]*)( |\.).*/$1/; - print "$ident\n"; - $cid++; - } elsif (/with / && $openscheme) { - s/ *with *([^ :]*)( |:).*/$1/; - print "$ident\n"; - $cid++; - } elsif (/with / && $openfix) { - s/ *with *([^ :]*)( |:).*/$1/; - print "$ident\n"; - $cid++; - } elsif (/Axiom /) { - s/ *Axiom *([^ :]*)( |:).*/$1/; - print "$ident\n"; - $cid++; - } elsif (/Parameter /) { - s/ *Parameter *([^ :]*)( |:).*/$1/; - print "$ident\n"; - $cid++; - } elsif (/Record /) { - s/ *Record *([^ :]*)( |:).*/$1/; - print "$ident\n"; - $cid++; - } - - if ($openscheme && (/\./)) { - $openscheme = 0; - } elsif ($openfix && (/\./)) { - $openfix = 0; - } - - } -} - -print "\n"; diff --git a/helm/Makefile b/helm/Makefile deleted file mode 100644 index 5cb7556b6..000000000 --- a/helm/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -DIRS = ocaml matita -# gTopLevel searchEngine mathql_test hxp - -DIRS_BYTE = $(patsubst %,%.byte,$(DIRS)) -DIRS_OPT = $(patsubst %,%.opt,$(DIRS)) -DIRS_CLEAN = $(patsubst %,%.clean,$(DIRS)) -all: byte -byte: $(DIRS_BYTE) -opt: $(DIRS_OPT) -world: byte opt -clean: $(DIRS_CLEAN) -%.byte: - $(MAKE) -C $*/ all -%.opt: - $(MAKE) -C $*/ opt -%.clean: - $(MAKE) -C $*/ clean -.PHONY: all byte opt world clean diff --git a/helm/annotationHelper/.cvsignore b/helm/annotationHelper/.cvsignore deleted file mode 100644 index b79ea367a..000000000 --- a/helm/annotationHelper/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.cm[iox] *.o cicAnnotationHelper cicAnnotationHelper.opt diff --git a/helm/annotationHelper/.depend b/helm/annotationHelper/.depend deleted file mode 100644 index 699b8de3a..000000000 --- a/helm/annotationHelper/.depend +++ /dev/null @@ -1,4 +0,0 @@ -cicAnnotationHinter.cmo: cicAnnotationHinter.cmi -cicAnnotationHinter.cmx: cicAnnotationHinter.cmi -cicAnnotationHelper.cmo: cicAnnotationHinter.cmi -cicAnnotationHelper.cmx: cicAnnotationHinter.cmx diff --git a/helm/annotationHelper/Makefile b/helm/annotationHelper/Makefile deleted file mode 100644 index 272ac3eba..000000000 --- a/helm/annotationHelper/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -BIN_DIR = /usr/local/bin -REQUIRES = lablgtkmathview helm-cic_annotations_cache -PREDICATES = -OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)" -OCAMLC = ocamlfind ocamlc $(OCAMLOPTIONS) -OCAMLOPT = ocamlfind ocamlopt $(OCAMLOPTIONS) -OCAMLDEP = ocamldep - -LIBRARIES = $(shell ocamlfind query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES)) -LIBRARIES_OPT = $(shell ocamlfind query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES)) - -all: cicAnnotationHelper -opt: cicAnnotationHelper.opt - -DEPOBJS = cicAnnotationHinter.mli cicAnnotationHinter.ml cicAnnotationHelper.ml - -CICANNOTATIONHELPEROBJS = cicAnnotationHinter.cmo cicAnnotationHelper.cmo - -depend: - $(OCAMLDEP) $(DEPOBJS) > .depend - -cicAnnotationHelper: $(CICANNOTATIONHELPEROBJS) $(LIBRARIES) - $(OCAMLC) -linkpkg -o cicAnnotationHelper $(CICANNOTATIONHELPEROBJS) - -cicAnnotationHelper.opt: $(CICANNOTATIONHELPEROBJS:.cmo=.cmx) $(LIBRARIES_OPT) - $(OCAMLOPT) -linkpkg -o cicAnnotationHelper.opt $(CICANNOTATIONHELPEROBJS:.cmo=.cmx) - -.SUFFIXES: .ml .mli .cmo .cmi .cmx -.ml.cmo: $(LIBRARIES) - $(OCAMLC) -c $< -.mli.cmi: $(LIBRARIES) - $(OCAMLC) -c $< -.ml.cmx: $(LIBRARIES_OPT) - $(OCAMLOPT) -c $< - -clean: - rm -f *.cm[iox] *.o cicAnnotationHelper cicAnnotationHelper.opt - -install: - cp cicAnnotationHelper cicAnnotationHelper.opt $(BIN_DIR) - -uninstall: - rm -f $(BIN_DIR)/cicAnnotationHelper $(BIN_DIR)/cicAnnotationHelper.opt - -.PHONY: install uninstall clean - -include .depend diff --git a/helm/annotationHelper/cicAnnotationHelper.ml b/helm/annotationHelper/cicAnnotationHelper.ml deleted file mode 100644 index 5ed1fa26d..000000000 --- a/helm/annotationHelper/cicAnnotationHelper.ml +++ /dev/null @@ -1,594 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(******************************************************************************) -(* *) -(* PROJECT HELM *) -(* *) -(* Claudio Sacerdoti Coen *) -(* 03/04/2001 *) -(* *) -(* This is a simple gtk interface to the Coq-like pretty printer cicPp for *) -(* cic terms exported in xml. It uses directly the modules cicPp and *) -(* cicCcache and indirectly all the other modules (cicParser, cicParser2, *) -(* cicParser3, getter). *) -(* The syntax is "gtkInterface[.opt] filename1 ... filenamen" where *) -(* filenamei is the path-name of an xml file describing a cic term. *) -(* The terms are loaded in cache and then pretty-printed one at a time and *) -(* only once, when the user wants to look at it: if the user wants to look at *) -(* a term again, then the pretty-printed term is showed again, but not *) -(* recomputed *) -(* *) -(******************************************************************************) - -(* GLOBAL REFERENCES (USED BY CALLBACKS) *) - -let annotated_obj = ref None;; (* reference to a triple option where *) - (* the first component is the current *) - (* annotated object, the second is the *) - (* map from ids to annotated targets and *) - (* the third is the map from ids to *) - (* annotations. *) -let current_id = ref None;; (* id of the element to annotate *) -let radio_some_status = ref false;; (* is the radio_some button selected? *) -let current_url = ref "";; - -(* GLOBAL CONSTANTS *) - -let helmns = Gdome.domString "http://www.cs.unibo.it/helm";; - -(* MISC FUNCTIONS *) - -let pathname_of_annuri uristring = - Configuration.annotations_dir ^ - Str.replace_first (Str.regexp "^cic:") "" uristring -;; - -let make_dirs dirpath = - ignore (Unix.system ("mkdir -p " ^ dirpath)) -;; - -module UrlManipulator = - struct - exception No_param_dot_CICURI_or_param_dot_annotations_found_in of string;; - exception No_param_found_in of string * string;; - exception Bad_formed_url of string;; - - let uri_from_url url = - let module N = Neturl in - let founduri = ref None in - let foundann = ref None in - let rec find_uri = - function - [] -> raise (No_param_dot_CICURI_or_param_dot_annotations_found_in url) - | he::tl -> - match Str.split (Str.regexp "=") he with - ["param.CICURI";uri] -> - if !founduri <> None then - raise (Bad_formed_url url) - else - begin - founduri := Some uri ; - if !foundann = None then - find_uri tl - end - | ["param.annotations";ann] -> - if !foundann <> None then - raise (Bad_formed_url url) - else - begin - foundann := - Some - (match ann with - "yes" -> ".ann" - | "no" -> "" - | _ -> raise (Bad_formed_url url) - ) ; - if !founduri = None then - find_uri tl - end - | _ -> find_uri tl - in - find_uri - (Str.split (Str.regexp "&") - (N.url_query ~encoded:true (N.url_of_string N.ip_url_syntax url))) ; - match !founduri,!foundann with - (Some uri),(Some ann) -> uri ^ ann - | _ , _ -> - raise (No_param_dot_CICURI_or_param_dot_annotations_found_in url) - ;; - - let extractParam param url = - let module N = Neturl in - let rec find_param = - function - [] -> raise (No_param_found_in (param,url)) - | he::tl -> - match Str.split (Str.regexp "=") he with - [name;value] when name = param -> value - | _ -> find_param tl - in - find_param - (Str.split (Str.regexp "&") - (N.url_query ~encoded:true (N.url_of_string N.ip_url_syntax url))) - ;; - - let set_annotations_to_yes query url = - let found =ref false in - let rec aux = - function - [] -> - if !found then "" - else raise (No_param_found_in ("param.annotations",url)) - | he::tl -> - match Str.split (Str.regexp "=") he with - ["param.annotations" as s ; ann] -> - found := true ; - let auxtl = aux tl in - s ^ "=yes" ^ - (if auxtl = "" then "" else "&" ^ auxtl) - | [name ; value] -> - let auxtl = aux tl in - name ^ "=" ^ value ^ - (if auxtl = "" then "" else "&" ^ auxtl) - | [name] -> - let auxtl = aux tl in - name ^ "=" ^ - (if auxtl = "" then "" else "&" ^ auxtl) - | _ -> raise (Bad_formed_url url) - in - aux (Str.split (Str.regexp "&") query) - ;; - - let annurl_of_url url = - let module N = Neturl in - let nurl = N.url_of_string N.ip_url_syntax url in - let query = N.url_query ~encoded:true nurl in - let newquery = set_annotations_to_yes query url in - N.string_of_url (N.modify_url ~encoded:true ~query:newquery nurl) - ;; -end - -let get_current_uri () = - UriManager.uri_of_string (UrlManipulator.uri_from_url !current_url) -;; - -(* CALLBACKS *) - -let get_annotated_obj () = - match !annotated_obj with - None -> - let annobj = - let (annobj,ids_to_annotations) = - match CicCache.get_annobj (get_current_uri ()) with - (annobj,None) -> annobj, Hashtbl.create 503 - | (annobj, Some ids_to_annotations) -> (annobj,ids_to_annotations) - in - let ids_to_targets = CicXPath.get_ids_to_targets annobj in - (annobj,ids_to_targets,ids_to_annotations) - in - annotated_obj := Some annobj ; - annobj - | Some annobj -> annobj -;; - -let update_output rendering_window url = - rendering_window#label#set_text (UrlManipulator.uri_from_url url) ; - rendering_window#output#load url -;; - -let choose_selection rendering_window (element : Gdome.element option) = - let module G = Gdome in - let rec aux element = - if element#hasAttributeNS - ~namespaceURI:helmns - ~localName:(G.domString "xref") - then - rendering_window#output#set_selection (Some element) - else - match element#get_parentNode with - None -> assert false - (*CSC: OCAML DIVERGES! - | Some p -> aux (new G.element_of_node p) - *) - | Some p -> aux (new Gdome.element_of_node p) - in - match element with - Some x -> aux x - | None -> rendering_window#output#set_selection None -;; - -let annotateb_pressed rendering_window annotation_window () = - let module G = Gdome in - match rendering_window#output#get_selection with - Some element -> - let xpath = - ((element : Gdome.element)#getAttributeNS - (*CSC: OCAML DIVERGE - ((element : G.element)#getAttributeNS - *) - ~namespaceURI:helmns - ~localName:(G.domString "xref"))#to_string - in - if xpath = "" then - rendering_window#label#set_text ("ERROR: No xref found!!!\n") - else - let annobj = get_annotated_obj () in - let (anno, ids_to_targets, ids_to_annotations) = annobj in - let annotation = (annotation_window#annotation : GEdit.text) in - let id = xpath in - current_id := Some id ; - let ann = CicXPath.get_annotation ids_to_annotations id in - CicAnnotationHinter.create_hints annotation_window ids_to_targets - xpath ; - annotation#delete_text 0 annotation#length ; - begin - match ann with - None -> - annotation#misc#set_sensitive false ; - annotation_window#radio_none#set_active true ; - radio_some_status := false - | Some ann' -> - annotation#insert ann' ; - annotation#misc#set_sensitive true ; - annotation_window#radio_some#set_active true ; - radio_some_status := true - end ; - GMain.Grab.add (annotation_window#window_to_annotate#coerce) ; - annotation_window#show () ; - | None -> rendering_window#label#set_text ("ERROR: No selection!!!\n") -;; - -let change_annotation ids_to_annotations id ann = - begin - try - Hashtbl.remove ids_to_annotations id - with - Not_found -> () - end ; - match ann with - None -> () - | Some ann' -> Hashtbl.add ids_to_annotations id ann' -;; - -(* called when the annotation is confirmed *) -let save_annotation (annotation : GEdit.text) = - let module S = Str in - let module U = UriManager in - let (annobj,ids_to_annotations) = - match !annotated_obj with - None -> assert false - | Some (annobj,_,ids_to_annotations) -> annobj,ids_to_annotations - in - change_annotation ids_to_annotations - (match !current_id with - Some id -> id - | None -> assert false - ) - (if !radio_some_status then - Some (annotation#get_chars 0 annotation#length) - else - None - ) ; - let uri = get_current_uri () in - let annxml = - CicAnnotation2Xml.pp_annotation annobj ids_to_annotations uri - in - make_dirs - (pathname_of_annuri (U.buri_of_uri uri)) ; - Xml.pp ~quiet:true annxml - (Some - (pathname_of_annuri (U.string_of_uri (U.annuri_of_uri uri)) ^ - ".xml" - ) - ) -;; - -(* STUFF TO BUILD THE GTK INTERFACE *) - -(* Stuff for the widget settings *) - -let export_to_postscript (output : GMathView.math_view) () = - output#export_to_postscript ~filename:"output.ps" (); -;; - -let activate_t1 (output : GMathView.math_view) - button_set_anti_aliasing button_set_kerning - button_set_transparency button_export_to_postscript button_t1 () -= - let is_set = button_t1#active in - output#set_font_manager_type - (if is_set then `font_manager_t1 else `font_manager_gtk) ; - if is_set then - begin - button_set_anti_aliasing#misc#set_sensitive true ; - button_set_kerning#misc#set_sensitive true ; - button_set_transparency#misc#set_sensitive true ; - button_export_to_postscript#misc#set_sensitive true ; - end - else - begin - button_set_anti_aliasing#misc#set_sensitive false ; - button_set_kerning#misc#set_sensitive false ; - button_set_transparency#misc#set_sensitive false ; - button_export_to_postscript#misc#set_sensitive false ; - end -;; - -let set_anti_aliasing output button_set_anti_aliasing () = - output#set_anti_aliasing button_set_anti_aliasing#active -;; - -let set_kerning output button_set_kerning () = - output#set_kerning button_set_kerning#active -;; - -let set_transparency output button_set_transparency () = - output#set_transparency button_set_transparency#active -;; - -let changefont output font_size_spinb () = - output#set_font_size font_size_spinb#value_as_int -;; - -let set_log_verbosity output log_verbosity_spinb () = - output#set_log_verbosity log_verbosity_spinb#value_as_int -;; - -class settings_window (output : GMathView.math_view) - sw button_export_to_postscript selection_changed_callback -= - let settings_window = GWindow.window ~title:"GtkMathView settings" () in - let vbox = - GPack.vbox ~packing:settings_window#add () in - let table = - GPack.table - ~rows:1 ~columns:3 ~homogeneous:false ~row_spacings:5 ~col_spacings:5 - ~border_width:5 ~packing:vbox#add () in - let button_t1 = - GButton.toggle_button ~label:"activate t1 fonts" - ~packing:(table#attach ~left:0 ~top:0) () in - let button_set_anti_aliasing = - GButton.toggle_button ~label:"set_anti_aliasing" - ~packing:(table#attach ~left:0 ~top:1) () in - let button_set_kerning = - GButton.toggle_button ~label:"set_kerning" - ~packing:(table#attach ~left:1 ~top:1) () in - let button_set_transparency = - GButton.toggle_button ~label:"set_transparency" - ~packing:(table#attach ~left:2 ~top:1) () in - let table = - GPack.table - ~rows:2 ~columns:2 ~homogeneous:false ~row_spacings:5 ~col_spacings:5 - ~border_width:5 ~packing:vbox#add () in - let font_size_label = - GMisc.label ~text:"font size:" - ~packing:(table#attach ~left:0 ~top:0 ~expand:`NONE) () in - let font_size_spinb = - let sadj = - GData.adjustment ~value:14.0 ~lower:5.0 ~upper:50.0 ~step_incr:1.0 () - in - GEdit.spin_button - ~adjustment:sadj ~packing:(table#attach ~left:1 ~top:0 ~fill:`NONE) () in - let log_verbosity_label = - GMisc.label ~text:"log verbosity:" - ~packing:(table#attach ~left:0 ~top:1) () in - let log_verbosity_spinb = - let sadj = - GData.adjustment ~value:0.0 ~lower:0.0 ~upper:3.0 ~step_incr:1.0 () - in - GEdit.spin_button - ~adjustment:sadj ~packing:(table#attach ~left:1 ~top:1) () in - let hbox = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let closeb = - GButton.button ~label:"Close" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in -object(self) - method show = settings_window#show - initializer - button_set_anti_aliasing#misc#set_sensitive false ; - button_set_kerning#misc#set_sensitive false ; - button_set_transparency#misc#set_sensitive false ; - (* Signals connection *) - ignore(button_t1#connect#clicked - ~callback:(activate_t1 output button_set_anti_aliasing button_set_kerning - button_set_transparency button_export_to_postscript button_t1)) ; - ignore(font_size_spinb#connect#changed (changefont output font_size_spinb)) ; - ignore(button_set_anti_aliasing#connect#toggled - (set_anti_aliasing output button_set_anti_aliasing)); - ignore(button_set_kerning#connect#toggled - (set_kerning output button_set_kerning)) ; - ignore(button_set_transparency#connect#toggled - (set_transparency output button_set_transparency)) ; - ignore(log_verbosity_spinb#connect#changed - (set_log_verbosity output log_verbosity_spinb)) ; - ignore(closeb#connect#clicked ~callback:settings_window#misc#hide) -end;; - -(* Main windows *) - -class annotation_window output label = - let window_to_annotate = - GWindow.window ~title:"Annotating environment" ~border_width:2 () in - let hbox1 = - GPack.hbox ~packing:window_to_annotate#add () in - let vbox1 = - GPack.vbox ~packing:(hbox1#pack ~padding:5) () in - let hbox2 = - GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in - let radio_some = GButton.radio_button ~label:"Annotation below" - ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5) () in - let radio_none = GButton.radio_button ~label:"No annotation" - ~group:radio_some#group - ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5) - ~active:true () in - let annotation = GEdit.text ~editable:true ~width:400 ~height:180 - ~packing:(vbox1#pack ~padding:5) () in - let table = - GPack.table ~rows:3 ~columns:3 ~packing:(vbox1#pack ~padding:5) () in - let annotation_hints = - Array.init 9 - (function i -> - GButton.button ~label:("Hint " ^ string_of_int i) - ~packing:(table#attach ~left:(i mod 3) ~top:(i / 3)) () - ) in - let vbox2 = - GPack.vbox ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in - let confirmb = - GButton.button ~label:"O.K." - ~packing:(vbox2#pack ~expand:false ~fill:false ~padding:5) () in - let abortb = - GButton.button ~label:"Abort" - ~packing:(vbox2#pack ~expand:false ~fill:false ~padding:5) () in -object (self) - method window_to_annotate = window_to_annotate - method annotation = annotation - method radio_some = radio_some - method radio_none = radio_none - method annotation_hints = annotation_hints - method output = (output : GMathView.math_view) - method show () = window_to_annotate#show () - initializer - (* signal handlers here *) - ignore (window_to_annotate#event#connect#delete - (fun _ -> - window_to_annotate#misc#hide () ; - GMain.Grab.remove (window_to_annotate#coerce) ; - true - )) ; - ignore (confirmb#connect#clicked - ~callback:(fun () -> - window_to_annotate#misc#hide () ; - save_annotation annotation ; - GMain.Grab.remove (window_to_annotate#coerce) ; - let new_current_uri = UriManager.annuri_of_uri (get_current_uri ()) in - Getter.register new_current_uri - (Configuration.annotations_url ^ - Str.replace_first (Str.regexp "^cic:") "" - (UriManager.string_of_uri new_current_uri) ^ ".xml" - ) ; - let new_current_url = UrlManipulator.annurl_of_url !current_url in - current_url := new_current_url ; - label#set_text (UriManager.string_of_uri new_current_uri) ; - output#load new_current_url - )) ; - ignore (abortb#connect#clicked - ~callback:(fun () -> - window_to_annotate#misc#hide () ; - GMain.Grab.remove (window_to_annotate#coerce) - )); - ignore (radio_some#connect#clicked - ~callback:(fun () -> annotation#misc#set_sensitive true ; radio_some_status := true)) ; - ignore (radio_none #connect#clicked - ~callback:(fun () -> - annotation#misc#set_sensitive false; - radio_some_status := false) - ) -end;; - -class rendering_window annotation_window output (label : GMisc.label) = - let window = - GWindow.window ~title:"MathML viewer" ~border_width:2 () in - let vbox = - GPack.vbox ~packing:window#add () in - let _ = vbox#pack ~expand:false ~fill:false ~padding:5 label#coerce in - let scrolled_window0 = - GBin.scrolled_window ~border_width:10 - ~packing:(vbox#pack ~expand:true ~padding:5) () in - let _ = scrolled_window0#add output#coerce in - let hbox = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let annotateb = - GButton.button ~label:"Annotate" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let settingsb = - GButton.button ~label:"Settings" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let button_export_to_postscript = - GButton.button ~label:"export_to_postscript" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let closeb = - GButton.button ~label:"Close" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in -object(self) - method label = label - method output = (output : GMathView.math_view) - method show () = window#show () - initializer - button_export_to_postscript#misc#set_sensitive false ; - - (* signal handlers here *) - ignore(output#connect#selection_changed (choose_selection self)) ; - ignore(closeb#connect#clicked ~callback:(fun _ -> GMain.Main.quit ())) ; - ignore(annotateb#connect#clicked - ~callback:(annotateb_pressed self annotation_window)) ; - let settings_window = new settings_window output scrolled_window0 - button_export_to_postscript (choose_selection self) in - ignore(settingsb#connect#clicked ~callback:settings_window#show) ; - ignore(button_export_to_postscript#connect#clicked ~callback:(export_to_postscript output)) ; - ignore(window#event#connect#delete (fun _ -> GMain.Main.quit () ; true )) -end;; - -(* MAIN *) - -let initialize_everything tmpfile url = - let module U = Unix in - let output = GMathView.math_view ~width:400 ~height:380 () - and label = GMisc.label ~text:"???" () in - let annotation_window = new annotation_window output label in - let rendering_window = - new rendering_window annotation_window output label - in - rendering_window#show () ; - rendering_window#label#set_text (UrlManipulator.uri_from_url url) ; - rendering_window#output#load tmpfile ; - GMain.Main.main () -;; - -let _ = - let filename = ref "" in - let usage_msg = - "\nusage: annotationHelper[.opt] file url\n\n List of options:" - in - Arg.parse [] - (fun x -> - if x = "" then raise (Arg.Bad "Empty filename or URL not allowed") ; - if !filename = "" then - filename := x - else if !current_url = "" then - current_url := x - else - begin - prerr_string "More than two arguments provided\n" ; - Arg.usage [] usage_msg ; - exit (-1) - end - ) usage_msg ; - Getter.getter_url := - Netencoding.Url.decode - (UrlManipulator.extractParam "param.getterURL" !current_url) ; - initialize_everything !filename !current_url -;; diff --git a/helm/annotationHelper/cicAnnotationHinter.ml b/helm/annotationHelper/cicAnnotationHinter.ml deleted file mode 100644 index 7cf3cddbb..000000000 --- a/helm/annotationHelper/cicAnnotationHinter.ml +++ /dev/null @@ -1,393 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(******************************************************************************) -(* *) -(* PROJECT HELM *) -(* *) -(* Claudio Sacerdoti Coen *) -(* 14/06/2000 *) -(* *) -(* *) -(******************************************************************************) - -let deactivate_hints_from annotation_window n = - let annotation_hints = annotation_window#annotation_hints in - for i = n to Array.length annotation_hints - 1 do - annotation_hints.(i)#misc#hide () - done -;; - -(* CSC: orripilante *) -(* the list of the signal ids *) -let sig_ids = ref ([] : GtkSignal.id list);; - -let disconnect_hint annotation_window buttonno = - match !sig_ids with - id::ids -> - annotation_window#annotation_hints.(buttonno)#misc#disconnect id ; - sig_ids := ids - | _ -> assert false -;; - -(* link_hint annotation_window n label hint *) -(* set the label of the nth hint button of annotation_window to label *) -(* and the correspondent hint to hint *) -let link_hint annotation_window buttonno label hint = - let button = annotation_window#annotation_hints.(buttonno) in - sig_ids := - (button#connect#clicked - ~callback:(fun () -> (annotation_window#annotation : GEdit.text)#insert hint) - ) :: !sig_ids ; - button#misc#show () ; - match button#children with - [labelw] -> (GMisc.label_cast labelw)#set_text label - | _ -> assert false -;; - -exception TooManyHints;; - -let link_hints annotation_window a = - if Array.length a > Array.length annotation_window#annotation_hints then - raise TooManyHints ; - for i = List.length !sig_ids - 1 downto 0 do - disconnect_hint annotation_window i - done ; - Array.iteri - (fun i (label,hint) -> link_hint annotation_window i label hint) a ; - deactivate_hints_from annotation_window (Array.length a) -;; - -let list_mapi f = - let rec aux n = - function - [] -> [] - | he::tl -> (f n he)::(aux (n + 1) tl) - in - aux 0 -;; - -let get_id annterm = - let module C = Cic in - match annterm with - C.ARel (id,_,_) - | C.AVar (id,_) - | C.AMeta (id,_,_) - | C.ASort (id,_) - | C.AImplicit id - | C.ACast (id,_,_) - | C.AProd (id,_,_,_) - | C.ALambda (id,_,_,_) - | C.ALetIn (id,_,_,_) - | C.AAppl (id,_) - | C.AConst (id,_,_) - | C.AMutInd (id,_,_,_) - | C.AMutConstruct (id,_,_,_,_) - | C.AMutCase (id,_,_,_,_,_,_) - | C.AFix (id,_,_) - | C.ACoFix (id,_,_) -> id -;; - -let create_hint_from_term annotation_window annterm = - let module C = Cic in - match annterm with - C.ARel (id,_,_) -> - link_hints annotation_window - [| "Binder", "" |] - | C.AVar (id,_) -> - link_hints annotation_window - [| "relURI???", "" |] - | C.AMeta (id,_,subst) -> - let res = - Array.append - [| "Number", "" |] - (Array.mapi - (fun i s -> - match s with - None -> - "Argument " ^ string_of_int i, "_" - | Some t -> - "Argument " ^ string_of_int i, "" - ) (Array.of_list subst) - ) - in - link_hints annotation_window res - | C.ASort (id,_) -> - link_hints annotation_window - [| "Value", "" |] - | C.AImplicit id -> - link_hints annotation_window [| |] - | C.ACast (id,bo,ty) -> - let boid = get_id bo - and tyid = get_id ty in - link_hints annotation_window - [| "Body", "" ; - "Type", "" - |] - | C.AProd (id,_,ty,bo) -> - let boid = get_id bo - and tyid = get_id ty in - link_hints annotation_window - [| "Binder", - "" ; - "Body", "" ; - "Type", "" - |] - | C.ALambda (id,_,ty,bo) -> - let boid = get_id bo - and tyid = get_id ty in - link_hints annotation_window - [| "Binder", - "" ; - "Body", "" ; - "Type", "" - |] - | C.ALetIn (id,_,ty,bo) -> - let boid = get_id bo - and tyid = get_id ty in - link_hints annotation_window - [| "Binder", - "" ; - "Term", "" ; - "Target", "" - |] - | C.AAppl (id,args) -> - let argsid = - Array.mapi - (fun i te -> "Argument " ^ string_of_int i, "") - (Array.of_list args) - in - link_hints annotation_window argsid - | C.AConst (id,_,_) -> - link_hints annotation_window - [| "Uri???", "" |] - | C.AMutInd (id,_,_,_) -> - link_hints annotation_window - [| "Uri???", "" |] - | C.AMutConstruct (id,_,_,_,_) -> - link_hints annotation_window - [| "Uri???", "" |] - | C.AMutCase (id,_,_,_,outty,te,pl) -> - let outtyid = get_id outty - and teid = get_id te - and plid = - Array.mapi - (fun i te -> "Pattern " ^ string_of_int i, "") - (Array.of_list pl) - in - link_hints annotation_window - (Array.append - [| "Uri???", "" ; - "Case Type", "" ; - "Term", "" ; - |] - plid) - | C.AFix (id,_,funl) -> - let funtylid = - Array.mapi - (fun i (_,_,ty,_) -> - "Type " ^ string_of_int i, "") - (Array.of_list funl) - and funbolid = - Array.mapi - (fun i (_,_,_,bo) -> - "Body " ^ string_of_int i, "") - (Array.of_list funl) - and funnamel = - Array.mapi - (fun i (_,_,_,_) -> - "Name " ^ string_of_int i, "") - (Array.of_list funl) - and funrecindexl = - Array.mapi - (fun i (_,_,_,_) -> - "Recursive Index??? " ^ string_of_int i, "") - (Array.of_list funl) - in - link_hints annotation_window - (Array.concat - [ funtylid ; - funbolid ; - funnamel ; - funrecindexl ; - [| "NoFun???", "" |] - ] - ) - | C.ACoFix (id,_,funl) -> - let funtylid = - Array.mapi - (fun i (_,ty,_) -> - "Type " ^ string_of_int i, "") - (Array.of_list funl) - and funbolid = - Array.mapi - (fun i (_,_,bo) -> - "Body " ^ string_of_int i, "") - (Array.of_list funl) - and funnamel = - Array.mapi - (fun i (_,_,_) -> - "Name " ^ string_of_int i, "") - (Array.of_list funl) - in - link_hints annotation_window - (Array.concat - [ funtylid ; - funbolid ; - funnamel ; - [| "NoFun???", "" |] - ] - ) -;; - -(*CSC: da riscrivere completamente eliminando il paciugo degli array - liste *) -let create_hint_from_obj annotation_window annobj = - let module C = Cic in - match annobj with - C.ADefinition (id,_,bo,ty,_) -> - let boid = get_id bo - and tyid = get_id ty in - link_hints annotation_window - [| "Name", "" ; - "Ingredients", "" ; - "Body", "" ; - "Type", "" - |] - | C.AAxiom (id,_,ty,_) -> - let tyid = get_id ty in - link_hints annotation_window - [| "Name", "" ; - "Ingredients", "" ; - "Type", "" - |] - | C.AVariable (id,_,bo,ty) -> - let tyid = get_id ty in - link_hints annotation_window - (match bo with - None -> - [| "Name", "" ; - "Type", "" - |] - | Some bo -> - let boid = get_id bo in - [| "Name", "" ; - "Body", "" ; - "Type", "" - |] - ) - | C.ACurrentProof (id,_,conjs,bo,ty) -> - let boid = get_id bo - and tyid = get_id ty - and conjsid = List.map (fun (id,_,_,_) -> id) conjs in - link_hints annotation_window -(*CSC: never tested since the introduction of the new Metas *) - (Array.append - [| "Name", "" ; - "Ingredients", "" ; - "Body", "" ; - "Type", "" - |] - (Array.mapi - (fun i id -> - "Conjecture " ^ string_of_int i, "" - ) (Array.of_list conjsid) - ) - ) - | C.AInductiveDefinition (id,itl,_,_) -> - let itlids = - List.map - (fun (_,_,arity,cons) -> - get_id arity, - List.map (fun (_,ty,_) -> get_id ty) cons - ) itl - in - link_hints annotation_window - (Array.concat - [ - [| "Ingredients","" |]; - (Array.mapi - (fun i _ -> - "Type Name " ^ string_of_int i, - "" - ) (Array.of_list itlids) - ) ; - (Array.mapi - (fun i (id,_) -> - "Type " ^ string_of_int i, "" - ) (Array.of_list itlids) - ) ; - (Array.concat - (list_mapi - (fun i (_,consid) -> - (Array.mapi - (fun j _ -> - "Constructor Name " ^ string_of_int i ^ " " ^ string_of_int j, - "" - ) (Array.of_list consid) - ) ; - ) itlids - ) - ) ; - (Array.concat - (list_mapi - (fun i (_,consid) -> - (Array.mapi - (fun j id -> - "Constructor " ^ string_of_int i ^ " " ^ string_of_int j, - "" - ) (Array.of_list consid) - ) ; - ) itlids - ) - ) - ] - ) -;; - -exception IdUnknown of string;; - -let create_hints annotation_window ids_to_targets xpath = - try - match Hashtbl.find ids_to_targets xpath with - Cic.Object annobj -> create_hint_from_obj annotation_window annobj - | Cic.Term annterm -> create_hint_from_term annotation_window annterm -(*CSC: never tested since the introduction of the new Metas *) - | Cic.Hypothesis _ - | Cic.Conjecture _ -> assert false - with - Not_found -> raise (IdUnknown xpath) -;; diff --git a/helm/annotationHelper/cicAnnotationHinter.mli b/helm/annotationHelper/cicAnnotationHinter.mli deleted file mode 100644 index 8cfc04c22..000000000 --- a/helm/annotationHelper/cicAnnotationHinter.mli +++ /dev/null @@ -1,46 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(******************************************************************************) -(* *) -(* PROJECT HELM *) -(* *) -(* Claudio Sacerdoti Coen *) -(* 29/11/2000 *) -(* *) -(* *) -(******************************************************************************) - -val create_hints : - < annotation : GEdit.text; - annotation_hints : < children : < as_widget : 'a Gtk.obj; .. > list; - connect : < clicked : callback:(unit -> unit) -> GtkSignal.id; - .. >; - misc : < disconnect : GtkSignal.id -> 'b; - hide : unit -> 'c; show : unit -> 'd; .. >; - .. > - array; - .. > -> - (Cic.id, Cic.anntarget) Hashtbl.t -> string -> unit diff --git a/helm/cgi/mkcontrol.pl b/helm/cgi/mkcontrol.pl deleted file mode 100755 index e314aa778..000000000 --- a/helm/cgi/mkcontrol.pl +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/perl - -# First of all, let's load HELM configuration -use Env; -my $HELM_LIB_DIR = $ENV{"HELM_LIB_DIR"}; -# this should be the only fixed constant -my $DEFAULT_HELM_LIB_DIR = "/projects/helm/on-line/local/lib/helm"; -if (defined ($HELM_LIB_DIR)) { - $HELM_LIB_PATH = $HELM_LIB_DIR."/configuration.pl"; -} else { - $HELM_LIB_PATH = $DEFAULT_HELM_LIB_DIR."/configuration.pl"; -} - -# next require defines: $helm_dir, $html_link, $dtd_dir, $uris_dbm -require $HELM_LIB_PATH; - -use CGI; - -$cgi = new CGI($ENV{"REQUEST_URL"}); -$mode = $cgi->param('mode'); -$cicuri = $cgi->param('cicuri'); -$theoryuri = $cgi->param('theoryuri'); -$topurl = $cgi->param('topurl'); -$processorURL = $cgi->param('processorURL'); -$getterURL = $cgi->param('getterURL'); -($mode1,$mode2,$mode3,$mode4,$mode5) = split(/,/, $mode); -$natural = "checked" if ($mode4 eq "yes"); -$annotations = "checked" if ($mode5 eq "yes"); -if ($mode1 eq "raw") { - $format_raw = "selected"; -} else { - $format_processed = "selected"; -} - -print < - - -Control panel - - - -
- - - - - - - - - - - -
- Format: - - - - - Reload
- (do it also before attempting to take a link to the current page) - -
-  Natural Language -  Annotations - - Configuration panel -
-
- - -EOT diff --git a/helm/cgi/mkheader.pl b/helm/cgi/mkheader.pl deleted file mode 100755 index b3db1cfa3..000000000 --- a/helm/cgi/mkheader.pl +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/perl - -# First of all, let's load HELM configuration -use Env; -my $HELM_LIB_DIR = $ENV{"HELM_LIB_DIR"}; -# this should be the only fixed constant -my $DEFAULT_HELM_LIB_DIR = "/projects/helm/on-line/local/lib/helm"; -if (defined ($HELM_LIB_DIR)) { - $HELM_LIB_PATH = $HELM_LIB_DIR."/configuration.pl"; -} else { - $HELM_LIB_PATH = $DEFAULT_HELM_LIB_DIR."/configuration.pl"; -} - -# next require defines: $helm_dir, $html_link, $dtd_dir, $uris_dbm -require $HELM_LIB_PATH; - -use CGI; - -$cgi = new CGI($ENV{"REQUEST_URL"}); -$uri = $cgi->param('uri'); - -print < - - -Control panel - - - - - - - -
- Index of $uri -
-
- - -EOT diff --git a/helm/cgi/mkindex.pl b/helm/cgi/mkindex.pl deleted file mode 100755 index 955d6d8b0..000000000 --- a/helm/cgi/mkindex.pl +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/perl - -# First of all, let's load HELM configuration -use Env; -my $HELM_LIB_DIR = $ENV{"HELM_LIB_DIR"}; -# this should be the only fixed constant -my $DEFAULT_HELM_LIB_DIR = "/projects/helm/on-line/local/lib/helm"; -if (defined ($HELM_LIB_DIR)) { - $HELM_LIB_PATH = $HELM_LIB_DIR."/configuration.pl"; -} else { - $HELM_LIB_PATH = $DEFAULT_HELM_LIB_DIR."/configuration.pl"; -} - -# next require defines: $helm_dir, $html_link, $dtd_dir, $uris_dbm -require $HELM_LIB_PATH; - -#use URI::Escape; -use CGI; - -$cgi = new CGI($ENV{"REQUEST_URL"}); - -$mode = $cgi->param('mode'); -$cicuri = $cgi->param('cicuri'); -$theoryuri = $cgi->param('theoryuri'); -$processorURL = $cgi->param('processorURL'); -$getterURL = $cgi->param('getterURL'); -$topurl = $cgi->url(); - -print < - - - Index of $cicuri and $theoryuri - - - - - - - - - - - - - - - -EOT diff --git a/helm/cgi/mkindexcic.pl b/helm/cgi/mkindexcic.pl deleted file mode 100755 index a31f5ecfb..000000000 --- a/helm/cgi/mkindexcic.pl +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/perl - -# First of all, let's load HELM configuration -use Env; -my $HELM_LIB_DIR = $ENV{"HELM_LIB_DIR"}; -# this should be the only fixed constant -my $DEFAULT_HELM_LIB_DIR = "/projects/helm/on-line/local/lib/helm"; -if (defined ($HELM_LIB_DIR)) { - $HELM_LIB_PATH = $HELM_LIB_DIR."/configuration.pl"; -} else { - $HELM_LIB_PATH = $DEFAULT_HELM_LIB_DIR."/configuration.pl"; -} - -# next require defines: $helm_dir, $html_link, $dtd_dir, $uris_dbm -require $HELM_LIB_PATH; - -use URI::Escape; -use LWP::UserAgent; -use CGI; - -my $cgi = new CGI($ENV{"REQUEST_URL"}); -$uri = $cgi->param('cicuri'); -$getterURL = $cgi->param('getterURL'); -$uri =~ s/(.*)\/$/$1/; # Remove a final slash if present -$uri .= "/"; # Put a final slash -$myurl = $cgi->url(); - -$cont = ""; # modified by side-effect by &callback -my $ua = LWP::UserAgent->new; -my $request = HTTP::Request->new(GET => $getterURL."ls?format=txt&baseuri=".$uri); -my $response = $ua->request($request, \&callback); - -@filenames = split(/\n/, $cont); - -my $uridotdot = $uri; -$uridotdot =~ s/(.*)\/.+/$1/; -if ($uri ne "cic:/") { - # Let's print the link to the parent directory - $output = < -[BACK] -
Parent Directory - -EOT -} - -foreach $i (@filenames) { - my ($type,$name,$flags) = split(/, /, $i); - my ($flagscic, $flagstypes) = split(/,/, $flags); - $flagscic =~ s/^<(.*)/$1/; - $flagstypes =~ s/(.*)>$/$1/; - if ($type eq "dir") { - $output .= < -[DIR] -$name - - -EOT - } elsif ($type eq "object") { - if ($name =~ /\.(con|var|ind)$/) { - # cic file - $output .= < -[DIR] -$name - -EOT - } else { - $output .= < -[DIR] -$name - -EOT - } - } else { - $output .= < -[DIR] -$name - -EOT - } -} - -print < - - -Index of $uri - - - - -$output -
-
- - -EOT - -#================================ - -sub callback -{ - my ($data) = @_; - $cont .= $data; -} diff --git a/helm/cgi/mkindextheory.pl b/helm/cgi/mkindextheory.pl deleted file mode 100755 index 424f688ff..000000000 --- a/helm/cgi/mkindextheory.pl +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/perl - -# First of all, let's load HELM configuration -use Env; -my $HELM_LIB_DIR = $ENV{"HELM_LIB_DIR"}; -# this should be the only fixed constant -my $DEFAULT_HELM_LIB_DIR = "/projects/helm/on-line/local/lib/helm"; -if (defined ($HELM_LIB_DIR)) { - $HELM_LIB_PATH = $HELM_LIB_DIR."/configuration.pl"; -} else { - $HELM_LIB_PATH = $DEFAULT_HELM_LIB_DIR."/configuration.pl"; -} - -# next require defines: $helm_dir, $html_link, $dtd_dir, $uris_dbm -require $HELM_LIB_PATH; - -use URI::Escape; -use LWP::UserAgent; -use CGI; - -my $cgi = new CGI($ENV{"REQUEST_URL"}); -$uri = $cgi->param('theoryuri'); -$getterURL = $cgi->param('getterURL'); -$uri =~ s/(.*)\/$/$1/; # Remove a final slash if present -$uri .= "/"; # Put a final slash -$myurl = $cgi->url(); - -$cont = ""; # modified by side-effect by &callback -my $ua = LWP::UserAgent->new; -my $request = HTTP::Request->new(GET => $getterURL."ls?format=txt&baseuri=".$uri); -my $response = $ua->request($request, \&callback); - -@filenames = split(/\n/, $cont); - -my $uridotdot = $uri; -$uridotdot =~ s/(.*)\/.+/$1/; -if ($uri ne "theory:/") { - # Let's print the link to the parent directory - $output = < -[BACK] -Parent Directory - -EOT -} - -foreach $i (@filenames) { - my ($type,$name,$flags) = split(/, /, $i); - my ($flagscic, $flagstypes) = split(/,/, $flags); - $flagscic =~ s/^<(.*)/$1/; - $flagstypes =~ s/(.*)>$/$1/; - if ($type eq "dir") { - $output .= < -[DIR] -$name - -EOT - } elsif ($type eq "object") { - if ($name =~ /\.theory$/) { - # theory file - $output .= < -[DIR] -$name - -EOT - } else { - $output .= < -[DIR] -$name - -EOT - } - } else { - $output .= < -[DIR] -$name - -EOT - } -} - -print < - - -Index of $uri - - - - -$output -
-
- - -EOT - -#================================ - -sub callback -{ - my ($data) = @_; - $cont .= $data; -} diff --git a/helm/configuration/.cvsignore b/helm/configuration/.cvsignore deleted file mode 100644 index d8a7ecb4a..000000000 --- a/helm/configuration/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -Makefile configure config.log config.cache config.status -helm-config -helm_configuration.spec diff --git a/helm/configuration/AUTHORS b/helm/configuration/AUTHORS deleted file mode 100644 index 0ceb16fd5..000000000 --- a/helm/configuration/AUTHORS +++ /dev/null @@ -1,4 +0,0 @@ -Andrea Asperti -Luca Padovani -Claudio Sacerdoti Coen -Irene Schena diff --git a/helm/configuration/COPYING b/helm/configuration/COPYING deleted file mode 100644 index d60c31a97..000000000 --- a/helm/configuration/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/helm/configuration/ChangeLog b/helm/configuration/ChangeLog deleted file mode 100644 index 20c36b475..000000000 --- a/helm/configuration/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -28/12/2000: First alpha release diff --git a/helm/configuration/Makefile.in b/helm/configuration/Makefile.in deleted file mode 100644 index 00c3893dc..000000000 --- a/helm/configuration/Makefile.in +++ /dev/null @@ -1,47 +0,0 @@ - -HELM_BIN_DIR=@HELM_BIN_DIR@ -HELM_LIB_DIR=@HELM_LIB_DIR@ -HELM_ETC_DIR=@HELM_ETC_DIR@ -HELM_SHARE_DIR=@HELM_SHARE_DIR@ -HELM_VAR_DIR=@HELM_VAR_DIR@ -HELM_DTD_DIR=@HELM_DTD_DIR@ -HELM_STYLE_DIR=@HELM_STYLE_DIR@ -HELM_LIBRARY_DIR=@HELM_LIBRARY_DIR@ - -all: - -install: - mkdir -p $(HELM_BIN_DIR) - cp helm-config $(HELM_BIN_DIR) - mkdir -p $(HELM_LIB_DIR) - mkdir -p $(HELM_ETC_DIR) - mkdir -p $(HELM_SHARE_DIR) - mkdir -p $(HELM_VAR_DIR) - chmod 777 $(HELM_VAR_DIR) - mkdir -p $(HELM_LIBRARY_DIR) - chmod 777 $(HELM_LIBRARY_DIR) - mkdir -p $(HELM_DTD_DIR) - mkdir -p $(HELM_STYLE_DIR) - cp lib/configuration.pl $(HELM_LIB_DIR) - cp etc/configuration.dtd etc/configuration.xml etc/helm-dictionary.xml \ - etc/helm-font-configuration.xml etc/helm-math-engine-configuration.xml\ - $(HELM_ETC_DIR) - cp library/servers.txt library/urls_of_uris.db $(HELM_VAR_DIR) - chmod 666 $(HELM_VAR_DIR)/servers.txt \ - $(HELM_VAR_DIR)/urls_of_uris.db - -clean: - -distclean: - rm -f Makefile configure config.log config.cache config.status \ - etc/configuration.xml etc/helm-math-engine-configuration.xml \ - lib/configuration.pl helm-config helm_configuration.spec - -dist: clean - rm -rf ../@PACKAGE@-@VERSION@ - mkdir ../@PACKAGE@-@VERSION@ - cp -r * ../@PACKAGE@-@VERSION@ - (cd .. ; tar cvfz @PACKAGE@-@VERSION@.tar.gz @PACKAGE@-@VERSION@ ; rm -rf @PACKAGE@-@VERSION@) - -.PHONY: all install distclean - diff --git a/helm/configuration/NEWS b/helm/configuration/NEWS deleted file mode 100644 index 20c36b475..000000000 --- a/helm/configuration/NEWS +++ /dev/null @@ -1 +0,0 @@ -28/12/2000: First alpha release diff --git a/helm/configuration/README b/helm/configuration/README deleted file mode 100644 index 9f6eb3534..000000000 --- a/helm/configuration/README +++ /dev/null @@ -1,8 +0,0 @@ -NOTE: This is the first alpha release of project HELM. - -HELM (Hypertextual Electronic Library of Mathematics) is a project aimed -at the creation of tools for the development and exploitation of a huge -distributed library of formal mathematical knowledge. This package holds -the configuration files shared by all this tools. - -For more information see http://www.cs.unibo.it/helm diff --git a/helm/configuration/config.cache.pkg b/helm/configuration/config.cache.pkg deleted file mode 100644 index 434e570a2..000000000 --- a/helm/configuration/config.cache.pkg +++ /dev/null @@ -1,15 +0,0 @@ -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -helm_cv_HELM_VAR_DIR=${helm_cv_HELM_VAR_DIR='/var/local/helm'} diff --git a/helm/configuration/configure.in b/helm/configuration/configure.in deleted file mode 100644 index 03c923e9d..000000000 --- a/helm/configuration/configure.in +++ /dev/null @@ -1,186 +0,0 @@ -AC_INIT(etc/configuration.xml.in) - -PACKAGE=helm_configuration - -HELM_MAJOR_VERSION=0 -HELM_MINOR_VERSION=0 -HELM_MICRO_VERSION=2 -HELM_VERSION=$HELM_MAJOR_VERSION.$HELM_MINOR_VERSION.$HELM_MICRO_VERSION -VERSION=$HELM_VERSION - -DEFAULT_HELM_VAR_DIR=/var/local/helm -DEFAULT_HELM_TMP_DIR=/tmp - -AC_ARG_ENABLE( - defaults, - [ --enable-defaults[=ARG] if yes then use defaults (don't ask user) [default=auto]], - USE_DEFAULTS=$enableval, - USE_DEFAULTS=auto -) - -if test "x$prefix" != xNONE; then - RESOLVED_PREFIX=$prefix -else - RESOLVED_PREFIX=$ac_default_prefix -fi - -if test "x$exec_prefix" != xNONE; then - RESOLVED_EXEC_PREFIX=$exec_prefix -else - RESOLVED_EXEC_PREFIX=$RESOLVED_PREFIX -fi - -dnl General -HELM_BIN_DIR=$RESOLVED_EXEC_PREFIX/bin -HELM_LIB_DIR=$RESOLVED_EXEC_PREFIX/lib/helm -HELM_ETC_DIR=$RESOLVED_PREFIX/etc/helm -HELM_SHARE_DIR=$RESOLVED_PREFIX/share/helm - -dnl Checking for the variable directory -if test $USE_DEFAULTS != yes; then - echo - echo "Now you have to choose a suitable directory for variable files." - echo "Normally, this directory would be something like /var/local/helm, you" - echo "have to be sure that the directory (and the subdirectories in it)" - echo "is world-writable." - echo - echo -n "[[$DEFAULT_HELM_VAR_DIR]] ? " - read HELM_VAR_DIR - echo - if test x$HELM_VAR_DIR = x; then - HELM_VAR_DIR="/var/local/helm" - fi -else - HELM_VAR_DIR=$DEFAULT_HELM_VAR_DIR -fi - -AC_MSG_CHECKING(for HELM variable dir) -AC_MSG_RESULT($HELM_VAR_DIR) - -dnl Checking for the /tmp directory -DEFAULTS=$USE_DEFAULTS -if test $DEFAULTS = auto; then - if test -d $DEFAULT_HELM_TMP_DIR ; then - HELM_TMP_DIR=$DEFAULT_HELM_TMP_DIR - else - DEFAULTS=no - fi -fi - -if test $DEFAULTS = no; then - echo - echo "Please, tell me the name of a directory which can be used to store" - echo "temporary files (normally it is something like /tmp)" - echo - echo -n "[[$DEFAULT_HELM_TMP_DIR]]" - read HELM_TMP_DIR - echo - if test x$HELM_TMP_DIR = x; then - HELM_TMP_DIR=$DEFAULT_HELM_TMP_DIR - fi -else - HELM_TMP_DIR=$DEFAULT_HELM_TMP_DIR -fi - -AC_MSG_CHECKING(for $HELM_TMP_DIR) -if test ! -d $HELM_TMP_DIR; then - AC_MSG_RESULT(no) - AC_MSG_ERROR(please check your installation) -fi -AC_MSG_RESULT(ok) - -dnl Checks for GtkMathView -AC_CHECK_PROG(HAVE_GTKMATHVIEW_CONFIG, gtkmathview-config, yes, no) -if test $HAVE_GTKMATHVIEW_CONFIG = no; then - AC_MSG_ERROR(Could not find gtkmathview-config) -fi -GTKMATHVIEW_PREFIX=`gtkmathview-config --prefix` - -AC_CACHE_CHECK( - for dictionary.xml, - helm_cv_GTKMATHVIEW_DICTIONARY_PATH, - helm_cv_GTKMATHVIEW_DICTIONARY_PATH=$GTKMATHVIEW_PREFIX/share/gtkmathview/dictionary.xml - if test ! -f $helm_cv_GTKMATHVIEW_DICTIONARY_PATH; then - read helm_cv_GTKMATHVIEW_DICTIONARY_PATH - fi -) -GTKMATHVIEW_DICTIONARY_PATH=$helm_cv_GTKMATHVIEW_DICTIONARY_PATH - -AC_CACHE_CHECK( - for font-configuration.xml, - helm_cv_GTKMATHVIEW_FONT_CONFIGURATION_PATH, - helm_cv_GTKMATHVIEW_FONT_CONFIGURATION_PATH=$GTKMATHVIEW_PREFIX/share/gtkmathview/font-configuration.xml - if test ! -f $helm_cv_GTKMATHVIEW_FONT_CONFIGURATION_PATH; then - read helm_cv_GTKMATHVIEW_FONT_CONFIGURATION_PATH - fi -) -GTKMATHVIEW_FONT_CONFIGURATION_PATH=$helm_cv_GTKMATHVIEW_FONT_CONFIGURATION_PATH - -AC_CACHE_CHECK( - for t1lib configuration file, - helm_cv_GTKMATHVIEW_T1_CONFIG_FILE, - helm_cv_GTKMATHVIEW_T1_CONFIG_FILE=$GTKMATHVIEW_PREFIX/share/gtkmathview/t1.config - if test ! -f $helm_cv_GTKMATHVIEW_T1_CONFIG_FILE; then - read GTKMATHVIEW_T1_CONFIG_FILE - fi -) -GTKMATHVIEW_T1_CONFIG_FILE=$helm_cv_GTKMATHVIEW_T1_CONFIG_FILE - -HELM_DICTIONARY_PATH=$HELM_ETC_DIR/helm-dictionary.xml -HELM_FONT_CONFIGURATION_PATH=$HELM_ETC_DIR/helm-font-configuration.xml - -dnl Only for HELM XML configuration -HELM_LIBRARY_DIR=$HELM_VAR_DIR/library -HELM_SERVERS_FILE=$HELM_VAR_DIR/servers.txt -HELM_URIS_DBM=$HELM_VAR_DIR/urls_of_uris.db - -dnl CSC: FIXME: getters should download the DTDs -HELM_DTD_DIR=$HELM_SHARE_DIR/dtd -HELM_STYLE_DIR=$HELM_SHARE_DIR/style - -dnl HELM prefixes -AC_SUBST(RESOLVED_PREFIX) -AC_SUBST(RESOLVED_EXEC_PREFIX) - -dnl HELM version -AC_SUBST(PACKAGE) -AC_SUBST(VERSION) - -dnl HELM directories -AC_SUBST(HELM_BIN_DIR) -AC_SUBST(HELM_LIB_DIR) -AC_SUBST(HELM_ETC_DIR) -AC_SUBST(HELM_SHARE_DIR) -AC_SUBST(HELM_VAR_DIR) -AC_SUBST(HELM_TMP_DIR) - -dnl HELM download directory -AC_SUBST(HELM_LIBRARY_DIR) - -dnl HELM servers -AC_SUBST(HELM_SERVERS_FILE) - -dnl HELM URIS data-base -AC_SUBST(HELM_URIS_DBM) - -dnl HELM DTDs -AC_SUBST(HELM_DTD_DIR) - -dnl HELM stylesheets -AC_SUBST(HELM_STYLE_DIR) - -dnl HELM customized GtkMathView configuration -AC_SUBST(HELM_DICTIONARY_PATH) -AC_SUBST(HELM_FONT_CONFIGURATION_PATH) -AC_SUBST(GTKMATHVIEW_DICTIONARY_PATH) -AC_SUBST(GTKMATHVIEW_FONT_CONFIGURATION_PATH) -AC_SUBST(GTKMATHVIEW_T1_CONFIG_FILE) - -AC_OUTPUT( -[ Makefile - helm-config - lib/configuration.pl - etc/helm-math-engine-configuration.xml - etc/configuration.xml - helm_configuration.spec -], chmod +x helm-config) diff --git a/helm/configuration/etc/.cvsignore b/helm/configuration/etc/.cvsignore deleted file mode 100644 index c85a7bd9b..000000000 --- a/helm/configuration/etc/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -helm-math-engine-configuration.xml configuration.xml diff --git a/helm/configuration/etc/configuration.dtd b/helm/configuration/etc/configuration.dtd deleted file mode 100644 index 8fc5612a8..000000000 --- a/helm/configuration/etc/configuration.dtd +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/configuration/etc/configuration.xml.in b/helm/configuration/etc/configuration.xml.in deleted file mode 100644 index db034369d..000000000 --- a/helm/configuration/etc/configuration.xml.in +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @HELM_LIBRARY_DIR@ - - @HELM_DTD_DIR@ - @HELM_STYLE_DIR@ - - @HELM_SERVERS_FILE@ - @HELM_URIS_DBM@ - - index.txt - @HELM_TMP_DIR@ - - /home/lpadovan/helm/PARSER/examples - http://localhost/really_very_local/helm/header/getheader.xml - http://localhost/really_very_local/helm/style/ - http://localhost/cgi-bin/helm/webeq.pl - http://localhost/cgi-bin/helm/webeqp.pl - http://localhost/cgi-bin/helm/use_webeqp.pl - ?baseurl=&stylesheet1=rootcontent.xsl&stylesheet2=content_to_html.xsl&xmluri= - http://localhost:8081/ - http://localhost:8080/helm/servlet/uwobo/ - diff --git a/helm/configuration/etc/helm-dictionary.xml b/helm/configuration/etc/helm-dictionary.xml deleted file mode 100644 index 6d1caf722..000000000 --- a/helm/configuration/etc/helm-dictionary.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/configuration/etc/helm-font-configuration.xml b/helm/configuration/etc/helm-font-configuration.xml deleted file mode 100644 index b5a9f7cf5..000000000 --- a/helm/configuration/etc/helm-font-configuration.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/configuration/etc/helm-math-engine-configuration.xml.in b/helm/configuration/etc/helm-math-engine-configuration.xml.in deleted file mode 100644 index 96839778f..000000000 --- a/helm/configuration/etc/helm-math-engine-configuration.xml.in +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @HELM_DICTIONARY_PATH@ - @GTKMATHVIEW_DICTIONARY_PATH@ - @HELM_FONT_CONFIGURATION_PATH@ - @GTKMATHVIEW_FONT_CONFIGURATION_PATH@ - @GTKMATHVIEW_T1_CONFIG_FILE@ - - - - - diff --git a/helm/configuration/helm-config.in b/helm/configuration/helm-config.in deleted file mode 100644 index 3b569dec9..000000000 --- a/helm/configuration/helm-config.in +++ /dev/null @@ -1,84 +0,0 @@ - -usage() -{ - cat <&2 -fi - -while test $# -gt 0; do - case "$1" in - -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - case $1 in - --version) - echo @VERSION@ - ;; - --prefix) - echo @RESOLVED_PREFIX@ - ;; - --exec-prefix) - echo @RESOLVED_EXEC_PREFIX@ - ;; - --bin-dir) - echo @HELM_BIN_DIR@ - ;; - --lib-dir) - echo @HELM_LIB_DIR@ - ;; - --etc-dir) - echo @HELM_ETC_DIR@ - ;; - --share-dir) - echo @HELM_SHARE_DIR@ - ;; - --var-dir) - echo @HELM_VAR_DIR@ - ;; - --tmp-dir) - echo @HELM_TMP_DIR@ - ;; - --library-dir) - echo @HELM_LIBRARY_DIR@ - ;; - --servers) - echo @HELM_SERVERS_FILE@ - ;; - --uris-dbm) - echo @HELM_URIS_DBM@ - ;; - --dtd-dir) - echo @HELM_DTD_DIR@ - ;; - --style-dir) - echo @HELM_STYLE_DIR@ - ;; - *) - usage 1 1>&2 - ;; - esac - shift -done - diff --git a/helm/configuration/helm_configuration.spec.in b/helm/configuration/helm_configuration.spec.in deleted file mode 100644 index 56695c263..000000000 --- a/helm/configuration/helm_configuration.spec.in +++ /dev/null @@ -1,43 +0,0 @@ -Summary: The configuration files shared by all the tools of project HELM -Name: @PACKAGE@ -Version: @VERSION@ -Release: 1 -Copyright: GPL -URL: http://www.cs.unibo.it/helm -Packager: Claudio Sacerdoti Coen -Group: Applications/Publishing -Source: www.cs.unibo.it:/helm/@PACKAGE@-@VERSION@.tar.gz -%description -HELM (Hypertextual Electronic Library of Mathematics) is a project aimed -at the creation of tools for the development and exploitation of a huge -distributed library of formal mathematical knowledge. This package holds -the configuration files shared by all this tools. -For more information see http://www.cs.unibo.it/helm - -%prep -%setup - -%build -cp config.cache.pkg config.cache -./configure --enable-defaults -make - -%install -make install - -%files -%doc AUTHORS COPYING ChangeLog NEWS README - -/usr/local/bin/helm-config -/usr/local/lib/helm/configuration.pl -/usr/local/etc/helm/configuration.dtd -/usr/local/etc/helm/helm-font-configuration.xml -/usr/local/etc/helm/configuration.xml -/usr/local/etc/helm/helm-math-engine-configuration.xml -/usr/local/etc/helm/helm-dictionary.xml -%attr(666,root,root) /var/local/helm/servers.txt -%attr(666,root,root) /var/local/helm/urls_of_uris.db - -%dir /var/local/helm/library -%dir /usr/local/share/helm/dtd -%dir /usr/local/share/helm/style diff --git a/helm/configuration/lib/.cvsignore b/helm/configuration/lib/.cvsignore deleted file mode 100644 index ff6af6814..000000000 --- a/helm/configuration/lib/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -configuration.pl diff --git a/helm/configuration/lib/configuration.pl.in b/helm/configuration/lib/configuration.pl.in deleted file mode 100644 index 6540b800e..000000000 --- a/helm/configuration/lib/configuration.pl.in +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright (C) 2000, HELM Team. -# -# This file is part of HELM, an Hypertextual, Electronic -# Library of Mathematics, developed at the Computer Science -# Department, University of Bologna, Italy. -# -# HELM is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# HELM is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with HELM; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# For details, see the HELM World-Wide-Web page, -# http://cs.unibo.it/helm/. - -use XML::Parser; - -use Env; -my $HELM_CONFIGURATION_DIR = $ENV{"HELM_CONFIGURATION_DIR"}; -my $DEFAULT_HELM_CONFIGURATION_DIR = "@HELM_ETC_DIR@"; -# this should be the only fixed constant -if (defined ($HELM_CONFIGURATION_DIR)) { - $configuration_file = $HELM_CONFIGURATION_DIR."/configuration.xml"; -} else { - $configuration_file = $DEFAULT_HELM_CONFIGURATION_DIR."/configuration.xml"; -} - -$parser = new XML::Parser(Handlers => {Start => \&handle_start, - End => \&handle_end, - Char => \&handle_char}); - - -$parser->parsefile($configuration_file, ErrorContext => 3); - - -sub handle_start -{ - if ($_[1] eq "value-of") { - $$varname .= ${$_[3]}; - } elsif ($_[1] ne "configuration") { - $varname = $_[1]; - } -} - -sub handle_end -{ - if ($_[1] ne "value-of" && $_[1] ne "configuration") { - # Next line for debugging only: - # print "OK: #$_[1]# := #$$varname#\n"; - $varname = undef; - } -} - -sub handle_char -{ - $$varname .= $_[1]; -} diff --git a/helm/configuration/library/servers.txt b/helm/configuration/library/servers.txt deleted file mode 100644 index 5a172e462..000000000 --- a/helm/configuration/library/servers.txt +++ /dev/null @@ -1 +0,0 @@ -http://www.cs.unibo.it/~sacerdot/examples diff --git a/helm/configuration/library/urls_of_uris.db b/helm/configuration/library/urls_of_uris.db deleted file mode 100644 index 9f01b7ae5..000000000 Binary files a/helm/configuration/library/urls_of_uris.db and /dev/null differ diff --git a/helm/coq-contribs/LAMBDA-TYPES/.cvsignore b/helm/coq-contribs/LAMBDA-TYPES/.cvsignore deleted file mode 100644 index 419956872..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.vo diff --git a/helm/coq-contribs/LAMBDA-TYPES/.depend b/helm/coq-contribs/LAMBDA-TYPES/.depend deleted file mode 100644 index eb03259ff..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/.depend +++ /dev/null @@ -1,68 +0,0 @@ -LambdaDelta.vo: LambdaDelta.v base_tactics.vo base_hints.vo base_types.vo base_blt.vo base_rewrite.vo Base.vo terms_defs.vo tlt_defs.vo contexts_defs.vo lift_defs.vo lift_gen.vo lift_props.vo lift_tlt.vo drop_defs.vo drop_props.vo subst0_defs.vo subst0_gen.vo subst0_lift.vo subst0_subst0.vo subst0_confluence.vo subst0_tlt.vo subst1_defs.vo subst1_gen.vo subst1_lift.vo subst1_subst1.vo subst1_confluence.vo csubst0_defs.vo csubst1_defs.vo fsubst0_defs.vo pr0_defs.vo pr0_lift.vo pr0_gen.vo pr0_subst0.vo pr0_confluence.vo pr0_subst1.vo pr1_defs.vo pr1_confluence.vo cpr0_defs.vo pr2_defs.vo pr2_lift.vo pr2_gen.vo pr2_confluence.vo pr2_subst1.vo pr2_gen_context.vo pr3_defs.vo pr3_props.vo pr3_gen.vo pr3_confluence.vo pr3_subst1.vo pr3_gen_context.vo pc1_defs.vo pc1_props.vo pc3_defs.vo pc3_props.vo pc3_gen.vo pc3_subst0.vo pc3_gen_context.vo ty0_defs.vo ty0_gen.vo ty0_lift.vo ty0_props.vo ty0_subst0.vo ty0_gen_context.vo csub0_defs.vo csub0_props.vo ty0_sred.vo ty0_sred_props.vo -ty0_sred_props.vo: ty0_sred_props.v lift_props.vo drop_props.vo pc3_props.vo pc3_gen.vo ty0_defs.vo ty0_gen.vo ty0_props.vo ty0_sred.vo -ty0_sred.vo: ty0_sred.v lift_gen.vo subst1_gen.vo csubst1_defs.vo pr0_lift.vo pr0_subst1.vo cpr0_defs.vo pc1_props.vo pc3_props.vo pc3_gen.vo ty0_defs.vo ty0_gen.vo ty0_lift.vo ty0_props.vo ty0_subst0.vo ty0_gen_context.vo csub0_defs.vo csub0_props.vo -csub0_props.vo: csub0_props.v pc3_props.vo csub0_defs.vo -csub0_defs.vo: csub0_defs.v ty0_defs.vo -ty0_gen_context.vo: ty0_gen_context.v lift_gen.vo lift_props.vo subst1_defs.vo subst1_lift.vo subst1_confluence.vo drop_props.vo csubst1_defs.vo pc3_gen.vo pc3_gen_context.vo ty0_defs.vo ty0_lift.vo -ty0_subst0.vo: ty0_subst0.v drop_props.vo csubst0_defs.vo fsubst0_defs.vo pc3_props.vo pc3_subst0.vo ty0_defs.vo ty0_gen.vo ty0_lift.vo ty0_props.vo -ty0_props.vo: ty0_props.v drop_props.vo pc3_props.vo ty0_defs.vo ty0_gen.vo ty0_lift.vo -ty0_lift.vo: ty0_lift.v lift_props.vo drop_props.vo pc3_props.vo ty0_defs.vo -ty0_gen.vo: ty0_gen.v pc3_props.vo ty0_defs.vo -ty0_defs.vo: ty0_defs.v pc3_defs.vo -pc3_gen_context.vo: pc3_gen_context.v subst1_confluence.vo csubst1_defs.vo pr3_gen_context.vo pc3_defs.vo pc3_props.vo -pc3_subst0.vo: pc3_subst0.v subst0_subst0.vo fsubst0_defs.vo pr0_subst0.vo pc3_defs.vo pc3_props.vo -pc3_gen.vo: pc3_gen.v lift_gen.vo pr3_props.vo pr3_gen.vo pc3_defs.vo pc3_props.vo -pc3_props.vo: pc3_props.v subst0_subst0.vo pr0_subst0.vo cpr0_defs.vo pr3_defs.vo pr3_props.vo pr3_confluence.vo pc3_defs.vo -pc3_defs.vo: pc3_defs.v pr2_defs.vo pr3_defs.vo pc1_defs.vo -pc1_props.vo: pc1_props.v pr1_confluence.vo pc1_defs.vo -pc1_defs.vo: pc1_defs.v pr0_defs.vo pr1_defs.vo -pr3_gen_context.vo: pr3_gen_context.v csubst1_defs.vo pr2_gen_context.vo pr3_defs.vo -pr3_subst1.vo: pr3_subst1.v subst1_defs.vo pr2_subst1.vo pr3_defs.vo -pr3_confluence.vo: pr3_confluence.v pr2_confluence.vo pr3_defs.vo -pr3_gen.vo: pr3_gen.v pr2_gen.vo pr3_defs.vo pr3_props.vo -pr3_props.vo: pr3_props.v subst0_subst0.vo pr0_subst0.vo cpr0_defs.vo pr2_lift.vo pr2_gen.vo pr3_defs.vo -pr3_defs.vo: pr3_defs.v pr1_defs.vo pr2_defs.vo -pr2_gen_context.vo: pr2_gen_context.v drop_props.vo subst1_gen.vo subst1_subst1.vo subst1_confluence.vo csubst1_defs.vo pr0_gen.vo pr0_subst1.vo pr2_defs.vo pr2_gen.vo pr2_subst1.vo -pr2_subst1.vo: pr2_subst1.v subst1_defs.vo subst1_confluence.vo drop_props.vo pr0_subst1.vo pr2_defs.vo -pr2_confluence.vo: pr2_confluence.v subst0_confluence.vo drop_props.vo pr0_subst0.vo pr0_confluence.vo pr2_defs.vo -pr2_gen.vo: pr2_gen.v subst0_gen.vo subst0_lift.vo drop_props.vo pr0_gen.vo pr0_subst0.vo pr2_defs.vo -pr2_lift.vo: pr2_lift.v subst0_lift.vo drop_props.vo pr0_lift.vo pr2_defs.vo -pr2_defs.vo: pr2_defs.v drop_defs.vo pr0_defs.vo -cpr0_defs.vo: cpr0_defs.v contexts_defs.vo drop_defs.vo pr0_defs.vo -pr1_confluence.vo: pr1_confluence.v pr0_confluence.vo pr1_defs.vo -pr1_defs.vo: pr1_defs.v pr0_defs.vo -pr0_subst1.vo: pr0_subst1.v subst1_defs.vo pr0_defs.vo pr0_subst0.vo -pr0_confluence.vo: pr0_confluence.v tlt_defs.vo lift_gen.vo lift_tlt.vo subst0_gen.vo subst0_confluence.vo pr0_defs.vo pr0_lift.vo pr0_gen.vo pr0_subst0.vo -pr0_subst0.vo: pr0_subst0.v subst0_gen.vo subst0_lift.vo subst0_subst0.vo subst0_confluence.vo pr0_defs.vo pr0_lift.vo -pr0_gen.vo: pr0_gen.v lift_gen.vo lift_props.vo subst0_gen.vo pr0_defs.vo pr0_lift.vo -pr0_lift.vo: pr0_lift.v lift_props.vo subst0_lift.vo pr0_defs.vo -pr0_defs.vo: pr0_defs.v subst0_defs.vo -fsubst0_defs.vo: fsubst0_defs.v subst0_defs.vo csubst0_defs.vo -csubst1_defs.vo: csubst1_defs.v subst1_defs.vo csubst0_defs.vo -csubst0_defs.vo: csubst0_defs.v contexts_defs.vo subst0_defs.vo drop_defs.vo -subst1_confluence.vo: subst1_confluence.v lift_gen.vo subst0_gen.vo subst0_confluence.vo subst1_defs.vo subst1_gen.vo -subst1_subst1.vo: subst1_subst1.v subst0_subst0.vo subst1_defs.vo -subst1_lift.vo: subst1_lift.v lift_props.vo subst0_lift.vo subst1_defs.vo -subst1_gen.vo: subst1_gen.v subst0_gen.vo subst1_defs.vo -subst1_defs.vo: subst1_defs.v subst0_defs.vo -subst0_tlt.vo: subst0_tlt.v tlt_defs.vo lift_tlt.vo subst0_defs.vo -subst0_confluence.vo: subst0_confluence.v lift_gen.vo subst0_gen.vo subst0_defs.vo -subst0_subst0.vo: subst0_subst0.v subst0_defs.vo subst0_gen.vo subst0_lift.vo -subst0_lift.vo: subst0_lift.v lift_props.vo subst0_defs.vo -subst0_gen.vo: subst0_gen.v lift_props.vo subst0_defs.vo -subst0_defs.vo: subst0_defs.v lift_defs.vo -drop_props.vo: drop_props.v lift_gen.vo drop_defs.vo -drop_defs.vo: drop_defs.v contexts_defs.vo lift_defs.vo -lift_tlt.vo: lift_tlt.v tlt_defs.vo lift_defs.vo -lift_props.vo: lift_props.v lift_defs.vo -lift_gen.vo: lift_gen.v lift_defs.vo -lift_defs.vo: lift_defs.v terms_defs.vo -contexts_defs.vo: contexts_defs.v terms_defs.vo -tlt_defs.vo: tlt_defs.v terms_defs.vo -terms_defs.vo: terms_defs.v Base.vo -Base.vo: Base.v base_tactics.vo base_hints.vo base_types.vo base_blt.vo base_rewrite.vo -base_rewrite.vo: base_rewrite.v -base_blt.vo: base_blt.v base_tactics.vo base_hints.vo -base_types.vo: base_types.v base_tactics.vo base_hints.vo -base_hints.vo: base_hints.v base_tactics.vo -base_tactics.vo: base_tactics.v diff --git a/helm/coq-contribs/LAMBDA-TYPES/Base.v b/helm/coq-contribs/LAMBDA-TYPES/Base.v deleted file mode 100644 index 6015c1774..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/Base.v +++ /dev/null @@ -1,7 +0,0 @@ -Require Export Arith. -Require Export Wf_nat. -Require Export base_tactics. -Require Export base_hints. -Require Export base_types. -Require Export base_blt. -Require Export base_rewrite. diff --git a/helm/coq-contribs/LAMBDA-TYPES/LambdaDelta.v b/helm/coq-contribs/LAMBDA-TYPES/LambdaDelta.v deleted file mode 100644 index c44873ee0..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/LambdaDelta.v +++ /dev/null @@ -1,67 +0,0 @@ -Require Export base_tactics. -Require Export base_hints. -Require Export base_types. -Require Export base_blt. -Require Export base_rewrite. -Require Export Base. -Require Export terms_defs. -Require Export tlt_defs. -Require Export contexts_defs. -Require Export lift_defs. -Require Export lift_gen. -Require Export lift_props. -Require Export lift_tlt. -Require Export drop_defs. -Require Export drop_props. -Require Export subst0_defs. -Require Export subst0_gen. -Require Export subst0_lift. -Require Export subst0_subst0. -Require Export subst0_confluence. -Require Export subst0_tlt. -Require Export subst1_defs. -Require Export subst1_gen. -Require Export subst1_lift. -Require Export subst1_subst1. -Require Export subst1_confluence. -Require Export csubst0_defs. -Require Export csubst1_defs. -Require Export fsubst0_defs. -Require Export pr0_defs. -Require Export pr0_lift. -Require Export pr0_gen. -Require Export pr0_subst0. -Require Export pr0_confluence. -Require Export pr0_subst1. -Require Export pr1_defs. -Require Export pr1_confluence. -Require Export cpr0_defs. -Require Export pr2_defs. -Require Export pr2_lift. -Require Export pr2_gen. -Require Export pr2_confluence. -Require Export pr2_subst1. -Require Export pr2_gen_context. -Require Export pr3_defs. -Require Export pr3_props. -Require Export pr3_gen. -Require Export pr3_confluence. -Require Export pr3_subst1. -Require Export pr3_gen_context. -Require Export pc1_defs. -Require Export pc1_props. -Require Export pc3_defs. -Require Export pc3_props. -Require Export pc3_gen. -Require Export pc3_subst0. -Require Export pc3_gen_context. -Require Export ty0_defs. -Require Export ty0_gen. -Require Export ty0_lift. -Require Export ty0_props. -Require Export ty0_subst0. -Require Export ty0_gen_context. -Require Export csub0_defs. -Require Export csub0_props. -Require Export ty0_sred. -Require Export ty0_sred_props. diff --git a/helm/coq-contribs/LAMBDA-TYPES/Make b/helm/coq-contribs/LAMBDA-TYPES/Make deleted file mode 100644 index c895b78c9..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/Make +++ /dev/null @@ -1,69 +0,0 @@ -# List of vernac files to compile -base_tactics.v -base_hints.v -base_types.v -base_blt.v -base_rewrite.v -Base.v -terms_defs.v -tlt_defs.v -contexts_defs.v -lift_defs.v -lift_gen.v -lift_props.v -lift_tlt.v -drop_defs.v -drop_props.v -subst0_defs.v -subst0_gen.v -subst0_lift.v -subst0_subst0.v -subst0_confluence.v -subst0_tlt.v -subst1_defs.v -subst1_gen.v -subst1_lift.v -subst1_subst1.v -subst1_confluence.v -csubst0_defs.v -csubst1_defs.v -fsubst0_defs.v -pr0_defs.v -pr0_lift.v -pr0_gen.v -pr0_subst0.v -pr0_confluence.v -pr0_subst1.v -pr1_defs.v -pr1_confluence.v -cpr0_defs.v -pr2_defs.v -pr2_lift.v -pr2_gen.v -pr2_confluence.v -pr2_subst1.v -pr2_gen_context.v -pr3_defs.v -pr3_props.v -pr3_gen.v -pr3_confluence.v -pr3_subst1.v -pr3_gen_context.v -pc1_defs.v -pc1_props.v -pc3_defs.v -pc3_props.v -pc3_gen.v -pc3_subst0.v -pc3_gen_context.v -ty0_defs.v -ty0_gen.v -ty0_lift.v -ty0_props.v -ty0_subst0.v -ty0_gen_context.v -csub0_defs.v -csub0_props.v -ty0_sred.v -ty0_sred_props.v -LambdaDelta.v diff --git a/helm/coq-contribs/LAMBDA-TYPES/Makefile b/helm/coq-contribs/LAMBDA-TYPES/Makefile deleted file mode 100644 index 1648c32aa..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/Makefile +++ /dev/null @@ -1,361 +0,0 @@ -############################################################################## -## The Calculus of Inductive Constructions ## -## ## -## Projet Coq ## -## ## -## INRIA ENS-CNRS ## -## Rocquencourt Lyon ## -## ## -## Coq V7 ## -## ## -## ## -############################################################################## - -# WARNING -# -# This Makefile has been automagically generated by coq_makefile -# Edit at your own risks ! -# -# END OF WARNING - -# -# This Makefile was generated by the command line : -# coq_makefile -f Make -o Makefile -# - -########################## -# # -# Variables definitions. # -# # -########################## - -CAMLP4LIB=`camlp4 -where` -COQSRC=-I $(COQTOP)/kernel -I $(COQTOP)/lib \ - -I $(COQTOP)/library -I $(COQTOP)/parsing -I $(COQTOP)/pretyping \ - -I $(COQTOP)/proofs -I $(COQTOP)/syntax -I $(COQTOP)/tactics \ - -I $(COQTOP)/toplevel -I $(CAMLP4LIB) -ZFLAGS=$(OCAMLLIBS) $(COQSRC) -OPT= -COQFLAGS=-q $(OPT) $(COQLIBS) -COQC=$(COQBIN)coqc -GALLINA=gallina -COQWEB=coqweb -CAMLC=ocamlc -c -CAMLOPTC=ocamlopt -c -CAMLLINK=ocamlc -CAMLOPTLINK=ocamlopt -COQDEP=$(COQBIN)coqdep -c -COQVO2XML=coq_vo2xml - -######################### -# # -# Libraries definition. # -# # -######################### - -OCAMLLIBS=-I . -COQLIBS=-I . - -################################### -# # -# Definition of the "all" target. # -# # -################################### - -VFILES=base_tactics.v\ - base_hints.v\ - base_types.v\ - base_blt.v\ - base_rewrite.v\ - Base.v\ - terms_defs.v\ - tlt_defs.v\ - contexts_defs.v\ - lift_defs.v\ - lift_gen.v\ - lift_props.v\ - lift_tlt.v\ - drop_defs.v\ - drop_props.v\ - subst0_defs.v\ - subst0_gen.v\ - subst0_lift.v\ - subst0_subst0.v\ - subst0_confluence.v\ - subst0_tlt.v\ - subst1_defs.v\ - subst1_gen.v\ - subst1_lift.v\ - subst1_subst1.v\ - subst1_confluence.v\ - csubst0_defs.v\ - csubst1_defs.v\ - fsubst0_defs.v\ - pr0_defs.v\ - pr0_lift.v\ - pr0_gen.v\ - pr0_subst0.v\ - pr0_confluence.v\ - pr0_subst1.v\ - pr1_defs.v\ - pr1_confluence.v\ - cpr0_defs.v\ - pr2_defs.v\ - pr2_lift.v\ - pr2_gen.v\ - pr2_confluence.v\ - pr2_subst1.v\ - pr2_gen_context.v\ - pr3_defs.v\ - pr3_props.v\ - pr3_gen.v\ - pr3_confluence.v\ - pr3_subst1.v\ - pr3_gen_context.v\ - pc1_defs.v\ - pc1_props.v\ - pc3_defs.v\ - pc3_props.v\ - pc3_gen.v\ - pc3_subst0.v\ - pc3_gen_context.v\ - ty0_defs.v\ - ty0_gen.v\ - ty0_lift.v\ - ty0_props.v\ - ty0_subst0.v\ - ty0_gen_context.v\ - csub0_defs.v\ - csub0_props.v\ - ty0_sred.v\ - ty0_sred_props.v\ - LambdaDelta.v -VOFILES=$(VFILES:.v=.vo) -VIFILES=$(VFILES:.v=.vi) -GFILES=$(VFILES:.v=.g) -HTMLFILES=$(VFILES:.v=.html) -GHTMLFILES=$(VFILES:.v=.g.html) - -all: base_tactics.vo\ - base_hints.vo\ - base_types.vo\ - base_blt.vo\ - base_rewrite.vo\ - Base.vo\ - terms_defs.vo\ - tlt_defs.vo\ - contexts_defs.vo\ - lift_defs.vo\ - lift_gen.vo\ - lift_props.vo\ - lift_tlt.vo\ - drop_defs.vo\ - drop_props.vo\ - subst0_defs.vo\ - subst0_gen.vo\ - subst0_lift.vo\ - subst0_subst0.vo\ - subst0_confluence.vo\ - subst0_tlt.vo\ - subst1_defs.vo\ - subst1_gen.vo\ - subst1_lift.vo\ - subst1_subst1.vo\ - subst1_confluence.vo\ - csubst0_defs.vo\ - csubst1_defs.vo\ - fsubst0_defs.vo\ - pr0_defs.vo\ - pr0_lift.vo\ - pr0_gen.vo\ - pr0_subst0.vo\ - pr0_confluence.vo\ - pr0_subst1.vo\ - pr1_defs.vo\ - pr1_confluence.vo\ - cpr0_defs.vo\ - pr2_defs.vo\ - pr2_lift.vo\ - pr2_gen.vo\ - pr2_confluence.vo\ - pr2_subst1.vo\ - pr2_gen_context.vo\ - pr3_defs.vo\ - pr3_props.vo\ - pr3_gen.vo\ - pr3_confluence.vo\ - pr3_subst1.vo\ - pr3_gen_context.vo\ - pc1_defs.vo\ - pc1_props.vo\ - pc3_defs.vo\ - pc3_props.vo\ - pc3_gen.vo\ - pc3_subst0.vo\ - pc3_gen_context.vo\ - ty0_defs.vo\ - ty0_gen.vo\ - ty0_lift.vo\ - ty0_props.vo\ - ty0_subst0.vo\ - ty0_gen_context.vo\ - csub0_defs.vo\ - csub0_props.vo\ - ty0_sred.vo\ - ty0_sred_props.vo\ - LambdaDelta.vo - -spec: $(VIFILES) - -gallina: $(GFILES) - -html: $(HTMLFILES) - -gallinahtml: $(GHTMLFILES) - -all.ps: $(VFILES) - $(COQWEB) -ps -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` - -all-gal.ps: $(GFILES) - $(COQWEB) -ps -o $@ `$(COQDEP) -sort -suffix .g $(VFILES)` - -xml:: .xml_time_stamp -.xml_time_stamp: base_tactics.vo\ - base_hints.vo\ - base_types.vo\ - base_blt.vo\ - base_rewrite.vo\ - Base.vo\ - terms_defs.vo\ - tlt_defs.vo\ - contexts_defs.vo\ - lift_defs.vo\ - lift_gen.vo\ - lift_props.vo\ - lift_tlt.vo\ - drop_defs.vo\ - drop_props.vo\ - subst0_defs.vo\ - subst0_gen.vo\ - subst0_lift.vo\ - subst0_subst0.vo\ - subst0_confluence.vo\ - subst0_tlt.vo\ - subst1_defs.vo\ - subst1_gen.vo\ - subst1_lift.vo\ - subst1_subst1.vo\ - subst1_confluence.vo\ - csubst0_defs.vo\ - csubst1_defs.vo\ - fsubst0_defs.vo\ - pr0_defs.vo\ - pr0_lift.vo\ - pr0_gen.vo\ - pr0_subst0.vo\ - pr0_confluence.vo\ - pr0_subst1.vo\ - pr1_defs.vo\ - pr1_confluence.vo\ - cpr0_defs.vo\ - pr2_defs.vo\ - pr2_lift.vo\ - pr2_gen.vo\ - pr2_confluence.vo\ - pr2_subst1.vo\ - pr2_gen_context.vo\ - pr3_defs.vo\ - pr3_props.vo\ - pr3_gen.vo\ - pr3_confluence.vo\ - pr3_subst1.vo\ - pr3_gen_context.vo\ - pc1_defs.vo\ - pc1_props.vo\ - pc3_defs.vo\ - pc3_props.vo\ - pc3_gen.vo\ - pc3_subst0.vo\ - pc3_gen_context.vo\ - ty0_defs.vo\ - ty0_gen.vo\ - ty0_lift.vo\ - ty0_props.vo\ - ty0_subst0.vo\ - ty0_gen_context.vo\ - csub0_defs.vo\ - csub0_props.vo\ - ty0_sred.vo\ - ty0_sred_props.vo\ - LambdaDelta.vo - $(COQVO2XML) $(COQFLAGS) $(?:%.o=%) - touch .xml_time_stamp - -#################### -# # -# Special targets. # -# # -#################### - -.PHONY: all opt byte archclean clean install depend xml - -.SUFFIXES: .v .vo .vi .g .html .tex .g.tex .g.html - -.v.vo: - $(COQC) $(COQDEBUG) $(COQFLAGS) $* - -.v.vi: - $(COQC) -i $(COQDEBUG) $(COQFLAGS) $* - -.v.g: - $(GALLINA) $< - -.v.tex: - $(COQWEB) $< -o $@ - -.v.html: - $(COQWEB) -html $< -o $@ - -.g.g.tex: - $(COQWEB) $< -o $@ - -.g.g.html: - $(COQWEB) -html $< -o $@ - -byte: - $(MAKE) all "OPT=" - -opt: - $(MAKE) all "OPT=-opt" - -include .depend - -depend: - rm .depend - $(COQDEP) -i $(COQLIBS) *.v *.ml *.mli >.depend - $(COQDEP) $(COQLIBS) -suffix .html *.v >>.depend - -xml:: - -install: - mkdir -p `$(COQC) -where`/user-contrib - cp -f *.vo `$(COQC) -where`/user-contrib - -Makefile: Make - mv -f Makefile Makefile.bak - $(COQBIN)coq_makefile -f Make -o Makefile - -clean: - rm -f *.cmo *.cmi *.cmx *.o *.vo *.vi *.g *~ - rm -f all.ps all-gal.ps $(HTMLFILES) $(GHTMLFILES) - -archclean: - rm -f *.cmx *.o - -# WARNING -# -# This Makefile has been automagically generated by coq_makefile -# Edit at your own risks ! -# -# END OF WARNING - diff --git a/helm/coq-contribs/LAMBDA-TYPES/README b/helm/coq-contribs/LAMBDA-TYPES/README deleted file mode 100644 index 6a5bf7e0f..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/README +++ /dev/null @@ -1,61 +0,0 @@ - - Contribution Bologna/LAMBDA-TYPES - ================================== - -This directory contains a formalization in Coq of "lambda-delta", a -lambda-typed lambda-calculus with abbreviations. - -Author & Date: Ferruccio Guidi - Department of Computer Science, University of Bologna - March 2005 -E-mail : fguidi@cs.unibo.it -WWW : http://www.cs.unibo.it/~fguidi - -Installation procedure: ------------------------ - - To get this contribution compiled, type - - make - - or - - make opt - - The main modules produced by the compilation are: - - LambdaDelta provides the theory of the "lambda-delta" calculus - and its prerequisites - - Base provides just the prerequisites (mainly some arithmetic - properties missing in the standard library of Coq) - -Description: ------------- - - The present work, which is meant to be improved in the future, contains - a formalization of the "lambda-delta" calculus, defined in "item notation" - and with De Bruijn indices, and includes the proofs of some standard - properties of this calculus. In particular the user will find: - - - Confluence of reduction - - Generation lemma - - Thinning lemma - - Substitution lemma - - Type Correctness - - Type Uniqueness - - Subject Reduction - - Other properties to be added in the future versions of this contribution - include (but are not limited to): - - - Strong Normalization - - Decidability of Type Inference and Type Checking - -Further information on this contribution: ------------------------------------------ - - The latest version of this development is maintained in the CVS repository - of the HELM project and can be downloaded at: - - www.cs.unibo.it/cgi-bin/viewcvs.cgi/helm/coq-contribs/LAMBDA-TYPES diff --git a/helm/coq-contribs/LAMBDA-TYPES/base_blt.v b/helm/coq-contribs/LAMBDA-TYPES/base_blt.v deleted file mode 100644 index ae00365c6..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/base_blt.v +++ /dev/null @@ -1,33 +0,0 @@ -Require Arith. -Require base_tactics. -Require base_hints. - -(*#* #stop file *) - - Fixpoint blt [m,n: nat] : bool := Cases n m of - | (0) m => false - | (S n) (0) => true - | (S n) (S m) => (blt m n) - end. - - Section blt_props. (******************************************************) - - Theorem lt_blt: (x,y:?) (lt y x) -> (blt y x) = true. - XElim x; [ Intros; Inversion H | XElim y; Simpl; XAuto ]. - Qed. - - Theorem le_bge: (x,y:?) (le x y) -> (blt y x) = false. - XElim x; [ XAuto | XElim y; Intros; [ Inversion H0 | Simpl; XAuto ] ]. - Qed. - - Theorem blt_lt: (x,y:?) (blt y x) = true -> (lt y x). - XElim x; [ Intros; Inversion H | XElim y; Simpl; XAuto ]. - Qed. - - Theorem bge_le: (x,y:?) (blt y x) = false -> (le x y). - XElim x; [ XAuto | XElim y; Intros; [ Inversion H0 | Simpl; XAuto ] ]. - Qed. - - End blt_props. - - Hints Resolve lt_blt le_bge : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/base_hints.v b/helm/coq-contribs/LAMBDA-TYPES/base_hints.v deleted file mode 100644 index a364406a3..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/base_hints.v +++ /dev/null @@ -1,262 +0,0 @@ -(*#* #stop file *) - -Require Arith. -Require base_tactics. - -(* eq ***********************************************************************) - -Hint eq : ltlc := Constructors eq. - -Hint f1N : ltlc := Resolve (f_equal nat). - -Hint f2NN : ltlc := Resolve (f_equal2 nat nat). - -Hints Resolve sym_equal : ltlc. - -Hints Resolve plus_sym plus_n_Sm plus_assoc_r simpl_plus_l : ltlc. - -Hints Resolve minus_n_O : ltlc. - -(* le ***********************************************************************) - -Hint le : ltlc := Constructors le. - -Hints Resolve le_O_n le_n_S le_S_n le_trans : ltlc. - -Hints Resolve lt_le_S : ltlc. - -Hints Resolve le_plus_plus le_plus_trans le_plus_l le_plus_r : ltlc. - -(* lt ***********************************************************************) - -Hints Resolve lt_trans : ltlc. - -Hints Resolve lt_le_trans le_lt_n_Sm : ltlc. - -Hints Resolve lt_reg_r lt_le_plus_plus le_lt_plus_plus : ltlc. - -(* not **********************************************************************) - -Hints Resolve sym_not_equal : ltlc. - -(* missing in the standard library ******************************************) - - Theorem simpl_plus_r: (n,m,p:?) (plus m n) = (plus p n) -> m = p. - Intros. - Apply (simpl_plus_l n). - Rewrite plus_sym. - Rewrite H; XAuto. - Qed. - - Theorem minus_plus_r: (m,n:?) (minus (plus m n) n) = m. - Intros. - Rewrite plus_sym. - Apply minus_plus. - Qed. - - Theorem plus_permute_2_in_3: (x,y,z:?) (plus (plus x y) z) = (plus (plus x z) y). - Intros. - Rewrite plus_assoc_r. - Rewrite (plus_sym y z). - Rewrite <- plus_assoc_r; XAuto. - Qed. - - Theorem plus_permute_2_in_3_assoc: (n,h,k:?) (plus (plus n h) k) = (plus n (plus k h)). - Intros. - Rewrite plus_permute_2_in_3; Rewrite plus_assoc_l; XAuto. - Qed. - - Theorem plus_O: (x,y:?) (plus x y) = (0) -> x = (O) /\ y = (O). - XElim x; [ XAuto | Intros; Inversion H0 ]. - Qed. - - Theorem minus_Sx_SO: (x:?) (minus (S x) (1)) = x. - Intros; Simpl; Rewrite <- minus_n_O; XAuto. - Qed. - - Theorem eq_nat_dec: (i,j:nat) ~i=j \/ i=j. - XElim i; XElim j; Intros; XAuto. - Elim (H n0); XAuto. - Qed. - - Theorem neq_eq_e: (i,j:nat; P:Prop) (~i=j -> P) -> (i=j -> P) -> P. - Intros. - Pose (eq_nat_dec i j). - XElim o; XAuto. - Qed. - - Theorem le_false: (m,n:?; P:Prop) (le m n) -> (le (S n) m) -> P. - XElim m. -(* case 1 : m = 0 *) - Intros; Inversion H0. -(* case 2 : m > 0 *) - XElim n0; Intros. -(* case 2.1 : n = 0 *) - Inversion H0. -(* case 2.2 : n > 0 *) - Simpl in H1. - Apply (H n0); XAuto. - Qed. - - Theorem le_plus_minus_sym: (n,m:?) (le n m) -> m = (plus (minus m n) n). - Intros. - Rewrite plus_sym; Apply le_plus_minus; XAuto. - Qed. - - Theorem le_minus_minus: (x,y:?) (le x y) -> (z:?) (le y z) -> - (le (minus y x) (minus z x)). - Intros. - EApply simpl_le_plus_l. - Rewrite le_plus_minus_r; [ Idtac | XAuto ]. - Rewrite le_plus_minus_r; XEAuto. - Qed. - - Theorem le_minus_plus: (z,x:?) (le z x) -> (y:?) - (minus (plus x y) z) = (plus (minus x z) y). - XElim z. -(* case 1 : z = 0 *) - Intros x H; Inversion H; XAuto. -(* case 2 : z > 0 *) - Intros z; XElim x; Intros. -(* case 2.1 : x = 0 *) - Inversion H0. -(* case 2.2 : x > 0 *) - Simpl; XAuto. - Qed. - - Theorem le_minus: (x,z,y:?) (le (plus x y) z) -> (le x (minus z y)). - Intros. - Rewrite <- (minus_plus_r x y); XAuto. - Apply le_minus_minus; XAuto. - Qed. - - Theorem le_trans_plus_r: (x,y,z:?) (le (plus x y) z) -> (le y z). - Intros. - EApply le_trans; [ EApply le_plus_r | Idtac ]; XEAuto. - Qed. - - Theorem le_gen_S: (m,x:?) (le (S m) x) -> - (EX n | x = (S n) & (le m n)). - Intros; Inversion H; XEAuto. - Qed. - - Theorem lt_x_plus_x_Sy: (x,y:?) (lt x (plus x (S y))). - Intros; Rewrite plus_sym; Simpl; XAuto. - Qed. - - Theorem simpl_lt_plus_r: (p,n,m:?) (lt (plus n p) (plus m p)) -> (lt n m). - Intros. - EApply simpl_lt_plus_l. - Rewrite plus_sym in H; Rewrite (plus_sym m p) in H; Apply H. - Qed. - - Theorem minus_x_Sy: (x,y:?) (lt y x) -> - (minus x y) = (S (minus x (S y))). - XElim x. -(* case 1 : x = 0 *) - Intros; Inversion H. -(* case 2 : x > 0 *) - XElim y; Intros; Simpl. -(* case 2.1 : y = 0 *) - Rewrite <- minus_n_O; XAuto. -(* case 2.2 : y > 0 *) - Cut (lt n0 n); XAuto. - Qed. - - Theorem lt_plus_minus: (x,y:?) (lt x y) -> - y = (S (plus x (minus y (S x)))). - Intros. - Apply (le_plus_minus (S x) y); XAuto. - Qed. - - Theorem lt_plus_minus_r: (x,y:?) (lt x y) -> - y = (S (plus (minus y (S x)) x)). - Intros. - Rewrite plus_sym; Apply lt_plus_minus; XAuto. - Qed. - - Theorem minus_x_SO: (x:?) (lt (0) x) -> x = (S (minus x (1))). - Intros. - Rewrite <- minus_x_Sy; [ Rewrite <- minus_n_O; XEAuto | XEAuto ]. - Qed. - - Theorem lt_le_minus: (x,y:?) (lt x y) -> (le x (minus y (1))). - Intros; Apply le_minus; Rewrite plus_sym; Simpl; XAuto. - Qed. - - Theorem lt_le_e: (n,d:?; P:Prop) - ((lt n d) -> P) -> ((le d n) -> P) -> P. - Intros. - Cut (le d n) \/ (lt n d); [ Intros H1; XElim H1; XAuto | Apply le_or_lt ]. - Qed. - - Theorem lt_eq_e: (x,y:?; P:Prop) ((lt x y) -> P) -> - (x = y -> P) -> (le x y) -> P. - Intros. - LApply (le_lt_or_eq x y); [ Clear H1; Intros H1 | XAuto ]. - XElim H1; XAuto. - Qed. - - Theorem lt_eq_gt_e: (x,y:?; P:Prop) ((lt x y) -> P) -> - (x = y -> P) -> ((lt y x) -> P) -> P. - Intros. - Apply (lt_le_e x y); [ XAuto | Intros ]. - Apply (lt_eq_e y x); XAuto. - Qed. - - Theorem lt_gen_S': (x,n:?) (lt x (S n)) -> - x = (0) \/ (EX m | x = (S m) & (lt m n)). - XElim x; XEAuto. - Qed. - -Hints Resolve le_lt_trans : ltlc. - -Hints Resolve simpl_plus_r minus_plus_r minus_x_Sy - plus_permute_2_in_3 plus_permute_2_in_3_assoc : ltlc. - -Hints Resolve le_minus_minus le_minus_plus le_minus le_trans_plus_r : ltlc. - -Hints Resolve lt_x_plus_x_Sy simpl_lt_plus_r lt_le_minus lt_plus_minus - lt_plus_minus_r : ltlc. - - Theorem lt_neq: (x,y:?) (lt x y) -> ~x=y. - Unfold not; Intros; Rewrite H0 in H; Clear H0 x. - LApply (lt_n_n y); XAuto. - Qed. - -Hints Resolve lt_neq : ltlc. - - Theorem arith0: (h2,d2,n:?) (le (plus d2 h2) n) -> - (h1:?) (le (plus d2 h1) (minus (plus n h1) h2)). - Intros. - Rewrite <- (minus_plus h2 (plus d2 h1)). - Apply le_minus_minus; [ XAuto | Idtac ]. - Rewrite plus_assoc_l; Rewrite (plus_sym h2 d2); XAuto. - Qed. - -Hints Resolve arith0 : ltlc. - - Tactic Definition EqFalse := - Match Context With - [ H: ~?1=?1 |- ? ] -> - LApply H; [ Clear H; Intros H; Inversion H | XAuto ]. - - Tactic Definition PlusO := - Match Context With - | [ H: (plus ?0 ?1) = (0) |- ? ] -> - LApply (plus_O ?0 ?1); [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - - Tactic Definition SymEqual := - Match Context With - | [ H: ?1 = ?2 |- ? ] -> - Cut ?2 = ?1; [ Clear H; Intros H | Apply sym_equal; XAuto ]. - - Tactic Definition LeLtGen := - Match Context With - | [ H: (le (S ?1) ?2) |- ? ] -> - LApply (le_gen_S ?1 ?2); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (lt ?1 (S ?2)) |- ? ] -> - LApply (lt_gen_S' ?1 ?2); [ Clear H; Intros H | XAuto ]; - XElim H; [ Intros | Intros H; XElim H; Intros ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/base_rewrite.v b/helm/coq-contribs/LAMBDA-TYPES/base_rewrite.v deleted file mode 100644 index 68490ee3f..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/base_rewrite.v +++ /dev/null @@ -1,76 +0,0 @@ -(*#* #stop file *) - -Require Arith. - - Tactic Definition Arith0 x := - Replace (S x) with (plus (1) x); XAuto. - - Tactic Definition Arith1 x := - Replace x with (plus x (0)); [XAuto | Auto with arith]. - - Tactic Definition Arith1In H x := - XReplaceIn H x '(plus x (0)). - - Tactic Definition Arith2 x := - Replace x with (plus (0) x); XAuto. - - Tactic Definition Arith3 x := - Replace (S x) with (S (plus (0) x)); XAuto. - - Tactic Definition Arith3In H x := - XReplaceIn H '(S x) '(S (plus (0) x)). - - Tactic Definition Arith4 x y := - Replace (S (plus x y)) with (plus (S x) y); XAuto. - - Tactic Definition Arith4In H x y := - XReplaceIn H '(S (plus x y)) '(plus (S x) y). - - Tactic Definition Arith4c x y := - Arith4 x y; Rewrite plus_sym. - - Tactic Definition Arith5 x y := - Replace (S (plus x y)) with (plus x (S y)); Auto with arith. - - Tactic Definition Arith5In H x y := - XReplaceIn H '(S (plus x y)) '(plus x (S y)); Auto with arith. - - Tactic Definition Arith5' x y := - Replace (plus x (S y)) with (S (plus x y)); Auto with arith. - - Tactic Definition Arith5'In H x y := - XReplaceIn H '(plus x (S y)) '(S (plus x y)); Auto with arith. - - Tactic Definition Arith5'c x y := - Arith5' x y; Rewrite plus_sym. - - Tactic Definition Arith6In H x y := - XReplaceIn H '(plus x (S y)) '(plus (1) (plus x y)); - [ Idtac | Simpl; Auto with arith ]. - - Tactic Definition Arith7 x := - Replace (S x) with (plus x (1)); - [ Idtac | Rewrite plus_sym; Auto with arith ]. - - Tactic Definition Arith7In H x := - XReplaceIn H '(S x) '(plus x (1)) ; - [ Idtac | Rewrite plus_sym; Auto with arith ]. - - Tactic Definition Arith7' x := - Replace (plus x (1)) with (S x); - [ Idtac | Rewrite plus_sym; Auto with arith ]. - - Tactic Definition Arith8 x y := - Replace x with (plus y (minus x y)); - [ Idtac | Auto with arith ]. - - Tactic Definition Arith8' x y := - Replace (plus y (minus x y)) with x; - [ Idtac | Auto with arith ]. - - Tactic Definition Arith9'In H x := - XReplaceIn H '(S (plus x (0))) '(S x). - - Tactic Definition Arith10 x := - Replace x with (minus (S x) (1)); - [ Idtac | Simpl; Rewrite <- minus_n_O; Auto with arith ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/base_tactics.v b/helm/coq-contribs/LAMBDA-TYPES/base_tactics.v deleted file mode 100644 index daa6facca..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/base_tactics.v +++ /dev/null @@ -1,45 +0,0 @@ -(*#* #stop file *) - - Tactic Definition XAuto := Auto with ltlc. - - Tactic Definition XEAuto := EAuto with ltlc. - - Tactic Definition XDEAuto d := EAuto d with ltlc. - - Tactic Definition XElimUsing e v := - Try Intros until v; Elim v using e; Try Clear v. - - Tactic Definition XElim v := Try Intros until v; Elim v; Try Clear v. - - Tactic Definition XCase v := Try Intros until v; Case v; Try Clear v. - - Tactic Definition XReplaceIn Z0 y1 y2 := - Cut y1=y2; [ Intros Z; Rewrite Z in Z0; Clear Z | XAuto ]. - - Theorem insert_eq: (S:Set; x:S; P:S->Prop; G:Prop) - ((y:S) (P y) -> y = x -> G) -> (P x) -> G. - EAuto. Qed. - - Tactic Definition InsertEq H y := - Pattern 1 y in H; Match Context With [ _: (?1 y) |- ? ] -> - Apply insert_eq with x:=y P:=?1; - [ Clear H; Intros until 1 | Pattern y; Apply H ]. - - Theorem unintro : (A:Set; a:A; P:A->Prop) ((x:A) (P x)) -> (P a). - Auto. - Qed. - - Tactic Definition UnIntro Last H := - Move H after Last; - Match Context With [ y: ?1 |- ?2 ] -> - Apply (unintro ?1 y); Clear y. - - Tactic Definition NonLinear := - Match Context With - [ H: ?1 |- ? ] -> Cut ?1; [ Intros | XAuto ]. - - Tactic Definition XRewrite x := - Match Context With - | [ H0: x = ? |- ? ] -> Try Rewrite H0 - | [ H0: ? = x |- ? ] -> Try Rewrite <- H0 - | _ -> Idtac. diff --git a/helm/coq-contribs/LAMBDA-TYPES/base_types.v b/helm/coq-contribs/LAMBDA-TYPES/base_types.v deleted file mode 100644 index f24ef915a..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/base_types.v +++ /dev/null @@ -1,206 +0,0 @@ -(* This file was generated by coqgen *) - -Require base_tactics. -Require base_hints. - -(*#* #stop file *) - -(* extensions for ex2 *) - -Syntactic Definition ex2_intro := ex_intro2. - -Theorem ex2_sym: (A:Set; P,Q:A->Prop) - (EX x | (P x) & (Q x)) -> (EX x | (Q x) & (P x)). - Intros; XElim H; XEAuto. - Qed. - -Hints Resolve ex2_sym : ltlc. - -(* or3 *) - -Inductive or3 [P0,P1,P2:Prop] : Prop := - | or3_intro0 : P0 -> (or3 P0 P1 P2) - | or3_intro1 : P1 -> (or3 P0 P1 P2) - | or3_intro2 : P2 -> (or3 P0 P1 P2). - -Hint or3 : ltlc := Constructors or3. - -Grammar constr constr10 := - | or3 - [ "OR" constr($c0) "|" constr($c1) "|" constr($c2) ] -> - [ (or3 $c0 $c1 $c2) ]. - -(* or4 *) - -Inductive or4 [P0,P1,P2,P3:Prop] : Prop := - | or4_intro0 : P0 -> (or4 P0 P1 P2 P3) - | or4_intro1 : P1 -> (or4 P0 P1 P2 P3) - | or4_intro2 : P2 -> (or4 P0 P1 P2 P3) - | or4_intro3 : P3 -> (or4 P0 P1 P2 P3). - -Hint or4 : ltlc := Constructors or4. - -Grammar constr constr10 := - | or4 - [ "OR" constr($c0) "|" constr($c1) "|" constr($c2) "|" constr($c3) ] -> - [ (or4 $c0 $c1 $c2 $c3) ]. - -(* ex2_2 *) - -Inductive ex2_2 [A0,A1:Set; P0,P1:A0->A1->Prop] : Prop := - ex2_2_intro : (x0:A0; x1:A1)(P0 x0 x1)->(P1 x0 x1)->(ex2_2 A0 A1 P0 P1). - -Hint ex2_2 : ltlc := Constructors ex2_2. - -Syntactic Definition Ex2_2 := ex2_2 | 1. - -Grammar constr constr10 := - | ex2_2implicit - [ "EX" ident($v0) ident($v1) "|" constr($c0) "&" constr($c1) ] -> - [ (ex2_2 ? ? [$v0;$v1]$c0 [$v0;$v1]$c1) ]. - -(* ex3_2 *) - -Inductive ex3_2 [A0,A1:Set; P0,P1,P2:A0->A1->Prop] : Prop := - ex3_2_intro : (x0:A0; x1:A1)(P0 x0 x1)->(P1 x0 x1)->(P2 x0 x1)->(ex3_2 A0 A1 P0 P1 P2). - -Hint ex3_2 : ltlc := Constructors ex3_2. - -Syntactic Definition Ex3_2 := ex3_2 | 1. - -Grammar constr constr10 := - | ex3_2implicit - [ "EX" ident($v0) ident($v1) "|" constr($c0) "&" constr($c1) "&" constr($c2) ] -> - [ (ex3_2 ? ? [$v0;$v1]$c0 [$v0;$v1]$c1 [$v0;$v1]$c2) ]. - -(* ex_3 *) - -Inductive ex_3 [A0,A1,A2:Set; P0:A0->A1->A2->Prop] : Prop := - ex_3_intro : (x0:A0; x1:A1; x2:A2)(P0 x0 x1 x2)->(ex_3 A0 A1 A2 P0). - -Hint ex_3 : ltlc := Constructors ex_3. - -Syntactic Definition Ex_3 := ex_3 | 1. - -Grammar constr constr10 := - | ex_3implicit - [ "EX" ident($v0) ident($v1) ident($v2) "|" constr($c0) ] -> - [ (ex_3 ? ? ? [$v0;$v1;$v2]$c0) ]. - -(* ex3_3 *) - -Inductive ex3_3 [A0,A1,A2:Set; P0,P1,P2:A0->A1->A2->Prop] : Prop := - ex3_3_intro : (x0:A0; x1:A1; x2:A2)(P0 x0 x1 x2)->(P1 x0 x1 x2)->(P2 x0 x1 x2)->(ex3_3 A0 A1 A2 P0 P1 P2). - -Hint ex3_3 : ltlc := Constructors ex3_3. - -Syntactic Definition Ex3_3 := ex3_3 | 1. - -Grammar constr constr10 := - | ex3_3implicit - [ "EX" ident($v0) ident($v1) ident($v2) "|" constr($c0) "&" constr($c1) "&" constr($c2) ] -> - [ (ex3_3 ? ? ? [$v0;$v1;$v2]$c0 [$v0;$v1;$v2]$c1 [$v0;$v1;$v2]$c2) ]. - -(* ex4_3 *) - -Inductive ex4_3 [A0,A1,A2:Set; P0,P1,P2,P3:A0->A1->A2->Prop] : Prop := - ex4_3_intro : (x0:A0; x1:A1; x2:A2)(P0 x0 x1 x2)->(P1 x0 x1 x2)->(P2 x0 x1 x2)->(P3 x0 x1 x2)->(ex4_3 A0 A1 A2 P0 P1 P2 P3). - -Hint ex4_3 : ltlc := Constructors ex4_3. - -Syntactic Definition Ex4_3 := ex4_3 | 1. - -Grammar constr constr10 := - | ex4_3implicit - [ "EX" ident($v0) ident($v1) ident($v2) "|" constr($c0) "&" constr($c1) "&" constr($c2) "&" constr($c3) ] -> - [ (ex4_3 ? ? ? [$v0;$v1;$v2]$c0 [$v0;$v1;$v2]$c1 [$v0;$v1;$v2]$c2 [$v0;$v1;$v2]$c3) ]. - -(* ex3_4 *) - -Inductive ex3_4 [A0,A1,A2,A3:Set; P0,P1,P2:A0->A1->A2->A3->Prop] : Prop := - ex3_4_intro : (x0:A0; x1:A1; x2:A2; x3:A3)(P0 x0 x1 x2 x3)->(P1 x0 x1 x2 x3)->(P2 x0 x1 x2 x3)->(ex3_4 A0 A1 A2 A3 P0 P1 P2). - -Hint ex3_4 : ltlc := Constructors ex3_4. - -Syntactic Definition Ex3_4 := ex3_4 | 1. - -Grammar constr constr10 := - | ex3_4implicit - [ "EX" ident($v0) ident($v1) ident($v2) ident($v3) "|" constr($c0) "&" constr($c1) "&" constr($c2) ] -> - [ (ex3_4 ? ? ? ? [$v0;$v1;$v2;$v3]$c0 [$v0;$v1;$v2;$v3]$c1 [$v0;$v1;$v2;$v3]$c2) ]. - -(* ex4_4 *) - -Inductive ex4_4 [A0,A1,A2,A3:Set; P0,P1,P2,P3:A0->A1->A2->A3->Prop] : Prop := - ex4_4_intro : (x0:A0; x1:A1; x2:A2; x3:A3)(P0 x0 x1 x2 x3)->(P1 x0 x1 x2 x3)->(P2 x0 x1 x2 x3)->(P3 x0 x1 x2 x3)->(ex4_4 A0 A1 A2 A3 P0 P1 P2 P3). - -Hint ex4_4 : ltlc := Constructors ex4_4. - -Syntactic Definition Ex4_4 := ex4_4 | 1. - -Grammar constr constr10 := - | ex4_4implicit - [ "EX" ident($v0) ident($v1) ident($v2) ident($v3) "|" constr($c0) "&" constr($c1) "&" constr($c2) "&" constr($c3) ] -> - [ (ex4_4 ? ? ? ? [$v0;$v1;$v2;$v3]$c0 [$v0;$v1;$v2;$v3]$c1 [$v0;$v1;$v2;$v3]$c2 [$v0;$v1;$v2;$v3]$c3) ]. - -(* ex4_5 *) - -Inductive ex4_5 [A0,A1,A2,A3,A4:Set; P0,P1,P2,P3:A0->A1->A2->A3->A4->Prop] : Prop := - ex4_5_intro : (x0:A0; x1:A1; x2:A2; x3:A3; x4:A4)(P0 x0 x1 x2 x3 x4)->(P1 x0 x1 x2 x3 x4)->(P2 x0 x1 x2 x3 x4)->(P3 x0 x1 x2 x3 x4)->(ex4_5 A0 A1 A2 A3 A4 P0 P1 P2 P3). - -Hint ex4_5 : ltlc := Constructors ex4_5. - -Syntactic Definition Ex4_5 := ex4_5 | 1. - -Grammar constr constr10 := - | ex4_5implicit - [ "EX" ident($v0) ident($v1) ident($v2) ident($v3) ident($v4) "|" constr($c0) "&" constr($c1) "&" constr($c2) "&" constr($c3) ] -> - [ (ex4_5 ? ? ? ? ? [$v0;$v1;$v2;$v3;$v4]$c0 [$v0;$v1;$v2;$v3;$v4]$c1 [$v0;$v1;$v2;$v3;$v4]$c2 [$v0;$v1;$v2;$v3;$v4]$c3) ]. - -(* ex5_5 *) - -Inductive ex5_5 [A0,A1,A2,A3,A4:Set; P0,P1,P2,P3,P4:A0->A1->A2->A3->A4->Prop] : Prop := - ex5_5_intro : (x0:A0; x1:A1; x2:A2; x3:A3; x4:A4)(P0 x0 x1 x2 x3 x4)->(P1 x0 x1 x2 x3 x4)->(P2 x0 x1 x2 x3 x4)->(P3 x0 x1 x2 x3 x4)->(P4 x0 x1 x2 x3 x4)->(ex5_5 A0 A1 A2 A3 A4 P0 P1 P2 P3 P4). - -Hint ex5_5 : ltlc := Constructors ex5_5. - -Syntactic Definition Ex5_5 := ex5_5 | 1. - -Grammar constr constr10 := - | ex5_5implicit - [ "EX" ident($v0) ident($v1) ident($v2) ident($v3) ident($v4) "|" constr($c0) "&" constr($c1) "&" constr($c2) "&" constr($c3) "&" constr($c4) ] -> - [ (ex5_5 ? ? ? ? ? [$v0;$v1;$v2;$v3;$v4]$c0 [$v0;$v1;$v2;$v3;$v4]$c1 [$v0;$v1;$v2;$v3;$v4]$c2 [$v0;$v1;$v2;$v3;$v4]$c3 [$v0;$v1;$v2;$v3;$v4]$c4) ]. - -(* ex6_6 *) - -Inductive ex6_6 [A0,A1,A2,A3,A4,A5:Set; P0,P1,P2,P3,P4,P5:A0->A1->A2->A3->A4->A5->Prop] : Prop := - ex6_6_intro : (x0:A0; x1:A1; x2:A2; x3:A3; x4:A4; x5:A5)(P0 x0 x1 x2 x3 x4 x5)->(P1 x0 x1 x2 x3 x4 x5)->(P2 x0 x1 x2 x3 x4 x5)->(P3 x0 x1 x2 x3 x4 x5)->(P4 x0 x1 x2 x3 x4 x5)->(P5 x0 x1 x2 x3 x4 x5)->(ex6_6 A0 A1 A2 A3 A4 A5 P0 P1 P2 P3 P4 P5). - -Hint ex6_6 : ltlc := Constructors ex6_6. - -Syntactic Definition Ex6_6 := ex6_6 | 1. - -Grammar constr constr10 := - | ex6_6implicit - [ "EX" ident($v0) ident($v1) ident($v2) ident($v3) ident($v4) ident($v5) "|" constr($c0) "&" constr($c1) "&" constr($c2) "&" constr($c3) "&" constr($c4) "&" constr($c5) ] -> - [ (ex6_6 ? ? ? ? ? ? [$v0;$v1;$v2;$v3;$v4;$v5]$c0 [$v0;$v1;$v2;$v3;$v4;$v5]$c1 [$v0;$v1;$v2;$v3;$v4;$v5]$c2 [$v0;$v1;$v2;$v3;$v4;$v5]$c3 [$v0;$v1;$v2;$v3;$v4;$v5]$c4 [$v0;$v1;$v2;$v3;$v4;$v5]$c5) ]. - -(* ex6_7 *) - -Inductive ex6_7 [A0,A1,A2,A3,A4,A5,A6:Set; P0,P1,P2,P3,P4,P5:A0->A1->A2->A3->A4->A5->A6->Prop] : Prop := - ex6_7_intro : (x0:A0; x1:A1; x2:A2; x3:A3; x4:A4; x5:A5; x6:A6)(P0 x0 x1 x2 x3 x4 x5 x6)->(P1 x0 x1 x2 x3 x4 x5 x6)->(P2 x0 x1 x2 x3 x4 x5 x6)->(P3 x0 x1 x2 x3 x4 x5 x6)->(P4 x0 x1 x2 x3 x4 x5 x6)->(P5 x0 x1 x2 x3 x4 x5 x6)->(ex6_7 A0 A1 A2 A3 A4 A5 A6 P0 P1 P2 P3 P4 P5). - -Hint ex6_7 : ltlc := Constructors ex6_7. - -Syntactic Definition Ex6_7 := ex6_7 | 1. - -Grammar constr constr10 := - | ex6_7implicit - [ "EX" ident($v0) ident($v1) ident($v2) ident($v3) ident($v4) ident($v5) ident($v6) "|" constr($c0) "&" constr($c1) "&" constr($c2) "&" constr($c3) "&" constr($c4) "&" constr($c5) ] -> - [ (ex6_7 ? ? ? ? ? ? ? [$v0;$v1;$v2;$v3;$v4;$v5;$v6]$c0 [$v0;$v1;$v2;$v3;$v4;$v5;$v6]$c1 [$v0;$v1;$v2;$v3;$v4;$v5;$v6]$c2 [$v0;$v1;$v2;$v3;$v4;$v5;$v6]$c3 [$v0;$v1;$v2;$v3;$v4;$v5;$v6]$c4 [$v0;$v1;$v2;$v3;$v4;$v5;$v6]$c5) ]. - -(* extended Decompose tactic *) - -Tactic Definition XDecompose H := - Decompose [and or ex ex2 or3 or4 ex2_2 ex3_2 ex_3 ex3_3 ex4_3 ex3_4 ex4_4 ex4_5 ex5_5 ex6_6 ex6_7] H; Clear H. - diff --git a/helm/coq-contribs/LAMBDA-TYPES/contexts_defs.v b/helm/coq-contribs/LAMBDA-TYPES/contexts_defs.v deleted file mode 100644 index a9a689235..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/contexts_defs.v +++ /dev/null @@ -1,77 +0,0 @@ -(*#* #stop file *) - -Require Export terms_defs. - - Inductive Set C := CSort: nat -> C - | CTail: C -> K -> T -> C. - - Hint f3CKT : ltlc := Resolve (f_equal3 C K T). - - Tactic Definition CGenBase := - Match Context With - | [ H: (CSort ?) = (CSort ?) |- ? ] -> Inversion H; Clear H - | [ H: (CTail ? ? ?) = (CTail ? ? ?) |- ? ] -> Inversion H; Clear H - | _ -> TGenBase. - - Definition r: K -> nat -> nat := [k;i] Cases k of - | (Bind _) => i - | (Flat _) => (S i) - end. - - Fixpoint app [c:C] : nat -> T -> T := [j;t]Cases j c of - | (0) _ => t - | _ (CSort _) => t - | (S i) (CTail c k u) => (app c (r k i) (TTail k u t)) - end. - - Section r_props. (********************************************************) - - Theorem r_S: (k:?; i:?) (r k (S i)) = (S (r k i)). - XElim k; XAuto. - Qed. - - Theorem r_plus_sym: (k:?; i,j:?) (r k (plus i j)) = (plus i (r k j)). - XElim k; Intros; Simpl; XAuto. - Qed. - - Theorem r_minus: (i,n:?) (lt n i) -> - (k:?) (minus (r k i) (S n)) = (r k (minus i (S n))). - XElim k; Intros; Simpl; XEAuto. - Qed. - - Theorem r_dis: (k:?; P:Prop) - (((i:?) (r k i) = i) -> P) -> - (((i:?) (r k i) = (S i)) -> P) -> P. - XElim k; XAuto. - Qed. - - End r_props. - - Tactic Definition RRw := - Repeat (Rewrite r_S Orelse Rewrite r_plus_sym). - - Section r_arith. (********************************************************) - - Theorem r_arith0: (k:?; i:?) (minus (r k (S i)) (1)) = (r k i). - Intros; RRw; Rewrite minus_Sx_SO; XAuto. - Qed. - - Theorem r_arith1: (k:?; i,j:?) (minus (r k (S i)) (S j)) = (minus (r k i) j). - Intros; RRw; XAuto. - Qed. - - End r_arith. - - Section app_props. (******************************************************) - - Theorem app_csort: (t:?; i,n:?) (app (CSort n) i t) = t. - XElim i; Intros; Simpl; XAuto. - Qed. - - Theorem app_O: (c:?; t:?) (app c (0) t) = t. - XElim c; XAuto. - Qed. - - End app_props. - - Hints Resolve app_csort app_O : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/cpr0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/cpr0_defs.v deleted file mode 100644 index 7773a3410..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/cpr0_defs.v +++ /dev/null @@ -1,90 +0,0 @@ -Require Export contexts_defs. -Require Export drop_defs. -Require Export pr0_defs. - -(*#* #caption "current axioms for the relation $\\CprZ{}{}$", - "reflexivity", "compatibility" -*) -(*#* #cap #cap c, c1, c2 #alpha u1 in V1, u2 in V2, k in z *) - - Inductive cpr0 : C -> C -> Prop := - | cpr0_refl : (c:?) (cpr0 c c) - | cpr0_comp : (c1,c2:?) (cpr0 c1 c2) -> (u1,u2:?) (pr0 u1 u2) -> - (k:?) (cpr0 (CTail c1 k u1) (CTail c2 k u2)). - -(*#* #stop file *) - - Hint cpr0 : ltlc := Constructors cpr0. - - Section cpr0_drop. (******************************************************) - - Theorem cpr0_drop : (c1,c2:?) (cpr0 c1 c2) -> (h:?; e1:?; u1:?; k:?) - (drop h (0) c1 (CTail e1 k u1)) -> - (EX e2 u2 | (drop h (0) c2 (CTail e2 k u2)) & - (cpr0 e1 e2) & (pr0 u1 u2) - ). - Intros until 1; XElim H. -(* case 1 : cpr0_refl *) - XEAuto. -(* case 2 : cpr0_comp *) - XElim h. -(* case 2.1 : h = 0 *) - Intros; DropGenBase. - Inversion H2; Rewrite H6 in H1; Rewrite H4 in H; XEAuto. -(* case 2.2 : h > 0 *) - XElim k; Intros; DropGenBase. -(* case 2.2.1 : Bind *) - LApply (H0 n e1 u0 k); [ Clear H0 H3; Intros H0 | XAuto ]. - XElim H0; XEAuto. -(* case 2.2.2 : Flat *) - LApply (H0 (S n) e1 u0 k); [ Clear H0 H3; Intros H0 | XAuto ]. - XElim H0; XEAuto. - Qed. - - Theorem cpr0_drop_back : (c1,c2:?) (cpr0 c2 c1) -> (h:?; e1:?; u1:?; k:?) - (drop h (0) c1 (CTail e1 k u1)) -> - (EX e2 u2 | (drop h (0) c2 (CTail e2 k u2)) & - (cpr0 e2 e1) & (pr0 u2 u1) - ). - Intros until 1; XElim H. -(* case 1 : cpr0_refl *) - XEAuto. -(* case 2 : cpr0_comp *) - XElim h. -(* case 2.1 : h = 0 *) - Intros; DropGenBase. - Inversion H2; Rewrite H6 in H1; Rewrite H4 in H; XEAuto. -(* case 2.2 : h > 0 *) - XElim k; Intros; DropGenBase. -(* case 2.2.1 : Bind *) - LApply (H0 n e1 u0 k); [ Clear H0 H3; Intros H0 | XAuto ]. - XElim H0; XEAuto. -(* case 2.2.2 : Flat *) - LApply (H0 (S n) e1 u0 k); [ Clear H0 H3; Intros H0 | XAuto ]. - XElim H0; XEAuto. - Qed. - - End cpr0_drop. - - Tactic Definition Cpr0Drop := - Match Context With - | [ _: (drop ?1 (0) ?2 (CTail ?3 ?4 ?5)); - _: (cpr0 ?2 ?6) |- ? ] -> - LApply (cpr0_drop ?2 ?6); [ Intros H_x | XAuto ]; - LApply (H_x ?1 ?3 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ _: (drop ?1 (0) ?2 (CTail ?3 ?4 ?5)); - _: (cpr0 ?6 ?2) |- ? ] -> - LApply (cpr0_drop_back ?2 ?6); [ Intros H_x | XAuto ]; - LApply (H_x ?1 ?3 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ _: (drop ?1 (0) (CTail ?2 ?7 ?8) (CTail ?3 ?4 ?5)); - _: (cpr0 ?2 ?6) |- ? ] -> - LApply (cpr0_drop (CTail ?2 ?7 ?8) (CTail ?6 ?7 ?8)); [ Intros H_x | XAuto ]; - LApply (H_x ?1 ?3 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ _: (drop ?1 (0) (CTail ?2 ?7 ?8) (CTail ?3 ?4 ?5)); - _: (cpr0 ?6 ?2) |- ? ] -> - LApply (cpr0_drop_back (CTail ?2 ?7 ?8) (CTail ?6 ?7 ?8)); [ Intros H_x | XAuto ]; - LApply (H_x ?1 ?3 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/csub0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/csub0_defs.v deleted file mode 100644 index 2949e83d9..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/csub0_defs.v +++ /dev/null @@ -1,114 +0,0 @@ -(*#* #stop file *) - -Require Export ty0_defs. - - Inductive csub0 [g:G] : C -> C -> Prop := -(* structural rules *) - | csub0_sort: (n:?) (csub0 g (CSort n) (CSort n)) - | csub0_tail: (c1,c2:?) (csub0 g c1 c2) -> (k,u:?) - (csub0 g (CTail c1 k u) (CTail c2 k u)) -(* axioms *) - | csub0_void: (c1,c2:?) (csub0 g c1 c2) -> (b:?) ~b=Void -> (u1,u2:?) - (csub0 g (CTail c1 (Bind Void) u1) (CTail c2 (Bind b) u2)) - | csub0_abst: (c1,c2:?) (csub0 g c1 c2) -> (u,t:?) (ty0 g c2 u t) -> - (csub0 g (CTail c1 (Bind Abst) t) (CTail c2 (Bind Abbr) u)). - - Hint csub0 : ltlc := Constructors csub0. - - Section csub0_props. (****************************************************) - - Theorem csub0_refl: (g:?; c:?) (csub0 g c c). - XElim c; XAuto. - Qed. - - End csub0_props. - - Hints Resolve csub0_refl : ltlc. - - Section csub0_drop. (*****************************************************) - - Theorem csub0_drop_abbr: (g:?; n:?; c1,c2:?) (csub0 g c1 c2) -> (d1,u:?) - (drop n (0) c1 (CTail d1 (Bind Abbr) u)) -> - (EX d2 | (csub0 g d1 d2) & - (drop n (0) c2 (CTail d2 (Bind Abbr) u)) - ). - XElim n. -(* case 1 : n = 0 *) - Intros; DropGenBase; Rewrite H0 in H; Inversion H; XEAuto. -(* case 2 : n > 0 *) - Intros until 2; XElim H0. -(* case 2.1 : csub0_sort *) - Intros; Inversion H0. -(* case 2.2 : csub0_tail *) - XElim k; Intros; DropGenBase. -(* case 2.2.1 : Bind *) - LApply (H c0 c3); [ Clear H; Intros H | XAuto ]. - LApply (H d1 u0); [ Clear H; Intros H | XAuto ]. - XElim H; XEAuto. -(* case 2.2.2 : Flat *) - LApply (H1 d1 u0); [ Clear H1; Intros H1 | XAuto ]. - XElim H1; XEAuto. -(* case 2.3 : csub0_void *) - Intros; DropGenBase. - LApply (H c0 c3); [ Clear H; Intros H | XAuto ]. - LApply (H d1 u); [ Clear H; Intros H | XAuto ]. - XElim H; XEAuto. -(* case 2.4 : csub0_abst *) - Intros; DropGenBase. - LApply (H c0 c3); [ Clear H; Intros H | XAuto ]. - LApply (H d1 u0); [ Clear H; Intros H | XAuto ]. - XElim H; XEAuto. - Qed. - - Theorem csub0_drop_abst: (g:?; n:?; c1,c2:?) (csub0 g c1 c2) -> (d1,t:?) - (drop n (0) c1 (CTail d1 (Bind Abst) t)) -> - (EX d2 | (csub0 g d1 d2) & - (drop n (0) c2 (CTail d2 (Bind Abst) t)) - - ) \/ - (EX d2 u | (csub0 g d1 d2) & - (drop n (0) c2 (CTail d2 (Bind Abbr) u)) & - (ty0 g d2 u t) - ). - XElim n. -(* case 1 : n = 0 *) - Intros; DropGenBase; Rewrite H0 in H; Inversion H; XEAuto. -(* case 2 : n > 0 *) - Intros until 2; XElim H0. -(* case 2.1 : csub0_sort *) - Intros; Inversion H0. -(* case 2.2 : csub0_tail *) - XElim k; Intros; DropGenBase. -(* case 2.2.1 : Bind *) - LApply (H c0 c3); [ Clear H; Intros H | XAuto ]. - LApply (H d1 t); [ Clear H; Intros H | XAuto ]. - XElim H; Intros; XElim H; XEAuto. -(* case 2.2.2 : Flat *) - LApply (H1 d1 t); [ Clear H1; Intros H1 | XAuto ]. - XElim H1; Intros; XElim H1; XEAuto. -(* case 2.3 : csub0_void *) - Intros; DropGenBase. - LApply (H c0 c3); [ Clear H; Intros H | XAuto ]. - LApply (H d1 t); [ Clear H; Intros H | XAuto ]. - XElim H; Intros; XElim H; XEAuto. -(* case 2.4 : csub0_abst *) - Intros; DropGenBase. - LApply (H c0 c3); [ Clear H; Intros H | XAuto ]. - LApply (H d1 t0); [ Clear H; Intros H | XAuto ]. - XElim H; Intros; XElim H; XEAuto. - Qed. - - End csub0_drop. - - Tactic Definition CSub0Drop := - Match Context With - | [ H1: (csub0 ?1 ?2 ?3); - H2: (drop ?4 (0) ?2 (CTail ?5 (Bind Abbr) ?6)) |- ? ] -> - LApply (csub0_drop_abbr ?1 ?4 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?5 ?6); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (csub0 ?1 ?2 ?3); - H2: (drop ?4 (0) ?2 (CTail ?5 (Bind Abst) ?6)) |- ? ] -> - LApply (csub0_drop_abst ?1 ?4 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?5 ?6); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros H1; XElim H1; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/csub0_props.v b/helm/coq-contribs/LAMBDA-TYPES/csub0_props.v deleted file mode 100644 index 04c4eddb1..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/csub0_props.v +++ /dev/null @@ -1,67 +0,0 @@ -(*#* #stop file *) - -Require pc3_props. -Require csub0_defs. - - Section csub0_pc3. (*****************************************************) - - Theorem csub0_pr2: (g:?; c1:?; t1,t2:?) (pr2 c1 t1 t2) -> - (c2:?) (csub0 g c1 c2) -> (pr2 c2 t1 t2). - Intros until 1; XElim H; Intros. -(* case 1: pr2_free *) - XAuto. -(* case 2: pr2_delta *) - CSub0Drop; XEAuto. - Qed. - - Hints Resolve csub0_pr2. - - Opaque pc3. - - Theorem csub0_pc3: (g:?; c1:?; t1,t2:?) (pc3 c1 t1 t2) -> - (c2:?) (csub0 g c1 c2) -> (pc3 c2 t1 t2). - Intros until 1; XElimUsing pc3_ind_left H; XEAuto. - Qed. - - End csub0_pc3. - - Hints Resolve csub0_pc3 : ltlc. - - Section csub0_ty0. (*****************************************************) - - Theorem csub0_ty0: (g:?; c1:?; t1,t2:?) (ty0 g c1 t1 t2) -> - (c2:?) (wf0 g c2) -> (csub0 g c1 c2) -> - (ty0 g c2 t1 t2). - Intros until 1; XElim H; Intros. -(* case 1: ty0_conv *) - EApply ty0_conv; XEAuto. -(* case 2: ty0_sort *) - XEAuto. -(* case 3: ty0_abbr *) - CSub0Drop; EApply ty0_abbr; XEAuto. -(* case 4: ty0_abst *) - CSub0Drop; [ EApply ty0_abst | EApply ty0_abbr ]; XEAuto. -(* case 5: ty0_bind *) - EApply ty0_bind; XEAuto. -(* case 6: ty0_appl *) - EApply ty0_appl; XEAuto. -(* case 7: ty0_cast *) - EApply ty0_cast; XAuto. - Qed. - - Theorem csub0_ty0_ld: (g:?; c:?; u,v:?) (ty0 g c u v) -> (t1,t2:?) - (ty0 g (CTail c (Bind Abst) v) t1 t2) -> - (ty0 g (CTail c (Bind Abbr) u) t1 t2). - Intros; EApply csub0_ty0; XEAuto. - Qed. - - End csub0_ty0. - - Hints Resolve csub0_ty0 csub0_ty0_ld : ltlc. - - Tactic Definition CSub0Ty0 := - Match Context With - [ _: (ty0 ?1 ?2 ?4 ?); _: (ty0 ?1 ?2 ?3 ?7); _: (pc3 ?2 ?4 ?7); - H: (ty0 ?1 (CTail ?2 (Bind Abst) ?4) ?5 ?6) |- ? ] -> - LApply (csub0_ty0_ld ?1 ?2 ?3 ?4); [ Intros H_x | EApply ty0_conv; XEAuto ]; - LApply (H_x ?5 ?6); [ Clear H_x H; Intros | XAuto ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/csubst0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/csubst0_defs.v deleted file mode 100644 index 046b1978c..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/csubst0_defs.v +++ /dev/null @@ -1,197 +0,0 @@ -Require Export contexts_defs. -Require Export subst0_defs. -Require Export drop_defs. - -(*#* #caption "axioms for strict substitution in contexts", - "substituted tail item: second operand", - "substituted tail item: first operand", - "substituted tail item: both operands" -*) -(*#* #cap #cap c, c1, c2 #alpha v in W, u in V, u1 in V1, u2 in V2, k in z, r in q *) - - Inductive csubst0 : nat -> T -> C -> C -> Prop := - | csubst0_snd : (k:?; i:?; v,u1,u2:?) (subst0 (r k i) v u1 u2) -> (c:?) - (csubst0 (S i) v (CTail c k u1) (CTail c k u2)) - | csubst0_fst : (k:?; i:?; c1,c2:?; v:?) (csubst0 (r k i) v c1 c2) -> - (u:?) (csubst0 (S i) v (CTail c1 k u) (CTail c2 k u)) - | csubst0_both : (k:?; i:?; v,u1,u2:?) (subst0 (r k i) v u1 u2) -> - (c1,c2:?) (csubst0 (r k i) v c1 c2) -> - (csubst0 (S i) v (CTail c1 k u1) (CTail c2 k u2)). - -(*#* #stop file *) - - Hint csubst0 : ltlc := Constructors csubst0. - - Section csubst0_gen_base. (***********************************************) - - Theorem csubst0_gen_tail: (k:?; c1,x:?; u1,v:?; i:?) - (csubst0 (S i) v (CTail c1 k u1) x) -> (OR - (EX u2 | x = (CTail c1 k u2) & - (subst0 (r k i) v u1 u2) - ) | - (EX c2 | x = (CTail c2 k u1) & - (csubst0 (r k i) v c1 c2) - ) | - (EX u2 c2 | x = (CTail c2 k u2) & - (subst0 (r k i) v u1 u2) & - (csubst0 (r k i) v c1 c2) - )). - Intros until 1; InsertEq H '(S i); InsertEq H '(CTail c1 k u1). - XCase H; Clear x v y y0; Intros; Inversion H1. -(* case 1: csubst0_snd *) - Inversion H0; Rewrite H3 in H; Rewrite H5 in H; Rewrite H6 in H; XEAuto. -(* case 2: csubst0_fst *) - Inversion H0; Rewrite H3 in H; Rewrite H4 in H; Rewrite H5 in H; XEAuto. -(* case 2: csubst0_both *) - Inversion H2; Rewrite H5 in H; Rewrite H6 in H; Rewrite H7 in H; - Rewrite H4 in H0; Rewrite H5 in H0; Rewrite H7 in H0; XEAuto. - Qed. - - End csubst0_gen_base. - - Tactic Definition CSubst0GenBase := - Match Context With - | [ H: (csubst0 (S ?1) ?2 (CTail ?3 ?4 ?5) ?6) |- ? ] -> - LApply (csubst0_gen_tail ?4 ?3 ?6 ?5 ?2 ?1); [ Clear H; Intros H | XAuto ]; - XElim H; Intros H; XElim H; Intros. - - Section csubst0_drop. (***************************************************) - - Theorem csubst0_drop_ge : (i,n:?) (le i n) -> - (c1,c2:?; v:?) (csubst0 i v c1 c2) -> - (e:?) (drop n (0) c1 e) -> - (drop n (0) c2 e). - XElim i. -(* case 1: i = 0 *) - Intros; Inversion H0. -(* case 2: i > 0 *) - Intros i; XElim n. -(* case 2.1: n = 0 *) - Intros; Inversion H0. -(* case 2.2: n > 0 *) - Intros until 3; Clear H0; InsertEq H2 '(S i); XElim H0; Intros. - DropGenBase. -(* case 2.2.1: csubst0_snd *) - XAuto. -(* case 2.2.2: csubst0_fst *) - XReplaceIn H0 i0 i; DropGenBase; NewInduction k; XEAuto. -(* case 2.2.3: csubst0_both *) - XReplaceIn H0 i0 i; XReplaceIn H2 i0 i. - DropGenBase; NewInduction k; XEAuto. - Qed. - - Tactic Definition IH := - Match Context With - | [ H0: (n:?) (lt n ?1) -> (c1,c2:?; v:?) (csubst0 ?1 v c1 c2) -> (e:C) (drop n (0) c1 e) -> ?; - H1: (csubst0 ?1 ?2 ?3 ?4); H2: (drop ?5 (0) ?3 ?6) |- ? ] -> - LApply (H0 ?5); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?3 ?4 ?2); [ Clear H0 H1; Intros H0 | XAuto ]; - LApply (H0 ?6); [ Clear H0 H2; Intros H0 | XAuto ]; - XElim H0; Intros H0; [ Idtac | XElim H0 | XElim H0 | XElim H0 ]; Intros - | [ H0: (r ? ?1) = (S ?1) -> (e:?) (drop (S ?2) (0) ?3 e) -> ?; - H1: (drop (S ?2) (0) ?3 ?4) |- ? ] -> - LApply H0; [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?4); [ Clear H0 H1; Intros H0 | XAuto ]; - XElim H0; Intros H0; [ Idtac | XElim H0 | XElim H0 | XElim H0 ]; Intros. - - Theorem csubst0_drop_lt : (i,n:?) (lt n i) -> - (c1,c2:?; v:?) (csubst0 i v c1 c2) -> - (e:?) (drop n (0) c1 e) -> (OR - (drop n (0) c2 e) | - (EX k e0 u w | e = (CTail e0 k u) & - (drop n (0) c2 (CTail e0 k w)) & - (subst0 (minus (r k i) (S n)) v u w) - ) | - (EX k e1 e2 u | e = (CTail e1 k u) & - (drop n (0) c2 (CTail e2 k u)) & - (csubst0 (minus (r k i) (S n)) v e1 e2) - ) | - (EX k e1 e2 u w | e = (CTail e1 k u) & - (drop n (0) c2 (CTail e2 k w)) & - (subst0 (minus (r k i) (S n)) v u w) & - (csubst0 (minus (r k i) (S n)) v e1 e2) - )). - XElim i. -(* case 1: i = 0 *) - Intros; Inversion H. -(* case 2: i > 0 *) - Intros i; XElim n. -(* case 2.1: n = 0 *) - Intros H0; Clear H0; Intros until 1; InsertEq H0 '(S i); XElim H0; - Clear H c1 c2 v y; Intros; DropGenBase; XRewrite e; - Rewrite <- r_arith0 in H; Try Rewrite <- r_arith0 in H0; Replace i with i0; XEAuto. -(* case 2.2: n > 0 *) - Intros until 3; Clear H0; InsertEq H2 '(S i); XElim H0; Clear c1 c2 v y; - Intros; DropGenBase. -(* case 2.2.1: csubst0_snd *) - XEAuto. -(* case 2.2.2: csubst0_fst *) - Replace i0 with i; XAuto; XReplaceIn H0 i0 i; XReplaceIn H2 i0 i; Clear H3 i0. - Apply (r_dis k); Intros; Rewrite (H3 i) in H0; Rewrite (H3 n) in H4. -(* case 2.2.2.1: bind *) - IH; XRewrite e; Try Rewrite <- (H3 n) in H; Try Rewrite <- (H3 n) in H0; - Try Rewrite <- r_arith1 in H4; Try Rewrite <- r_arith1 in H5; XEAuto. -(* case 2.2.2.2: flat *) - IH; XRewrite e; Try Rewrite <- (H3 n) in H2; Try Rewrite <- (H3 n) in H4; XEAuto. -(* case 2.2.3: csubst0_both *) - Replace i0 with i; XAuto; XReplaceIn H0 i0 i; XReplaceIn H2 i0 i; XReplaceIn H3 i0 i; Clear H4 i0. - Apply (r_dis k); Intros; Rewrite (H4 i) in H2; Rewrite (H4 n) in H5. -(* case 2.2.2.1: bind *) - IH; XRewrite e; Try Rewrite <- (H4 n) in H; Try Rewrite <- (H4 n) in H2; - Try Rewrite <- r_arith1 in H5; Try Rewrite <- r_arith1 in H6; XEAuto. -(* case 2.2.3.2: flat *) - IH; XRewrite e; Try Rewrite <- (H4 n) in H3; Try Rewrite <- (H4 n) in H5; XEAuto. - Qed. - - Theorem csubst0_drop_ge_back : (i,n:?) (le i n) -> - (c1,c2:?; v:?) (csubst0 i v c1 c2) -> - (e:?) (drop n (0) c2 e) -> - (drop n (0) c1 e). - XElim i. -(* case 1 : i = 0 *) - Intros; Inversion H0. -(* case 2 : i > 0 *) - Intros i; XElim n. -(* case 2.1 : n = 0 *) - Intros; Inversion H0. -(* case 2.2 : n > 0 *) - Intros until 3; Clear H0; InsertEq H2 '(S i); XElim H0; Intros; - DropGenBase. -(* case 2.2.1 : csubst0_snd *) - XAuto. -(* case 2.2.2 : csubst0_fst *) - XReplaceIn H0 i0 i; NewInduction k; XEAuto. -(* case 2.2.3 : csubst0_both *) - XReplaceIn H0 i0 i; XReplaceIn H2 i0 i; NewInduction k; XEAuto. - Qed. - - End csubst0_drop. - - Tactic Definition CSubst0Drop := - Match Context With - | [ H1: (lt ?2 ?1); - H2: (csubst0 ?1 ?3 ?4 ?5); H3: (drop ?2 (0) ?4 ?6) |- ? ] -> - LApply (csubst0_drop_lt ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H3; Intros H3 | XAuto ]; - XElim H3; - [ Intros | Intros H3; XElim H3; Intros - | Intros H3; XElim H3; Intros | Intros H3; XElim H3; Intros ] - | [ H1: (le ?1 ?2); - H2: (csubst0 ?1 ?3 ?4 ?5); H3: (drop ?2 (0) ?4 ?6) |- ? ] -> - LApply (csubst0_drop_ge ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H3; Intros | XAuto ] - | [H2: (csubst0 ?1 ?3 ?4 ?5); H3: (drop ?1 (0) ?4 ?6) |- ? ] -> - LApply (csubst0_drop_ge ?1 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x H2; Intros H2 | XAuto ]; - LApply (H2 ?6); [ Clear H2 H3; Intros | XAuto ] - | [H2: (csubst0 ?1 ?3 ?4 ?5); H3: (drop ?1 (0) ?5 ?6) |- ? ] -> - LApply (csubst0_drop_ge_back ?1 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H3; Intros | XAuto ] - | [H2: (csubst0 ?1 ?3 ?4 ?5); H3: (drop ?2 (0) ?5 ?6) |- ? ] -> - LApply (csubst0_drop_ge_back ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H3; Intros | XAuto ]. - diff --git a/helm/coq-contribs/LAMBDA-TYPES/csubst1_defs.v b/helm/coq-contribs/LAMBDA-TYPES/csubst1_defs.v deleted file mode 100644 index 8d1e570b5..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/csubst1_defs.v +++ /dev/null @@ -1,101 +0,0 @@ -(*#* #stop file *) - -Require Export subst1_defs. -Require Export csubst0_defs. - - Inductive csubst1 [i:nat; v:T; c1:C] : C -> Prop := - | csubst1_refl : (csubst1 i v c1 c1) - | csubst1_single : (c2:?) (csubst0 i v c1 c2) -> (csubst1 i v c1 c2). - - Hint csubst1 : ltlc := Constructors csubst1. - - Section csubst1_props. (**************************************************) - - Theorem csubst1_tail: (k:?; i:?; v,u1,u2:?) (subst1 (r k i) v u1 u2) -> - (c1,c2:?) (csubst1 (r k i) v c1 c2) -> - (csubst1 (S i) v (CTail c1 k u1) (CTail c2 k u2)). - Intros until 1; XElim H; Clear u2. -(* case 1: csubst1_refl *) - Intros until 1; XElim H; Clear c2; XAuto. -(* case 2: csubst1_single *) - Intros until 2; XElim H0; Clear c2; XAuto. - Qed. - - End csubst1_props. - - Hints Resolve csubst1_tail : ltlc. - - Section csubst1_gen_base. (***********************************************) - - Theorem csubst1_gen_tail: (k:?; c1,x:?; u1,v:?; i:?) - (csubst1 (S i) v (CTail c1 k u1) x) -> - (EX u2 c2 | x = (CTail c2 k u2) & - (subst1 (r k i) v u1 u2) & - (csubst1 (r k i) v c1 c2) - ). - Intros; InsertEq H '(CTail c1 k u1); InsertEq H '(S i); - XElim H; Clear x; Intros. -(* case 1: csubst1_refl *) - Rewrite H0; XEAuto. -(* case 2: csubst1_single *) - Rewrite H0 in H; Rewrite H1 in H; Clear H0 H1 y y0. - CSubst0GenBase; Rewrite H; XEAuto. - Qed. - - End csubst1_gen_base. - - Tactic Definition CSubst1GenBase := - Match Context With - | [ H: (csubst1 (S ?1) ?2 (CTail ?3 ?4 ?5) ?6) |- ? ] -> - LApply (csubst1_gen_tail ?4 ?3 ?6 ?5 ?2 ?1); [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - - Section csubst1_drop. (***************************************************) - - Theorem csubst1_drop_ge : (i,n:?) (le i n) -> - (c1,c2:?; v:?) (csubst1 i v c1 c2) -> - (e:?) (drop n (0) c1 e) -> - (drop n (0) c2 e). - Intros until 2; XElim H0; Intros; - Try CSubst0Drop; XAuto. - Qed. - - Theorem csubst1_drop_lt : (i,n:?) (lt n i) -> - (c1,c2:?; v:?) (csubst1 i v c1 c2) -> - (e1:?) (drop n (0) c1 e1) -> - (EX e2 | (csubst1 (minus i n) v e1 e2) & - (drop n (0) c2 e2) - ). - Intros until 2; XElim H0; Intros; - Try ( - CSubst0Drop; Try Rewrite H1; Try Rewrite minus_x_Sy; - Try Rewrite r_minus in H3; Try Rewrite r_minus in H4 - ); XEAuto. - Qed. - - Theorem csubst1_drop_ge_back : (i,n:?) (le i n) -> - (c1,c2:?; v:?) (csubst1 i v c1 c2) -> - (e:?) (drop n (0) c2 e) -> - (drop n (0) c1 e). - Intros until 2; XElim H0; Intros; - Try CSubst0Drop; XAuto. - Qed. - - End csubst1_drop. - - Tactic Definition CSubst1Drop := - Match Context With - | [ H1: (lt ?2 ?1); - H2: (csubst1 ?1 ?3 ?4 ?5); H3: (drop ?2 (0) ?4 ?6) |- ? ] -> - LApply (csubst1_drop_lt ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H3; Intros H3 | XAuto ]; - XElim H3; Intros - | [H2: (csubst1 ?1 ?3 ?4 ?5); H3: (drop ?1 (0) ?4 ?6) |- ? ] -> - LApply (csubst1_drop_ge ?1 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x H2; Intros H2 | XAuto ]; - LApply (H2 ?6); [ Clear H2 H3; Intros | XAuto ] - | [ H2: (csubst1 ?1 ?3 ?4 ?5); H3: (drop ?2 (0) ?4 ?6) |- ? ] -> - LApply (csubst1_drop_ge ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H3; Intros | XAuto ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/description b/helm/coq-contribs/LAMBDA-TYPES/description deleted file mode 100644 index 06f662322..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/description +++ /dev/null @@ -1,13 +0,0 @@ -Name: lambda-delta -Title: A formalization of a lambda-typed lambda-calculus with abbreviations -Author: Ferruccio Guidi -Email: fguidi@cs.unibo.it -Homepage: http://www.cs.unibo.it/~fguidi -Institution: Department of Computer Science, University of Bologna -Address: Mura Anteo Zamboni 7, 40127 Bologna, ITALY -Date: March 31, 2005 -Description: -Url: -Keywords: lambda-types, lambda-calculus, abbreviations -Version: 7.3.1 -Require: diff --git a/helm/coq-contribs/LAMBDA-TYPES/drop_defs.v b/helm/coq-contribs/LAMBDA-TYPES/drop_defs.v deleted file mode 100644 index ee7eea93c..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/drop_defs.v +++ /dev/null @@ -1,130 +0,0 @@ -Require Export contexts_defs. -Require Export lift_defs. - -(*#* #caption "current axioms for dropping", - "base case", "untouched tail item", - "dropped tail item", "updated tail item" -*) -(*#* #cap #alpha c in C1, e in C2, u in V, k in z, n in k, d in i, r in q *) - - Inductive drop: nat -> nat -> C -> C -> Prop := - | drop_sort: (h,d,n:?) (drop h d (CSort n) (CSort n)) - | drop_comp: (c,e:?) (drop (0) (0) c e) -> - (k:?; u:?) (drop (0) (0) (CTail c k u) (CTail e k u)) - | drop_drop: (k:?; h:?; c,e:?) (drop (r k h) (0) c e) -> - (u:?) (drop (S h) (0) (CTail c k u) e) - | drop_skip: (k:?; h,d:?; c,e:?) (drop h (r k d) c e) -> (u:?) - (drop h (S d) (CTail c k (lift h (r k d) u)) (CTail e k u)). - -(*#* #stop file *) - - Hint drop : ltlc := Constructors drop. - - Hint discr : ltlc := Extern 4 (drop ? ? ? ?) Simpl. - - Section drop_gen_base. (**************************************************) - - Theorem drop_gen_sort: (n,h,d:?; x:?) - (drop h d (CSort n) x) -> x = (CSort n). - Intros until 1; InsertEq H '(CSort n); XElim H; Intros; - Try Inversion H1; XAuto. - Qed. - - Theorem drop_gen_refl: (x,e:?) (drop (0) (0) x e) -> x = e. - Intros until 1; Repeat InsertEq H '(0); XElim H; Intros. -(* case 1: drop_sort *) - XAuto. -(* case 2: drop_comp *) - Rewrite H0; XAuto. -(* case 3: drop_drop *) - Inversion H2. -(* case 4: drop_skip *) - Inversion H1. - Qed. - - Theorem drop_gen_drop: (k:?; c,x:?; u:?; h:?) - (drop (S h) (0) (CTail c k u) x) -> - (drop (r k h) (0) c x). - Intros until 1; - InsertEq H '(CTail c k u); InsertEq H '(0); InsertEq H '(S h); - XElim H; Intros. -(* case 1: drop_sort *) - Inversion H1. -(* case 2: drop_comp *) - Inversion H1. -(* case 3: drop_drop *) - Inversion H1; Inversion H3. - Rewrite <- H5; Rewrite <- H6; Rewrite <- H7; XAuto. -(* case 4: drop_skip *) - Inversion H2. - Qed. - - Theorem drop_gen_skip_r: (c,x:?; u:?; h,d:?; k:?) - (drop h (S d) x (CTail c k u)) -> - (EX e | x = (CTail e k (lift h (r k d) u)) & (drop h (r k d) e c)). - Intros; Inversion_clear H; XEAuto. - Qed. - - Theorem drop_gen_skip_l: (c,x:?; u:?; h,d:?; k:?) - (drop h (S d) (CTail c k u) x) -> - (EX e v | x = (CTail e k v) & - u = (lift h (r k d) v) & - (drop h (r k d) c e) - ). - Intros; Inversion_clear H; XEAuto. - Qed. - - End drop_gen_base. - - Hints Resolve drop_gen_refl : ltlc. - - Tactic Definition DropGenBase := - Match Context With - | [ H: (drop (0) (0) ?0 ?1) |- ? ] -> - LApply (drop_gen_refl ?0 ?1); [ Clear H; Intros | XAuto ] - | [ H: (drop ?0 ?1 (CSort ?2) ?3) |- ? ] -> - LApply (drop_gen_sort ?2 ?0 ?1 ?3); [ Clear H; Intros | XAuto ] - | [ H: (drop (S ?0) (0) (CTail ?1 ?2 ?3) ?4) |- ? ] -> - LApply (drop_gen_drop ?2 ?1 ?4 ?3 ?0); [ Clear H; Intros | XAuto ] - | [ H: (drop ?1 (S ?2) ?3 (CTail ?4 ?5 ?6)) |- ? ] -> - LApply (drop_gen_skip_r ?4 ?3 ?6 ?1 ?2 ?5); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (drop ?1 (S ?2) (CTail ?4 ?5 ?6) ?3) |- ? ] -> - LApply (drop_gen_skip_l ?4 ?3 ?6 ?1 ?2 ?5); [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - - Section drop_props. (*****************************************************) - - Theorem drop_skip_bind: (h,d:?; c,e:?) (drop h d c e) -> (b:?; u:?) - (drop h (S d) (CTail c (Bind b) (lift h d u)) (CTail e (Bind b) u)). - Intros; Pattern 2 d; Replace d with (r (Bind b) d); XAuto. - Qed. - - Theorem drop_refl: (c:?) (drop (0) (0) c c). - XElim c; XAuto. - Qed. - - Hints Resolve drop_refl : ltlc. - - Theorem drop_S: (b:?; c,e:?; u:?; h:?) - (drop h (0) c (CTail e (Bind b) u)) -> - (drop (S h) (0) c e). - XElim c. -(* case 1: CSort *) - Intros; DropGenBase; Inversion H. -(* case 2: CTail *) - XElim h; Intros; DropGenBase. -(* case 2.1: h = 0 *) - Inversion H0; XAuto. -(* case 2.1: h > 0 *) - Apply drop_drop; RRw; XEAuto. (**) (* explicit constructor *) - Qed. - - End drop_props. - - Hints Resolve drop_skip_bind drop_refl drop_S : ltlc. - - Tactic Definition DropS := - Match Context With - [ _: (drop ?1 (0) ?2 (CTail ?3 (Bind ?4) ?5)) |- ? ] -> - LApply (drop_S ?4 ?2 ?3 ?5 ?1); [ Intros | XAuto ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/drop_props.v b/helm/coq-contribs/LAMBDA-TYPES/drop_props.v deleted file mode 100644 index 84c8676fb..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/drop_props.v +++ /dev/null @@ -1,228 +0,0 @@ -(*#* #stop file *) - -Require lift_gen. -Require drop_defs. - -(*#* #caption "main properties of drop" #clauses *) - - Section confluence. (*****************************************************) - - Tactic Definition IH := - Match Context With - [ H1: (drop ?1 ?2 c ?3); H2: (drop ?1 ?2 c ?4) |- ? ] -> - LApply (H ?4 ?2 ?1); [ Clear H H2; Intros H | XAuto ]; - LApply (H ?3); [ Clear H H1; Intros | XAuto ]. - -(*#* #caption "confluence, first case" *) -(*#* #cap #alpha c in C, x1 in C1, x2 in C2, d in i *) - - Theorem drop_mono : (c,x1:?; d,h:?) (drop h d c x1) -> - (x2:?) (drop h d c x2) -> x1 = x2. - XElim c. -(* case 1: CSort *) - Intros; Repeat DropGenBase; Rewrite H0; XAuto. -(* case 2: CTail k *) - XElim d. -(* case 2.1: d = 0 *) - XElim h; Intros; Repeat DropGenBase; Try Rewrite <- H0; XEAuto. -(* case 2.2: d > 0 *) - Intros; Repeat DropGenBase; Rewrite H1; Rewrite H2; Rewrite H5 in H3; - LiftGen; IH; XAuto. - Qed. - -(*#* #caption "confluence, second case" *) -(*#* #cap #alpha c in C1, c0 in E1, e in C2, e0 in E2, u in V1, v in V2, i in k, d in i *) - - Theorem drop_conf_lt: (b:?; i:?; u:?; c0,c:?) - (drop i (0) c (CTail c0 (Bind b) u)) -> - (e:?; h,d:?) (drop h (S (plus i d)) c e) -> - (EX v e0 | u = (lift h d v) & - (drop i (0) e (CTail e0 (Bind b) v)) & - (drop h d c0 e0) - ). - XElim i. -(* case 1 : i = 0 *) - Intros until 1. - DropGenBase. - Rewrite H in H0; Clear H. - Inversion H0; XEAuto. -(* case 2 : i > 0 *) - Intros i; XElim c. -(* case 2.1 : CSort *) - Intros; Inversion H0. -(* case 2.2 : CTail k *) - XElim k; Intros; Repeat DropGenBase; Rewrite H2; Clear H2 H3 e t. -(* case 2.2.1 : Bind *) - LApply (H u c0 c); [ Clear H H0 H1; Intros H | XAuto ]. - LApply (H x0 h d); [ Clear H H9; Intros H | XAuto ]. - XElim H; XEAuto. -(* case 2.2.2 : Flat *) - LApply H0; [ Clear H H0 H1; Intros H | XAuto ]. - LApply (H x0 h d); [ Clear H H9; Intros H | XAuto ]. - XElim H; XEAuto. - Qed. - -(*#* #caption "confluence, third case" *) -(*#* #cap #alpha c in C, a in C1, e in C2, i in k, d in i *) - - Theorem drop_conf_ge: (i:?; a,c:?) (drop i (0) c a) -> - (e:?; h,d:?) (drop h d c e) -> (le (plus d h) i) -> - (drop (minus i h) (0) e a). - XElim i. -(* case 1 : i = 0 *) - Intros until 1. - DropGenBase; Rewrite H in H0; Clear H c. - Inversion H1; Rewrite H2; Simpl; Clear H1. - PlusO; Rewrite H in H0; Rewrite H1 in H0; Clear H H1 d h. - DropGenBase; Rewrite <- H; XAuto. -(* case 2 : i > 0 *) - Intros i; XElim c. -(* case 2.1 : CSort *) - Intros; Repeat DropGenBase; Rewrite H1; Rewrite H0; XAuto. -(* case 2.2 : CTail k *) - XElim k; Intros; DropGenBase; - ( NewInduction d; - [ NewInduction h; DropGenBase; - [ Rewrite <- H2; Simpl; XAuto | Clear IHh ] - | DropGenBase; Rewrite H2; Clear IHd H2 H4 e t ] ). -(* case 2.2.1 : Bind, d = 0, h > 0 *) - LApply (H a c); [ Clear H H0 H1; Intros H | XAuto ]. - LApply (H e h (0)); XAuto. -(* case 2.2.2 : Bind, d > 0 *) - LApply (H a c); [ Clear H H0 H1; Intros H | XAuto ]. - LApply (H x0 h d); [ Clear H H4; Intros H | XAuto ]. - LApply H; [ Clear H; Simpl in H3; Intros H | XAuto ]. - Rewrite <- minus_Sn_m; XEAuto. -(* case 2.2.3 : Flat, d = 0, h > 0 *) - LApply H0; [ Clear H H0 H1; Intros H | XAuto ]. - LApply (H e (S h) (0)); XAuto. -(* case 2.2.4 : Flat, d > 0 *) - LApply H0; [ Clear H H0 H1; Intros H | XAuto ]. - LApply (H x0 h (S d)); [ Clear H H4; Intros H | XAuto ]. - LApply H; [ Clear H; Simpl in H3; Intros H | XAuto ]. - Rewrite <- minus_Sn_m in H; [ Idtac | XEAuto ]. - Rewrite <- minus_Sn_m; XEAuto. - Qed. - - End confluence. - - Section transitivity. (***************************************************) - -(*#* #caption "transitivity, first case" *) -(*#* #cap #alpha c1 in C1, c2 in C2, e1 in D1, e2 in D2, d in i, i in k *) - - Theorem drop_trans_le : (i,d:?) (le i d) -> - (c1,c2:?; h:?) (drop h d c1 c2) -> - (e2:?) (drop i (0) c2 e2) -> - (EX e1 | (drop i (0) c1 e1) & (drop h (minus d i) e1 e2)). - XElim i. -(* case 1 : i = 0 *) - Intros. - DropGenBase; Rewrite H1 in H0. - Rewrite <- minus_n_O; XEAuto. -(* case 2 : i > 0 *) - Intros i IHi; XElim d. -(* case 2.1 : d = 0 *) - Intros; Inversion H. -(* case 2.2 : d > 0 *) - Intros d IHd; XElim c1. -(* case 2.2.1 : CSort *) - Intros. - DropGenBase; Rewrite H0 in H1. - DropGenBase; Rewrite H1; XEAuto. -(* case 2.2.2 : CTail k *) - Intros c1 IHc; XElim k; Intros; - DropGenBase; Rewrite H0 in H1; Rewrite H2; Clear IHd H0 H2 c2 t; - DropGenBase. -(* case 2.2.2.1 : Bind *) - LApply (IHi d); [ Clear IHi; Intros IHi | XAuto ]. - LApply (IHi c1 x0 h); [ Clear IHi H8; Intros IHi | XAuto ]. - LApply (IHi e2); [ Clear IHi H0; Intros IHi | XAuto ]. - XElim IHi; XEAuto. -(* case 2.2.2.2 : Flat *) - LApply (IHc x0 h); [ Clear IHc H8; Intros IHc | XAuto ]. - LApply (IHc e2); [ Clear IHc H0; Intros IHc | XAuto ]. - XElim IHc; XEAuto. - Qed. - -(*#* #caption "transitivity, second case" *) -(*#* #cap #alpha c1 in C1, c2 in C, e2 in C2, d in i, i in k *) - - Theorem drop_trans_ge : (i:?; c1,c2:?; d,h:?) (drop h d c1 c2) -> - (e2:?) (drop i (0) c2 e2) -> (le d i) -> - (drop (plus i h) (0) c1 e2). - XElim i. -(* case 1: i = 0 *) - Intros. - DropGenBase; Rewrite <- H0. - Inversion H1; Rewrite H2 in H; XAuto. -(* case 2 : i > 0 *) - Intros i IHi; XElim c1; Simpl. -(* case 2.1: CSort *) - Intros. - DropGenBase; Rewrite H in H0. - DropGenBase; Rewrite H0; XAuto. -(* case 2.2: CTail *) - Intros c1 IHc; XElim d. -(* case 2.2.1: d = 0 *) - XElim h; Intros. -(* case 2.2.1.1: h = 0 *) - DropGenBase; Rewrite <- H in H0; - DropGenBase; Rewrite <- plus_n_O; XAuto. -(* case 2.2.1.2: h > 0 *) - DropGenBase; Rewrite <- plus_n_Sm. - Apply drop_drop; RRw; XEAuto. (**) (* explicit constructor *) -(* case 2.2.2: d > 0 *) - Intros d IHd; Intros. - DropGenBase; Rewrite H in IHd; Rewrite H in H0; Rewrite H2 in IHd; Rewrite H2; Clear IHd H H2 c2 t; - DropGenBase; Apply drop_drop; NewInduction k; Simpl; XEAuto. (**) (* explicit constructor *) - Qed. - - End transitivity. - - Tactic Definition DropDis := - Match Context With - [ H1: (drop ?1 ?2 ?3 ?4); H2: (drop ?1 ?2 ?3 ?5) |- ? ] -> - LApply (drop_mono ?3 ?5 ?2 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?4); [ Clear H_x H1; Intros H1; Rewrite H1 in H2 | XAuto ] - | [ H1: (drop ?0 (0) ?1 (CTail ?2 (Bind ?3) ?4)); - H2: (drop ?5 (S (plus ?0 ?6)) ?1 ?7) |- ? ] -> - LApply (drop_conf_lt ?3 ?0 ?4 ?2 ?1); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?7 ?5 ?6); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | [ _: (drop ?0 (0) ?1 ?2); _: (drop ?5 (0) ?1 ?7); - _: (lt ?5 ?0) |- ? ] -> - LApply (drop_conf_ge ?0 ?2 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?7 ?5 (0)); [ Clear H_x; Intros H_x | XAuto ]; - Simpl in H_x; LApply H_x; [ Clear H_x; Intros | XAuto ] - | [ _: (drop ?1 (0) ?2 (CTail ?3 (Bind ?) ?)); - _: (drop (1) ?1 ?2 ?4) |- ? ] -> - LApply (drop_conf_ge (S ?1) ?3 ?2); [ Intros H_x | XEAuto ]; - LApply (H_x ?4 (1) ?1); [ Clear H_x; Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x; Intros | Rewrite plus_sym; XAuto ]; ( - Match Context With - [ H: (drop (minus (S ?1) (1)) (0) ?4 ?3) |- ? ] -> - Simpl in H; Rewrite <- minus_n_O in H ) - | [ H0: (drop ?0 (0) ?1 ?2); H2: (lt ?6 ?0); - H1: (drop (1) ?6 ?1 ?7) |- ? ] -> - LApply (drop_conf_ge ?0 ?2 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?7 (1) ?6); [ Clear H_x; Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x; Intros | Rewrite plus_sym; XAuto ] - | [ H0: (drop ?0 (0) ?1 ?2); - H1: (drop ?5 ?6 ?1 ?7) |- ? ] -> - LApply (drop_conf_ge ?0 ?2 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?7 ?5 ?6); [ Clear H_x; Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x; Intros | XAuto ] - | [ H0: (lt ?1 ?2); - H1: (drop ?3 ?2 ?4 ?5); H2: (drop ?1 (0) ?5 ?6) |- ? ] -> - LApply (drop_trans_le ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5 ?3); [ Clear H_x H1; Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x H2; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ H0: (le ?1 ?2); - H1: (drop ?3 ?1 ?4 ?5); H2: (drop ?2 (0) ?5 ?6) |- ? ] -> - LApply (drop_trans_ge ?2 ?4 ?5 ?1 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?6); [ Clear H1 H2; Intros H1 | XAuto ]; - LApply H1; [ Clear H1; Intros | XAuto ]. - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/fsubst0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/fsubst0_defs.v deleted file mode 100644 index fa9404936..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/fsubst0_defs.v +++ /dev/null @@ -1,20 +0,0 @@ -Require Export subst0_defs. -Require Export csubst0_defs. - -(*#* #caption "\\kern-1.2pt axioms for strict substitution in focalized terms", - "substituted term part", - "substituted context part", - "substituted both parts" -*) -(*#* #cap #cap c1, c2, t1, t2 #alpha v in W *) - - Inductive fsubst0 [i:nat; v:T; c1:C; t1:T] : C -> T -> Prop := - | fsubst0_snd : (t2:?) (subst0 i v t1 t2) -> (fsubst0 i v c1 t1 c1 t2) - | fsubst0_fst : (c2:?) (csubst0 i v c1 c2) -> (fsubst0 i v c1 t1 c2 t1) - | fsubst0_both : (t2:?) (subst0 i v t1 t2) -> - (c2:?) (csubst0 i v c1 c2) -> (fsubst0 i v c1 t1 c2 t2). - -(*#* #stop file *) - - Hint fsubst0 : ltlc := Constructors fsubst0. - diff --git a/helm/coq-contribs/LAMBDA-TYPES/lift_defs.v b/helm/coq-contribs/LAMBDA-TYPES/lift_defs.v deleted file mode 100644 index 8b69ec4b4..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/lift_defs.v +++ /dev/null @@ -1,238 +0,0 @@ -(*#* #stop file *) - -Require Export terms_defs. - - Fixpoint lref_map [g:nat->nat; d:nat; t:T] : T := Cases t of - | (TSort n) => (TSort n) - | (TLRef n) => - if (blt n d) then (TLRef n) else (TLRef (g n)) - | (TTail k u t) => - (TTail k (lref_map g d u) (lref_map g (s k d) t)) - end. - - Definition lift : nat -> nat -> T -> T := - [h](lref_map [x](plus x h)). - - Section lift_rw. (********************************************************) - - Theorem lift_sort: (n:?; h,d:?) (lift h d (TSort n)) = (TSort n). - XAuto. - Qed. - - Theorem lift_lref_lt: (n:?; h,d:?) (lt n d) -> - (lift h d (TLRef n)) = (TLRef n). - Intros; Unfold lift; Simpl. - Replace (blt n d) with true; XAuto. - Qed. - - Theorem lift_lref_ge: (n:?; h,d:?) (le d n) -> - (lift h d (TLRef n)) = (TLRef (plus n h)). - - Intros; Unfold lift; Simpl. - Replace (blt n d) with false; XAuto. - Qed. - - Theorem lift_tail: (k:?; u,t:?; h,d:?) - (lift h d (TTail k u t)) = - (TTail k (lift h d u) (lift h (s k d) t)). - XAuto. - Qed. - - Theorem lift_bind: (b:?; u,t:?; h,d:?) - (lift h d (TTail (Bind b) u t)) = - (TTail (Bind b) (lift h d u) (lift h (S d) t)). - XAuto. - Qed. - - Theorem lift_flat: (f:?; u,t:?; h,d:?) - (lift h d (TTail (Flat f) u t)) = - (TTail (Flat f) (lift h d u) (lift h d t)). - XAuto. - Qed. - - End lift_rw. - - Hints Resolve lift_lref_lt lift_bind lift_flat : ltlc. - - Tactic Definition LiftTailRw := - Repeat (Rewrite lift_tail Orelse Rewrite lift_bind Orelse Rewrite lift_flat). - - Tactic Definition LiftTailRwBack := - Repeat (Rewrite <- lift_tail Orelse Rewrite <- lift_bind Orelse Rewrite <- lift_flat). - - Section lift_gen. (*******************************************************) - - Theorem lift_gen_sort: (h,d,n:?; t:?) (TSort n) = (lift h d t) -> - t = (TSort n). - XElim t; Intros. -(* case 1 : TSort *) - XAuto. -(* case 2 : TLRef n0 *) - Apply (lt_le_e n0 d); Intros. -(* case 2.1 : n0 < d *) - Rewrite lift_lref_lt in H; [ Inversion H | XAuto ]. -(* case 2.2 : n0 >= d *) - Rewrite lift_lref_ge in H; [ Inversion H | XAuto ]. -(* case 3 : TTail k *) - Rewrite lift_tail in H1; Inversion H1. - Qed. - - Theorem lift_gen_lref_lt: (h,d,n:?) (lt n d) -> - (t:?) (TLRef n) = (lift h d t) -> - t = (TLRef n). - XElim t; Intros. -(* case 1 : TSort *) - XAuto. -(* case 2 : TLRef n0 *) - Apply (lt_le_e n0 d); Intros. -(* case 2.1 : n0 < d *) - Rewrite lift_lref_lt in H0; XAuto. -(* case 2.2 : n0 >= d *) - Rewrite lift_lref_ge in H0; [ Inversion H0; Clear H0 | XAuto ]. - Rewrite H3 in H; Clear H3 n. - EApply le_false; [ Apply H1 | XEAuto ]. -(* case 3 : TTail k *) - Rewrite lift_tail in H2; Inversion H2. - Qed. - - Theorem lift_gen_lref_false: (h,d,n:?) (le d n) -> (lt n (plus d h)) -> - (t:?) (TLRef n) = (lift h d t) -> - (P:Prop) P. - XElim t; Intros. -(* case 1 : TSort *) - Inversion H1. -(* case 2 : TLRef n0 *) - Apply (lt_le_e n0 d); Intros. -(* case 2.1 : n0 < d *) - Rewrite lift_lref_lt in H1; [ Inversion H1; Clear H1 | XAuto ]. - Rewrite <- H4 in H2; Clear H4 n0. - EApply le_false; [ Apply H | XEAuto ]. -(* case 2.2 : n0 >= d *) - Rewrite lift_lref_ge in H1; [ Inversion H1; Clear H1 | XAuto ]. - Rewrite H4 in H0; Clear H4. - EApply le_false; [ Apply H2 | XEAuto ]. -(* case 3 : TTail k *) - Rewrite lift_tail in H3; Inversion H3. - Qed. - - Theorem lift_gen_lref_ge: (h,d,n:?) (le d n) -> - (t:?) (TLRef (plus n h)) = (lift h d t) -> - t = (TLRef n). - XElim t; Intros. -(* case 1 : TSort *) - Inversion H0. -(* case 2 : TLRef n0 *) - Apply (lt_le_e n0 d); Intros. -(* case 2.1 : n0 < d *) - Rewrite lift_lref_lt in H0; [ Inversion H0; Clear H0 | XAuto ]. - Rewrite <- H3 in H1; Clear H3 n0. - EApply le_false; [ Apply H | XEAuto ]. -(* case 2.2 : n0 >= d *) - Rewrite lift_lref_ge in H0; [ Inversion H0; XEAuto | XAuto ]. -(* case 3 : TTail k *) - Rewrite lift_tail in H2; Inversion H2. - Qed. - -(* NOTE: lift_gen_tail should be used instead of these two *) (**) - Theorem lift_gen_bind: (b:?; u,t,x:?; h,d:?) - (TTail (Bind b) u t) = (lift h d x) -> - (EX y z | x = (TTail (Bind b) y z) & - u = (lift h d y) & - t = (lift h (S d) z) - ). - XElim x; Intros. -(* case 1 : TSort *) - Inversion H. -(* case 2 : TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1 : n < d *) - Rewrite lift_lref_lt in H; [ Inversion H | XAuto ]. -(* case 2.2 : n >= d *) - Rewrite lift_lref_ge in H; [ Inversion H | XAuto ]. -(* case 3 : TTail k *) - Rewrite lift_tail in H1; Inversion H1. - XEAuto. - Qed. - - Theorem lift_gen_flat: (f:?; u,t,x:?; h,d:?) - (TTail (Flat f) u t) = (lift h d x) -> - (EX y z | x = (TTail (Flat f) y z) & - u = (lift h d y) & - t = (lift h d z) - ). - XElim x; Intros. -(* case 1 : TSort *) - Inversion H. -(* case 2 : TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1 : n < d *) - Rewrite lift_lref_lt in H; [ Inversion H | XAuto ]. -(* case 2.2 : n >= d *) - Rewrite lift_lref_ge in H; [ Inversion H | XAuto ]. -(* case 3 : TTail k *) - Rewrite lift_tail in H1; Inversion H1. - XEAuto. - Qed. - - End lift_gen. - - Tactic Definition LiftGenBase := - Match Context With - | [ H: (TSort ?0) = (lift ?1 ?2 ?3) |- ? ] -> - LApply (lift_gen_sort ?1 ?2 ?0 ?3); [ Clear H; Intros | XAuto ] - | [ H1: (le ?1 ?2); H2: (lt ?2 (plus ?1 ?3)); - H3: (TLRef ?2) = (lift ?3 ?1 ?4) |- ? ] -> - Apply (lift_gen_lref_false ?3 ?1 ?2 H1 H2 ?4 H3); XAuto - | [ _: (TLRef ?1) = (lift (S ?1) (0) ?2) |- ? ] -> - EApply lift_gen_lref_false; [ Idtac | Idtac | XEAuto ]; XEAuto - | [ H: (TLRef ?1) = (lift (1) ?1 ?2) |- ? ] -> - LApply (lift_gen_lref_false (1) ?1 ?1); [ Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x; Intros H_x | Arith7' ?1; XAuto ]; - LApply (H_x ?2); [ Clear H_x; Intros H_x | XAuto ]; - Apply H_x - | [ H: (TLRef (plus ?0 ?1)) = (lift ?1 ?2 ?3) |- ? ] -> - LApply (lift_gen_lref_ge ?1 ?2 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?3); [ Clear H_x H; Intros | XAuto ] - | [ H1: (TLRef ?0) = (lift ?1 ?2 ?3); H2: (lt ?0 ?4) |- ? ] -> - LApply (lift_gen_lref_lt ?1 ?2 ?0); - [ Intros H_x | Apply lt_le_trans with m:=?4; XEAuto ]; - LApply (H_x ?3); [ Clear H_x H1; Intros | XAuto ] - | [ H: (TLRef ?0) = (lift ?1 ?2 ?3) |- ? ] -> - LApply (lift_gen_lref_lt ?1 ?2 ?0); [ Intros H_x | XEAuto ]; - LApply (H_x ?3); [ Clear H_x H; Intros | XAuto ] - | [ H: (TTail (Bind ?0) ?1 ?2) = (lift ?3 ?4 ?5) |- ? ] -> - LApply (lift_gen_bind ?0 ?1 ?2 ?5 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (TTail (Flat ?0) ?1 ?2) = (lift ?3 ?4 ?5) |- ? ] -> - LApply (lift_gen_flat ?0 ?1 ?2 ?5 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - - Section lift_props. (*****************************************************) - - Theorem lift_r: (t:?; d:?) (lift (0) d t) = t. - XElim t; Intros. -(* case 1: TSort *) - XAuto. -(* case 2: TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1: n < d *) - Rewrite lift_lref_lt; XAuto. -(* case 2.2: n >= d *) - Rewrite lift_lref_ge; XAuto. -(* case 3: TTail *) - LiftTailRw; XAuto. - Qed. - - Theorem lift_lref_gt : (d,n:?) (lt d n) -> - (lift (1) d (TLRef (pred n))) = (TLRef n). - Intros. - Rewrite lift_lref_ge. -(* case 1: first branch *) - Rewrite <- plus_sym; Simpl; Rewrite <- (S_pred n d); XAuto. -(* case 2: second branch *) - Apply le_S_n; Rewrite <- (S_pred n d); XAuto. - Qed. - - End lift_props. - - Hints Resolve lift_r lift_lref_gt : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/lift_gen.v b/helm/coq-contribs/LAMBDA-TYPES/lift_gen.v deleted file mode 100644 index 63b74709d..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/lift_gen.v +++ /dev/null @@ -1,116 +0,0 @@ -(*#* #stop file *) - -Require lift_defs. - - Section lift_ini. (*******************************************************) - - Tactic Definition IH := - Match Context With - | [ H1: (lift ?1 ?2 t) = (lift ?1 ?2 ?3) |- ? ] -> - LApply (H ?3 ?1 ?2); [ Clear H H1; Intros | XAuto ] - | [ H1: (lift ?1 ?2 t0) = (lift ?1 ?2 ?3) |- ? ] -> - LApply (H0 ?3 ?1 ?2); [ Clear H0 H1; Intros | XAuto ]. - -(*#* #caption "main properties of lift" #clauses lift_props *) - -(*#* #caption "injectivity" *) -(*#* #cap #alpha x in T1, t in T2, d in i *) - - Theorem lift_inj : (x,t:?; h,d:?) (lift h d x) = (lift h d t) -> x = t. - XElim x. -(* case 1 : TSort *) - Intros; Rewrite lift_sort in H; LiftGenBase; XAuto. -(* case 2 : TLRef n *) - Intros; Apply (lt_le_e n d); Intros. -(* case 2.1 : n < d *) - Rewrite lift_lref_lt in H; [ LiftGenBase; XAuto | XAuto ]. -(* case 2.2 : n >= d *) - Rewrite lift_lref_ge in H; [ LiftGenBase; XAuto | XAuto ]. -(* case 3 : TTail k *) - XElim k; Intros; [ Rewrite lift_bind in H1 | Rewrite lift_flat in H1 ]; - LiftGenBase; Rewrite H1; IH; IH; XAuto. - Qed. - - End lift_ini. - - Section lift_gen_lift. (**************************************************) - - Tactic Definition IH := - Match Context With - | [ H_x: (lift ?0 ?1 t) = (lift ?2 (plus ?3 ?0) ?4) |- ? ] -> - LApply (H ?4 ?0 ?2 ?1 ?3); [ Clear H; Intros H | XAuto ]; - LApply H; [ Clear H H_x; Intros H | XAuto ]; - XElim H; Intros - | [ H_x: (lift ?0 ?1 t0) = (lift ?2 (plus ?3 ?0) ?4) |- ? ] -> - LApply (H0 ?4 ?0 ?2 ?1 ?3); [ Clear H0; Intros H0 | XAuto ]; - LApply H0; [ Clear H0 H_x; Intros H0 | XAuto ]; - XElim H0; Intros. - -(*#* #caption "generation lemma for lift" *) -(*#* #cap #cap t1 #alpha t2 in T, x in T2, d1 in i1, d2 in i2 *) - - Theorem lift_gen_lift : (t1,x:?; h1,h2,d1,d2:?) (le d1 d2) -> - (lift h1 d1 t1) = (lift h2 (plus d2 h1) x) -> - (EX t2 | x = (lift h1 d1 t2) & - t1 = (lift h2 d2 t2) - ). - XElim t1; Intros. -(* case 1 : TSort *) - Rewrite lift_sort in H0. - LiftGenBase; Rewrite H0; Clear H0 x. - EApply ex2_intro; Rewrite lift_sort; XAuto. -(* case 2 : TLRef n *) - Apply (lt_le_e n d1); Intros. -(* case 2.1 : n < d1 *) - Rewrite lift_lref_lt in H0; [ Idtac | XAuto ]. - LiftGenBase; Rewrite H0; Clear H0 x. - EApply ex2_intro; Rewrite lift_lref_lt; XEAuto. -(* case 2.2 : n >= d1 *) - Rewrite lift_lref_ge in H0; [ Idtac | XAuto ]. - Apply (lt_le_e n d2); Intros. -(* case 2.2.1 : n < d2 *) - LiftGenBase; Rewrite H0; Clear H0 x. - EApply ex2_intro; [ Rewrite lift_lref_ge | Rewrite lift_lref_lt ]; XEAuto. -(* case 2.2.2 : n >= d2 *) - Apply (lt_le_e n (plus d2 h2)); Intros. -(* case 2.2.2.1 : n < d2 + h2 *) - EApply lift_gen_lref_false; [ Idtac | Idtac | Apply H0 ]; - [ XAuto | Rewrite plus_permute_2_in_3; XAuto ]. -(* case 2.2.2.2 : n >= d2 + h2 *) - Rewrite (le_plus_minus_sym h2 (plus n h1)) in H0; [ Idtac | XEAuto ]. - LiftGenBase; Rewrite H0; Clear H0 x. - EApply ex2_intro; - [ Rewrite le_minus_plus; [ Idtac | XEAuto ] - | Rewrite (le_plus_minus_sym h2 n); [ Idtac | XEAuto ] ]; - Rewrite lift_lref_ge; XEAuto. -(* case 3 : TTail k *) - NewInduction k. -(* case 3.1 : Bind *) - Rewrite lift_bind in H2. - LiftGenBase; Rewrite H2; Clear H2 x. - IH; Rewrite H; Rewrite H2; Clear H H2 x0. - Arith4In H4 d2 h1; IH; Rewrite H; Rewrite H0; Clear H H0 x1 t t0. - EApply ex2_intro; Rewrite lift_bind; XAuto. -(* case 3.2 : Flat *) - Rewrite lift_flat in H2. - LiftGenBase; Rewrite H2; Clear H2 x. - IH; Rewrite H; Rewrite H2; Clear H H2 x0. - IH; Rewrite H; Rewrite H0; Clear H H0 x1 t t0. - EApply ex2_intro; Rewrite lift_flat; XAuto. - Qed. - - End lift_gen_lift. - - Tactic Definition LiftGen := - Match Context With - | [ H: (lift ?1 ?2 ?3) = (lift ?1 ?2 ?4) |- ? ] -> - LApply (lift_inj ?3 ?4 ?1 ?2); [ Clear H; Intros | XAuto ] - | [ H: (lift ?0 ?1 ?2) = (lift ?3 (plus ?4 ?0) ?5) |- ? ] -> - LApply (lift_gen_lift ?2 ?5 ?0 ?3 ?1 ?4); [ Intros H_x | XAuto ]; - LApply H_x; [ Clear H H_x; Intros H | XAuto ]; - XElim H; Intros - | [ H: (lift (1) (0) ?1) = (lift (1) (S ?2) ?3) |- ? ] -> - LApply (lift_gen_lift ?1 ?3 (1) (1) (0) ?2); [ Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x H; Intros H | Arith7' ?2; XAuto ]; - XElim H; Intros - | _ -> LiftGenBase. diff --git a/helm/coq-contribs/LAMBDA-TYPES/lift_props.v b/helm/coq-contribs/LAMBDA-TYPES/lift_props.v deleted file mode 100644 index 366ad999b..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/lift_props.v +++ /dev/null @@ -1,43 +0,0 @@ -(*#* #stop file *) - -Require lift_defs. - - Section lift_props. (*****************************************************) - - Theorem lift_free: (t:?; h,k,d,e:?) (le e (plus d h)) -> (le d e) -> - (lift k e (lift h d t)) = (lift (plus k h) d t). - XElim t; Intros. -(* case 1: TSort *) - Repeat Rewrite lift_sort; XAuto. -(* case 2: TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1: n < d *) - Repeat Rewrite lift_lref_lt; XEAuto. -(* case 2.2: n >= d *) - Repeat Rewrite lift_lref_ge; XEAuto. -(* case 3: TTail k *) - LiftTailRw; XAuto. - Qed. - - Theorem lift_d : (t:?; h,k,d,e:?) (le e d) -> - (lift h (plus k d) (lift k e t)) = (lift k e (lift h d t)). - XElim t; Intros. -(* case 1: TSort *) - Repeat Rewrite lift_sort; XAuto. -(* case 2: TLRef n *) - Apply (lt_le_e n e); Intros. -(* case 2.1: n < e *) - Cut (lt n d); Intros; Repeat Rewrite lift_lref_lt; XEAuto. -(* case 2.2: n >= e *) - Rewrite lift_lref_ge; [ Idtac | XAuto ]. - Rewrite plus_sym; Apply (lt_le_e n d); Intros. -(* case 2.2.1: n < d *) - Do 2 (Rewrite lift_lref_lt; [ Idtac | XAuto ]). - Rewrite lift_lref_ge; XAuto. -(* case 2.2.2: n >= d *) - Repeat Rewrite lift_lref_ge; XAuto. -(* case 3: TTail k *) - LiftTailRw; SRw; XAuto. - Qed. - - End lift_props. diff --git a/helm/coq-contribs/LAMBDA-TYPES/lift_tlt.v b/helm/coq-contribs/LAMBDA-TYPES/lift_tlt.v deleted file mode 100644 index 7319f3264..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/lift_tlt.v +++ /dev/null @@ -1,87 +0,0 @@ -(*#* #stop file *) - -Require tlt_defs. -Require lift_defs. - - Hint discr : ltlc := Extern 4 (lt (weight_map (wadd ? ?) (lift (S ?) ? ?)) (wadd ? ? ?)) - Simpl; Rewrite <- lift_weight_add_O. - - Hint discr : ltlc := Extern 4 (lt (weight_map ? (lift (0) (0) ?)) ?) - Rewrite lift_r. - - Section lift_tlt_props. (*************************************************) - - Theorem lift_weight_map: (t:?; h,d:?; f:?) - ((m:?) (le d m) -> (f m)=(0)) -> - (weight_map f (lift h d t)) = (weight_map f t). - XElim t; Intros. -(* case 1: TSort *) - XAuto. -(* case 2: TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1: n < d *) - Rewrite lift_lref_lt; XAuto. -(* case 2.2: n >= d *) - Rewrite lift_lref_ge; [ Simpl | XAuto ]. - Rewrite (H n); XAuto. -(* case 3: TTail k *) - XElim k; Intros; LiftTailRw; Simpl. -(* case 3.1: Bind *) - XElim b; [ Rewrite H; [ Idtac | XAuto ] | Idtac | Idtac ]; - Rewrite H0; Intros; Try (LeLtGen; Rewrite H2; Simpl); XAuto. -(* case 3.2: Flat *) - XAuto. - Qed. - - Hints Resolve lift_weight_map : ltlc. - - Theorem lift_weight : (t:?; h,d:?) (weight (lift h d t)) = (weight t). - Unfold weight; XAuto. - Qed. - - Theorem lift_weight_add : (w:?; t:?; h,d:?; f,g:?) - ((m:?) (lt m d) -> (g m) = (f m)) -> - (g d) = w -> - ((m:?) (le d m) -> (g (S m)) = (f m)) -> - (weight_map f (lift h d t)) = - (weight_map g (lift (S h) d t)). - XElim t; Intros. -(* case 1: TSort *) - XAuto. -(* case 2: TLRef *) - Apply (lt_le_e n d); Intros. -(* case 2.1: n < d *) - Repeat Rewrite lift_lref_lt; Simpl; XAuto. -(* case 2.2: n >= d *) - Repeat Rewrite lift_lref_ge; Simpl; Try Rewrite <- plus_n_Sm; XAuto. -(* case 3: TTail k *) - XElim k; Intros; LiftTailRw; Simpl. -(* case 1 : bind b *) - XElim b; Simpl; - Apply (f_equal nat); - (Apply (f_equal2 nat nat); [ XAuto | Idtac ]); - ( Apply H0; Simpl; Intros; Try (LeLtGen; Rewrite H4; Simpl); XAuto). -(* case 2 : Flat *) - XAuto. - Qed. - - Theorem lift_weight_add_O: (w:?; t:?; h:?; f:?) - (weight_map f (lift h (0) t)) = - (weight_map (wadd f w) (lift (S h) (0) t)). - Intros. - EApply lift_weight_add; XAuto. - Intros; Inversion H. - Qed. - - Theorem lift_tlt_dx: (k:?; u,t:?; h,d:?) - (tlt t (TTail k u (lift h d t))). - Unfold tlt; Intros. - Rewrite <- (lift_weight t h d). - Fold (tlt (lift h d t) (TTail k u (lift h d t))); XAuto. - Qed. - - End lift_tlt_props. - - Hints Resolve lift_tlt_dx : ltlc. - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc1_defs.v b/helm/coq-contribs/LAMBDA-TYPES/pc1_defs.v deleted file mode 100644 index 22b4fcefb..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc1_defs.v +++ /dev/null @@ -1,50 +0,0 @@ -(*#* #stop file *) - -Require Export pr0_defs. -Require Export pr1_defs. - - Definition pc1 := [t1,t2:?] (EX t | (pr1 t1 t) & (pr1 t2 t)). - - Hints Unfold pc1 : ltlc. - - Tactic Definition Pc1Unfold := - Match Context With - [ H: (pc1 ?2 ?3) |- ? ] -> Unfold pc1 in H; XDecompose H. - - Section pc1_props. (******************************************************) - - Theorem pc1_pr0_r: (t1,t2:?) (pr0 t1 t2) -> (pc1 t1 t2). - XEAuto. - Qed. - - Theorem pc1_pr0_x: (t1,t2:?) (pr0 t2 t1) -> (pc1 t1 t2). - XEAuto. - Qed. - - Theorem pc1_pr0_u: (t2,t1:?) (pr0 t1 t2) -> - (t3:?) (pc1 t2 t3) -> (pc1 t1 t3). - Intros; Pc1Unfold; XEAuto. - Qed. - - Theorem pc1_refl: (t:?) (pc1 t t). - XEAuto. - Qed. - - Theorem pc1_s: (t2,t1:?) (pc1 t1 t2) -> (pc1 t2 t1). - Intros; Pc1Unfold; XEAuto. - Qed. - - Theorem pc1_tail_1: (u1,u2:?) (pc1 u1 u2) -> - (t:?; k:?) (pc1 (TTail k u1 t) (TTail k u2 t)). - Intros; Pc1Unfold; XEAuto. - Qed. - - Theorem pc1_tail_2: (t1,t2:?) (pc1 t1 t2) -> - (u:?; k:?) (pc1 (TTail k u t1) (TTail k u t2)). - Intros; Pc1Unfold; XEAuto. - Qed. - - End pc1_props. - - Hints Resolve pc1_refl pc1_pr0_u pc1_pr0_r pc1_pr0_x pc1_s - pc1_tail_1 pc1_tail_2 : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc1_props.v b/helm/coq-contribs/LAMBDA-TYPES/pc1_props.v deleted file mode 100644 index 840a79c84..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc1_props.v +++ /dev/null @@ -1,25 +0,0 @@ -Require pr1_confluence. -Require pc1_defs. - -(*#* #stop file *) - - Section pc1_trans. (******************************************************) - - Theorem pc1_t: (t2,t1:?) (pc1 t1 t2) -> - (t3:?) (pc1 t2 t3) -> (pc1 t1 t3). - Intros; Repeat Pc1Unfold; Pr1Confluence; XEAuto. - Qed. - - Theorem pc1_pr0_u2: (t0,t1:?) (pr0 t0 t1) -> - (t2:?) (pc1 t0 t2) -> (pc1 t1 t2). - Intros; Apply (pc1_t t0); XAuto. - Qed. - - Theorem pc1_tail: (u1,u2:?) (pc1 u1 u2) -> (t1,t2:?) (pc1 t1 t2) -> - (k:?) (pc1 (TTail k u1 t1) (TTail k u2 t2)). - Intros; EApply pc1_t; [ EApply pc1_tail_1 | EApply pc1_tail_2 ]; XAuto. - Qed. - - End pc1_trans. - - Hints Resolve pc1_t pc1_tail : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc3_defs.v b/helm/coq-contribs/LAMBDA-TYPES/pc3_defs.v deleted file mode 100644 index 35b114f40..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc3_defs.v +++ /dev/null @@ -1,84 +0,0 @@ -Require Export pr2_defs. -Require Export pr3_defs. -Require Export pc1_defs. - -(*#* #caption "the relation $\\PcT{}{}{}$" *) -(*#* #cap #cap c, t, t1, t2 *) - - Definition pc3 := [c:?; t1,t2:?] (EX t | (pr3 c t1 t) & (pr3 c t2 t)). - -(*#* #stop file *) - - Hints Unfold pc3 : ltlc. - - Tactic Definition Pc3Unfold := - Match Context With - [ H: (pc3 ?1 ?2 ?3) |- ? ] -> Unfold pc3 in H; XDecompose H. - - Section pc3_props. (******************************************************) - - Theorem pc3_pr2_r: (c,t1,t2:?) (pr2 c t1 t2) -> (pc3 c t1 t2). - XEAuto. - Qed. - - Theorem pc3_pr2_x: (c,t1,t2:?) (pr2 c t2 t1) -> (pc3 c t1 t2). - XEAuto. - Qed. - - Theorem pc3_pr3_r: (c:?; t1,t2) (pr3 c t1 t2) -> (pc3 c t1 t2). - XEAuto. - Qed. - - Theorem pc3_pr3_x: (c:?; t1,t2) (pr3 c t2 t1) -> (pc3 c t1 t2). - XEAuto. - Qed. - - Theorem pc3_pr3_t: (c:?; t1,t0:?) (pr3 c t1 t0) -> - (t2:?) (pr3 c t2 t0) -> (pc3 c t1 t2). - XEAuto. - Qed. - - Theorem pc3_pr2_u: (c:?; t2,t1:?) (pr2 c t1 t2) -> - (t3:?) (pc3 c t2 t3) -> (pc3 c t1 t3). - Intros; Pc3Unfold; XEAuto. - Qed. - - Theorem pc3_refl: (c:?; t:?) (pc3 c t t). - XEAuto. - Qed. - - Theorem pc3_s: (c,t2,t1:?) (pc3 c t1 t2) -> (pc3 c t2 t1). - Intros; Pc3Unfold; XEAuto. - Qed. - - Theorem pc3_thin_dx: (c:? ;t1,t2:?) (pc3 c t1 t2) -> - (u:?; f:?) (pc3 c (TTail (Flat f) u t1) - (TTail (Flat f) u t2)). - Intros; Pc3Unfold; XEAuto. - Qed. - - Theorem pc3_tail_1: (c:?; u1,u2:?) (pc3 c u1 u2) -> - (k:?; t:?) (pc3 c (TTail k u1 t) (TTail k u2 t)). - Intros; Pc3Unfold; XEAuto. - Qed. - - Theorem pc3_tail_2: (c:?; u,t1,t2:?; k:?) (pc3 (CTail c k u) t1 t2) -> - (pc3 c (TTail k u t1) (TTail k u t2)). - Intros; Pc3Unfold; XEAuto. - Qed. - - Theorem pc3_shift: (h:?; c,e:?) (drop h (0) c e) -> - (t1,t2:?) (pc3 c t1 t2) -> - (pc3 e (app c h t1) (app c h t2)). - Intros; Pc3Unfold; XEAuto. - Qed. - - Theorem pc3_pc1: (t1,t2:?) (pc1 t1 t2) -> (c:?) (pc3 c t1 t2). - Intros; Pc1Unfold; XEAuto. - Qed. - - End pc3_props. - - Hints Resolve pc3_refl pc3_pr2_r pc3_pr2_x pc3_pr3_r pc3_pr3_x - pc3_s pc3_pr3_t pc3_thin_dx pc3_tail_1 pc3_tail_2 - pc3_pr2_u pc3_shift pc3_pc1 : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc3_gen.v b/helm/coq-contribs/LAMBDA-TYPES/pc3_gen.v deleted file mode 100644 index 8a27227e6..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc3_gen.v +++ /dev/null @@ -1,88 +0,0 @@ -(*#* #stop file *) - -Require lift_gen. -Require pr3_props. -Require pr3_gen. -Require pc3_defs. -Require pc3_props. - - Section pc3_gen. (********************************************************) - - Theorem pc3_gen_sort: (c:?; m,n:?) (pc3 c (TSort m) (TSort n)) -> m = n. - Intros; Pc3Unfold; Repeat Pr3GenBase. - Rewrite H0 in H; Clear H0 x c. - TGenBase; XAuto. - Qed. - - Theorem pc3_gen_abst: (c:?; u1,u2,t1,t2:?) - (pc3 c (TTail (Bind Abst) u1 t1) - (TTail (Bind Abst) u2 t2) - ) -> - (pc3 c u1 u2) /\ - (b:?; u:?) (pc3 (CTail c (Bind b) u) t1 t2). - Intros. - Pc3Unfold; Repeat Pr3GenBase; Rewrite H1 in H; Clear H1 x. - TGenBase; Rewrite H1 in H4; Rewrite H6 in H5. - XEAuto. - Qed. - - Theorem pc3_gen_lift: (c:?; t1,t2:?; h,d:?) - (pc3 c (lift h d t1) (lift h d t2)) -> - (e:?) (drop h d c e) -> - (pc3 e t1 t2). - Intros. - Pc3Unfold; Repeat Pr3Gen; Rewrite H2 in H; Clear H2 x. - LiftGen; Rewrite H in H4; XEAuto. - Qed. - - Theorem pc3_gen_not_abst: (b:?) ~b=Abst -> (c:?; t1,t2,u1,u2:?) - (pc3 c (TTail (Bind b) u1 t1) - (TTail (Bind Abst) u2 t2) - ) -> - (pc3 (CTail c (Bind b) u1) t1 - (lift (1) (0) (TTail (Bind Abst) u2 t2)) - ). - XElim b; Intros; - Try EqFalse; Pc3Unfold; Repeat Pr3Gen; - Try (Rewrite H0 in H3; TGenBase); - Rewrite H1 in H0; Clear H H1 x; - EApply pc3_pr3_t; XEAuto. - Qed. - - Theorem pc3_gen_lift_abst: (c:?; t,t2,u2:?; h,d:?) - (pc3 c (lift h d t) - (TTail (Bind Abst) u2 t2) - ) -> - (e:?) (drop h d c e) -> - (EX u1 t1 | (pr3 e t (TTail (Bind Abst) u1 t1)) & - (pr3 c u2 (lift h d u1)) & - (b:B; u:T)(pr3 (CTail c (Bind b) u) t2 (lift h (S d) t1)) - ). - Intros. - Pc3Unfold; Repeat Pr3Gen; Rewrite H1 in H; Clear H1 x. - LiftGenBase; Rewrite H in H3; Rewrite H1 in H4; Rewrite H2 in H5; XEAuto. - Qed. - - End pc3_gen. - - Tactic Definition Pc3Gen := - Match Context With - | [H: (pc3 ?1 (TSort ?2) (TSort ?3)) |- ? ] -> - LApply (pc3_gen_sort ?1 ?2 ?3); [ Clear H; Intros | XAuto ] - | [ _: (pc3 ?1 (lift ?2 ?3 ?4) (lift ?2 ?3 ?5)); - _: (drop ?2 ?3 ?1 ?6) |- ? ] -> - LApply (pc3_gen_lift ?1 ?4 ?5 ?2 ?3); [ Intros H_x | XAuto ]; - LApply (H_x ?6); [ Clear H_x; Intros | XAuto ] - | [ H: (pc3 ?1 (TTail (Bind Abst) ?2 ?3) (TTail (Bind Abst) ?4 ?5)) |- ? ] -> - LApply (pc3_gen_abst ?1 ?2 ?4 ?3 ?5);[ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (pc3 ?1 (TTail (Bind ?2) ?3 ?4) (TTail (Bind Abst) ?5 ?6)); - _: ~ ?2 = Abst |- ? ] -> - LApply (pc3_gen_not_abst ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?1 ?4 ?6 ?3 ?5); [ Clear H H_x; Intros | XAuto ] - | [ _: (pc3 ?1 (lift ?2 ?3 ?4) (TTail (Bind Abst) ?5 ?6)); - _: (drop ?2 ?3 ?1 ?7) |- ? ] -> - LApply (pc3_gen_lift_abst ?1 ?4 ?6 ?5 ?2 ?3); [ Intros H_x | XAuto ]; - LApply (H_x ?7); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | _ -> Pr3Gen. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc3_gen_context.v b/helm/coq-contribs/LAMBDA-TYPES/pc3_gen_context.v deleted file mode 100644 index 42f03f2ab..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc3_gen_context.v +++ /dev/null @@ -1,22 +0,0 @@ -(*#* #stop file *) - -Require subst1_confluence. -Require csubst1_defs. -Require pr3_gen_context. -Require pc3_defs. -Require pc3_props. - - Section pc3_gen_context. (************************************************) - - Theorem pc3_gen_cabbr: (c:?; t1,t2:?) (pc3 c t1 t2) -> (e:?; u:?; d:?) - (drop d (0) c (CTail e (Bind Abbr) u)) -> - (a0:?) (csubst1 d u c a0) -> - (a:?) (drop (1) d a0 a) -> - (x1:?) (subst1 d u t1 (lift (1) d x1)) -> - (x2:?) (subst1 d u t2 (lift (1) d x2)) -> - (pc3 a x1 x2). - Intros; Pc3Unfold; Repeat Pr3GenContext. - Subst1Confluence; Rewrite H3 in H5; Clear H3 x3; XEAuto. - Qed. - - End pc3_gen_context. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc3_props.v b/helm/coq-contribs/LAMBDA-TYPES/pc3_props.v deleted file mode 100644 index 28aa03150..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc3_props.v +++ /dev/null @@ -1,233 +0,0 @@ -(*#* #stop file *) - -Require subst0_subst0. -Require pr0_subst0. -Require cpr0_defs. -Require pr3_defs. -Require pr3_props. -Require pr3_confluence. -Require pc3_defs. - - Section pc3_trans. (******************************************************) - - Theorem pc3_t: (t2,c,t1:?) (pc3 c t1 t2) -> - (t3:?) (pc3 c t2 t3) -> (pc3 c t1 t3). - Intros; Repeat Pc3Unfold; Pr3Confluence; XEAuto. - Qed. - - Theorem pc3_pr2_u2: (c:?; t0,t1:?) (pr2 c t0 t1) -> - (t2:?) (pc3 c t0 t2) -> (pc3 c t1 t2). - Intros; Apply (pc3_t t0); XAuto. - Qed. - - Theorem pc3_tail_12: (c:?; u1,u2:?) (pc3 c u1 u2) -> - (k:?; t1,t2:?) (pc3 (CTail c k u2) t1 t2) -> - (pc3 c (TTail k u1 t1) (TTail k u2 t2)). - Intros. - EApply pc3_t; [ Apply pc3_tail_1 | Apply pc3_tail_2 ]; XAuto. - Qed. - - Theorem pc3_tail_21: (c:?; u1,u2:?) (pc3 c u1 u2) -> - (k:?; t1,t2:?) (pc3 (CTail c k u1) t1 t2) -> - (pc3 c (TTail k u1 t1) (TTail k u2 t2)). - Intros. - EApply pc3_t; [ Apply pc3_tail_2 | Apply pc3_tail_1 ]; XAuto. - Qed. - - End pc3_trans. - - Hints Resolve pc3_t pc3_tail_12 pc3_tail_21 : ltlc. - - Tactic Definition Pc3T := - Match Context With - | [ _: (pr3 ?1 ?2 (TTail ?3 ?4 ?5)); _: (pc3 ?1 ?6 ?4) |- ? ] -> - LApply (pc3_t (TTail ?3 ?4 ?5) ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x (TTail ?3 ?6 ?5)); [ Clear H_x; Intros | Apply pc3_s; XAuto ] - | [ _: (pc3 ?1 ?2 ?3); _: (pr3 ?1 ?3 ?4) |- ? ] -> - LApply (pc3_t ?3 ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4); [ Clear H_x; Intros | XAuto ] - | [ _: (pc3 ?1 ?2 ?3); _: (pc3 ?1 ?4 ?3) |- ? ] -> - LApply (pc3_t ?3 ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?4); [ Clear H_x; Intros | XAuto ]. - - Section pc3_context. (****************************************************) - - Theorem pc3_pr0_pr2_t: (u1,u2:?) (pr0 u2 u1) -> - (c:?; t1,t2:?; k:?) (pr2 (CTail c k u2) t1 t2) -> - (pc3 (CTail c k u1) t1 t2). - Intros. - Inversion H0; Clear H0; [ XAuto | NewInduction i ]. -(* case 1: pr2_delta i = 0 *) - DropGenBase; Inversion H0; Clear H0 H4 H5 H6 c k t. - Rewrite H7 in H; Clear H7 u2. - Pr0Subst0; Apply pc3_pr3_t with t0:=x; XEAuto. -(* case 2: pr2_delta i > 0 *) - NewInduction k; DropGenBase; XEAuto. - Qed. - - Theorem pc3_pr2_pr2_t: (c:?; u1,u2:?) (pr2 c u2 u1) -> - (t1,t2:?; k:?) (pr2 (CTail c k u2) t1 t2) -> - (pc3 (CTail c k u1) t1 t2). - Intros until 1; Inversion H; Clear H; Intros. -(* case 1: pr2_free *) - EApply pc3_pr0_pr2_t; [ Apply H0 | XAuto ]. -(* case 2: pr2_delta *) - Inversion H; [ XAuto | NewInduction i0 ]. -(* case 2.1: i0 = 0 *) - DropGenBase; Inversion H4; Clear H3 H4 H7 t t4. - Rewrite <- H9; Rewrite H10 in H; Rewrite <- H11 in H6; Clear H9 H10 H11 d0 k u0. - Pr0Subst0; Subst0Subst0; Arith9'In H6 i. - EApply pc3_pr2_u. - EApply pr2_delta; XEAuto. - Apply pc3_pr2_x; EApply pr2_delta; [ Idtac | XEAuto | XEAuto ]; XEAuto. -(* case 2.2: i0 > 0 *) - Clear IHi0; NewInduction k; DropGenBase; XEAuto. - Qed. - - Theorem pc3_pr2_pr3_t: (c:?; u2,t1,t2:?; k:?) - (pr3 (CTail c k u2) t1 t2) -> - (u1:?) (pr2 c u2 u1) -> - (pc3 (CTail c k u1) t1 t2). - Intros until 1; XElim H; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - EApply pc3_t. - EApply pc3_pr2_pr2_t; [ Apply H2 | Apply H ]. - XAuto. - Qed. - - Theorem pc3_pr3_pc3_t: (c:?; u1,u2:?) (pr3 c u2 u1) -> - (t1,t2:?; k:?) (pc3 (CTail c k u2) t1 t2) -> - (pc3 (CTail c k u1) t1 t2). - Intros until 1; XElim H; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - Apply H1; Pc3Unfold. - EApply pc3_t; [ Idtac | Apply pc3_s ]; EApply pc3_pr2_pr3_t; XEAuto. - Qed. - - End pc3_context. - - Tactic Definition Pc3Context := - Match Context With - | [ H1: (pr0 ?3 ?2); H2: (pr2 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pc3_pr0_pr2_t ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?1 ?5 ?6 ?4); [ Clear H1 H2; Intros | XAuto ] - | [ H1: (pr0 ?3 ?2); H2: (pr3 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pc3_pr2_pr3_t ?1 ?3 ?5 ?6 ?4); [ Clear H2; Intros H2 | XAuto ]; - LApply (H2 ?2); [ Clear H1 H2; Intros | XAuto ] - | [ H1: (pr2 ?1 ?3 ?2); H2: (pr2 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pc3_pr2_pr2_t ?1 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?5 ?6 ?4); [ Clear H1 H2; Intros | XAuto ] - | [ H1: (pr2 ?1 ?3 ?2); H2: (pr3 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pc3_pr2_pr3_t ?1 ?3 ?5 ?6 ?4); [ Clear H2; Intros H2 | XAuto ]; - LApply (H2 ?2); [ Clear H1 H2; Intros | XAuto ] - | [ H1: (pr3 ?1 ?3 ?2); H2: (pc3 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pc3_pr3_pc3_t ?1 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?5 ?6 ?4); [ Clear H1 H2; Intros | XAuto ] - | _ -> Pr3Context. - - Section pc3_lift. (*******************************************************) - - Theorem pc3_lift: (c,e:?; h,d:?) (drop h d c e) -> - (t1,t2:?) (pc3 e t1 t2) -> - (pc3 c (lift h d t1) (lift h d t2)). - - Intros. - Pc3Unfold. - EApply pc3_pr3_t; (EApply pr3_lift; [ XEAuto | Apply H1 Orelse Apply H2 ]). - Qed. - - End pc3_lift. - - Hints Resolve pc3_lift : ltlc. - - Section pc3_cpr0. (*******************************************************) - - Remark pc3_cpr0_t_aux: (c1,c2:?) (cpr0 c1 c2) -> - (k:?; u,t1,t2:?) (pr3 (CTail c1 k u) t1 t2) -> - (pc3 (CTail c2 k u) t1 t2). - Intros; XElim H0; Intros. -(* case 1.1: pr3_refl *) - XAuto. -(* case 1.2: pr3_sing *) - EApply pc3_t; [ Idtac | XEAuto ]. Clear H2 t1 t2. - Inversion_clear H0. -(* case 1.2.1: pr2_free *) - XAuto. -(* case 1.2.2: pr2_delta *) - Cpr0Drop; Pr0Subst0. - EApply pc3_pr2_u; [ EApply pr2_delta; XEAuto | XAuto ]. - Qed. - - Theorem pc3_cpr0_t: (c1,c2:?) (cpr0 c1 c2) -> - (t1,t2:?) (pr3 c1 t1 t2) -> - (pc3 c2 t1 t2). - Intros until 1; XElim H; Intros. -(* case 1: cpr0_refl *) - XAuto. -(* case 2: cpr0_comp *) - Pc3Context; Pc3Unfold. - EApply pc3_t; [ Idtac | Apply pc3_s ]; EApply pc3_cpr0_t_aux; XEAuto. - Qed. - - Theorem pc3_cpr0: (c1,c2:?) (cpr0 c1 c2) -> (t1,t2:?) (pc3 c1 t1 t2) -> - (pc3 c2 t1 t2). - Intros; Pc3Unfold. - EApply pc3_t; [ Idtac | Apply pc3_s ]; EApply pc3_cpr0_t; XEAuto. - Qed. - - End pc3_cpr0. - - Hints Resolve pc3_cpr0 : ltlc. - - Section pc3_ind_left. (***************************************************) - - Inductive pc3_left [c:C] : T -> T -> Prop := - | pc3_left_r : (t:?) (pc3_left c t t) - | pc3_left_ur: (t1,t2:?) (pr2 c t1 t2) -> (t3:?) (pc3_left c t2 t3) -> - (pc3_left c t1 t3) - | pc3_left_ux: (t1,t2:?) (pr2 c t1 t2) -> (t3:?) (pc3_left c t1 t3) -> - (pc3_left c t2 t3). - - Hint pc3_left: ltlc := Constructors pc3_left. - - Remark pc3_left_pr3: (c:?; t1,t2:?) (pr3 c t1 t2) -> (pc3_left c t1 t2). - Intros; XElim H; XEAuto. - Qed. - - Remark pc3_left_trans: (c:?; t1,t2:?) (pc3_left c t1 t2) -> - (t3:?) (pc3_left c t2 t3) -> (pc3_left c t1 t3). - Intros until 1; XElim H; XEAuto. - Qed. - - Hints Resolve pc3_left_trans : ltlc. - - Remark pc3_left_sym: (c:?; t1,t2:?) (pc3_left c t1 t2) -> - (pc3_left c t2 t1). - Intros; XElim H; XEAuto. - Qed. - - Hints Resolve pc3_left_sym pc3_left_pr3 : ltlc. - - Remark pc3_left_pc3: (c:?; t1,t2:?) (pc3 c t1 t2) -> (pc3_left c t1 t2). - Intros; Pc3Unfold; XEAuto. - Qed. - - Remark pc3_pc3_left: (c:?; t1,t2:?) (pc3_left c t1 t2) -> (pc3 c t1 t2). - Intros; XElim H; XEAuto. - Qed. - - Hints Resolve pc3_left_pc3 pc3_pc3_left : ltlc. - - Theorem pc3_ind_left: (c:C; P:(T->T->Prop)) - ((t:T) (P t t)) -> - ((t1,t2:T) (pr2 c t1 t2) -> (t3:T) (pc3 c t2 t3) -> (P t2 t3) -> (P t1 t3)) -> - ((t1,t2:T) (pr2 c t1 t2) -> (t3:T) (pc3 c t1 t3) -> (P t1 t3) -> (P t2 t3)) -> - (t,t0:T) (pc3 c t t0) -> (P t t0). - Intros; ElimType (pc3_left c t t0); XEAuto. - Qed. - - End pc3_ind_left. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pc3_subst0.v b/helm/coq-contribs/LAMBDA-TYPES/pc3_subst0.v deleted file mode 100644 index 02a5d8a38..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pc3_subst0.v +++ /dev/null @@ -1,136 +0,0 @@ -(*#* #stop file *) - -Require subst0_subst0. -Require fsubst0_defs. -Require pr0_subst0. -Require pc3_defs. -Require pc3_props. - - Section pc3_fsubst0. (****************************************************) - - Theorem pc3_pr2_fsubst0: (c1:?; t1,t:?) (pr2 c1 t1 t) -> - (i:?; u,c2,t2:?) (fsubst0 i u c1 t1 c2 t2) -> - (e:?) (drop i (0) c1 (CTail e (Bind Abbr) u)) -> - (pc3 c2 t2 t). - Intros until 1; XElim H. -(* case 1: pr2_free *) - Intros until 2; XElim H0; Intros. -(* case 1.1: fsubst0_snd *) - Pr0Subst0; [ XAuto | Apply (pc3_pr2_u c1 x); XEAuto ]. -(* case 1.2: fsubst0_fst *) - XAuto. -(* case 1.3: fsubst0_both *) - Pr0Subst0; CSubst0Drop; [ XAuto | Apply (pc3_pr2_u c0 x); XEAuto ]. -(* case 2 : pr2_delta *) - Intros until 4; XElim H2; Intros. -(* case 2.1: fsubst0_snd. *) - Apply (pc3_t t1); [ Apply pc3_s; XEAuto | XEAuto ]. -(* case 2.2: fsubst0_fst. *) - Apply (lt_le_e i i0); Intros; CSubst0Drop. -(* case 2.2.1: i < i0, none *) - XEAuto. -(* case 2.2.2: i < i0, csubst0_snd *) - CGenBase; Rewrite <- H8 in H5; Rewrite <- H9 in H5; Rewrite <- H9 in H6; Rewrite <- H10 in H6; Clear H8 H9 H10 c2 t3 x0 x1 x2. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H7; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u c0 x); XEAuto. -(* case 2.2.3: i < i0, csubst0_fst *) - CGenBase; Rewrite <- H8 in H6; Rewrite <- H9 in H5; Rewrite <- H9 in H6; Rewrite <- H10 in H5; Clear H8 H9 H10 c2 t3 x0 x1 x3. - Apply pc3_pr2_r; XEAuto. -(* case 2.2.4: i < i0, csubst0_both *) - CGenBase; Rewrite <- H9 in H7; Rewrite <- H10 in H5; Rewrite <- H10 in H6; Rewrite <- H10 in H7; Rewrite <- H11 in H6; Clear H9 H10 H11 c2 t3 x0 x1 x3. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H8; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u c0 x); XEAuto. -(* case 2.2.5: i >= i0 *) - XEAuto. -(* case 2.3: fsubst0_both *) - Apply (lt_le_e i i0); Intros; CSubst0Drop. -(* case 2.3.1 : i < i0, none *) - CSubst0Drop; Apply pc3_pr2_u2 with t0 := t1; XEAuto. -(* case 2.3.2 : i < i0, csubst0_snd *) - CGenBase; Rewrite <- H9 in H6; Rewrite <- H10 in H6; Rewrite <- H10 in H7; Rewrite <- H11 in H7; Clear H9 H10 H11 c2 t3 x0 x1 x2. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H8; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u2 c0 t1); [ Idtac | Apply (pc3_pr2_u c0 x) ]; XEAuto. -(* case 2.3.3: i < i0, csubst0_fst *) - CGenBase; Rewrite <- H9 in H7; Rewrite <- H10 in H6; Rewrite <- H10 in H7; Rewrite <- H11 in H6; Clear H9 H10 H11 c2 t3 x0 x1 x3. - CSubst0Drop; Apply (pc3_pr2_u2 c0 t1); [ Idtac | Apply pc3_pr2_r ]; XEAuto. -(* case 2.3.4: i < i0, csubst0_both *) - CGenBase; Rewrite <- H10 in H8; Rewrite <- H11 in H6; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H7; Clear H10 H11 H12 c2 t3 x0 x1 x3. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H9; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u2 c0 t1); [ Idtac | Apply (pc3_pr2_u c0 x) ]; XEAuto. -(* case 2.3.5: i >= i0 *) - CSubst0Drop; Apply (pc3_pr2_u2 c0 t1); XEAuto. - Qed. - - Theorem pc3_pr2_fsubst0_back: (c1:?; t,t1:?) (pr2 c1 t t1) -> - (i:?; u,c2,t2:?) (fsubst0 i u c1 t1 c2 t2) -> - (e:?) (drop i (0) c1 (CTail e (Bind Abbr) u)) -> - (pc3 c2 t t2). - Intros until 1; XElim H. -(* case 1: pr2_free *) - Intros until 2; XElim H0; Intros. -(* case 1.1: fsubst0_snd. *) - Apply (pc3_pr2_u c1 t2); XEAuto. -(* case 1.2: fsubst0_fst. *) - XAuto. -(* case 1.3: fsubst0_both. *) - CSubst0Drop; Apply (pc3_pr2_u c0 t2); XEAuto. -(* case 2: pr2_delta *) - Intros until 4; XElim H2; Intros. -(* case 2.1: fsubst0_snd. *) - Apply (pc3_t t2); Apply pc3_pr3_r; XEAuto. -(* case 2.2: fsubst0_fst. *) - Apply (lt_le_e i i0); Intros; CSubst0Drop. -(* case 2.2.1: i < i0, none *) - XEAuto. -(* case 2.2.2: i < i0, csubst0_bind *) - CGenBase; Rewrite <- H8 in H5; Rewrite <- H9 in H5; Rewrite <- H9 in H6; Rewrite <- H10 in H6; Clear H8 H9 H10 c2 t3 x0 x1 x2. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H7; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u c0 x); XEAuto. -(* case 2.2.3: i < i0, csubst0_fst *) - CGenBase; Rewrite <- H8 in H6; Rewrite <- H9 in H5; Rewrite <- H9 in H6; Rewrite <- H10 in H5; Clear H8 H9 H10 c2 t3 x0 x1 x3. - Apply pc3_pr2_r; XEAuto. -(* case 2.2.4: i < i0, csubst0_both *) - CGenBase; Rewrite <- H9 in H7; Rewrite <- H10 in H5; Rewrite <- H10 in H6; Rewrite <- H10 in H7; Rewrite <- H11 in H6; Clear H9 H10 H11 c2 t3 x0 x1 x3. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H8; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u c0 x); XEAuto. -(* case 2.2.5: i >= i0 *) - XEAuto. -(* case 2.3: fsubst0_both *) - Apply (lt_le_e i i0); Intros; CSubst0Drop. -(* case 2.3.1 : i < i0, none *) - CSubst0Drop; Apply pc3_pr2_u with t2:=t2; Try Apply pc3_pr3_r; XEAuto. -(* case 2.3.2 : i < i0, csubst0_snd *) - CGenBase; Rewrite <- H9 in H6; Rewrite <- H10 in H6; Rewrite <- H10 in H7; Rewrite <- H11 in H7; Clear H9 H10 H11 c2 t3 x0 x1 x2. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H8; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u c0 x); [ Idtac | Apply (pc3_pr2_u2 c0 t0) ]; XEAuto. -(* case 2.3.3: i < i0, csubst0_fst *) - CGenBase; Rewrite <- H9 in H7; Rewrite <- H10 in H6; Rewrite <- H10 in H7; Rewrite <- H11 in H6; Clear H9 H10 H11 c2 t3 x0 x1 x3. - CSubst0Drop; Apply (pc3_pr2_u c0 t0); [ Idtac | Apply pc3_pr2_r ]; XEAuto. -(* case 2.3.4: i < i0, csubst0_both *) - CGenBase; Rewrite <- H10 in H8; Rewrite <- H11 in H6; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H7; Clear H10 H11 H12 c2 t3 x0 x1 x3. - Subst0Subst0; Rewrite <- lt_plus_minus_r in H9; [ CSubst0Drop | XAuto ]. - Apply (pc3_pr2_u c0 x); [ Idtac | Apply (pc3_pr2_u2 c0 t0) ]; XEAuto. -(* case 2.3.5: i >= i0 *) - CSubst0Drop; Apply (pc3_pr2_u c0 t0); XEAuto. - Qed. - - Opaque pc3. - - Theorem pc3_fsubst0: (c1:?; t1,t:?) (pc3 c1 t1 t) -> - (i:?; u,c2,t2:?) (fsubst0 i u c1 t1 c2 t2) -> - (e:?) (drop i (0) c1 (CTail e (Bind Abbr) u)) -> - (pc3 c2 t2 t). - Intros until 1; XElimUsing pc3_ind_left H. -(* case 1: pc3_refl *) - Intros until 1; XElim H; Intros; Try CSubst0Drop; XEAuto. -(* case 2: pc3_pr2_u *) - Intros until 4; XElim H2; Intros; - (Apply (pc3_t t2); [ EApply pc3_pr2_fsubst0; XEAuto | XEAuto ]). -(* case 2: pc3_pr2_u2 *) - Intros until 4; XElim H2; Intros; - (Apply (pc3_t t0); [ Apply pc3_s; EApply pc3_pr2_fsubst0_back; XEAuto | XEAuto ]). - Qed. - - End pc3_fsubst0. - - Hints Resolve pc3_fsubst0 : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr0_confluence.v b/helm/coq-contribs/LAMBDA-TYPES/pr0_confluence.v deleted file mode 100644 index c23d6743f..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr0_confluence.v +++ /dev/null @@ -1,176 +0,0 @@ -(*#* #stop file *) - -Require tlt_defs. -Require lift_gen. -Require lift_tlt. -Require subst0_gen. -Require subst0_confluence. -Require pr0_defs. -Require pr0_lift. -Require pr0_gen. -Require pr0_subst0. - - Section pr0_confluence. (*************************************************) - - Tactic Definition SSubstInv := - Match Context With - | [ H0: (TTail ? ? ?) = (TTail ? ? ?) |- ? ] -> - Inversion H0; Clear H0 - | [ H0: (pr0 (TTail (Bind ?) ? ?) ?) |- ? ] -> - Inversion H0; Clear H0 - | _ -> EqFalse Orelse LiftGen Orelse Pr0Gen. - - Tactic Definition SSubstBack := - Match Context With - | [ H0: Abst = ?1; H1:? |- ? ] -> - Rewrite <- H0 in H1 Orelse Rewrite <- H0 Orelse Clear H0 ?1 - | [ H0: Abbr = ?1; H1:? |- ? ] -> - Rewrite <- H0 in H1 Orelse Rewrite <- H0 Orelse Clear H0 ?1 - | [ H0: (? ?) = ?1; H1:? |- ? ] -> - Rewrite <- H0 in H1 Orelse Rewrite <- H0 Orelse Clear H0 ?1 - | [ H0: (? ? ? ?) = ?1; H1:? |- ? ] -> - Rewrite <- H0 in H1 Orelse Rewrite <- H0 Orelse Clear H0 ?1. - - Tactic Definition SSubst := - Match Context With - [ H0: ?1 = ?; H1:? |- ? ] -> - Rewrite H0 in H1 Orelse Rewrite H0 Orelse Clear H0 ?1. - - Tactic Definition XSubst := - Repeat (SSubstInv Orelse SSubstBack Orelse SSubst). - - Tactic Definition IH := - Match Context With - | [ H0: (pr0 ?1 ?2); H1: (pr0 ?1 ?3) |- ? ] -> - LApply (H ?1); [ Intros H_x | XEAuto ]; - LApply (H_x ?2); [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x ?3); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Clear H0 H1; Intros. - -(* case pr0_cong pr0_upsilon pr0_refl ***************************************) - - Remark pr0_cong_upsilon_refl: (b:?) ~ b = Abst -> - (u0,u3:?) (pr0 u0 u3) -> - (t4,t5:?) (pr0 t4 t5) -> - (u2,v2,x:?) (pr0 u2 x) -> (pr0 v2 x) -> - (EX t:T | (pr0 (TTail (Flat Appl) u2 (TTail (Bind b) u0 t4)) t) & - (pr0 (TTail (Bind b) u3 (TTail (Flat Appl) (lift (1) (0) v2) t5)) t)). - Intros. - Apply ex2_intro with x:=(TTail (Bind b) u3 (TTail (Flat Appl) (lift (1) (0) x) t5)); XAuto. - Qed. - -(* case pr0_cong pr0_upsilon pr0_cong ***************************************) - - Remark pr0_cong_upsilon_cong: (b:?) ~ b = Abst -> - (u2,v2,x:?) (pr0 u2 x) -> (pr0 v2 x) -> - (t2,t5,x0:?) (pr0 t2 x0) -> (pr0 t5 x0) -> - (u5,u3,x1:?) (pr0 u5 x1) -> (pr0 u3 x1) -> - (EX t:T | (pr0 (TTail (Flat Appl) u2 (TTail (Bind b) u5 t2)) t) & - (pr0 (TTail (Bind b) u3 (TTail (Flat Appl) (lift (1) (0) v2) t5)) t)). - Intros. - Apply ex2_intro with x:=(TTail (Bind b) x1 (TTail (Flat Appl) (lift (1) (0) x) x0)); XAuto. - Qed. - -(* case pr0_cong pr0_upsilon pr0_delta **************************************) - - Remark pr0_cong_upsilon_delta: ~ Abbr = Abst -> - (u5,t2,w:?) (subst0 (0) u5 t2 w) -> - (u2,v2,x:?) (pr0 u2 x) -> (pr0 v2 x) -> - (t5,x0:?) (pr0 t2 x0) -> (pr0 t5 x0) -> - (u3,x1:?) (pr0 u5 x1) -> (pr0 u3 x1) -> - (EX t:T | (pr0 (TTail (Flat Appl) u2 (TTail (Bind Abbr) u5 w)) t) & - (pr0 (TTail (Bind Abbr) u3 (TTail (Flat Appl) (lift (1) (0) v2) t5)) t)). - Intros; Pr0Subst0. -(* case 1: x0 is a lift *) - Apply ex2_intro with x:=(TTail (Bind Abbr) x1 (TTail (Flat Appl) (lift (1) (0) x) x0)); XAuto. -(* case 2: x0 is not a lift *) - Apply ex2_intro with x:=(TTail (Bind Abbr) x1 (TTail (Flat Appl) (lift (1) (0) x) x2)); XEAuto. - Qed. - -(* case pr0_cong pr0_upsilon pr0_zeta ***************************************) - - Remark pr0_cong_upsilon_zeta: (b:?) ~ b = Abst -> - (u0,u3:?) (pr0 u0 u3) -> - (u2,v2,x0:?) (pr0 u2 x0) -> (pr0 v2 x0) -> - (x,t3,x1:?) (pr0 x x1) -> (pr0 t3 x1) -> - (EX t:T | (pr0 (TTail (Flat Appl) u2 t3) t) & - (pr0 (TTail (Bind b) u3 (TTail (Flat Appl) (lift (1) (0) v2) (lift (1) (0) x))) t)). - Intros; LiftTailRwBack; XEAuto. - Qed. - -(* case pr0_cong pr0_delta **************************************************) - - Remark pr0_cong_delta: (u3,t5,w:?) (subst0 (0) u3 t5 w) -> - (u2,x:?) (pr0 u2 x) -> (pr0 u3 x) -> - (t3,x0:?) (pr0 t3 x0) -> (pr0 t5 x0) -> - (EX t:T | (pr0 (TTail (Bind Abbr) u2 t3) t) & - (pr0 (TTail (Bind Abbr) u3 w) t)). - Intros; Pr0Subst0; XEAuto. - Qed. - -(* case pr0_upsilon pr0_upsilon *********************************************) - - Remark pr0_upsilon_upsilon: (b:?) ~ b = Abst -> - (v1,v2,x0:?) (pr0 v1 x0) -> (pr0 v2 x0) -> - (u1,u2,x1:?) (pr0 u1 x1) -> (pr0 u2 x1) -> - (t1,t2,x2:?) (pr0 t1 x2) -> (pr0 t2 x2) -> - (EX t:T | (pr0 (TTail (Bind b) u1 (TTail (Flat Appl) (lift (1) (0) v1) t1)) t) & - (pr0 (TTail (Bind b) u2 (TTail (Flat Appl) (lift (1) (0) v2) t2)) t)). - Intros. - Apply ex2_intro with x:=(TTail (Bind b) x1 (TTail (Flat Appl) (lift (1) (0) x0) x2)); XAuto. - Qed. - -(* case pr0_delta pr0_delta *************************************************) - - Remark pr0_delta_delta: (u2,t3,w:?) (subst0 (0) u2 t3 w) -> - (u3,t5,w0:?) (subst0 (0) u3 t5 w0) -> - (x:?) (pr0 u2 x) -> (pr0 u3 x) -> - (x0:?) (pr0 t3 x0) -> (pr0 t5 x0) -> - (EX t:T | (pr0 (TTail (Bind Abbr) u2 w) t) & - (pr0 (TTail (Bind Abbr) u3 w0) t)). - Intros; Pr0Subst0; Pr0Subst0; Try Subst0Confluence; XSubst; XEAuto. - Qed. - -(* case pr0_delta pr0_epsilon ***********************************************) - - Remark pr0_delta_epsilon: (u2,t3,w:?) (subst0 (0) u2 t3 w) -> - (t4:?) (pr0 (lift (1) (0) t4) t3) -> - (t2:?) (EX t:T | (pr0 (TTail (Bind Abbr) u2 w) t) & (pr0 t2 t)). - Intros; Pr0Gen; XSubst; Subst0Gen. - Qed. - -(* main *********************************************************************) - - Hints Resolve pr0_cong_upsilon_refl pr0_cong_upsilon_cong : ltlc. - Hints Resolve pr0_cong_upsilon_delta pr0_cong_upsilon_zeta : ltlc. - Hints Resolve pr0_cong_delta : ltlc. - Hints Resolve pr0_upsilon_upsilon : ltlc. - Hints Resolve pr0_delta_delta pr0_delta_epsilon : ltlc. - -(*#* #start file *) - -(*#* #caption "confluence with itself: Church-Rosser property" *) -(*#* #cap #cap t0, t1, t2, t *) - - Theorem pr0_confluence: (t0,t1:?) (pr0 t0 t1) -> (t2:?) (pr0 t0 t2) -> - (EX t | (pr0 t1 t) & (pr0 t2 t)). - -(*#* #stop file *) - - XElimUsing tlt_wf_ind t0; Intros. - Inversion H0; Inversion H1; Clear H0 H1; - XSubst; Repeat IH; XDEAuto 4. - Qed. - - End pr0_confluence. - - Tactic Definition Pr0Confluence := - Match Context With - [ H1: (pr0 ?1 ?2); H2: (pr0 ?1 ?3) |-? ] -> - LApply (pr0_confluence ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros. - -(*#* #start file *) - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/pr0_defs.v deleted file mode 100644 index 640b56f1f..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr0_defs.v +++ /dev/null @@ -1,101 +0,0 @@ -Require Export subst0_defs. - -(*#* #caption "axioms for the relation $\\PrZ{}{}$", - "reflexivity", "compatibility", "$\\beta$-contraction", "$\\upsilon$-swap", - "$\\delta$-expansion", "$\\zeta$-contraction", "$\\epsilon$-contraction" -*) -(*#* #cap #cap t, t1, t2 #alpha u in V, u1 in V1, u2 in V2, v1 in W1, v2 in W2, w in T, k in z *) - - Inductive pr0 : T -> T -> Prop := -(* structural rules *) - | pr0_refl : (t:?) (pr0 t t) - | pr0_comp : (u1,u2:?) (pr0 u1 u2) -> (t1,t2:?) (pr0 t1 t2) -> - (k:?) (pr0 (TTail k u1 t1) (TTail k u2 t2)) -(* axiom rules *) - | pr0_beta : (u,v1,v2:?) (pr0 v1 v2) -> (t1,t2:?) (pr0 t1 t2) -> - (pr0 (TTail (Flat Appl) v1 (TTail (Bind Abst) u t1)) - (TTail (Bind Abbr) v2 t2)) - | pr0_upsilon: (b:?) ~b=Abst -> (v1,v2:?) (pr0 v1 v2) -> - (u1,u2:?) (pr0 u1 u2) -> (t1,t2:?) (pr0 t1 t2) -> - (pr0 (TTail (Flat Appl) v1 (TTail (Bind b) u1 t1)) - (TTail (Bind b) u2 (TTail (Flat Appl) (lift (1) (0) v2) t2))) - | pr0_delta : (u1,u2:?) (pr0 u1 u2) -> (t1,t2:?) (pr0 t1 t2) -> - (w:?) (subst0 (0) u2 t2 w) -> - (pr0 (TTail (Bind Abbr) u1 t1) (TTail (Bind Abbr) u2 w)) - | pr0_zeta : (b:?) ~b=Abst -> (t1,t2:?) (pr0 t1 t2) -> - (u:?) (pr0 (TTail (Bind b) u (lift (1) (0) t1)) t2) - | pr0_epsilon: (t1,t2:?) (pr0 t1 t2) -> - (u:?) (pr0 (TTail (Flat Cast) u t1) t2). - -(*#* #stop file *) - - Hint pr0 : ltlc := Constructors pr0. - - Section pr0_gen_base. (***************************************************) - - Theorem pr0_gen_sort : (x:?; n:?) (pr0 (TSort n) x) -> x = (TSort n). - Intros; Inversion H; XAuto. - Qed. - - Theorem pr0_gen_lref : (x:?; n:?) (pr0 (TLRef n) x) -> x = (TLRef n). - Intros; Inversion H; XAuto. - Qed. - - Theorem pr0_gen_abst : (u1,t1,x:?) (pr0 (TTail (Bind Abst) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Abst) u2 t2) & - (pr0 u1 u2) & (pr0 t1 t2) - ). - - Intros; Inversion H; Clear H. -(* case 1 : pr0_refl *) - XEAuto. -(* case 2 : pr0_cont *) - XEAuto. -(* case 3 : pr0_zeta *) - XElim H4; XAuto. - Qed. - - Theorem pr0_gen_appl : (u1,t1,x:?) (pr0 (TTail (Flat Appl) u1 t1) x) -> (OR - (EX u2 t2 | x = (TTail (Flat Appl) u2 t2) & - (pr0 u1 u2) & (pr0 t1 t2) - ) | - (EX y1 z1 u2 t2 | t1 = (TTail (Bind Abst) y1 z1) & - x = (TTail (Bind Abbr) u2 t2) & - (pr0 u1 u2) & (pr0 z1 t2) - ) | - (EX b y1 z1 u2 v2 t2 | - ~b=Abst & - t1 = (TTail (Bind b) y1 z1) & - x = (TTail (Bind b) v2 (TTail (Flat Appl) (lift (1) (0) u2) t2)) & - (pr0 u1 u2) & (pr0 y1 v2) & (pr0 z1 t2)) - ). - Intros; Inversion H; XEAuto. - Qed. - - Theorem pr0_gen_cast : (u1,t1,x:?) (pr0 (TTail (Flat Cast) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Flat Cast) u2 t2) & - (pr0 u1 u2) & (pr0 t1 t2) - ) \/ - (pr0 t1 x). - Intros; Inversion H; XEAuto. - Qed. - - End pr0_gen_base. - - Hints Resolve pr0_gen_sort pr0_gen_lref : ltlc. - - Tactic Definition Pr0GenBase := - Match Context With - | [ H: (pr0 (TSort ?1) ?2) |- ? ] -> - LApply (pr0_gen_sort ?2 ?1); [ Clear H; Intros | XAuto ] - | [ H: (pr0 (TLRef ?1) ?2) |- ? ] -> - LApply (pr0_gen_lref ?2 ?1); [ Clear H; Intros | XAuto ] - | [ H: (pr0 (TTail (Bind Abst) ?1 ?2) ?3) |- ? ] -> - LApply (pr0_gen_abst ?1 ?2 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (pr0 (TTail (Flat Appl) ?1 ?2) ?3) |- ? ] -> - LApply (pr0_gen_appl ?1 ?2 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; Intros H; XElim H; Intros - | [ H: (pr0 (TTail (Flat Cast) ?1 ?2) ?3) |- ? ] -> - LApply (pr0_gen_cast ?1 ?2 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; [ Intros H; XElim H; Intros | Intros ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr0_gen.v b/helm/coq-contribs/LAMBDA-TYPES/pr0_gen.v deleted file mode 100644 index bfe189586..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr0_gen.v +++ /dev/null @@ -1,99 +0,0 @@ -(*#* #stop file *) - -Require lift_gen. -Require lift_props. -Require subst0_gen. -Require pr0_defs. -Require pr0_lift. - - Section pr0_gen_abbr. (***************************************************) - - Theorem pr0_gen_abbr : (u1,t1,x:?) (pr0 (TTail (Bind Abbr) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Abbr) u2 t2) & - (pr0 u1 u2) & - (pr0 t1 t2) \/ - (EX y | (pr0 t1 y) & (subst0 (0) u2 y t2)) - ) \/ - (pr0 t1 (lift (1) (0) x)). - Intros. - Inversion H; Clear H; XDEAuto 6. - Qed. - - End pr0_gen_abbr. - - Section pr0_gen_void. (***************************************************) - - Theorem pr0_gen_void : (u1,t1,x:?) (pr0 (TTail (Bind Void) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Void) u2 t2) & - (pr0 u1 u2) & (pr0 t1 t2) - ) \/ - (pr0 t1 (lift (1) (0) x)). - Intros. - Inversion H; Clear H; XEAuto. - Qed. - - End pr0_gen_void. - - Section pr0_gen_lift. (***************************************************) - - Tactic Definition IH := - Match Context With - | [ H: (_:?; _:?) ?0 = (lift ? ? ?) -> ?; - H0: ?0 = (lift ? ?2 ?3) |- ? ] -> - LApply (H ?3 ?2); [ Clear H H0; Intros H_x | XAuto ]; - XElim H_x; Intro; Intros H_x; Intro; - Try Rewrite H_x; Try Rewrite H_x in H3; Clear H_x. - -(*#* #caption "generation lemma for lift" *) -(*#* #cap #alpha t1 in U1, t2 in U2, x in T, d in i *) - - Theorem pr0_gen_lift : (t1,x:?; h,d:?) (pr0 (lift h d t1) x) -> - (EX t2 | x = (lift h d t2) & (pr0 t1 t2)). - Intros until 1; InsertEq H '(lift h d t1); - UnIntro H d; UnIntro H t1; XElim H; Clear y x; Intros; - Rename x into t3; Rename x0 into d. -(* case 1 : pr0_r *) - XEAuto. -(* case 2 : pr0_c *) - NewInduction k; LiftGen; Rewrite H3; Clear H3 t0; - IH; IH; XEAuto. -(* case 3 : pr0_beta *) - LiftGen; Rewrite H3; Clear H3 t0. - LiftGen; Rewrite H3; Clear H3 H5 x1 k. - IH; IH; XEAuto. -(* case 4 : pr0_upsilon *) - LiftGen; Rewrite H6; Clear H6 t0. - LiftGen; Rewrite H6; Clear H6 x1. - IH; IH; IH. - Rewrite <- lift_d; [ Simpl | XAuto ]. - Rewrite <- lift_flat; XEAuto. -(* case 5 : pr0_delta *) - LiftGen; Rewrite H4; Clear H4 t0. - IH; IH; Arith3In H3 d; Subst0Gen. - Rewrite H3; XEAuto. -(* case 6 : pr0_zeta *) - LiftGen; Rewrite H2; Clear H2 t0. - Arith7In H4 d; LiftGen; Rewrite H2; Clear H2 x1. - IH; XEAuto. -(* case 7 : pr0_zeta *) - LiftGen; Rewrite H1; Clear H1 t0. - IH; XEAuto. - Qed. - - End pr0_gen_lift. - - Tactic Definition Pr0Gen := - Match Context With - | [ H: (pr0 (TTail (Bind Abbr) ?1 ?2) ?3) |- ? ] -> - LApply (pr0_gen_abbr ?1 ?2 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; - [ Intros H; XElim H; Do 4 Intro; Intros H_x; - XElim H_x; [ Intros | Intros H_x; XElim H_x; Intros ] - | Intros ] - | [ H: (pr0 (TTail (Bind Void) ?1 ?2) ?3) |- ? ] -> - LApply (pr0_gen_void ?1 ?2 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; [ Intros H; XElim H; Intros | Intros ] - | [ H: (pr0 (lift ?0 ?1 ?2) ?3) |- ? ] -> - LApply (pr0_gen_lift ?2 ?3 ?0 ?1); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | _ -> Pr0GenBase. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr0_lift.v b/helm/coq-contribs/LAMBDA-TYPES/pr0_lift.v deleted file mode 100644 index b6d9ba247..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr0_lift.v +++ /dev/null @@ -1,39 +0,0 @@ -Require lift_props. -Require subst0_lift. -Require pr0_defs. - -(*#* #caption "main properties of the relation $\\PrZ{}{}$" *) -(*#* #clauses pr0_props *) - -(*#* #stop file *) - - Section pr0_lift. (*******************************************************) - -(*#* #caption "conguence with lift" *) -(*#* #cap #cap t1,t2 #alpha d in i *) - - Theorem pr0_lift: (t1,t2:?) (pr0 t1 t2) -> - (h,d:?) (pr0 (lift h d t1) (lift h d t2)). - - Intros until 1; XElim H; Intros. -(* case 1: pr0_refl *) - XAuto. -(* case 2: pr0_cong *) - LiftTailRw; XAuto. -(* case 3 : pr0_beta *) - LiftTailRw; XAuto. -(* case 4: pr0_upsilon *) - LiftTailRw; Simpl; Arith0 d; Rewrite lift_d; XAuto. -(* case 5: pr0_delta *) - LiftTailRw; Simpl. - EApply pr0_delta; [ XAuto | Apply H2 | Idtac ]. - LetTac d' := (S d); Arith10 d; Unfold d'; XAuto. -(* case 6: pr0_zeta *) - LiftTailRw; Simpl; Arith0 d; Rewrite lift_d; XAuto. -(* case 7: pr0_epsilon *) - LiftTailRw; XAuto. - Qed. - - End pr0_lift. - - Hints Resolve pr0_lift : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr0_subst0.v b/helm/coq-contribs/LAMBDA-TYPES/pr0_subst0.v deleted file mode 100644 index 46a137e18..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr0_subst0.v +++ /dev/null @@ -1,105 +0,0 @@ -Require subst0_gen. -Require subst0_lift. -Require subst0_subst0. -Require subst0_confluence. -Require pr0_defs. -Require pr0_lift. - -(*#* #stop file *) - - Section pr0_subst0. (*****************************************************) - - Tactic Definition IH := - Match Context With - | [ H1: (u1:?) (pr0 u1 ?1) -> ?; H2: (pr0 ?2 ?1) |- ? ] -> - LApply (H1 ?2); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (u1:?) (pr0 ?1 u1) -> ?; H2: (pr0 ?1 ?2) |- ? ] -> - LApply (H1 ?2); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (v1,w1:?; i:?) (subst0 i v1 ?1 w1) -> (v2:T) (pr0 v1 v2) -> ?; - H2: (subst0 ?2 ?3 ?1 ?4); H3: (pr0 ?3 ?5) |- ? ] -> - LApply (H1 ?3 ?4 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?5); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; [ Intros | Intros H1; XElim H1; Intros ]. - - Theorem pr0_subst0_back: (u2,t1,t2:?; i:?) (subst0 i u2 t1 t2) -> - (u1:?) (pr0 u1 u2) -> - (EX t | (subst0 i u1 t1 t) & (pr0 t t2)). - Intros until 1; XElim H; Intros; - Repeat IH; XEAuto. - Qed. - - Theorem pr0_subst0_fwd: (u2,t1,t2:?; i:?) (subst0 i u2 t1 t2) -> - (u1:?) (pr0 u2 u1) -> - (EX t | (subst0 i u1 t1 t) & (pr0 t2 t)). - Intros until 1; XElim H; Intros; - Repeat IH; XEAuto. - Qed. - - Hints Resolve pr0_subst0_fwd : ltlc. - -(*#* #start file *) - -(*#* #caption "confluence with strict substitution" *) -(*#* #cap #cap t1, t2 #alpha v1 in W1, v2 in W2, w1 in U1, w2 in U2 *) - - Theorem pr0_subst0: (t1,t2:?) (pr0 t1 t2) -> - (v1,w1:?; i:?) (subst0 i v1 t1 w1) -> - (v2:?) (pr0 v1 v2) -> - (pr0 w1 t2) \/ - (EX w2 | (pr0 w1 w2) & (subst0 i v2 t2 w2)). - -(*#* #stop file *) - - Intros until 1; XElim H; Clear t1 t2; Intros. -(* case 1: pr0_refl *) - XEAuto. -(* case 2: pr0_cong *) - Subst0Gen; Rewrite H3; Repeat IH; XEAuto. -(* case 3: pr0_beta *) - Repeat Subst0Gen; Rewrite H3; Try Rewrite H5; Try Rewrite H6; - Repeat IH; XEAuto. -(* case 4: pr0_upsilon *) - Repeat Subst0Gen; Rewrite H6; Try Rewrite H8; Try Rewrite H9; - Repeat IH; XDEAuto 7. -(* case 5: pr0_delta *) - Subst0Gen; Rewrite H4; Repeat IH; - [ XEAuto | Idtac | XEAuto | Idtac | XEAuto | Idtac | Idtac | Idtac ]. - Subst0Subst0; Arith9'In H9 i; XEAuto. - Subst0Confluence; XEAuto. - Subst0Subst0; Arith9'In H10 i; XEAuto. - Subst0Confluence; XEAuto. - Subst0Subst0; Arith9'In H11 i; Subst0Confluence; XDEAuto 6. -(* case 6: pr0_zeta *) - Repeat Subst0Gen; Rewrite H2; Try Rewrite H4; Try Rewrite H5; - Try (Simpl in H5; Rewrite <- minus_n_O in H5); - Try (Simpl in H6; Rewrite <- minus_n_O in H6); - Try IH; XEAuto. -(* case 7: pr0_epsilon *) - Subst0Gen; Rewrite H1; Try IH; XEAuto. - Qed. - - End pr0_subst0. - - Tactic Definition Pr0Subst0 := - Match Context With - | [ H1: (pr0 ?1 ?2); H2: (subst0 ?3 ?4 ?1 ?5); - H3: (pr0 ?4 ?6) |- ? ] -> - LApply (pr0_subst0 ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4 ?5 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - LApply (H1 ?6); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; [ Intros | Intros H1; XElim H1; Intros ] - | [ H1: (pr0 ?1 ?2); H2: (subst0 ?3 ?4 ?1 ?5) |- ? ] -> - LApply (pr0_subst0 ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4 ?5 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; [ Intros | Intros H1; XElim H1; Intros ] - | [ _: (subst0 ?0 ?1 ?2 ?3); _: (pr0 ?4 ?1) |- ? ] -> - LApply (pr0_subst0_back ?1 ?2 ?3 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ H1: (subst0 ?0 ?1 ?2 ?3); H2: (pr0 ?1 ?4) |- ? ] -> - LApply (pr0_subst0_fwd ?1 ?2 ?3 ?0); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr0_subst1.v b/helm/coq-contribs/LAMBDA-TYPES/pr0_subst1.v deleted file mode 100644 index fbf8e8b38..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr0_subst1.v +++ /dev/null @@ -1,63 +0,0 @@ -(*#* #stop file *) - -Require subst1_defs. -Require pr0_defs. -Require pr0_subst0. - - Section pr0_subst1_props. (***********************************************) - - Theorem pr0_delta1: (u1,u2:?) (pr0 u1 u2) -> (t1,t2:?) (pr0 t1 t2) -> - (w:?) (subst1 (0) u2 t2 w) -> - (pr0 (TTail (Bind Abbr) u1 t1) (TTail (Bind Abbr) u2 w)). - Intros until 3; XElim H1; Clear w; XEAuto. - Qed. - - Theorem pr0_subst1_back: (u2,t1,t2:?; i:?) (subst1 i u2 t1 t2) -> - (u1:?) (pr0 u1 u2) -> - (EX t | (subst1 i u1 t1 t) & (pr0 t t2)). - Intros until 1; XElim H; Intros; - Try Pr0Subst0; XEAuto. - Qed. - - Theorem pr0_subst1_fwd: (u2,t1,t2:?; i:?) (subst1 i u2 t1 t2) -> - (u1:?) (pr0 u2 u1) -> - (EX t | (subst1 i u1 t1 t) & (pr0 t2 t)). - Intros until 1; XElim H; Intros; - Try Pr0Subst0; XEAuto. - Qed. - - Theorem pr0_subst1: (t1,t2:?) (pr0 t1 t2) -> - (v1,w1:?; i:?) (subst1 i v1 t1 w1) -> - (v2:?) (pr0 v1 v2) -> - (EX w2 | (pr0 w1 w2) & (subst1 i v2 t2 w2)). - Intros until 2; XElim H0; Intros; - Try Pr0Subst0; XEAuto. - Qed. - - End pr0_subst1_props. - - Hints Resolve pr0_delta1 : ltlc. - - Tactic Definition Pr0Subst1 := - Match Context With - | [ H1: (pr0 ?1 ?2); H2: (subst1 ?3 ?4 ?1 ?5); - H3: (pr0 ?4 ?6) |- ? ] -> - LApply (pr0_subst1 ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4 ?5 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - LApply (H1 ?6); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (pr0 ?1 ?2); H2: (subst1 ?3 ?4 ?1 ?5) |- ? ] -> - LApply (pr0_subst1 ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4 ?5 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (subst1 ?0 ?1 ?2 ?3); H2: (pr0 ?4 ?1) |- ? ] -> - LApply (pr0_subst1_back ?1 ?2 ?3 ?0); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (subst1 ?0 ?1 ?2 ?3); H2: (pr0 ?1 ?4) |- ? ] -> - LApply (pr0_subst1_fwd ?1 ?2 ?3 ?0); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | _ -> Pr0Subst0. - diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr1_confluence.v b/helm/coq-contribs/LAMBDA-TYPES/pr1_confluence.v deleted file mode 100644 index fac076d31..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr1_confluence.v +++ /dev/null @@ -1,56 +0,0 @@ -(*#* #stop file *) - -Require pr0_confluence. -Require pr1_defs. - -(*#* #caption "main properties of predicate \\texttt{pr1}" *) -(*#* #clauses pr1_props *) - - Section pr1_confluence. (*************************************************) - -(*#* #caption "confluence with single step reduction: strip lemma" *) -(*#* #cap #cap t0, t1, t2, t *) - - Theorem pr1_strip : (t0,t1:?) (pr1 t0 t1) -> (t2:?) (pr0 t0 t2) -> - (EX t | (pr1 t1 t) & (pr1 t2 t)). - Intros until 1; XElim H; Intros. -(* case 1 : pr1_r *) - XEAuto. -(* case 2 : pr1_u *) - Pr0Confluence. - LApply (H1 x); [ Clear H1 H2; Intros H1 | XAuto ]. - XElim H1; Intros; XEAuto. - Qed. - -(*#* #caption "confluence with itself: Church-Rosser property" *) -(*#* #cap #cap t0, t1, t2, t *) - - Theorem pr1_confluence : (t0,t1:?) (pr1 t0 t1) -> (t2:?) (pr1 t0 t2) -> - (EX t | (pr1 t1 t) & (pr1 t2 t)). - Intros until 1; XElim H; Intros. -(* case 1 : pr1_r *) - XEAuto. -(* case 2 : pr1_u *) - LApply (pr1_strip t3 t5); [ Clear H2; Intros H2 | XAuto ]. - LApply (H2 t2); [ Clear H H2; Intros H | XAuto ]. - XElim H; Intros. - LApply (H1 x); [ Clear H1 H2; Intros H1 | XAuto ]. - XElim H1; Intros; XEAuto. - Qed. - - End pr1_confluence. - - Tactic Definition Pr1Confluence := - Match Context With - | [ H1: (pr1 ?1 ?2); H2: (pr0 ?1 ?3) |-? ] -> - LApply (pr1_strip ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (pr1 ?1 ?2); H2: (pr1 ?1 ?3) |-? ] -> - LApply (pr1_confluence ?1 ?2); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?3); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | _ -> Pr0Confluence. - -(*#* #single *) - diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr1_defs.v b/helm/coq-contribs/LAMBDA-TYPES/pr1_defs.v deleted file mode 100644 index ed05b0e5d..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr1_defs.v +++ /dev/null @@ -1,34 +0,0 @@ -(*#* #stop file *) - -Require Export pr0_defs. - - Inductive pr1 : T -> T -> Prop := - | pr1_r: (t:?) (pr1 t t) - | pr1_u: (t2,t1:?) (pr0 t1 t2) -> (t3:?) (pr1 t2 t3) -> (pr1 t1 t3). - - Hint pr1 : ltlc := Constructors pr1. - - Section pr1_props. (******************************************************) - - Theorem pr1_pr0: (t1,t2:?) (pr0 t1 t2) -> (pr1 t1 t2). - XEAuto. - Qed. - - Theorem pr1_t: (t2,t1:?) (pr1 t1 t2) -> - (t3:?) (pr1 t2 t3) -> (pr1 t1 t3). - Intros until 1; XElim H; XEAuto. - Qed. - - Theorem pr1_tail_1: (u1,u2:?) (pr1 u1 u2) -> - (t:?; k:?) (pr1 (TTail k u1 t) (TTail k u2 t)). - Intros; XElim H; XEAuto. - Qed. - - Theorem pr1_tail_2: (t1,t2:?) (pr1 t1 t2) -> - (u:?; k:?) (pr1 (TTail k u t1) (TTail k u t2)). - Intros; XElim H; XEAuto. - Qed. - - End pr1_props. - - Hints Resolve pr1_pr0 pr1_t pr1_tail_1 pr1_tail_2 : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr2_confluence.v b/helm/coq-contribs/LAMBDA-TYPES/pr2_confluence.v deleted file mode 100644 index 8b2fd4769..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr2_confluence.v +++ /dev/null @@ -1,74 +0,0 @@ -(*#* #stop file *) - -Require subst0_confluence. -Require drop_props. -Require pr0_subst0. -Require pr0_confluence. -Require pr2_defs. - - Section pr2_confluence. (*************************************************) - -(* case 1.1 : pr2_free pr2_free *********************************************) - - Remark pr2_free_free: (c:?; t0,t1,t2:?) - (pr0 t0 t1) -> (pr0 t0 t2) -> - (EX t:T | (pr2 c t1 t) & (pr2 c t2 t)). - Intros; Pr0Confluence; XEAuto. - Qed. - -(* case 1.2 : pr2_free pr2_delta ********************************************) - - Remark pr2_free_delta: (c,d:?; t0,t1,t2,t4,u:?; i:?) - (pr0 t0 t1) -> - (drop i (0) c (CTail d (Bind Abbr) u)) -> - (pr0 t0 t4) -> - (subst0 i u t4 t2) -> - (EX t | (pr2 c t1 t) & (pr2 c t2 t)). - Intros; Pr0Confluence; Pr0Subst0; XEAuto. - Qed. - -(* case 2.2 : pr2_delta pr2_delta *******************************************) - - Remark pr2_delta_delta: (c,d,d0:?; t0,t1,t2,t3,t4,u,u0:?; i,i0:?) - (drop i (0) c (CTail d (Bind Abbr) u)) -> - (pr0 t0 t3) -> - (subst0 i u t3 t1) -> - (drop i0 (0) c (CTail d0 (Bind Abbr) u0)) -> - (pr0 t0 t4) -> - (subst0 i0 u0 t4 t2) -> - (EX t:T | (pr2 c t1 t) & (pr2 c t2 t)). - Intros; Pr0Confluence; Repeat Pr0Subst0; - [ XEAuto | XEAuto | XEAuto | Idtac ]. - Apply (neq_eq_e i i0); Intros. -(* case 1 : i != i0 *) - Subst0Confluence; XEAuto. -(* case 2 : i = i0 *) - Rewrite H5 in H; Rewrite H5 in H3; Clear H5 i. - DropDis; Inversion H2; Rewrite H7 in H3; Clear H2 H6 H7 d u. - Subst0Confluence; [ Rewrite H2 in H0; XEAuto | XEAuto | XEAuto | XEAuto ]. - Qed. - -(* main *********************************************************************) - - Hints Resolve pr2_free_free pr2_free_delta pr2_delta_delta : ltlc. - -(*#* #caption "confluence with itself: Church-Rosser property" *) -(*#* #cap #cap c, t0, t1, t2, t *) - - Theorem pr2_confluence: (c,t0,t1:?) (pr2 c t0 t1) -> - (t2:?) (pr2 c t0 t2) -> - (EX t | (pr2 c t1 t) & (pr2 c t2 t)). - Intros; Inversion H; Inversion H0; XDEAuto 3. - Qed. - - End pr2_confluence. - - Tactic Definition Pr2Confluence := - Match Context With - | [ H1: (pr2 ?1 ?2 ?3); H2: (pr2 ?1 ?2 ?4) |-? ] -> - LApply (pr2_confluence ?1 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | _ -> Pr0Confluence. - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr2_defs.v b/helm/coq-contribs/LAMBDA-TYPES/pr2_defs.v deleted file mode 100644 index 9dab9cafe..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr2_defs.v +++ /dev/null @@ -1,137 +0,0 @@ -Require Export drop_defs. -Require Export pr0_defs. - -(*#* #caption "current axioms for the relation $\\PrS{}{}{}$", - "context-free case", "context-dependent $\\delta$-expansion" -*) -(*#* #cap #cap c, d, t, t1, t2 #alpha u in V *) - - Inductive pr2 [c:C; t1:T] : T -> Prop := -(* structural rules *) - | pr2_free : (t2:?) (pr0 t1 t2) -> (pr2 c t1 t2) -(* axiom rules *) - | pr2_delta: (d:?; u:?; i:?) - (drop i (0) c (CTail d (Bind Abbr) u)) -> - (t2:?) (pr0 t1 t2) -> (t:?) (subst0 i u t2 t) -> - (pr2 c t1 t). - -(*#* #stop file *) - - Hint pr2 : ltlc := Constructors pr2. - - Section pr2_gen_base. (***************************************************) - - Theorem pr2_gen_sort: (c:?; x:?; n:?) (pr2 c (TSort n) x) -> - x = (TSort n). - Intros; Inversion H; Pr0GenBase; - [ XAuto | Rewrite H1 in H2; Subst0GenBase ]. - Qed. - - Theorem pr2_gen_lref: (c:?; x:?; n:?) (pr2 c (TLRef n) x) -> - x = (TLRef n) \/ - (EX d u | (drop n (0) c (CTail d (Bind Abbr) u)) & - x = (lift (S n) (0) u) - ). - Intros; Inversion H; Pr0GenBase; - [ XAuto | Rewrite H1 in H2; Subst0GenBase; Rewrite <- H2 in H0; XEAuto ]. - Qed. - - Theorem pr2_gen_abst: (c:?; u1,t1,x:?) - (pr2 c (TTail (Bind Abst) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Abst) u2 t2) & - (pr2 c u1 u2) & (b:?; u:?) - (pr2 (CTail c (Bind b) u) t1 t2) - ). - Intros; Inversion H; Pr0GenBase; - [ XEAuto | Rewrite H1 in H2; Subst0GenBase; XDEAuto 6 ]. - Qed. - - Theorem pr2_gen_appl: (c:?; u1,t1,x:?) - (pr2 c (TTail (Flat Appl) u1 t1) x) -> (OR - (EX u2 t2 | x = (TTail (Flat Appl) u2 t2) & - (pr2 c u1 u2) & (pr2 c t1 t2) - ) | - (EX y1 z1 u2 t2 | t1 = (TTail (Bind Abst) y1 z1) & - x = (TTail (Bind Abbr) u2 t2) & - (pr2 c u1 u2) & (b:?; u:?) - (pr2 (CTail c (Bind b) u) z1 t2) - ) | - (EX b y1 z1 z2 u2 v2 t2 | - ~b=Abst & - t1 = (TTail (Bind b) y1 z1) & - x = (TTail (Bind b) v2 z2) & - (pr2 c u1 u2) & (pr2 c y1 v2) & (pr0 z1 t2)) - ). - Intros; Inversion H; Pr0GenBase; - Try Rewrite H1 in H2; Try Rewrite H4 in H2; Try Rewrite H5 in H2; - Try Subst0GenBase; XDEAuto 7. - Qed. - - Theorem pr2_gen_cast: (c:?; u1,t1,x:?) - (pr2 c (TTail (Flat Cast) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Flat Cast) u2 t2) & - (pr2 c u1 u2) & (pr2 c t1 t2) - ) \/ - (pr2 c t1 x). - Intros; Inversion H; Pr0GenBase; - Try Rewrite H1 in H2; Try Subst0GenBase; XEAuto. - Qed. - - End pr2_gen_base. - - Tactic Definition Pr2GenBase := - Match Context With - | [ H: (pr2 ?1 (TSort ?2) ?3) |- ? ] -> - LApply (pr2_gen_sort ?1 ?3 ?2); [ Clear H; Intros | XAuto ] - | [ H: (pr2 ?1 (TLRef ?2) ?3) |- ? ] -> - LApply (pr2_gen_lref ?1 ?3 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr2 ?1 (TTail (Bind Abst) ?2 ?3) ?4) |- ? ] -> - LApply (pr2_gen_abst ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr2 ?1 (TTail (Flat Appl) ?2 ?3) ?4) |- ? ] -> - LApply (pr2_gen_appl ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr2 ?1 (TTail (Flat Cast) ?2 ?3) ?4) |- ? ] -> - LApply (pr2_gen_cast ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H. - - Section pr2_props. (******************************************************) - - Theorem pr2_thin_dx: (c:?; t1,t2:?) (pr2 c t1 t2) -> - (u:?; f:?) (pr2 c (TTail (Flat f) u t1) - (TTail (Flat f) u t2)). - Intros; XElim H; XEAuto. - Qed. - - Theorem pr2_tail_1: (c:?; u1,u2:?) (pr2 c u1 u2) -> - (k:?; t:?) (pr2 c (TTail k u1 t) (TTail k u2 t)). - Intros; XElim H; XEAuto. - Qed. - - Theorem pr2_tail_2: (c:?; u,t1,t2:?; k:?) (pr2 (CTail c k u) t1 t2) -> - (pr2 c (TTail k u t1) (TTail k u t2)). - XElim k; Intros; ( - XElim H; [ XAuto | XElim i; Intros; DropGenBase; CGenBase; XEAuto ]). - Qed. - - Hints Resolve pr2_tail_2 : ltlc. - - Theorem pr2_shift: (i:?; c,e:?) (drop i (0) c e) -> - (t1,t2:?) (pr2 c t1 t2) -> - (pr2 e (app c i t1) (app c i t2)). - XElim i. -(* case 1: i = 0 *) - Intros; DropGenBase; Rewrite H in H0. - Repeat Rewrite app_O; XAuto. -(* case 2: i > 0 *) - XElim c. -(* case 2.1: CSort *) - Intros; DropGenBase; Rewrite H0; XAuto. -(* case 2.2: CTail *) - XElim k; Intros; Simpl; DropGenBase; XAuto. - Qed. - - End pr2_props. - - Hints Resolve pr2_thin_dx pr2_tail_1 pr2_tail_2 pr2_shift : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr2_gen.v b/helm/coq-contribs/LAMBDA-TYPES/pr2_gen.v deleted file mode 100644 index 98d128233..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr2_gen.v +++ /dev/null @@ -1,78 +0,0 @@ -(*#* #stop file *) - -Require subst0_gen. -Require subst0_lift. -Require drop_props. -Require pr0_gen. -Require pr0_subst0. -Require pr2_defs. - - Section pr2_gen. (********************************************************) - - Theorem pr2_gen_abbr: (c:?; u1,t1,x:?) - (pr2 c (TTail (Bind Abbr) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Abbr) u2 t2) & - (pr2 c u1 u2) & (OR - (b:?; u:?) (pr2 (CTail c (Bind b) u) t1 t2) | - (EX u | (pr0 u1 u) & (pr2 (CTail c (Bind Abbr) u) t1 t2)) | - (EX y z | (pr2 (CTail c (Bind Abbr) u1) t1 y) & (pr0 y z) & (pr2 (CTail c (Bind Abbr) u1) z t2)) - )) \/ (b:?; u:?) - (pr2 (CTail c (Bind b) u) t1 (lift (1) (0) x)). - Intros; Inversion H; - Pr0Gen; Try Rewrite H1 in H2; Try Subst0Gen; Try Pr0Subst0; XDEAuto 10. - Qed. - - Theorem pr2_gen_void: (c:?; u1,t1,x:?) - (pr2 c (TTail (Bind Void) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Void) u2 t2) & - (pr2 c u1 u2) & (b:?; u:?) - (pr2 (CTail c (Bind b) u) t1 t2) - ) \/ (b:?; u:?) - (pr2 (CTail c (Bind b) u) t1 (lift (1) (0) x)). - Intros; Inversion H; - Try Pr0Gen; Try Rewrite H1 in H2; Try Subst0Gen; XDEAuto 7. - Qed. - -(*#* #caption "generation lemma for lift" *) -(*#* #cap #cap c #alpha e in D, t1 in U1, t2 in U2, x in T, d in i *) - - Theorem pr2_gen_lift: (c:?; t1,x:?; h,d:?) (pr2 c (lift h d t1) x) -> - (e:?) (drop h d c e) -> - (EX t2 | x = (lift h d t2) & (pr2 e t1 t2)). - Intros. - Inversion H; Clear H; Pr0Gen. -(* case 1 : pr2_free *) - XEAuto. -(* case 2 : pr2_delta *) - Rewrite H in H3; Clear H H4 t t2. - Apply (lt_le_e i d); Intros. -(* case 2.1 : i < d *) - Rewrite (lt_plus_minus i d) in H0; [ Idtac | XAuto ]. - Rewrite (lt_plus_minus i d) in H3; [ Idtac | XAuto ]. - DropDis; Rewrite H0 in H3; Clear H0 u. - Subst0Gen; Rewrite <- lt_plus_minus in H0; XEAuto. -(* case 2.2 : i >= d *) - Apply (lt_le_e i (plus d h)); Intros. -(* case 2.2.1 : i < d + h *) - EApply subst0_gen_lift_false; [ Apply H | Apply H4 | XEAuto ]. -(* case 2.2.2 : i >= d + h *) - DropDis; Subst0Gen; XEAuto. - Qed. - - End pr2_gen. - - Tactic Definition Pr2Gen := - Match Context With - | [ H: (pr2 ?1 (TTail (Bind Abbr) ?2 ?3) ?4) |- ? ] -> - LApply (pr2_gen_abbr ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr2 ?1 (TTail (Bind Void) ?2 ?3) ?4) |- ? ] -> - LApply (pr2_gen_void ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H0: (pr2 ?1 (lift ?2 ?3 ?4) ?5); - H1: (drop ?2 ?3 ?1 ?6) |- ? ] -> - LApply (pr2_gen_lift ?1 ?4 ?5 ?2 ?3); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?6); [ Clear H0; Intros H0 | XAuto ]; - XDecompose H0 - | _ -> Pr2GenBase. - diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr2_gen_context.v b/helm/coq-contribs/LAMBDA-TYPES/pr2_gen_context.v deleted file mode 100644 index 61d2ffef7..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr2_gen_context.v +++ /dev/null @@ -1,62 +0,0 @@ -(*#* #stop file *) - -Require drop_props. -Require subst1_gen. -Require subst1_subst1. -Require subst1_confluence. -Require csubst1_defs. -Require pr0_gen. -Require pr0_subst1. -Require pr2_defs. -Require pr2_gen. -Require pr2_subst1. - - Section pr2_gen_context. (************************************************) - - Theorem pr2_gen_cabbr: (c:?; t1,t2:?) (pr2 c t1 t2) -> (e:?; u:?; d:?) - (drop d (0) c (CTail e (Bind Abbr) u)) -> - (a0:?) (csubst1 d u c a0) -> - (a:?) (drop (1) d a0 a) -> - (x1:?) (subst1 d u t1 (lift (1) d x1)) -> - (EX x2 | (subst1 d u t2 (lift (1) d x2)) & - (pr2 a x1 x2) - ). - Intros until 1; XElim H; Intros; - Pr0Subst1; Pr0Gen. -(* case 1: pr2_free *) - Rewrite H in H3; Clear H x; XEAuto. -(* case 2: pr2_delta *) - Rewrite H0 in H5; Clear H0 x. - Apply (lt_eq_gt_e i d0); Intros. -(* case 2.1: i < d0 *) - Subst1Confluence; CSubst1Drop. - Rewrite minus_x_Sy in H; [ Idtac | XAuto ]. - CSubst1GenBase; Rewrite H in H7; Clear H x2. - Rewrite (lt_plus_minus i d0) in H4; [ Idtac | XAuto ]. - DropDis; Rewrite H in H8; Clear H x3. - Subst1Subst1; Pattern 2 d0 in H; Rewrite (lt_plus_minus i d0) in H; [ Idtac | XAuto ]. - Subst1Gen; Rewrite H in H10; Simpl in H10; Clear H x3. - Rewrite <- lt_plus_minus in H10; [ Idtac | XAuto ]. - Rewrite <- lt_plus_minus_r in H10; XEAuto. -(* case 2.2: i = d0 *) - Rewrite H0 in H; Rewrite H0 in H1; Clear H0 i. - DropDis; Inversion H; Rewrite <- H8 in H1; Rewrite <- H8 in H2; Rewrite <- H8; Clear H H7 H8 e u. - Subst1Confluence; Subst1Gen; Rewrite H0 in H; Clear H0 x; XEAuto. -(* case 2.3: i > d0 *) - Subst1Confluence; Subst1Gen; Rewrite H5 in H1; Clear H2 H5 x. - CSubst1Drop; DropDis; XEAuto. - Qed. - - End pr2_gen_context. - - Tactic Definition Pr2GenContext := - Match Context With - | [ H0: (pr2 ?1 ?2 ?3); H1: (drop ?4 (0) ?1 (CTail ?5 (Bind Abbr) ?6)); - H2: (csubst1 ?4 ?6 ?1 ?7); H3: (drop (1) ?4 ?7 ?8); - H4: (subst1 ?4 ?6 ?2 (lift (1) ?4 ?9)) |- ? ] -> - LApply (pr2_gen_cabbr ?1 ?2 ?3); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5 ?6 ?4); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?8); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?9); [ Clear H0 H4; Intros H0 | XAuto ]; - XElim H0; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr2_lift.v b/helm/coq-contribs/LAMBDA-TYPES/pr2_lift.v deleted file mode 100644 index 3546cb5f2..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr2_lift.v +++ /dev/null @@ -1,33 +0,0 @@ -(*#* #stop file *) - -Require subst0_lift. -Require drop_props. -Require pr0_lift. -Require pr2_defs. - -(*#* #caption "main properties of predicate \\texttt{pr2}" *) -(*#* #clauses pr2_props *) - - Section pr2_lift. (*******************************************************) - -(*#* #caption "conguence with lift" *) -(*#* #cap #cap c, t1, t2 #alpha e in D, d in i *) - - Theorem pr2_lift : (c,e:?; h,d:?) (drop h d c e) -> - (t1,t2:?) (pr2 e t1 t2) -> - (pr2 c (lift h d t1) (lift h d t2)). - Intros until 2; XElim H0; Intros. -(* case 1 : pr2_free *) - XAuto. -(* case 2 : pr2_delta *) - Apply (lt_le_e i d); Intros; DropDis. -(* case 2.1 : i < d *) - Rewrite minus_x_Sy in H0; [ Idtac | XAuto ]. - DropGenBase; Rewrite H0 in H; Simpl in H; XEAuto. -(* case 2.2 : i >= d *) - XEAuto. - Qed. - - End pr2_lift. - - Hints Resolve pr2_lift : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr2_subst1.v b/helm/coq-contribs/LAMBDA-TYPES/pr2_subst1.v deleted file mode 100644 index 5c7302875..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr2_subst1.v +++ /dev/null @@ -1,48 +0,0 @@ -(*#* #stop file *) - -Require subst1_defs. -Require subst1_confluence. -Require drop_props. -Require pr0_subst1. -Require pr2_defs. - - Section pr2_subst1_props. (***********************************************) - - Theorem pr2_delta1: (c,d:?; u:?; i:?) (drop i (0) c (CTail d (Bind Abbr) u)) -> - (t1,t2:?) (pr0 t1 t2) -> (t:?) (subst1 i u t2 t) -> - (pr2 c t1 t). - Intros; XElim H1; Clear t; XEAuto. - Qed. - - Hints Resolve pr2_delta1 : ltlc. - - Theorem pr2_subst1: (c,e:?; v:?; i:?) (drop i (0) c (CTail e (Bind Abbr) v)) -> - (t1,t2:?) (pr2 c t1 t2) -> - (w1:?) (subst1 i v t1 w1) -> - (EX w2 | (pr2 c w1 w2) & (subst1 i v t2 w2)). - Intros until 2; XElim H0; Intros; - Pr0Subst1. -(* case 1: pr2_free *) - XEAuto. -(* case 2: pr2_delta *) - Apply (neq_eq_e i i0); Intros. -(* case 2.1: i <> i0 *) - Subst1Confluence; XEAuto. -(* case 2.2: i = i0 *) - Rewrite <- H4 in H0; Rewrite <- H4 in H2; Clear H4 i0. - DropDis; Inversion H0; Rewrite H6 in H3; Clear H0 H5 H6 e v. - Subst1Confluence; XEAuto. - Qed. - - End pr2_subst1_props. - - Hints Resolve pr2_delta1 : ltlc. - - Tactic Definition Pr2Subst1 := - Match Context With - | [ H0: (drop ?1 (0) ?2 (CTail ?3 (Bind Abbr) ?4)); - H1: (pr2 ?2 ?5 ?6); H3: (subst1 ?1 ?4 ?5 ?7) |- ? ] -> - LApply (pr2_subst1 ?2 ?3 ?4 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?5 ?6); [ Clear H_x H1; Intros H1 | XAuto ]; - LApply (H1 ?7); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr3_confluence.v b/helm/coq-contribs/LAMBDA-TYPES/pr3_confluence.v deleted file mode 100644 index 6f5019bc9..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr3_confluence.v +++ /dev/null @@ -1,59 +0,0 @@ -Require pr2_confluence. -Require pr3_defs. - - Section pr3_confluence. (*************************************************) - -(*#* #stop theorem *) - -(*#* #caption "confluence with single step reduction: strip lemma" *) -(*#* #cap #cap c, t0, t1, t2, t *) - - Theorem pr3_strip : (c:?; t0,t1:?) (pr3 c t0 t1) -> (t2:?) (pr2 c t0 t2) -> - (EX t | (pr3 c t1 t) & (pr3 c t2 t)). - Intros until 1; XElim H; Intros. -(* case 1 : pr3_refl *) - XEAuto. -(* case 2 : pr3_sing *) - Pr2Confluence. - LApply (H1 x); [ Clear H1 H2; Intros H1 | XAuto ]. - XElim H1; Intros; XEAuto. - Qed. - -(*#* #start theorem *) - -(*#* #caption "confluence with itself: Church-Rosser property" *) -(*#* #cap #cap c, t0, t1, t2, t *) - - Theorem pr3_confluence : (c:?; t0,t1:?) (pr3 c t0 t1) -> (t2:?) (pr3 c t0 t2) -> - (EX t | (pr3 c t1 t) & (pr3 c t2 t)). - -(*#* #stop file *) - - Intros until 1; XElim H; Intros. -(* case 1 : pr3_refl *) - XEAuto. -(* case 2 : pr3_sing *) - LApply (pr3_strip c t3 t5); [ Clear H2; Intros H2 | XAuto ]. - LApply (H2 t2); [ Clear H H2; Intros H | XAuto ]. - XElim H; Intros. - LApply (H1 x); [ Clear H1 H2; Intros H1 | XAuto ]. - XElim H1; Intros; XEAuto. - Qed. - - End pr3_confluence. - - Tactic Definition Pr3Confluence := - Match Context With - | [ H1: (pr3 ?1 ?2 ?3); H2: (pr2 ?1 ?2 ?4) |-? ] -> - LApply (pr3_strip ?1 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (pr3 ?1 ?2 ?3); H2: (pr3 ?1 ?2 ?4) |-? ] -> - LApply (pr3_confluence ?1 ?2 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply (H1 ?4); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros - | _ -> Pr2Confluence. - -(*#* #start file *) - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr3_defs.v b/helm/coq-contribs/LAMBDA-TYPES/pr3_defs.v deleted file mode 100644 index df6764b3f..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr3_defs.v +++ /dev/null @@ -1,194 +0,0 @@ -Require Export pr1_defs. -Require Export pr2_defs. - -(*#* #caption "axioms for the relation $\\PrT{}{}{}$", - "reflexivity", "single step transitivity" -*) -(*#* #cap #cap c, t, t1, t2, t3 *) - - Inductive pr3 [c:C] : T -> T -> Prop := - | pr3_refl: (t:?) (pr3 c t t) - | pr3_sing: (t2,t1:?) (pr2 c t1 t2) -> - (t3:?) (pr3 c t2 t3) -> (pr3 c t1 t3). - -(*#* #stop file *) - - Hint pr3: ltlc := Constructors pr3. - - Section pr3_gen_base. (***************************************************) - - Theorem pr3_gen_sort: (c:?; x:?; n:?) (pr3 c (TSort n) x) -> - x = (TSort n). - Intros; InsertEq H '(TSort n); XElim H; Clear y x; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - Rewrite H2 in H; Clear H2 t1; Pr2GenBase; XAuto. - Qed. - - Tactic Definition IH := - Match Context With - | [ H: (u,t:T) (TTail (Bind Abst) ?1 ?2) = (TTail (Bind Abst) u t) -> ? |- ? ] -> - LApply (H ?1 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (u,t:T) (TTail (Flat Appl) ?1 ?2) = (TTail (Flat Appl) u t) -> ? |- ? ] -> - LApply (H ?1 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (u,t:T) (TTail (Flat Cast) ?1 ?2) = (TTail (Flat Cast) u t) -> ? |- ? ] -> - LApply (H ?1 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H. - - Theorem pr3_gen_abst: (c:?; u1,t1,x:?) - (pr3 c (TTail (Bind Abst) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Abst) u2 t2) & - (pr3 c u1 u2) & (b:?; u:?) - (pr3 (CTail c (Bind b) u) t1 t2) - ). - Intros until 1; InsertEq H '(TTail (Bind Abst) u1 t1); - UnIntro H t1; UnIntro H u1; XElim H; Clear y x; Intros; - Rename x into u0; Rename x0 into t0. -(* case 1 : pr3_refl *) - XEAuto. -(* case 2 : pr3_sing *) - Rewrite H2 in H; Clear H0 H2 t1; Pr2GenBase. - Rewrite H0 in H1; Clear H0 t2; IH; XEAuto. - Qed. - - Theorem pr3_gen_appl: (c:?; u1,t1,x:?) - (pr3 c (TTail (Flat Appl) u1 t1) x) -> (OR - (EX u2 t2 | x = (TTail (Flat Appl) u2 t2) & - (pr3 c u1 u2) & (pr3 c t1 t2) - ) | - (EX y1 z1 u2 t2 | (pr3 c (TTail (Bind Abbr) u2 t2) x) & - (pr3 c u1 u2) & - (pr3 c t1 (TTail (Bind Abst) y1 z1)) & - (b:?; u:?) (pr3 (CTail c (Bind b) u) z1 t2) - ) | - (EX b y1 z1 z2 u2 v2 t2 | - (pr3 c (TTail (Bind b) v2 z2) x) & ~b=Abst & - (pr3 c u1 u2) & - (pr3 c t1 (TTail (Bind b) y1 z1)) & - (pr3 c y1 v2) & (pr0 z1 t2)) - ). - Intros; InsertEq H '(TTail (Flat Appl) u1 t1). - UnIntro t1 H; UnIntro u1 H. - XElim H; Clear y x; Intros; - Rename x into u0; Rename x0 into t0. -(* case 1: pr3_refl *) - XEAuto. -(* case 2: pr3_sing *) - Rewrite H2 in H; Clear H2 t1; Pr2GenBase. -(* case 2.1: short step: compatibility *) - Rewrite H3 in H1; Clear H0 H3 t2. - IH; Try (Rewrite H0; Clear H0 t3); XDEAuto 6. -(* case 2.2: short step: beta *) - Rewrite H4 in H0; Rewrite H3; Clear H1 H3 H4 t0 t2; XEAuto. -(* case 2.3: short step: upsilon *) - Rewrite H5 in H0; Rewrite H4; Clear H1 H4 H5 t0 t2; XEAuto. - Qed. - - Theorem pr3_gen_cast: (c:?; u1,t1,x:?) - (pr3 c (TTail (Flat Cast) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Flat Cast) u2 t2) & - (pr3 c u1 u2) & (pr3 c t1 t2) - ) \/ - (pr3 c t1 x). - Intros; InsertEq H '(TTail (Flat Cast) u1 t1); - UnIntro H t1; UnIntro H u1; XElim H; Clear y x; Intros; - Rename x into u0; Rename x0 into t0. -(* case 1: pr3_refl *) - Rewrite H; Clear H t; XEAuto. -(* case 2: pr3_sing *) - Rewrite H2 in H; Clear H2 t1; Pr2GenBase. -(* case 2.1: short step: compatinility *) - Rewrite H3 in H1; Clear H0 H3 t2; - IH; Try Rewrite H0; XEAuto. -(* case 2.2: short step: epsilon *) - XEAuto. - Qed. - - End pr3_gen_base. - - Tactic Definition Pr3GenBase := - Match Context With - | [ H: (pr3 ?1 (TSort ?2) ?3) |- ? ] -> - LApply (pr3_gen_sort ?1 ?3 ?2); [ Clear H; Intros | XAuto ] - | [ H: (pr3 ?1 (TTail (Bind Abst) ?2 ?3) ?4) |- ? ] -> - LApply (pr3_gen_abst ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr3 ?1 (TTail (Flat Appl) ?2 ?3) ?4) |- ? ] -> - LApply (pr3_gen_appl ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr3 ?1 (TTail (Flat Cast) ?2 ?3) ?4) |- ? ] -> - LApply (pr3_gen_cast ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H. - - Section pr3_props. (******************************************************) - - Theorem pr3_pr2: (c,t1,t2:?) (pr2 c t1 t2) -> (pr3 c t1 t2). - XEAuto. - Qed. - - Theorem pr3_t: (t2,t1,c:?) (pr3 c t1 t2) -> - (t3:?) (pr3 c t2 t3) -> (pr3 c t1 t3). - Intros until 1; XElim H; XEAuto. - Qed. - - Theorem pr3_thin_dx: (c:?; t1,t2:?) (pr3 c t1 t2) -> - (u:?; f:?) (pr3 c (TTail (Flat f) u t1) - (TTail (Flat f) u t2)). - Intros; XElim H; XEAuto. - Qed. - - Theorem pr3_tail_1: (c:?; u1,u2:?) (pr3 c u1 u2) -> - (k:?; t:?) (pr3 c (TTail k u1 t) (TTail k u2 t)). - Intros until 1; XElim H; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - EApply pr3_sing; [ Apply pr2_tail_1; Apply H | XAuto ]. - Qed. - - Theorem pr3_tail_2: (c:?; u,t1,t2:?; k:?) (pr3 (CTail c k u) t1 t2) -> - (pr3 c (TTail k u t1) (TTail k u t2)). - Intros until 1; XElim H; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - EApply pr3_sing; [ Apply pr2_tail_2; Apply H | XAuto ]. - Qed. - - Hints Resolve pr3_tail_1 pr3_tail_2 : ltlc. - - Theorem pr3_tail_21: (c:?; u1,u2:?) (pr3 c u1 u2) -> - (k:?; t1,t2:?) (pr3 (CTail c k u1) t1 t2) -> - (pr3 c (TTail k u1 t1) (TTail k u2 t2)). - Intros. - EApply pr3_t; [ Apply pr3_tail_2 | Apply pr3_tail_1 ]; XAuto. - Qed. - - Theorem pr3_tail_12: (c:?; u1,u2:?) (pr3 c u1 u2) -> - (k:?; t1,t2:?) (pr3 (CTail c k u2) t1 t2) -> - (pr3 c (TTail k u1 t1) (TTail k u2 t2)). - Intros. - EApply pr3_t; [ Apply pr3_tail_1 | Apply pr3_tail_2 ]; XAuto. - Qed. - - Theorem pr3_shift: (h:?; c,e:?) (drop h (0) c e) -> - (t1,t2:?) (pr3 c t1 t2) -> - (pr3 e (app c h t1) (app c h t2)). - Intros until 2; XElim H0; Clear t1 t2; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - XEAuto. - Qed. - - Theorem pr3_pr1: (t1,t2:?) (pr1 t1 t2) -> (c:?) (pr3 c t1 t2). - Intros until 1; XElim H; XEAuto. - Qed. - - End pr3_props. - - Hints Resolve pr3_pr2 pr3_t pr3_pr1 - pr3_thin_dx pr3_tail_12 pr3_tail_21 pr3_shift : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr3_gen.v b/helm/coq-contribs/LAMBDA-TYPES/pr3_gen.v deleted file mode 100644 index e96f49fc3..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr3_gen.v +++ /dev/null @@ -1,132 +0,0 @@ -(*#* #stop file *) - -Require pr2_gen. -Require pr3_defs. -Require pr3_props. - - Section pr3_gen_lift. (***************************************************) - -(*#* #caption "generation lemma for lift" *) -(*#* #cap #cap c #alpha e in D, t1 in U1, t2 in U2, x in T, d in i *) - - Theorem pr3_gen_lift: (c:?; t1,x:?; h,d:?) (pr3 c (lift h d t1) x) -> - (e:?) (drop h d c e) -> - (EX t2 | x = (lift h d t2) & (pr3 e t1 t2)). - Intros until 1; InsertEq H '(lift h d t1); - UnIntro H t1; XElim H; Clear y x; Intros; Rename x into t4. -(* case 1 : pr3_refl *) - XEAuto. -(* case 2 : pr3_sing *) - Rewrite H2 in H; Pr2Gen. - LApply (H1 x); [ Clear H1; Intros H1 | XAuto ]. - LApply (H1 e); [ Clear H1; Intros H1 | XAuto ]. - XElim H1; XEAuto. - Qed. - - End pr3_gen_lift. - - Section pr3_gen_lref. (***************************************************) - - Theorem pr3_gen_lref: (c:?; x:?; n:?) (pr3 c (TLRef n) x) -> - x = (TLRef n) \/ - (EX d u v | (drop n (0) c (CTail d (Bind Abbr) u)) & - (pr3 d u v) & - x = (lift (S n) (0) v) - ). - Intros; InsertEq H '(TLRef n); XElim H; Clear y x; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - Rewrite H2 in H; Clear H2 t1; Pr2GenBase. -(* case 2.1: pr2_free *) - XAuto. -(* case 2.2: pr2_delta *) - Rewrite H4 in H0; Clear H1 H4 t2. - LApply (pr3_gen_lift c x1 t3 (S n) (0)); [ Clear H0; Intros | XAuto ]. - LApply (H x0); [ Clear H; Intros | XEAuto ]. - XElim H; XEAuto. - Qed. - - End pr3_gen_lref. - - Section pr3_gen_bind. (***************************************************) - - Tactic Definition IH := - Match Context With - | [ H: (u,t:T) (TTail (Bind Void) ?1 ?2) = (TTail (Bind Void) u t) -> ? |- ? ] -> - LApply (H ?1 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (u,t:T) (TTail (Bind Abbr) ?1 ?2) = (TTail (Bind Abbr) u t) -> ? |- ? ] -> - LApply (H ?1 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H. - - Theorem pr3_gen_void: (c:?; u1,t1,x:?) (pr3 c (TTail (Bind Void) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Void) u2 t2) & - (pr3 c u1 u2) & (b:?; u:?) - (pr3 (CTail c (Bind b) u) t1 t2) - ) \/ - (pr3 (CTail c (Bind Void) u1) t1 (lift (1) (0) x)). - Intros until 1; InsertEq H '(TTail (Bind Void) u1 t1); - UnIntro t1 H; UnIntro u1 H; XElim H; Intros. -(* case 1 : pr3_refl *) - Rewrite H; XEAuto. -(* case 2 : pr3_sing *) - Rewrite H2 in H; Clear H2 t0; Pr2Gen. -(* case 2.1 : short step: compatibility *) - Rewrite H3 in H1; Clear H0 H3 t2. - IH; Try Pr3Context; Try Rewrite H2; XEAuto. -(* case 2.2 : short step: zeta *) - XEAuto. - Qed. - - Theorem pr3_gen_abbr: (c:?; u1,t1,x:?) (pr3 c (TTail (Bind Abbr) u1 t1) x) -> - (EX u2 t2 | x = (TTail (Bind Abbr) u2 t2) & - (pr3 c u1 u2) & - (pr3 (CTail c (Bind Abbr) u1) t1 t2) - ) \/ - (pr3 (CTail c (Bind Abbr) u1) t1 (lift (1) (0) x)). - Intros until 1; InsertEq H '(TTail (Bind Abbr) u1 t1); - UnIntro H t1; UnIntro H u1; XElim H; Clear y x; Intros; - Rename x into u1; Rename x0 into t4. -(* case 1: pr3_refl *) - Rewrite H; XEAuto. -(* case 2: pr3_sing *) - Rewrite H2 in H; Clear H2 t1; Pr2Gen. -(* case 2.1: short step: compatibility *) - Rewrite H3 in H1; Clear H0 H3 t2. - IH; Repeat Pr3Context; - Try (Rewrite H0; Clear H0 t3; Left; EApply ex3_2_intro); - XEAuto. -(* case 2.2: short step: beta *) - Rewrite H3 in H1; Clear H0 H3 t1. - IH; Repeat Pr3Context; - Try (Rewrite H0; Clear H0 t3; Left; EApply ex3_2_intro); - XEAuto. -(* case 2.3: short step: delta *) - Rewrite H3 in H1; Clear H0 H3 t2. - IH; Repeat Pr3Context; - Try (Rewrite H0; Clear H0 t3; Left; EApply ex3_2_intro); - XDEAuto 7. -(* case 2.4: short step: zeta *) - XEAuto. - Qed. - - End pr3_gen_bind. - - Tactic Definition Pr3Gen := - Match Context With - | [ H: (pr3 ?1 (TLRef ?2) ?3) |- ? ] -> - LApply (pr3_gen_lref ?1 ?3 ?2); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr3 ?1 (TTail (Bind Void) ?2 ?3) ?4) |- ? ] -> - LApply (pr3_gen_void ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H: (pr3 ?1 (TTail (Bind Abbr) ?2 ?3) ?4) |- ? ] -> - LApply (pr3_gen_abbr ?1 ?2 ?3 ?4); [ Clear H; Intros H | XAuto ]; - XDecompose H - | [ H0: (pr3 ?1 (lift ?2 ?3 ?4) ?5); - H1: (drop ?2 ?3 ?1 ?6) |- ? ] -> - LApply (pr3_gen_lift ?1 ?4 ?5 ?2 ?3); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?6); [ Clear H0; Intros H0 | XAuto ]; - XDecompose H0 - | _ -> Pr3GenBase. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr3_gen_context.v b/helm/coq-contribs/LAMBDA-TYPES/pr3_gen_context.v deleted file mode 100644 index a7f3e92be..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr3_gen_context.v +++ /dev/null @@ -1,42 +0,0 @@ -(*#* #stop file *) - -Require csubst1_defs. -Require pr2_gen_context. -Require pr3_defs. - - Section pr3_gen_context. (************************************************) - - Theorem pr3_gen_cabbr: (c:?; t1,t2:?) (pr3 c t1 t2) -> (e:?; u:?; d:?) - (drop d (0) c (CTail e (Bind Abbr) u)) -> - (a0:?) (csubst1 d u c a0) -> - (a:?) (drop (1) d a0 a) -> - (x1:?) (subst1 d u t1 (lift (1) d x1)) -> - (EX x2 | (subst1 d u t2 (lift (1) d x2)) & - (pr3 a x1 x2) - ). - Intros until 1; XElim H; Intros. -(* case 1: pr3_refl *) - XEAuto. -(* case 1: pr3_refl *) - Pr2GenContext. - LApply (H1 e u d); [ Clear H1; Intros H1 | XAuto ]. - LApply (H1 a0); [ Clear H1; Intros H1 | XAuto ]. - LApply (H1 a); [ Clear H1; Intros H1 | XAuto ]. - LApply (H1 x); [ Clear H1; Intros H1 | XAuto ]. - XElim H1; XEAuto. - Qed. - - End pr3_gen_context. - - Tactic Definition Pr3GenContext := - Match Context With - | [ H0: (pr3 ?1 ?2 ?3); H1: (drop ?4 (0) ?1 (CTail ?5 (Bind Abbr) ?6)); - H2: (csubst1 ?4 ?6 ?1 ?7); H3: (drop (1) ?4 ?7 ?8); - H4: (subst1 ?4 ?6 ?2 (lift (1) ?4 ?9)) |- ? ] -> - LApply (pr3_gen_cabbr ?1 ?2 ?3); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5 ?6 ?4); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?8); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?9); [ Clear H0 H4; Intros H0 | XAuto ]; - XElim H0; Intros - | _ -> Pr2GenContext. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr3_props.v b/helm/coq-contribs/LAMBDA-TYPES/pr3_props.v deleted file mode 100644 index b5c7df937..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr3_props.v +++ /dev/null @@ -1,127 +0,0 @@ -Require subst0_subst0. -Require pr0_subst0. -Require cpr0_defs. -Require pr2_lift. -Require pr2_gen. -Require pr3_defs. - -(*#* #caption "main properties of the relation $\\PrT{}{}{}$" *) -(*#* #clauses *) - -(*#* #stop file *) - - Section pr3_context. (****************************************************) - - Theorem pr3_pr0_pr2_t: (u1,u2:?) (pr0 u1 u2) -> - (c:?; t1,t2:?; k:?) (pr2 (CTail c k u2) t1 t2) -> - (pr3 (CTail c k u1) t1 t2). - Intros; Inversion H0; Clear H0; XAuto. - NewInduction i. -(* case 1 : pr2_delta i = 0 *) - DropGenBase; Inversion H0; Clear H0 H4 H5 H6 c k t. - Rewrite H7 in H; Clear H7 u2. - Pr0Subst0; XEAuto. -(* case 2 : pr2_delta i > 0 *) - NewInduction k; DropGenBase; XEAuto. - Qed. - - Theorem pr3_pr2_pr2_t: (c:?; u1,u2:?) (pr2 c u1 u2) -> - (t1,t2:?; k:?) (pr2 (CTail c k u2) t1 t2) -> - (pr3 (CTail c k u1) t1 t2). - Intros until 1; Inversion H; Clear H; Intros. -(* case 1 : pr2_free *) - EApply pr3_pr0_pr2_t; [ Apply H0 | XAuto ]. -(* case 2 : pr2_delta *) - Inversion H; [ XAuto | NewInduction i0 ]. -(* case 2.1 : i0 = 0 *) - DropGenBase; Inversion H4; Clear H3 H4 H7 t t4. - Rewrite <- H9; Rewrite H10 in H; Rewrite <- H11 in H6; Clear H9 H10 H11 d0 k u0. - Subst0Subst0; Arith9'In H4 i; Clear H2 H H6 u2. - Pr0Subst0; Apply pr3_sing with t2:=x0; XEAuto. -(* case 2.2 : i0 > 0 *) - Clear IHi0; NewInduction k; DropGenBase; XEAuto. - Qed. - - Theorem pr3_pr2_pr3_t: (c:?; u2,t1,t2:?; k:?) - (pr3 (CTail c k u2) t1 t2) -> - (u1:?) (pr2 c u1 u2) -> - (pr3 (CTail c k u1) t1 t2). - Intros until 1; XElim H; Intros. -(* case 1 : pr3_refl *) - XAuto. -(* case 2 : pr3_sing *) - EApply pr3_t. - EApply pr3_pr2_pr2_t; [ Apply H2 | Apply H ]. - XAuto. - Qed. - -(*#* #caption "reduction inside context items" *) -(*#* #cap #cap t1, t2 #alpha c in E, u1 in V1, u2 in V2, k in z *) - - Theorem pr3_pr3_pr3_t: (c:?; u1,u2:?) (pr3 c u1 u2) -> - (t1,t2:?; k:?) (pr3 (CTail c k u2) t1 t2) -> - (pr3 (CTail c k u1) t1 t2). - Intros until 1; XElim H; Intros. -(* case 1 : pr3_refl *) - XAuto. -(* case 2 : pr3_sing *) - EApply pr3_pr2_pr3_t; [ Apply H1; XAuto | XAuto ]. - Qed. - - End pr3_context. - - Tactic Definition Pr3Context := - Match Context With - | [ H1: (pr0 ?2 ?3); H2: (pr2 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pr3_pr0_pr2_t ?2 ?3); [ Intros H_x | XAuto ]; - LApply (H_x ?1 ?5 ?6 ?4); [ Clear H_x H2; Intros | XAuto ] - | [ H1: (pr0 ?2 ?3); H2: (pr3 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pr3_pr2_pr3_t ?1 ?3 ?5 ?6 ?4); [ Clear H2; Intros H2 | XAuto ]; - LApply (H2 ?2); [ Clear H2; Intros | XAuto ] - | [ H1: (pr2 ?1 ?2 ?3); H2: (pr2 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pr3_pr2_pr2_t ?1 ?2 ?3); [ Intros H_x | XAuto ]; - LApply (H_x ?5 ?6 ?4); [ Clear H_x H2; Intros | XAuto ] - | [ H1: (pr2 ?1 ?2 ?3); H2: (pr3 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pr3_pr2_pr3_t ?1 ?3 ?5 ?6 ?4); [ Clear H2; Intros H2 | XAuto ]; - LApply (H2 ?2); [ Clear H2; Intros | XAuto ] - | [ H1: (pr3 ?1 ?2 ?3); H2: (pr3 (CTail ?1 ?4 ?3) ?5 ?6) |- ? ] -> - LApply (pr3_pr3_pr3_t ?1 ?2 ?3); [ Intros H_x | XAuto ]; - LApply (H_x ?5 ?6 ?4); [ Clear H_x H2; Intros | XAuto ]. - - Section pr3_lift. (*******************************************************) - -(*#* #caption "conguence with lift" *) -(*#* #cap #cap c, t1, t2 #alpha e in D, d in i *) - - Theorem pr3_lift: (c,e:?; h,d:?) (drop h d c e) -> - (t1,t2:?) (pr3 e t1 t2) -> - (pr3 c (lift h d t1) (lift h d t2)). - Intros until 2; XElim H0; Intros; XEAuto. - Qed. - - End pr3_lift. - - Hints Resolve pr3_lift : ltlc. - - Section pr3_cpr0. (*******************************************************) - - Theorem pr3_cpr0_t: (c1,c2:?) (cpr0 c2 c1) -> (t1,t2:?) (pr3 c1 t1 t2) -> - (pr3 c2 t1 t2). - Intros until 1; XElim H; Intros. -(* case 1 : cpr0_refl *) - XAuto. -(* case 2 : cpr0_comp *) - Pr3Context; Clear H1. - XElim H2; Intros. -(* case 2.1 : pr3_refl *) - XAuto. -(* case 2.2 : pr3_sing *) - EApply pr3_t; [ Idtac | XEAuto ]. Clear H2 H3 c1 c2 t1 t2 t4 u2. - Inversion_clear H1. -(* case 2.2.1 : pr2_free *) - XAuto. -(* case 2.2.1 : pr2_delta *) - Cpr0Drop; Pr0Subst0; Apply pr3_sing with t2:=x; XEAuto. - Qed. - - End pr3_cpr0. diff --git a/helm/coq-contribs/LAMBDA-TYPES/pr3_subst1.v b/helm/coq-contribs/LAMBDA-TYPES/pr3_subst1.v deleted file mode 100644 index 3db6ce000..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/pr3_subst1.v +++ /dev/null @@ -1,32 +0,0 @@ -(*#* #stop file *) - -Require subst1_defs. -Require pr2_subst1. -Require pr3_defs. - - Section pr3_subst1_props. (***********************************************) - - Theorem pr3_subst1: (c,e:?; v:?; i:?) (drop i (0) c (CTail e (Bind Abbr) v)) -> - (t1,t2:?) (pr3 c t1 t2) -> - (w1:?) (subst1 i v t1 w1) -> - (EX w2 | (pr3 c w1 w2) & (subst1 i v t2 w2)). - Intros until 2; XElim H0; Clear t1 t2; Intros. -(* case 1: pr3_refl *) - XEAuto. -(* case 2: pr3_single *) - Pr2Subst1. - LApply (H2 x); [ Clear H2; Intros H2 | XAuto ]. - XElim H2; XEAuto. - Qed. - - End pr3_subst1_props. - - Tactic Definition Pr3Subst1 := - Match Context With - | [ H0: (drop ?1 (0) ?2 (CTail ?3 (Bind Abbr) ?4)); - H1: (pr3 ?2 ?5 ?6); H3: (subst1 ?1 ?4 ?5 ?7) |- ? ] -> - LApply (pr3_subst1 ?2 ?3 ?4 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?5 ?6); [ Clear H_x H1; Intros H1 | XAuto ]; - LApply (H1 ?7); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | _ -> Pr2Subst1. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst0_confluence.v b/helm/coq-contribs/LAMBDA-TYPES/subst0_confluence.v deleted file mode 100644 index bbbfdc469..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst0_confluence.v +++ /dev/null @@ -1,80 +0,0 @@ -(*#* #stop file *) - -Require lift_gen. -Require subst0_gen. -Require subst0_defs. - - Section subst0_confluence. (**********************************************) - - Tactic Definition IH := - Match Context With - | [ H1: (t2,u2:?; i2:?) (subst0 i2 u2 ?1 t2) -> ~?2=i2 -> ?; - H2: (subst0 ?3 ?4 ?1 ?5); H3: ~?2=?3 |- ? ] -> - LApply (H1 ?5 ?4 ?3); [ Clear H1; Intros H1 | XAuto ]; - LApply H1; [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (t2,u2:?; i2:?) (subst0 i2 u2 ?1 t2) -> ~(s k ?2)=i2 -> ?; - H2: (subst0 (s k ?3) ?4 ?1 ?5); H3: ~?2=?3 |- ? ] -> - LApply (H1 ?5 ?4 (s k ?3)); [ Clear H1; Intros H1 | XAuto ]; - LApply H1; [ Clear H1; Intros H1 | Unfold not in H3; Unfold not; XEAuto ]; - XElim H1; Intros - | [ H1: (t2:T) (subst0 ?1 ?2 ?3 t2) -> ?; H2: (subst0 ?1 ?2 ?3 ?4) |- ? ] -> - LApply (H1 ?4); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros H1; [ Try Rewrite H1 | XElim H1; Intros | Idtac | Idtac ]. - - Theorem subst0_confluence_neq : (t0,t1,u1:?; i1:?) (subst0 i1 u1 t0 t1) -> - (t2,u2:?; i2:?) (subst0 i2 u2 t0 t2) -> - ~i1=i2 -> - (EX t | (subst0 i2 u2 t1 t) & - (subst0 i1 u1 t2 t)). - - Intros until 1; XElim H; Intros; - Subst0GenBase; Try Rewrite H in H0; Try Rewrite H1; Try Rewrite H3; - Try EqFalse; Repeat IH; XEAuto. - Qed. - - Theorem subst0_confluence_eq : (t0,t1,u:?; i:?) (subst0 i u t0 t1) -> - (t2:?) (subst0 i u t0 t2) -> (OR - t1 = t2 | - (EX t | (subst0 i u t1 t) & (subst0 i u t2 t)) | - (subst0 i u t1 t2) | - (subst0 i u t2 t1)). - Intros until 1; XElim H; Intros; - Subst0GenBase; Try Rewrite H1; Try Rewrite H3; - Repeat IH; XEAuto. - Qed. - - End subst0_confluence. - - Tactic Definition Subst0Confluence := - Match Context With - | [ H0: (subst0 ?1 ?2 ?3 ?4); - H1: (subst0 ?1 ?2 ?3 ?5) |- ? ] -> - LApply (subst0_confluence_eq ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5); [ Clear H0; Intros H0 | XAuto ]; - XElim H0; [ Intros | Intros H0; XElim H0; Intros | Intros | Intros ] - | [ H0: (subst0 ?1 ?2 ?3 ?4); - H1: (subst0 ?5 ?6 ?3 ?7) |- ? ] -> - LApply (subst0_confluence_neq ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7 ?6 ?5); [ Clear H0 H1; Intros H0 | XAuto ]; - LApply H0; [ Clear H0; Intros H0 | Simpl; XAuto ]; - XElim H0; Intros. - - Section subst0_confluence_lift. (*****************************************) - - Theorem subst0_confluence_lift: (t0,t1,u:?; i:?) (subst0 i u t0 (lift (1) i t1)) -> - (t2:?) (subst0 i u t0 (lift (1) i t2)) -> - t1 = t2. - Intros; Subst0Confluence; - Try Subst0Gen; SymEqual; LiftGen; XEAuto. - Qed. - - End subst0_confluence_lift. - - Tactic Definition Subst0ConfluenceLift := - Match Context With - | [ H0: (subst0 ?1 ?2 ?3 (lift (1) ?1 ?4)); - H1: (subst0 ?1 ?2 ?3 (lift (1) ?1 ?5)) |- ? ] -> - LApply (subst0_confluence_lift ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5); [ Clear H0; Intros | XAuto ] - | _ -> Subst0Confluence. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/subst0_defs.v deleted file mode 100644 index d99a405db..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst0_defs.v +++ /dev/null @@ -1,62 +0,0 @@ -Require Export lift_defs. - -(*#* #caption "axioms for strict substitution in terms", - "substituted local reference", - "substituted tail item: first operand", - "substituted tail item: second operand", - "substituted tail item: both operands" -*) -(*#* #cap #cap t, t1, t2 #alpha v in W, u in V, u1 in V1, u2 in V2, k in z, s in p *) - - Inductive subst0 : nat -> T -> T -> T -> Prop := - | subst0_lref: (v:?; i:?) (subst0 i v (TLRef i) (lift (S i) (0) v)) - | subst0_fst : (v,u2,u1:?; i:?) (subst0 i v u1 u2) -> - (t:?; k:?) (subst0 i v (TTail k u1 t) (TTail k u2 t)) - | subst0_snd : (k:?; v,t2,t1:?; i:?) (subst0 (s k i) v t1 t2) -> (u:?) - (subst0 i v (TTail k u t1) (TTail k u t2)) - | subst0_both: (v,u1,u2:?; i:?) (subst0 i v u1 u2) -> - (k:?; t1,t2:?) (subst0 (s k i) v t1 t2) -> - (subst0 i v (TTail k u1 t1) (TTail k u2 t2)). - -(*#* #stop file *) - - Hint subst0 : ltlc := Constructors subst0. - - Section subst0_gen_base. (************************************************) - - Theorem subst0_gen_sort : (v,x:?; i,n:?) (subst0 i v (TSort n) x) -> - (P:Prop) P. - Intros; Inversion H. - Qed. - - Theorem subst0_gen_lref : (v,x:?; i,n:?) (subst0 i v (TLRef n) x) -> - n = i /\ x = (lift (S n) (0) v). - Intros; Inversion H; XAuto. - Qed. - - Theorem subst0_gen_tail : (k:?; v,u1,t1,x:?; i:?) - (subst0 i v (TTail k u1 t1) x) -> (OR - (EX u2 | x = (TTail k u2 t1) & - (subst0 i v u1 u2)) | - (EX t2 | x = (TTail k u1 t2) & - (subst0 (s k i) v t1 t2)) | - (EX u2 t2 | x = (TTail k u2 t2) & - (subst0 i v u1 u2) & - (subst0 (s k i) v t1 t2)) - ). - - Intros; Inversion H; XEAuto. - Qed. - - End subst0_gen_base. - - Tactic Definition Subst0GenBase := - Match Context With - | [ H: (subst0 ?1 ?2 (TSort ?3) ?4) |- ? ] -> - Apply (subst0_gen_sort ?2 ?4 ?1 ?3); Apply H - | [ H: (subst0 ?1 ?2 (TLRef ?3) ?4) |- ? ] -> - LApply (subst0_gen_lref ?2 ?4 ?1 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (subst0 ?1 ?2 (TTail ?3 ?4 ?5) ?6) |- ? ] -> - LApply (subst0_gen_tail ?3 ?2 ?4 ?5 ?6 ?1); [ Clear H; Intros H | XAuto ]; - XElim H; Intros H; XElim H; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst0_gen.v b/helm/coq-contribs/LAMBDA-TYPES/subst0_gen.v deleted file mode 100644 index d46ca3555..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst0_gen.v +++ /dev/null @@ -1,130 +0,0 @@ -(*#* #stop file *) - -Require lift_props. -Require subst0_defs. - - Section subst0_gen_lift_lt. (*********************************************) - - Tactic Definition IH := - Match Context With - [ H1: (x:T; i,h,d:nat) (subst0 i (lift h d ?1) (lift h (S (plus i d)) ?2) x) -> ?; - H2: (subst0 ?3 (lift ?4 ?5 ?1) (lift ?4 (S (plus ?3 ?5)) ?2) ?6) |- ? ] -> - LApply (H1 ?6 ?3 ?4 ?5); [ Clear H1 H2; Intros H1 | XAuto ]; - XElim H1; Intros. - - Theorem subst0_gen_lift_lt : (u,t1,x:?; i,h,d:?) (subst0 i (lift h d u) (lift h (S (plus i d)) t1) x) -> - (EX t2 | x = (lift h (S (plus i d)) t2) & (subst0 i u t1 t2)). - XElim t1; Intros. -(* case 1: TSort *) - Rewrite lift_sort in H; Subst0GenBase. -(* case 2: TLRef n *) - Apply (lt_le_e n (S (plus i d))); Intros. -(* case 2.1: n < 1 + i + d *) - Rewrite lift_lref_lt in H; [ Idtac | XAuto ]. - Subst0GenBase; Rewrite H1; Rewrite H. - Rewrite <- lift_d; Simpl; XEAuto. -(* case 2.2: n >= 1 + i + d *) - Rewrite lift_lref_ge in H; [ Idtac | XAuto ]. - Subst0GenBase; Rewrite <- H in H0. - EApply le_false; [ Idtac | Apply H0 ]; XAuto. -(* case 3: TTail k *) - Rewrite lift_tail in H1; Subst0GenBase; Rewrite H1; Clear H1 x. -(* case 3.1: subst0_fst *) - IH; Rewrite H; Rewrite <- lift_tail; XEAuto. -(* case 3.2: subst0_snd *) - SRwIn H2; IH; Rewrite H0; SRwBack; Rewrite <- lift_tail; XEAuto. -(* case 3.2: subst0_snd *) - SRwIn H3; Repeat IH; Rewrite H; Rewrite H0; SRwBack; - Rewrite <- lift_tail; XEAuto. - Qed. - - End subst0_gen_lift_lt. - - Section subst0_gen_lift_false. (******************************************) - - Theorem subst0_gen_lift_false : (t,u,x:?; h,d,i:?) - (le d i) -> (lt i (plus d h)) -> - (subst0 i u (lift h d t) x) -> - (P:Prop) P. - XElim t; Intros. -(* case 1: TSort *) - Rewrite lift_sort in H1; Subst0GenBase. -(* case 2: TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1: n < d *) - Rewrite lift_lref_lt in H1; [ Idtac | XAuto ]. - Subst0GenBase; Rewrite H1 in H2. - EApply le_false; [ Apply H | XAuto ]. -(* case 2.2: n >= d *) - Rewrite lift_lref_ge in H1; [ Idtac | XAuto ]. - Subst0GenBase; Rewrite <- H1 in H0. - EApply le_false; [ Apply H2 | XEAuto ]. -(* case 3: TTail k *) - Rewrite lift_tail in H3; Subst0GenBase. -(* case 3.1: subst0_fst *) - EApply H; XEAuto. -(* case 3.2: subst0_snd *) - EApply H0; [ Idtac | Idtac | XEAuto ]; [ Idtac | SRwBack ]; XAuto. -(* case 3.3: subst0_both *) - EApply H; XEAuto. - Qed. - - End subst0_gen_lift_false. - - Section subst0_gen_lift_ge. (*********************************************) - - Tactic Definition IH := - Match Context With - [ H1: (x:?; i,h,d:?) (subst0 i ?1 (lift h d ?2) x) -> ?; - H2: (subst0 ?3 ?1 (lift ?4 ?5 ?2) ?6) |- ? ] -> - LApply (H1 ?6 ?3 ?4 ?5); [ Clear H1 H2; Intros H1 | XAuto ]; - LApply H1; [ Clear H1; Intros H1 | SRwBack; XAuto ]; - XElim H1; Intros. - - Theorem subst0_gen_lift_ge : (u,t1,x:?; i,h,d:?) (subst0 i u (lift h d t1) x) -> - (le (plus d h) i) -> - (EX t2 | x = (lift h d t2) & (subst0 (minus i h) u t1 t2)). - XElim t1; Intros. -(* case 1: TSort *) - Rewrite lift_sort in H; Subst0GenBase. -(* case 2: TLRef n *) - Apply (lt_le_e n d); Intros. -(* case 2.1: n < d *) - Rewrite lift_lref_lt in H; [ Idtac | XAuto ]. - Subst0GenBase; Rewrite H in H1. - EApply le_false; [ Apply H0 | XAuto ]. -(* case 2.2: n >= d *) - Rewrite lift_lref_ge in H; [ Idtac | XAuto ]. - Subst0GenBase; Rewrite <- H; Rewrite H2. - Rewrite minus_plus_r. - EApply ex2_intro; [ Idtac | XAuto ]. - Rewrite lift_free; [ Idtac | XEAuto (**) | XAuto ]. - Rewrite plus_sym; Rewrite plus_n_Sm; XAuto. -(* case 3: TTail k *) - Rewrite lift_tail in H1; Subst0GenBase; Rewrite H1; Clear H1 x; - Repeat IH; Try Rewrite H; Try Rewrite H0; - Rewrite <- lift_tail; Try Rewrite <- s_minus in H1; XEAuto. - Qed. - - End subst0_gen_lift_ge. - - Tactic Definition Subst0Gen := - Match Context With - | [ H: (subst0 ?0 (lift ?1 ?2 ?3) (lift ?1 (S (plus ?0 ?2)) ?4) ?5) |- ? ] -> - LApply (subst0_gen_lift_lt ?3 ?4 ?5 ?0 ?1 ?2); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (subst0 ?0 ?1 (lift (1) ?0 ?2) ?3) |- ? ] -> - LApply (subst0_gen_lift_false ?2 ?1 ?3 (1) ?0 ?0); [ Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x; Intros H_x | Rewrite plus_sym; XAuto ]; - LApply H_x; [ Clear H H_x; Intros H | XAuto ]; - Apply H - | [ _: (le ?1 ?2); _: (lt ?2 (plus ?1 ?3)); - _: (subst0 ?2 ?4 (lift ?3 ?1 ?5) ?6) |- ? ] -> - Apply (subst0_gen_lift_false ?5 ?4 ?6 ?3 ?1 ?2); XAuto - | [ _: (subst0 ?1 ?2 (lift (S ?1) (0) ?3) ?4) |- ? ] -> - Apply (subst0_gen_lift_false ?3 ?2 ?4 (S ?1) (0) ?1); XAuto - | [ H: (subst0 ?0 ?1 (lift ?2 ?3 ?4) ?5) |- ? ] -> - LApply (subst0_gen_lift_ge ?1 ?4 ?5 ?0 ?2 ?3); [ Clear H; Intros H | XAuto ]; - LApply H; [ Clear H; Intros H | Simpl; XAuto ]; - XElim H; Intros - | _ -> Subst0GenBase. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst0_lift.v b/helm/coq-contribs/LAMBDA-TYPES/subst0_lift.v deleted file mode 100644 index caabbe0b7..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst0_lift.v +++ /dev/null @@ -1,56 +0,0 @@ -(*#* #stop file *) - -Require lift_props. -Require subst0_defs. - - Section subst0_lift. (****************************************************) - - Theorem subst0_lift_lt: (t1,t2,u:?; i:?) (subst0 i u t1 t2) -> - (d:?) (lt i d) -> (h:?) - (subst0 i (lift h (minus d (S i)) u) (lift h d t1) (lift h d t2)). - Intros until 1; XElim H; Intros. -(* case 1: subst0_lref *) - Rewrite lift_lref_lt; [ Idtac | XAuto ]. - LetTac w := (minus d (S i0)). - Arith8 d '(S i0); Rewrite lift_d; XAuto. -(* case 2: subst0_fst *) - LiftTailRw; XAuto. -(* case 3: subst0_snd *) - SRwBackIn H0; LiftTailRw; Rewrite <- (minus_s_s k); XAuto. -(* case 4: subst0_both *) - SRwBackIn H2; LiftTailRw. - Apply subst0_both; [ Idtac | Rewrite <- (minus_s_s k) ]; XAuto. - Qed. - - Theorem subst0_lift_ge: (t1,t2,u:?; i,h:?) (subst0 i u t1 t2) -> - (d:?) (le d i) -> - (subst0 (plus i h) u (lift h d t1) (lift h d t2)). - Intros until 1; XElim H; Intros. -(* case 1: subst0_lref *) - Rewrite lift_lref_ge; [ Idtac | XAuto ]. - Rewrite lift_free; [ Idtac | Simpl; XAuto | XAuto ]. - Arith5'c h i0; XAuto. -(* case 2: subst0_fst *) - LiftTailRw; XAuto. -(* case 3: subst0_snd *) - SRwBackIn H0; LiftTailRw; XAuto. -(* case 4: subst0_snd *) - SRwBackIn H2; LiftTailRw; XAuto. - Qed. - - Theorem subst0_lift_ge_S: (t1,t2,u:?; i:?) (subst0 i u t1 t2) -> - (d:?) (le d i) -> - (subst0 (S i) u (lift (1) d t1) (lift (1) d t2)). - Intros; Arith7 i; Apply subst0_lift_ge; XAuto. - Qed. - - Theorem subst0_lift_ge_s: (t1,t2,u:?; i:?) (subst0 i u t1 t2) -> - (d:?) (le d i) -> (b:?) - (subst0 (s (Bind b) i) u (lift (1) d t1) (lift (1) d t2)). - Intros; Simpl; Apply subst0_lift_ge_S; XAuto. - Qed. - - End subst0_lift. - - Hints Resolve subst0_lift_lt subst0_lift_ge - subst0_lift_ge_S subst0_lift_ge_s : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst0_subst0.v b/helm/coq-contribs/LAMBDA-TYPES/subst0_subst0.v deleted file mode 100644 index 9f9b6da86..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst0_subst0.v +++ /dev/null @@ -1,68 +0,0 @@ -(*#* #stop file *) - -Require subst0_defs. -Require subst0_gen. -Require subst0_lift. - - Section subst0_subst0. (**************************************************) - - Tactic Definition IH := - Match Context With - | [ H1: (u1,u:?; i:?) (subst0 i u u1 ?1) -> ?; - H2: (subst0 ?2 ?3 ?4 ?1) |- ? ] -> - LApply (H1 ?4 ?3 ?2); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros - | [ H1: (u1,u:?; i:?) (subst0 i u ?1 u1) -> ?; - H2: (subst0 ?2 ?3 ?1 ?4) |- ? ] -> - LApply (H1 ?4 ?3 ?2); [ Clear H1; Intros H1 | XAuto ]; - XElim H1; Intros. - - Theorem subst0_subst0: (t1,t2,u2:?; j:?) (subst0 j u2 t1 t2) -> - (u1,u:?; i:?) (subst0 i u u1 u2) -> - (EX t | (subst0 j u1 t1 t) & (subst0 (S (plus i j)) u t t2)). - Intros until 1; XElim H; Intros. -(* case 1 : subst0_lref *) - Arith5 i0 i; XEAuto. -(* case 2 : subst0_fst *) - IH; XEAuto. -(* case 3 : subst0_snd *) - IH; SRwBackIn H2; XEAuto. -(* case 4 : subst0_both *) - Repeat IH; SRwBackIn H4; XEAuto. - Qed. - - Theorem subst0_subst0_back: (t1,t2,u2:?; j:?) (subst0 j u2 t1 t2) -> - (u1,u:?; i:?) (subst0 i u u2 u1) -> - (EX t | (subst0 j u1 t1 t) & (subst0 (S (plus i j)) u t2 t)). - Intros until 1; XElim H; Intros. -(* case 1 : subst0_lref *) - Arith5 i0 i; XEAuto. -(* case 2 : subst0_fst *) - IH; XEAuto. -(* case 3 : subst0_snd *) - IH; SRwBackIn H2; XEAuto. -(* case 4 : subst0_both *) - Repeat IH; SRwBackIn H4; XEAuto. - Qed. - - Theorem subst0_trans: (t2,t1,v:?; i:?) (subst0 i v t1 t2) -> - (t3:?) (subst0 i v t2 t3) -> - (subst0 i v t1 t3). - Intros until 1; XElim H; Intros; - Subst0Gen; Try Rewrite H1; Try Rewrite H3; XAuto. - Qed. - - End subst0_subst0. - - Hints Resolve subst0_trans : ltlc. - - Tactic Definition Subst0Subst0 := - Match Context With - | [ H1: (subst0 ?0 ?1 ?2 ?3); H2: (subst0 ?4 ?5 ?6 ?1) |- ? ] -> - LApply (subst0_subst0 ?2 ?3 ?1 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?6 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ H1: (subst0 ?0 ?1 ?2 ?3); H2: (subst0 ?4 ?5 ?1 ?6) |- ? ] -> - LApply (subst0_subst0_back ?2 ?3 ?1 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?6 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst0_tlt.v b/helm/coq-contribs/LAMBDA-TYPES/subst0_tlt.v deleted file mode 100644 index b5fef207b..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst0_tlt.v +++ /dev/null @@ -1,62 +0,0 @@ -(*#* #stop file *) - -Require tlt_defs. -Require lift_tlt. -Require subst0_defs. - - Section subst0_tlt_props. (***********************************************) - - Theorem subst0_weight_le : (u,t,z:?; d:?) (subst0 d u t z) -> - (f,g:?) ((m:?) (le (f m) (g m))) -> - (lt (weight_map f (lift (S d) (0) u)) (g d)) -> - (le (weight_map f z) (weight_map g t)). - Intros until 1; XElim H. -(* case 1: subst0_lref *) - Intros; XAuto. -(* case 2: subst0_fst *) - XElim k; [ XElim b | Idtac ]; Simpl; [ Auto 7 with ltlc (**) | XAuto | XAuto | XAuto ]. -(* case 3: subst0_snd *) - XElim k; [ XElim b | Idtac ]; Simpl; [ Auto 7 with ltlc (**) | XAuto | XAuto | XAuto ]. -(* case 4: subst0_both *) - XElim k; [ XElim b | Idtac ]; Simpl; [ Auto 7 with ltlc (**) | XAuto | XAuto | XAuto ]. - Qed. - - Theorem subst0_weight_lt : (u,t,z:?; d:?) (subst0 d u t z) -> (f,g:?) - ((m:?) (le (f m) (g m))) -> - (lt (weight_map f (lift (S d) (0) u)) (g d)) -> - (lt (weight_map f z) (weight_map g t)). - Intros until 1; XElim H. -(* case 1: subst0_lref *) - Intros; XAuto. -(* case 2: subst0_fst *) - XElim k; [ XElim b | Idtac ]; Simpl; Intros; - Apply lt_n_S; (Apply lt_le_plus_plus; [ XAuto | Idtac ]); (**) - [ Auto 6 with ltlc (**) | XAuto | XAuto | XAuto ]. -(* case 3: subst0_snd *) - XElim k; [ XElim b | Idtac ]; Simpl; - [ Auto 8 with ltlc | Auto 6 with ltlc | Auto 6 with ltlc | XAuto ]. (**) -(* case 3: subst0_both *) - XElim k; [ XElim b | Idtac ]; Simpl; - Intros; Apply lt_n_S; [ Apply lt_le_plus_plus | Apply lt_plus_plus | Apply lt_plus_plus | Apply lt_plus_plus ]; XAuto. - EApply subst0_weight_le; [ XEAuto | XAuto | XAuto ]. - Qed. - - Theorem subst0_tlt_tail: (u,t,z:?) (subst0 (0) u t z) -> - (tlt (TTail (Bind Abbr) u z) - (TTail (Bind Abbr) u t) - ). - Unfold tlt weight; Intros; Simpl. - Apply lt_n_S; Apply le_lt_plus_plus; [ XAuto | Idtac ]. - EApply subst0_weight_lt; [ XEAuto | XAuto | XAuto ]. - Qed. - - Theorem subst0_tlt: (u,t,z:?) (subst0 (0) u t z) -> - (tlt z (TTail (Bind Abbr) u t)). - Intros. - EApply tlt_trans; [ Idtac | Apply subst0_tlt_tail; XEAuto]. - XAuto. - Qed. - - End subst0_tlt_props. - - Hints Resolve subst0_tlt : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst1_confluence.v b/helm/coq-contribs/LAMBDA-TYPES/subst1_confluence.v deleted file mode 100644 index 0c473e9ef..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst1_confluence.v +++ /dev/null @@ -1,82 +0,0 @@ -(*#* #stop file *) - -Require lift_gen. -Require subst0_gen. -Require subst0_confluence. -Require subst1_defs. -Require subst1_gen. - - Section subst1_confluence. (**********************************************) - - Theorem subst1_confluence_neq: (t0,t1,u1:?; i1:?) (subst1 i1 u1 t0 t1) -> - (t2,u2:?; i2:?) (subst1 i2 u2 t0 t2) -> - ~i1=i2 -> - (EX t | (subst1 i2 u2 t1 t) & - (subst1 i1 u1 t2 t) - ). - Intros until 1; XElim H; Clear t1; Intros. -(* case 1; subst1_refl *) - XEAuto. -(* case 2; subst1_single *) - XElim H0; Intros; Try Subst0Confluence; XEAuto. - Qed. - - Theorem subst1_confluence_eq : (t0,t1,u:?; i:?) (subst1 i u t0 t1) -> - (t2:?) (subst1 i u t0 t2) -> - (EX t | (subst1 i u t1 t) & - (subst1 i u t2 t) - ). - Intros until 1; XElim H; Intros. -(* case 1; subst1_refl *) - XEAuto. -(* case 2; subst1_single *) - XElim H0; Intros; - Try Subst0Confluence; Try Rewrite H0; XEAuto. - Qed. - - Theorem subst1_confluence_lift: (t0,t1,u:?; i:?) (subst1 i u t0 (lift (1) i t1)) -> - (t2:?) (subst1 i u t0 (lift (1) i t2)) -> - t1 = t2. - Intros until 1; InsertEq H '(lift (1) i t1); XElim H; Clear y; Intros. -(* case 1: subst1_refl *) - Rewrite H in H0; Clear H t0. - Subst1Gen; SymEqual; LiftGen; XEAuto. -(* case 2: subst1_single *) - Rewrite H0 in H; Clear H0 t2. - InsertEq H1 '(lift (1) i t3); XElim H0; Clear y; Intros. -(* case 2.1: subst1_refl *) - Rewrite H0 in H; Clear H0 t0; Subst0Gen. -(* case 2.2: subst1_single *) - Rewrite H1 in H0; Clear H1 t2; Subst0ConfluenceLift; XAuto. - Qed. - - End subst1_confluence. - - Tactic Definition Subst1Confluence := - Match Context With - | [ H0: (subst1 ?1 ?2 ?3 (lift (1) ?1 ?4)); - H1: (subst1 ?1 ?2 ?3 (lift (1) ?1 ?5)) |- ? ] -> - LApply (subst1_confluence_lift ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5); [ Clear H0; Intros | XAuto ] - | [ H0: (subst1 ?1 ?2 ?3 ?4); - H1: (subst1 ?1 ?2 ?3 ?5) |- ? ] -> - LApply (subst1_confluence_eq ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5); [ Clear H0; Intros H0 | XAuto ]; - XElim H0; Intros - | [ H0: (subst0 ?1 ?2 ?3 ?4); - H1: (subst1 ?1 ?2 ?3 ?5) |- ? ] -> - LApply (subst1_confluence_eq ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?5); [ Clear H0; Intros H0 | XAuto ]; - XElim H0; Intros - | [ H0: (subst1 ?1 ?2 ?3 ?4); - H1: (subst1 ?5 ?6 ?3 ?7) |- ? ] -> - LApply (subst1_confluence_neq ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7 ?6 ?5); [ Clear H0 H1; Intros H0 | XAuto ]; - LApply H0; [ Clear H0; Intros H0 | XAuto ]; - XElim H0; Intros - | [ H0: (subst0 ?1 ?2 ?3 ?4); - H1: (subst1 ?5 ?6 ?3 ?7) |- ? ] -> - LApply (subst1_confluence_neq ?3 ?4 ?2 ?1); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7 ?6 ?5); [ Clear H0 H1; Intros H0 | XAuto ]; - LApply H0; [ Clear H0; Intros H0 | XAuto ]; - XElim H0; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst1_defs.v b/helm/coq-contribs/LAMBDA-TYPES/subst1_defs.v deleted file mode 100644 index 93e0d2ecf..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst1_defs.v +++ /dev/null @@ -1,58 +0,0 @@ -(*#* #stop file *) - -Require Export subst0_defs. - - Inductive subst1 [i:nat; v:T; t1:T] : T -> Prop := - | subst1_refl : (subst1 i v t1 t1) - | subst1_single : (t2:?) (subst0 i v t1 t2) -> (subst1 i v t1 t2). - - Hint subst1 : ltlc := Constructors subst1. - - Section subst1_props. (***************************************************) - - Theorem subst1_tail: (v,u1,u2:?; i:?) (subst1 i v u1 u2) -> - (k:?; t1,t2:?) (subst1 (s k i) v t1 t2) -> - (subst1 i v (TTail k u1 t1) (TTail k u2 t2)). - Intros until 1; XElim H; Clear u2. -(* case 1: csubst1_refl *) - Intros until 1; XElim H; Clear t2; XAuto. -(* case 2: csubst1_single *) - Intros until 2; XElim H0; Clear t3; XAuto. - Qed. - - End subst1_props. - - Hints Resolve subst1_tail : ltlc. - - Section subst1_gen_base. (************************************************) - - Theorem subst1_gen_sort : (v,x:?; i,n:?) (subst1 i v (TSort n) x) -> - x = (TSort n). - Intros; XElim H; Clear x; Intros; - Try Subst0GenBase; XAuto. - Qed. - - Theorem subst1_gen_lref : (v,x:?; i,n:?) (subst1 i v (TLRef n) x) -> - x = (TLRef n) \/ - n = i /\ x = (lift (S n) (0) v). - Intros; XElim H; Clear x; Intros; - Try Subst0GenBase; XAuto. - Qed. - - Theorem subst1_gen_tail : (k:?; v,u1,t1,x:?; i:?) - (subst1 i v (TTail k u1 t1) x) -> - (EX u2 t2 | x = (TTail k u2 t2) & - (subst1 i v u1 u2) & - (subst1 (s k i) v t1 t2) - ). - Intros; XElim H; Clear x; Intros; - Try Subst0GenBase; XEAuto. - Qed. - - End subst1_gen_base. - - Tactic Definition Subst1GenBase := - Match Context With - | [ H: (subst1 ?1 ?2 (TTail ?3 ?4 ?5) ?6) |- ? ] -> - LApply (subst1_gen_tail ?3 ?2 ?4 ?5 ?6 ?1); [ Clear H; Intros H | XAuto ]; - XElim H; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst1_gen.v b/helm/coq-contribs/LAMBDA-TYPES/subst1_gen.v deleted file mode 100644 index 0b2d4a170..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst1_gen.v +++ /dev/null @@ -1,44 +0,0 @@ -(*#* #stop file *) - -Require subst0_gen. -Require subst1_defs. - - Section subst1_gen_lift. (************************************************) - - Theorem subst1_gen_lift_lt : (u,t1,x:?; i,h,d:?) (subst1 i (lift h d u) (lift h (S (plus i d)) t1) x) -> - (EX t2 | x = (lift h (S (plus i d)) t2) & (subst1 i u t1 t2)). - Intros; XElim H; Clear x; Intros; - Try Subst0Gen; XEAuto. - Qed. - - Theorem subst1_gen_lift_eq : (t,u,x:?; h,d,i:?) - (le d i) -> (lt i (plus d h)) -> - (subst1 i u (lift h d t) x) -> - x = (lift h d t). - Intros; XElim H1; Clear x; Intros; - Try Subst0Gen; XAuto. - Qed. - - Theorem subst1_gen_lift_ge : (u,t1,x:?; i,h,d:?) (subst1 i u (lift h d t1) x) -> - (le (plus d h) i) -> - (EX t2 | x = (lift h d t2) & (subst1 (minus i h) u t1 t2)). - Intros; XElim H; Clear x; Intros; - Try Subst0Gen; XEAuto. - Qed. - - End subst1_gen_lift. - - Tactic Definition Subst1Gen := - Match Context With - | [ H: (subst1 ?0 (lift ?1 ?2 ?3) (lift ?1 (S (plus ?0 ?2)) ?4) ?5) |- ? ] -> - LApply (subst1_gen_lift_lt ?3 ?4 ?5 ?0 ?1 ?2); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (subst1 ?0 ?1 (lift (1) ?0 ?2) ?3) |- ? ] -> - LApply (subst1_gen_lift_eq ?2 ?1 ?3 (1) ?0 ?0); [ Intros H_x | XAuto ]; - LApply H_x; [ Clear H_x; Intros H_x | Rewrite plus_sym; XAuto ]; - LApply H_x; [ Clear H H_x; Intros | XAuto ] - | [ H0: (subst1 ?0 ?1 (lift (1) ?4 ?2) ?3); H1: (lt ?4 ?0) |- ? ] -> - LApply (subst1_gen_lift_ge ?1 ?2 ?3 ?0 (1) ?4); [ Clear H0; Intros H0 | XAuto ]; - LApply H0; [ Clear H0; Intros H0 | Rewrite plus_sym; XAuto ]; - XElim H0; Intros - | _ -> Subst1GenBase. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst1_lift.v b/helm/coq-contribs/LAMBDA-TYPES/subst1_lift.v deleted file mode 100644 index 396757179..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst1_lift.v +++ /dev/null @@ -1,23 +0,0 @@ -(*#* #stop file *) - -Require lift_props. -Require subst0_lift. -Require subst1_defs. - - Section subst1_lift. (****************************************************) - - Theorem subst1_lift_lt : (t1,t2,u:?; i:?) (subst1 i u t1 t2) -> - (d:?) (lt i d) -> (h:?) - (subst1 i (lift h (minus d (S i)) u) (lift h d t1) (lift h d t2)). - Intros until 1; XElim H; Clear t2; XAuto. - Qed. - - Theorem subst1_lift_ge : (t1,t2,u:?; i,h:?) (subst1 i u t1 t2) -> - (d:?) (le d i) -> - (subst1 (plus i h) u (lift h d t1) (lift h d t2)). - Intros until 1; XElim H; Clear t2; XAuto. - Qed. - - End subst1_lift. - - Hints Resolve subst1_lift_lt subst1_lift_ge : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/subst1_subst1.v b/helm/coq-contribs/LAMBDA-TYPES/subst1_subst1.v deleted file mode 100644 index 0f437ed9a..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/subst1_subst1.v +++ /dev/null @@ -1,60 +0,0 @@ -(*#* #stop file *) - -Require subst0_subst0. -Require subst1_defs. - - Section subst1_subst1. (**************************************************) - - Theorem subst1_subst1: (t1,t2,u2:?; j:?) (subst1 j u2 t1 t2) -> - (u1,u:?; i:?) (subst1 i u u1 u2) -> - (EX t | (subst1 j u1 t1 t) & (subst1 (S (plus i j)) u t t2)). - Intros until 1; XElim H; Clear t2. -(* case 1: subst1_refl on first premise *) - XEAuto. -(* case 2: subst1_single on first premise *) - Intros until 2; InsertEq H0 u2; XElim H0; Clear y; Intros. -(* case 2.1: subst1_refl on second premise *) - Rewrite H0; Clear H0 u1; XEAuto. -(* case 2.2: subst1_single on second premise *) - Rewrite H1 in H0; Clear H1 t0; Subst0Subst0; XEAuto. - Qed. - - Theorem subst1_subst1_back: (t1,t2,u2:?; j:?) (subst1 j u2 t1 t2) -> - (u1,u:?; i:?) (subst1 i u u2 u1) -> - (EX t | (subst1 j u1 t1 t) & (subst1 (S (plus i j)) u t2 t)). - Intros until 1; XElim H; Clear t2. -(* case 1: subst1_refl on first premise *) - XEAuto. -(* case 2: subst1_single on first premise *) - Intros until 2; XElim H0; Clear u1; Intros; - Try Subst0Subst0; XEAuto. - Qed. - - Theorem subst1_trans: (t2,t1,v:?; i:?) (subst1 i v t1 t2) -> - (t3:?) (subst1 i v t2 t3) -> - (subst1 i v t1 t3). - Intros until 1; XElim H; Clear t2. -(* case 1: subst1_refl on first premise *) - XEAuto. -(* case 2: subst1_single on first premise *) - Intros until 2; XElim H0; Clear t3; XEAuto. - Qed. - - End subst1_subst1. - - Hints Resolve subst1_trans : ltlc. - - Tactic Definition Subst1Subst1 := - Match Context With - | [ H1: (subst1 ?0 ?1 ?2 ?3); H2: (subst1 ?4 ?5 ?6 ?1) |- ? ] -> - LApply (subst1_subst1 ?2 ?3 ?1 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?6 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ H1: (subst1 ?0 ?1 ?2 ?3); H2: (subst0 ?4 ?5 ?6 ?1) |- ? ] -> - LApply (subst1_subst1 ?2 ?3 ?1 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?6 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros - | [ H1: (subst1 ?0 ?1 ?2 ?3); H2: (subst1 ?4 ?5 ?1 ?6) |- ? ] -> - LApply (subst1_subst1_back ?2 ?3 ?1 ?0); [ Intros H_x | XAuto ]; - LApply (H_x ?6 ?5 ?4); [ Clear H_x; Intros H_x | XAuto ]; - XElim H_x; Intros. diff --git a/helm/coq-contribs/LAMBDA-TYPES/terms_defs.v b/helm/coq-contribs/LAMBDA-TYPES/terms_defs.v deleted file mode 100644 index c84b1c2c7..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/terms_defs.v +++ /dev/null @@ -1,85 +0,0 @@ -(*#* #stop file *) - -Require Export Base. - - Inductive Set B := Abbr: B - | Abst: B - | Void: B. - - Inductive Set F := Appl: F - | Cast: F. - - Inductive Set K := Bind: B -> K - | Flat: F -> K. - - Inductive Set T := TSort: nat -> T - | TLRef: nat -> T - | TTail: K -> T -> T -> T. - - Hint f3KTT : ltlc := Resolve (f_equal3 K T T). - - Tactic Definition TGenBase := - Match Context With - | [ H: (TSort ?) = (TSort ?) |- ? ] -> Inversion H; Clear H - | [ H: (TLRef ?) = (TLRef ?) |- ? ] -> Inversion H; Clear H - | [ H: (TTail ? ? ?) = (TTail ? ? ?) |- ? ] -> Inversion H; Clear H - | _ -> Idtac. - - Definition s: K -> nat -> nat := [k;i] Cases k of - | (Bind _) => (S i) - | (Flat _) => i - end. - - Section s_props. (********************************************************) - - Theorem s_S: (k:?; i:?) (s k (S i)) = (S (s k i)). - XElim k; XAuto. - Qed. - - Theorem s_plus: (k:?; i,j:?) (s k (plus i j)) = (plus (s k i) j). - XElim k; XAuto. - Qed. - - Theorem s_plus_sym: (k:?; i,j:?) (s k (plus i j)) = (plus i (s k j)). - XElim k; [ Intros; Simpl; Rewrite plus_n_Sm | Idtac ]; XAuto. - Qed. - - Theorem s_minus: (k:?; i,j:?) (le j i) -> - (s k (minus i j)) = (minus (s k i) j). - XElim k; [ Intros; Unfold s; Cbv Iota | XAuto ]. - Rewrite minus_Sn_m; XAuto. - Qed. - - Theorem minus_s_s: (k:?; i,j:?) (minus (s k i) (s k j)) = (minus i j). - XElim k; XAuto. - Qed. - - Theorem s_le: (k:?; i,j:?) (le i j) -> (le (s k i) (s k j)). - XElim k; Simpl; XAuto. - Qed. - - Theorem s_lt: (k:?; i,j:?) (lt i j) -> (lt (s k i) (s k j)). - XElim k; Simpl; XAuto. - Qed. - - Theorem s_inj: (k:?; i,j:?) (s k i) = (s k j) -> i = j. - XElim k; XEAuto. - Qed. - - End s_props. - - Hints Resolve s_le s_lt s_inj : ltlc. - - Tactic Definition SRw := - Repeat (Rewrite s_S Orelse Rewrite s_plus_sym). - - Tactic Definition SRwIn H := - Repeat (Rewrite s_S in H Orelse Rewrite s_plus in H). - - Tactic Definition SRwBack := - Repeat (Rewrite <- s_S Orelse Rewrite <- s_plus Orelse Rewrite <- s_plus_sym). - - Tactic Definition SRwBackIn H := - Repeat (Rewrite <- s_S in H Orelse Rewrite <- s_plus in H Orelse Rewrite <- s_plus_sym in H). - - Hint discr : ltlc := Extern 4 (le ? (plus (s ? ?) ?)) SRwBack. diff --git a/helm/coq-contribs/LAMBDA-TYPES/tlt_defs.v b/helm/coq-contribs/LAMBDA-TYPES/tlt_defs.v deleted file mode 100644 index eb3f6fb27..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/tlt_defs.v +++ /dev/null @@ -1,115 +0,0 @@ -(*#* #stop file *) - -Require Export terms_defs. - - Definition wadd : (nat -> nat) -> nat -> (nat -> nat) := - [f;w;n] Cases n of (0) => w | (S m) => (f m) end. - - Fixpoint weight_map [f:nat->nat; t:T] : nat := Cases t of - | (TSort n) => (0) - | (TLRef n) => (f n) - | (TTail (Bind Abbr) u t) => - (S (plus (weight_map f u) (weight_map (wadd f (S (weight_map f u))) t))) - | (TTail (Bind _) u t) => - (S (plus (weight_map f u) (weight_map (wadd f (0)) t))) - | (TTail _ u t) => (S (plus (weight_map f u) (weight_map f t))) - end. - - Definition weight : T -> nat := (weight_map [_](0)). - - Definition tlt : T -> T -> Prop := [t1,t2](lt (weight t1) (weight t2)). - - Section wadd_props. (*****************************************************) - - Theorem wadd_le: (f,g:?) ((n:?) (le (f n) (g n))) -> (v,w:?) (le v w) -> - (n:?) (le (wadd f v n) (wadd g w n)). - XElim n; Simpl; XAuto. - Qed. - - Theorem wadd_lt: (f,g:?) ((n:?) (le (f n) (g n))) -> (v,w:?) (lt v w) -> - (n:?) (le (wadd f v n) (wadd g w n)). - XElim n; Simpl; XAuto. - Qed. - - Theorem wadd_O: (n:?) (wadd [_](0) (0) n) = (0). - XElim n; XAuto. - Qed. - - End wadd_props. - - Hints Resolve wadd_le wadd_lt wadd_O : ltlc. - - Section weight_props. (***************************************************) - - Theorem weight_le : (t:?; f,g:?) ((n:?) (le (f n) (g n))) -> - (le (weight_map f t) (weight_map g t)). - XElim t; [ XAuto | Simpl; XAuto | Idtac ]. - XElim k; Simpl; [ Idtac | XAuto ]. - XElim b; Auto 7 with ltlc. (**) - Qed. - - Theorem weight_eq : (t:?; f,g:?) ((n:?) (f n) = (g n)) -> - (weight_map f t) = (weight_map g t). - Intros; Apply le_antisym; Apply weight_le; - Intros; Rewrite (H n); XAuto. - Qed. - - Hints Resolve weight_le weight_eq : ltlc. - - Theorem weight_add_O : (t:?) (weight_map (wadd [_](0) (0)) t) = (weight_map [_](0) t). - XAuto. - Qed. - - Theorem weight_add_S : (t:?; m:?) (le (weight_map (wadd [_](0) (0)) t) (weight_map (wadd [_](0) (S m)) t)). - XAuto. - Qed. - - End weight_props. - - Hints Resolve weight_le weight_add_S : ltlc. - - Section tlt_props. (******************************************************) - - Theorem tlt_trans: (v,u,t:?) (tlt u v) -> (tlt v t) -> (tlt u t). - Unfold tlt; XEAuto. - Qed. - - Theorem tlt_tail_sx: (k:?; u,t:?) (tlt u (TTail k u t)). - Unfold tlt weight. - XElim k; Simpl; [ XElim b | Idtac ]; XAuto. - Qed. - - Theorem tlt_tail_dx: (k:?; u,t:?) (tlt t (TTail k u t)). - Unfold tlt weight. - XElim k; Simpl; [ Idtac | XAuto ]. - XElim b; Intros; Try Rewrite weight_add_O; [ Idtac | XAuto | XAuto ]. - EApply lt_le_trans; [ Apply lt_n_Sn | Apply le_n_S ]. - EApply le_trans; [ Rewrite <- (weight_add_O t); Apply weight_add_S | XAuto ]. - Qed. - - End tlt_props. - - Hints Resolve tlt_tail_sx tlt_tail_dx tlt_trans : ltlc. - - Section tlt_wf. (*********************************************************) - - Local Q: (T -> Prop) -> nat -> Prop := - [P;n] (t:?) (weight t) = n -> (P t). - - Remark q_ind: (P:T->Prop)((n:?) (Q P n)) -> (t:?) (P t). - Unfold Q; Intros. - Apply (H (weight t) t); XAuto. - Qed. - - Theorem tlt_wf_ind: (P:T->Prop) - ((t:?)((v:?)(tlt v t) -> (P v)) -> (P t)) -> - (t:?)(P t). - Unfold tlt; Intros. - XElimUsing q_ind t; Intros. - Apply lt_wf_ind; Clear n; Intros. - Unfold Q in H0; Unfold Q; Intros. - Rewrite <- H1 in H0; Clear H1. - Apply H; XEAuto. - Qed. - - End tlt_wf. diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_defs.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_defs.v deleted file mode 100644 index 073a3282a..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_defs.v +++ /dev/null @@ -1,125 +0,0 @@ -Require Export pc3_defs. - -(*#* #stop record *) - - Record G : Set := { - next : nat -> nat; - base : nat; - next_lt : (n:?) (lt n (next n)); - base_next: (n:?) (le base n) -> (next n) = (S n) - }. - -(*#* #start record *) - -(*#* #caption "current axioms for typing", - "well formed context sort", "well formed context binder", - "conversion rule", "typed sort", "typed reference to abbreviation", - "typed reference to abstraction", "typed binder", "typed application", - "typed cast" -*) -(*#* #cap #cap c, d, t, t0, t1, t2, w #alpha m in h, n in i, u in V, v in U *) - - Inductive wf0 [g:G] : C -> Prop := - | wf0_sort: (m:?) (wf0 g (CSort m)) - | wf0_bind: (c:?; u,t:?) (ty0 g c u t) -> - (b:?) (wf0 g (CTail c (Bind b) u)) - with ty0 [g:G] : C -> T -> T -> Prop := -(* structural rules *) - | ty0_conv: (c:?; t2,t:?) (ty0 g c t2 t) -> - (u,t1:?) (ty0 g c u t1) -> (pc3 c t1 t2) -> - (ty0 g c u t2) -(* axiom rules *) - | ty0_sort: (c:?) (wf0 g c) -> - (m:?) (ty0 g c (TSort m) (TSort (next g m))) - | ty0_abbr: (c:?) (wf0 g c) -> - (n:?; d:?; u:?) (drop n (0) c (CTail d (Bind Abbr) u)) -> - (t:?) (ty0 g d u t) -> - (ty0 g c (TLRef n) (lift (S n) (0) t)) - | ty0_abst: (c:?) (wf0 g c) -> - (n:?; d:?; u:?) (drop n (0) c (CTail d (Bind Abst) u)) -> - (t:?) (ty0 g d u t) -> - (ty0 g c (TLRef n) (lift (S n) (0) u)) - | ty0_bind: (c:?; u,t:?) (ty0 g c u t) -> - (b:?; t1,t2:?) (ty0 g (CTail c (Bind b) u) t1 t2) -> - (t0:?) (ty0 g (CTail c (Bind b) u) t2 t0) -> - (ty0 g c (TTail (Bind b) u t1) (TTail (Bind b) u t2)) - | ty0_appl: (c:?; w,u:?) (ty0 g c w u) -> - (v,t:?) (ty0 g c v (TTail (Bind Abst) u t)) -> - (ty0 g c (TTail (Flat Appl) w v) - (TTail (Flat Appl) w (TTail (Bind Abst) u t)) - ) - | ty0_cast: (c:?; t1,t2:?) (ty0 g c t1 t2) -> - (t0:?) (ty0 g c t2 t0) -> - (ty0 g c (TTail (Flat Cast) t2 t1) t2). - -(*#* #stop file *) - - Hint wf0 : ltlc := Constructors wf0. - - Hint ty0 : ltlc := Constructors ty0. - - Section wf0_props. (******************************************************) - - Theorem wf0_ty0: (g:?; c:?; u,t:?) (ty0 g c u t) -> (wf0 g c). - Intros; XElim H; XAuto. - Qed. - - Hints Resolve wf0_ty0 : ltlc. - - Theorem wf0_drop_O: (c,e:?; h:?) (drop h (0) c e) -> - (g:?) (wf0 g c) -> (wf0 g e). - XElim c. -(* case 1 : CSort *) - Intros; DropGenBase; Rewrite H; XAuto. -(* case 2 : CTail k *) - Intros c IHc; XElim k; ( - XElim h; Intros; DropGenBase; - [ Rewrite H in H0; XAuto | Inversion H1; XEAuto ] ). - Qed. - - End wf0_props. - - Hints Resolve wf0_ty0 wf0_drop_O : ltlc. - - Tactic Definition Wf0Ty0 := - Match Context With - [ _: (ty0 ?1 ?2 ?3 ?4) |- ? ] -> - LApply (wf0_ty0 ?1 ?2 ?3 ?4); [ Intros H_x | XAuto ]; - Inversion_clear H_x. - - Tactic Definition Wf0DropO := - Match Context With - | [ _: (drop ?1 (0) ?2 ?3); _: (wf0 ?4 ?2) |- ? ] -> - LApply (wf0_drop_O ?2 ?3 ?1); [ Intros H_x | XAuto ]; - LApply (H_x ?4); [ Clear H_x; Intros | XAuto ]. - - Section wf0_facilities. (*************************************************) - - Theorem wf0_drop_wf0: (g:?; c:?) (wf0 g c) -> - (b:?; e:?; u:?; h:?) - (drop h (0) c (CTail e (Bind b) u)) -> (wf0 g e). - Intros. - Wf0DropO; Inversion H1; XEAuto. - Qed. - - Theorem ty0_drop_wf0: (g:?; c:?; t1,t2:?) (ty0 g c t1 t2) -> - (b:?; e:?; u:?; h:?) - (drop h (0) c (CTail e (Bind b) u)) -> (wf0 g e). - Intros. - EApply wf0_drop_wf0; [ Idtac | EApply H0 ]; XEAuto. - Qed. - - End wf0_facilities. - - Hints Resolve wf0_drop_wf0 ty0_drop_wf0 : ltlc. - - Tactic Definition DropWf0 := - Match Context With - | [ _: (ty0 ?1 ?2 ?3 ?4); - _: (drop ?5 (0) ?2 (CTail ?6 (Bind ?7) ?8)) |- ? ] -> - LApply (ty0_drop_wf0 ?1 ?2 ?3 ?4); [ Intros H_x | XAuto ]; - LApply (H_x ?7 ?6 ?8 ?5); [ Clear H_x; Intros | XAuto ] - | [ _: (wf0 ?1 ?2); - _: (drop ?5 (0) ?2 (CTail ?6 (Bind ?7) ?8)) |- ? ] -> - LApply (wf0_drop_wf0 ?1 ?2); [ Intros H_x | XAuto ]; - LApply (H_x ?7 ?6 ?8 ?5); [ Clear H_x; Intros | XAuto ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_gen.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_gen.v deleted file mode 100644 index 29e3d6470..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_gen.v +++ /dev/null @@ -1,185 +0,0 @@ -Require pc3_props. -Require ty0_defs. - -(*#* #caption "generation lemma of typing" #clauses *) - - Section ty0_gen_base. (***************************************************) - -(*#* #caption "generation lemma for sorts" *) -(*#* #cap #cap c #alpha x in T, n in h *) - - Theorem ty0_gen_sort: (g:?; c:?; x:?; n:?) - (ty0 g c (TSort n) x) -> - (pc3 c (TSort (next g n)) x). - -(*#* #stop proof *) - - Intros until 1; InsertEq H '(TSort n); XElim H; Intros. -(* case 1 : ty0_conv *) - XEAuto. -(* case 2 : ty0_sort *) - Inversion H0; XAuto. -(* case 3 : ty0_abbr *) - Inversion H3. -(* case 4 : ty0_abst *) - Inversion H3. -(* case 5 : ty0_bind *) - Inversion H5. -(* case 6 : ty0_appl *) - Inversion H3. -(* case 7 : ty0_cast *) - Inversion H3. - Qed. - -(*#* #start proof *) - -(*#* #caption "generation lemma for bound references" *) -(*#* #cap #cap c, e #alpha x in T, t in U, u in V, n in i *) - - Theorem ty0_gen_lref: (g:?; c:?; x:?; n:?) (ty0 g c (TLRef n) x) -> - (EX e u t | (pc3 c (lift (S n) (0) t) x) & - (drop n (0) c (CTail e (Bind Abbr) u)) & - (ty0 g e u t) - ) \/ - (EX e u t | (pc3 c (lift (S n) (0) u) x) & - (drop n (0) c (CTail e (Bind Abst) u)) & - (ty0 g e u t) - ). - -(*#* #stop proof *) - - Intros until 1; InsertEq H '(TLRef n); XElim H; Intros. -(* case 1 : ty0_conv *) - LApply H2; [ Clear H2; Intros H2 | XAuto ]. - XElim H2; Intros; XElim H2; XEAuto. -(* case 2 : ty0_sort *) - Inversion H0. -(* case 3 : ty0_abbr *) - Inversion H3 ; Rewrite H5 in H0; XEAuto. -(* case 4 : ty0_abst *) - Inversion H3; Rewrite H5 in H0; XEAuto. -(* case 5 : ty0_bind *) - Inversion H5. -(* case 6 : ty0_appl *) - Inversion H3. -(* case 7 : ty0_cast *) - Inversion H3. - Qed. - -(*#* #start proof *) - -(*#* #caption "generation lemma for binders" *) -(*#* #cap #cap c #alpha x in T, t1 in U1, t2 in U2, u in V, t in U, t0 in U3 *) - - Theorem ty0_gen_bind: (g:?; b:?; c:?; u,t1,x:?) (ty0 g c (TTail (Bind b) u t1) x) -> - (EX t2 t t0 | (pc3 c (TTail (Bind b) u t2) x) & - (ty0 g c u t) & - (ty0 g (CTail c (Bind b) u) t1 t2) & - (ty0 g (CTail c (Bind b) u) t2 t0) - ). - -(*#* #stop proof *) - - Intros until 1; InsertEq H '(TTail (Bind b) u t1); XElim H; Intros. -(* case 1 : ty0_conv *) - LApply H2; [ Clear H2; Intros H2 | XAuto ]. - XElim H2; XEAuto. -(* case 2 : ty0_sort *) - Inversion H0. -(* case 3 : ty0_abbr *) - Inversion H3. -(* case 4 : ty0_abst *) - Inversion H3. -(* case 5 : ty0_bind *) - Inversion H5. - Rewrite H7 in H1; Rewrite H7 in H3. - Rewrite H8 in H; Rewrite H8 in H1; Rewrite H8 in H3. - Rewrite H9 in H1; XEAuto. -(* case 6 : ty0_appl *) - Inversion H3. -(* case 7 : ty0_cast *) - Inversion H3. - Qed. - -(*#* #start proof *) - -(*#* #caption "generation lemma for applications" *) -(*#* #cap #cap c #alpha x in T, v in U1, w in V1, u in V2, t in U2 *) - - Theorem ty0_gen_appl: (g:?; c:?; w,v,x:?) (ty0 g c (TTail (Flat Appl) w v) x) -> - (EX u t | (pc3 c (TTail (Flat Appl) w (TTail (Bind Abst) u t)) x) & - (ty0 g c v (TTail (Bind Abst) u t)) & - (ty0 g c w u) - ). - -(*#* #stop proof *) - - Intros until 1; InsertEq H '(TTail (Flat Appl) w v); XElim H; Intros. -(* case 1 : ty0_conv *) - LApply H2; [ Clear H2; Intros H2 | XAuto ]. - XElim H2; XEAuto. -(* case 2 : ty0_sort *) - Inversion H0. -(* case 3 : ty0_abbr *) - Inversion H3. -(* case 4 : ty0_abst *) - Inversion H3. -(* case 5 : ty0_bind *) - Inversion H5. -(* case 6 : ty0_appl *) - Inversion H3; Rewrite H5 in H; Rewrite H6 in H1; XEAuto. -(* case 7 : ty0_cast *) - Inversion H3. - Qed. - -(*#* #start proof *) - -(*#* #caption "generation lemma for type casts" *) -(*#* #cap #cap c #alpha x in T, t2 in V, t1 in U *) - - Theorem ty0_gen_cast: (g:?; c:?; t1,t2,x:?) - (ty0 g c (TTail (Flat Cast) t2 t1) x) -> - (pc3 c t2 x) /\ (ty0 g c t1 t2). - -(*#* #stop proof *) - - Intros until 1; InsertEq H '(TTail (Flat Cast) t2 t1); XElim H; Intros. -(* case 1 : ty0_conv *) - LApply H2; [ Clear H2; Intros H2 | XAuto ]. - XElim H2; XEAuto. -(* case 2 : ty0_sort *) - Inversion H0. -(* case 3 : ty0_abbr *) - Inversion H3. -(* case 4 : ty0_abst *) - Inversion H3. -(* case 5 : ty0_bind *) - Inversion H5. -(* case 6 : ty0_appl *) - Inversion H3. -(* case 7 : ty0_cast *) - Inversion H3; Rewrite H5 in H; Rewrite H5 in H1; Rewrite H6 in H; XAuto. - Qed. - - End ty0_gen_base. - - Tactic Definition Ty0GenBase := - Match Context With - | [ H: (ty0 ?1 ?2 (TSort ?3) ?4) |- ? ] -> - LApply (ty0_gen_sort ?1 ?2 ?4 ?3); [ Clear H; Intros | XAuto ] - | [ H: (ty0 ?1 ?2 (TLRef ?3) ?4) |- ? ] -> - LApply (ty0_gen_lref ?1 ?2 ?4 ?3); [ Clear H; Intros H | XAuto ]; - XElim H; Intros H; XElim H; Intros - | [ H: (ty0 ?1 ?2 (TTail (Bind ?3) ?4 ?5) ?6) |- ? ] -> - LApply (ty0_gen_bind ?1 ?3 ?2 ?4 ?5 ?6); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (ty0 ?1 ?2 (TTail (Flat Appl) ?3 ?4) ?5) |- ? ] -> - LApply (ty0_gen_appl ?1 ?2 ?3 ?4 ?5); [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (ty0 ?1 ?2 (TTail (Flat Cast) ?3 ?4) ?5) |- ? ] -> - LApply (ty0_gen_cast ?1 ?2 ?4 ?3 ?5); [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - -(*#* #start file *) - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_gen_context.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_gen_context.v deleted file mode 100644 index 3a5b5d9b7..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_gen_context.v +++ /dev/null @@ -1,227 +0,0 @@ -(*#* #stop file *) - -Require lift_gen. -Require lift_props. -Require subst1_defs. -Require subst1_lift. -Require subst1_confluence. -Require drop_props. -Require csubst1_defs. -Require pc3_gen. -Require pc3_gen_context. -Require ty0_defs. -Require ty0_lift. - -(* NOTE: these break the recursion between ty0_sred_cpr0_pr0 and ty0_gen_lift *) - - Section ty0_gen_cabbr. (**************************************************) - - Tactic Definition IH d a0 a := - Match Context With - [ H: (e:?; u:?; d:?) ? -> (a0:?) ? -> (a:?) ? -> ? -> ? |- ? ] -> - LApply (H e u0 d); [ Clear H; Intros H | XAuto ]; - LApply (H a0); [ Clear H; Intros H | XAuto ]; - LApply (H a); [ Clear H; Intros H | XEAuto ]; - LApply H; [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - -(* NOTE: This can be generalized removing the last three premises *) - Theorem ty0_gen_cabbr: (g:?; c:?; t1,t2:?) (ty0 g c t1 t2) -> - (e:?; u:?; d:?) (drop d (0) c (CTail e (Bind Abbr) u)) -> - (a0:?) (csubst1 d u c a0) -> - (a:?) (wf0 g a) -> (drop (1) d a0 a) -> - (EX y1 y2 | (subst1 d u t1 (lift (1) d y1)) & - (subst1 d u t2 (lift (1) d y2)) & - (ty0 g a y1 y2) - ). - Intros until 1; XElim H; Intros. -(* case 1: ty0_conv *) - Repeat IH d a0 a; EApply ex3_2_intro; - [ XEAuto | XEAuto | EApply ty0_conv; Try EApply pc3_gen_cabbr; XEAuto ]. -(* case 2: ty0_sort *) - EApply ex3_2_intro; Try Rewrite lift_sort; XAuto. -(* case 3: ty0_abbr *) - Apply (lt_eq_gt_e n d0); Intros; Clear c t1 t2. -(* case 3.1: n < d0 *) - Clear H1; DropDis; Rewrite minus_x_Sy in H1; [ DropGenBase | XAuto ]. - CSubst1Drop; Rewrite minus_x_Sy in H0; [ Idtac | XAuto ]. - CSubst1GenBase; Rewrite H0 in H8; Clear H0 x; Simpl in H9. - Rewrite (lt_plus_minus n d0) in H6; [ Idtac | XAuto ]. - DropDis; Rewrite H0 in H9; Clear H0 x0. - IH '(minus d0 (S n)) x1 x3. - Subst1Confluence; Rewrite H0 in H11; Clear H0 x0. - Pattern 3 d0; Rewrite (le_plus_minus_sym (S n) d0); [ Idtac | XAuto ]. - Pattern 4 d0; Rewrite (le_plus_minus (S n) d0); [ Idtac | XAuto ]. - EApply ex3_2_intro; - [ Rewrite lift_lref_lt | Rewrite lift_d | EApply ty0_abbr ]; XEAuto. -(* case 3.2: n = d0 *) - Rewrite H7; Rewrite H7 in H0; Clear H2 H7 n. - DropDis; Inversion H0; Rewrite H8 in H4; Clear H0 H7 H8 e u0. - CSubst1Drop; DropDis. - EApply ex3_2_intro; - [ EApply subst1_single; Rewrite lift_free; Simpl; XEAuto - | Rewrite lift_free; Simpl; XEAuto - | XEAuto ]. -(* case 3.3: n > d0 *) - Clear H2 H3 e; CSubst1Drop; DropDis. - Pattern 1 n; Rewrite (lt_plus_minus (0) n); [ Idtac | XEAuto ]. - Arith4c '(0) '(minus n (1)). - EApply ex3_2_intro; - [ Rewrite lift_lref_ge - | Rewrite lift_free; Simpl - | Pattern 2 n; Rewrite (minus_x_SO n) - ]; XEAuto. -(* case 4: ty0_abst *) - Apply (lt_eq_gt_e n d0); Intros; Clear c t1 t2. -(* case 4.1: n < d0 *) - Clear H1; DropDis; Rewrite minus_x_Sy in H1; [ DropGenBase | XAuto ]. - CSubst1Drop; Rewrite minus_x_Sy in H0; [ Idtac | XAuto ]. - CSubst1GenBase; Rewrite H0 in H8; Clear H0 x; Simpl in H9. - Rewrite (lt_plus_minus n d0) in H6; [ Idtac | XAuto ]. - DropDis; Rewrite H0 in H9; Clear H0 x0. - IH '(minus d0 (S n)) x1 x3. - Subst1Confluence; Rewrite H0 in H11; Clear H0 x0. - Pattern 3 d0; Rewrite (le_plus_minus_sym (S n) d0); [ Idtac | XAuto ]. - Pattern 4 d0; Rewrite (le_plus_minus (S n) d0); [ Idtac | XAuto ]. - EApply ex3_2_intro; - [ Rewrite lift_lref_lt | Rewrite lift_d | EApply ty0_abst ]; XEAuto. -(* case 4.2: n = d0 *) - Rewrite H7; Rewrite H7 in H0; DropDis; Inversion H0. -(* case 4.3: n > d0 *) - Clear H2 H3 e; CSubst1Drop; DropDis. - Pattern 1 n; Rewrite (lt_plus_minus (0) n); [ Idtac | XEAuto ]. - Arith4c '(0) '(minus n (1)). - EApply ex3_2_intro; - [ Rewrite lift_lref_ge - | Rewrite lift_free; Simpl - | Pattern 2 n; Rewrite (minus_x_SO n) - ]; XEAuto. -(* case 5: ty0_bind *) - IH d a0 a; Clear H H1 H3 c t1 t2. - IH '(S d) '(CTail a0 (Bind b) (lift (1) d x0)) '(CTail a (Bind b) x0). - IH '(S d) '(CTail a0 (Bind b) (lift (1) d x0)) '(CTail a (Bind b) x0). - Subst1Confluence; Rewrite H4 in H11; Clear H4 x5. - EApply ex3_2_intro; Try Rewrite lift_bind; XEAuto. -(* case 6: ty0_appl *) - Repeat IH d a0 a; Clear H H1 c t1 t2. - Subst1GenBase; SymEqual; LiftGenBase; Rewrite H in H8; Rewrite H11 in H1; Rewrite H12 in H7; Clear H H11 H12 x1 x4 x5. - Subst1Confluence; Rewrite H in H8; Clear H x6. - EApply ex3_2_intro; Try Rewrite lift_flat; - [ Idtac | EApply subst1_tail; [ Idtac | Rewrite lift_bind ] | Idtac ]; XEAuto. -(* case 7: ty0_cast *) - Rename u into u0; Repeat IH d a0 a; Clear H H1 c t1 t2. - Subst1Confluence; Rewrite H in H10; Clear H x3. - EApply ex3_2_intro; [ Rewrite lift_flat | Idtac | Idtac ]; XEAuto. - Qed. - - End ty0_gen_cabbr. - - Section ty0_gen_cvoid. (**************************************************) - - Tactic Definition IH d a := - Match Context With - [ H: (e:?; u:?; d:?) ? -> (a:?) ? -> ? -> ? |- ? ] -> - LApply (H e u0 d); [ Clear H; Intros H | XAuto ]; - LApply (H a); [ Clear H; Intros H | XEAuto ]; - LApply H; [ Clear H; Intros H | XAuto ]; - XElim H; Intros. - -(* NOTE: This can be generalized removing the last two premises *) - Theorem ty0_gen_cvoid: (g:?; c:?; t1,t2:?) (ty0 g c t1 t2) -> - (e:?; u:?; d:?) (drop d (0) c (CTail e (Bind Void) u)) -> - (a:?) (wf0 g a) -> (drop (1) d c a) -> - (EX y1 y2 | t1 = (lift (1) d y1) & - t2 = (lift (1) d y2) & - (ty0 g a y1 y2) - ). - Intros until 1; XElim H; Intros. -(* case 1: ty0_conv *) - Repeat IH d a; Rewrite H0 in H3; Rewrite H7 in H3; Pc3Gen; XEAuto. -(* case 2: ty0_sort *) - EApply ex3_2_intro; Try Rewrite lift_sort; XEAuto. -(* case 3: ty0_abbr *) - Apply (lt_eq_gt_e n d0); Intros. -(* case 3.1: n < d0 *) - DropDis; Rewrite minus_x_Sy in H7; [ DropGenBase | XAuto ]. - Rewrite (lt_plus_minus n d0) in H5; [ Idtac | XAuto ]. - DropDis; Rewrite H0 in H2; Clear H0 H1 u. - IH '(minus d0 (S n)) x1; Rewrite H1; Clear H1 t. - LiftGen; Rewrite <- H0 in H2; Clear H0 x2. - Rewrite <- lift_d; [ Idtac | XAuto ]. - Rewrite <- le_plus_minus; [ Idtac | XAuto ]. - EApply ex3_2_intro; [ Rewrite lift_lref_lt | Idtac | EApply ty0_abbr ]; XEAuto. -(* case 3.2: n = d0 *) - Rewrite H6 in H0; DropDis; Inversion H0. -(* case 3.3: n > d0 *) - Clear H2 H3 c e t1 t2 u0; DropDis. - Pattern 1 n; Rewrite (lt_plus_minus (0) n); [ Idtac | XEAuto ]. - Arith4c '(0) '(minus n (1)). - EApply ex3_2_intro; - [ Rewrite lift_lref_ge - | Rewrite lift_free; Simpl - | Pattern 2 n; Rewrite (minus_x_SO n) - ]; XEAuto. -(* case 4: ty0_abst *) - Apply (lt_eq_gt_e n d0); Intros. -(* case 4.1: n < d0 *) - DropDis; Rewrite minus_x_Sy in H7; [ DropGenBase | XAuto ]. - Rewrite (lt_plus_minus n d0) in H5; [ Idtac | XAuto ]. - DropDis; Rewrite H0; Rewrite H0 in H2; Clear H0 H1 u. - IH '(minus d0 (S n)) x1; Clear H1 t. - LiftGen; Rewrite <- H0 in H2; Clear H0 x2. - Rewrite <- lift_d; [ Idtac | XAuto ]. - Rewrite <- le_plus_minus; [ Idtac | XAuto ]. - EApply ex3_2_intro; [ Rewrite lift_lref_lt | Idtac | EApply ty0_abst ]; XEAuto. -(* case 4.2: n = d0 *) - Rewrite H6 in H0; DropDis; Inversion H0. -(* case 4.3: n > d0 *) - Clear H2 H3 c e t1 t2 u0; DropDis. - Pattern 1 n; Rewrite (lt_plus_minus (0) n); [ Idtac | XEAuto ]. - Arith4c '(0) '(minus n (1)). - EApply ex3_2_intro; - [ Rewrite lift_lref_ge - | Rewrite lift_free; [ Simpl | Simpl | Idtac ] - | Pattern 2 n; Rewrite (minus_x_SO n) - ]; XEAuto. -(* case 5: ty0_bind *) - IH d a; Rewrite H0; Rewrite H0 in H2; Rewrite H0 in H4; Clear H H0 H1 H3 H8 u t. - IH '(S d) '(CTail a (Bind b) x0); Rewrite H; Rewrite H in H2; Clear H H0 t3 t4. - IH '(S d) '(CTail a (Bind b) x0); Rewrite H; Clear H t0. - LiftGen; Rewrite <- H in H2; Clear H x5. - LiftTailRwBack; XEAuto. -(* case 6: ty0_appl *) - IH d a; Rewrite H2; Clear H H1 H2 v. - LiftGenBase; Rewrite H in H7; Rewrite H1; Rewrite H1 in H0; Rewrite H2; Clear H H1 H2 u t x1. - IH d a; Rewrite H; Clear H w. - LiftGen; Rewrite <- H in H1; Clear H x4. - LiftTailRwBack; XEAuto. -(* case 7: ty0_cast *) - Rename u into u0. - IH d a; Rewrite H2 in H0; Rewrite H2; Clear H H1 H2 H6 t3 t4. - IH d a; Rewrite H; Clear H t0. - LiftGen; Rewrite <- H in H1; Clear H x3. - LiftTailRwBack; XEAuto. - Qed. - - End ty0_gen_cvoid. - - Tactic Definition Ty0GenContext := - Match Context With - | [ H: (ty0 ?1 (CTail ?2 (Bind Abbr) ?3) ?4 ?5) |- ? ] -> - LApply (ty0_gen_cabbr ?1 (CTail ?2 (Bind Abbr) ?3) ?4 ?5); [ Clear H; Intros H | XAuto ]; - LApply (H ?2 ?3 (0)); [ Clear H; Intros H | XAuto ]; - LApply (H (CTail ?2 (Bind Abbr) ?3)); [ Clear H; Intros H | XAuto ]; - LApply (H ?2); [ Clear H; Intros H | XAuto ]; - LApply H; [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | [ H: (ty0 ?1 (CTail ?2 (Bind Void) ?3) ?4 ?5) |- ? ] -> - LApply (ty0_gen_cvoid ?1 (CTail ?2 (Bind Void) ?3) ?4 ?5); [ Clear H; Intros H | XAuto ]; - LApply (H ?2 ?3 (0)); [ Clear H; Intros H | XAuto ]; - LApply (H ?2); [ Clear H; Intros H | XAuto ]; - LApply H; [ Clear H; Intros H | XAuto ]; - XElim H; Intros - | _ -> Ty0GenBase. - -(*#* #start file *) - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_lift.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_lift.v deleted file mode 100644 index ebe6bfcc7..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_lift.v +++ /dev/null @@ -1,65 +0,0 @@ -Require lift_props. -Require drop_props. -Require pc3_props. -Require ty0_defs. - -(*#* #caption "main properties of typing" #clauses ty0_props *) - - Section ty0_lift. (*******************************************************) - -(*#* #caption "lift preserves types" *) -(*#* #cap #cap t1, t2 #alpha c in C1, e in C2, d in i *) - - Theorem ty0_lift : (g:?; e:?; t1,t2:?) (ty0 g e t1 t2) -> - (c:?) (wf0 g c) -> (d,h:?) (drop h d c e) -> - (ty0 g c (lift h d t1) (lift h d t2)). - -(*#* #stop file *) - - Intros until 1; XElim H; Intros. -(* case 1 : ty0_conv *) - XEAuto. -(* case 2 : ty0_sort *) - Repeat Rewrite lift_sort; XAuto. -(* case 3 : ty0_abbr *) - Apply (lt_le_e n d0); Intros; DropDis. -(* case 3.1 : n < d0 *) - Rewrite minus_x_Sy in H4; [ Idtac | XAuto ]. - DropGenBase; Rewrite H4 in H0; Clear H4 x. - Rewrite lift_lref_lt; [ Idtac | XAuto ]. - Arith8 d0 '(S n); Rewrite lift_d; [ Arith8' d0 '(S n) | XAuto ]. - EApply ty0_abbr; XEAuto. -(* case 3.2 : n >= d0 *) - Rewrite lift_lref_ge; [ Idtac | XAuto ]. - Arith7' n; Rewrite lift_free; [ Idtac | Simpl; XAuto | XAuto ]. - Rewrite (plus_sym h (S n)); Simpl; XEAuto. -(* case 4: ty0_abst *) - Apply (lt_le_e n d0); Intros; DropDis. -(* case 4.1 : n < d0 *) - Rewrite minus_x_Sy in H4; [ Idtac | XAuto ]. - DropGenBase; Rewrite H4 in H0; Clear H4 x. - Rewrite lift_lref_lt; [ Idtac | XAuto ]. - Arith8 d0 '(S n); Rewrite lift_d; [ Arith8' d0 '(S n) | XAuto ]. - EApply ty0_abst; XEAuto. -(* case 4.2 : n >= d0 *) - Rewrite lift_lref_ge; [ Idtac | XAuto ]. - Arith7' n; Rewrite lift_free; [ Idtac | Simpl; XAuto | XAuto ]. - Rewrite (plus_sym h (S n)); Simpl; XEAuto. -(* case 5: ty0_bind *) - LiftTailRw; Simpl; EApply ty0_bind; XEAuto. -(* case 6: ty0_appl *) - LiftTailRw; Simpl; EApply ty0_appl; [ Idtac | Rewrite <- lift_bind ]; XEAuto. -(* case 7: ty0_cast *) - LiftTailRw; XEAuto. - Qed. - - End ty0_lift. - - Hints Resolve ty0_lift : ltlc. - - Tactic Definition Ty0Lift b u := - Match Context With - [ H: (ty0 ?1 ?2 ?3 ?4) |- ? ] -> - LApply (ty0_lift ?1 ?2 ?3 ?4); [ Intros H_x | XAuto ]; - LApply (H_x (CTail ?2 (Bind b) u)); [ Clear H_x; Intros H_x | XEAuto ]; - LApply (H_x (0) (1)); [ Clear H_x; Intros | XAuto ]. diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_props.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_props.v deleted file mode 100644 index ab4b00687..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_props.v +++ /dev/null @@ -1,110 +0,0 @@ -Require drop_props. -Require pc3_props. -Require ty0_defs. -Require ty0_gen. -Require ty0_lift. - - Section ty0_correct. (****************************************************) - -(*#* #caption "correctness of types" *) -(*#* #cap #cap c, t1, t2 #alpha t in T3 *) - - Theorem ty0_correct : (g:?; c:?; t1,t2:?) - (ty0 g c t1 t2) -> (EX t | (ty0 g c t2 t)). - -(*#* #stop file *) - - Intros; XElim H; Intros. -(* case 1 : ty0_conv *) - XEAuto. -(* case 2 : ty0_sort *) - XEAuto. -(* case 3 : ty0_abbr *) - XElim H2; XEAuto. -(* case 4 : ty0_abst *) - XEAuto. -(* case 5 : ty0_bind *) - XElim H4; XEAuto. -(* case 6 : ty0_appl *) - XElim H0; XElim H2; Intros. - Ty0GenBase; XEAuto. -(* case 7 : ty0_cast *) - XAuto. - Qed. - - End ty0_correct. - - Tactic Definition Ty0Correct := - Match Context With - [ _: (ty0 ?1 ?2 ?3 ?4) |- ? ] -> - LApply (ty0_correct ?1 ?2 ?3 ?4); [ Intros H_x | XAuto ]; - XElim H_x; Intros. - -(*#* #start file *) - - Section ty0_shift. (******************************************************) - -(*#* #caption "shift lemma for types" *) -(*#* #cap #cap t1, t2 #alpha c in C1, e in C2 *) - - Theorem ty0_shift : (h:?; c,e:?) (drop h (0) c e) -> - (g:?; t1,t2:?) (ty0 g c t1 t2) -> (wf0 g e) -> - (ty0 g e (app c h t1) (app c h t2)). - -(*#* #stop file *) - - XElim h. -(* case 1 : h = 0 *) - Intros; DropGenBase; Rewrite <- H. - Repeat Rewrite app_O; XAuto. -(* case 2 : h > 0 *) - Intros h IHh; XElim c. -(* case 2.1 : CSort *) - Intros; DropGenBase; Rewrite H. - Simpl; XAuto. -(* case 2.2 : CTail k *) - Intros c IHc; Clear IHc; XElim k; Intros; Wf0Ty0. - DropGenBase; Move H0 after H2; Ty0Correct. - Simpl; Apply IHh; [ Idtac | EApply ty0_bind | Idtac ]; XEAuto. - Qed. - - End ty0_shift. - - Hints Resolve ty0_shift : ltlc. - - Section ty0_unique. (*****************************************************) - - Opaque pc3. - -(*#* #start file *) - -(*#* #caption "uniqueness of types" *) -(*#* #cap #cap c, t1, t2 #alpha u in T *) - - Theorem ty0_unique : (g:?; c:?; u,t1:?) (ty0 g c u t1) -> - (t2:?) (ty0 g c u t2) -> (pc3 c t1 t2). - -(*#* #stop file *) - - Intros until 1; XElim H; Intros. -(* case 1 : ty0_conv *) - XEAuto. -(* case 2 : ty0_sort *) - Ty0GenBase; XAuto. -(* case 3 : ty0_abbr *) - Ty0GenBase; DropDis; Inversion H4. - Rewrite H7 in H2; Rewrite H8 in H2; XEAuto. -(* case 4 : ty0_abst *) - Ty0GenBase; DropDis; Inversion H4. - Rewrite H7 in H2; Rewrite H8 in H2; XEAuto. -(* case 5 : ty0_bind *) - Ty0GenBase; XEAuto. -(* case 6 : ty0_appl *) - Ty0GenBase; EApply pc3_t; [ Idtac | EApply H3 ]; XEAuto. -(* case 7 : ty0_cast *) - Ty0GenBase; XEAuto. - Qed. - - End ty0_unique. - - Hints Resolve ty0_unique : ltlc. diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_sred.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_sred.v deleted file mode 100644 index 99548beb5..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_sred.v +++ /dev/null @@ -1,252 +0,0 @@ -Require lift_gen. -Require subst1_gen. -Require csubst1_defs. -Require pr0_lift. -Require pr0_subst1. -Require cpr0_defs. -Require pc1_props. -Require pc3_props. -Require pc3_gen. -Require ty0_defs. -Require ty0_gen. -Require ty0_lift. -Require ty0_props. -Require ty0_subst0. -Require ty0_gen_context. -Require csub0_defs. -Require csub0_props. - -(*#* #caption "subject reduction" #clauses *) - -(*#* #stop file *) - - Section ty0_sred_cpr0_pr0. (**********************************************) - - Tactic Definition IH H c2 t2 := - LApply (H c2); [ Intros H_x | XEAuto ]; - LApply H_x; [ Clear H_x; Intros H_x | XAuto ]; - LApply (H_x t2); [ Clear H_x; Intros | XEAuto ]. - - Tactic Definition IH0 := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 ?2 c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (ty0 ?1 ?2 ?3 ?4) |- ? ] -> - IH H1 ?5 ?3. - - Tactic Definition IH0c := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 ?2 c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (ty0 ?1 ?2 ?3 ?4) |- ? ] -> - IH H1 ?5 ?3; Clear H1. - - Tactic Definition IH0B := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 (CTail ?2 (Bind ?6) ?7) c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (ty0 ?1 (CTail ?2 (Bind ?6) ?7) ?3 ?4) |- ? ] -> - IH H1 '(CTail ?5 (Bind ?6) ?7) ?3. - - Tactic Definition IH0Bc := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 (CTail ?2 (Bind ?6) ?7) c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (ty0 ?1 (CTail ?2 (Bind ?6) ?7) ?3 ?4) |- ? ] -> - IH H1 '(CTail ?5 (Bind ?6) ?7) ?3; Clear H1. - - Tactic Definition IH1 := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 ?2 c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6) |- ? ] -> - IH H1 ?5 ?6. - - Tactic Definition IH1c := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 ?2 c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6) |- ? ] -> - IH H1 ?5 ?6; Clear H1. - - Tactic Definition IH1Bc := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 (CTail ?2 (Bind ?7) ?8) c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6) |- ? ] -> - IH H1 '(CTail ?5 (Bind ?7) ?8) ?6; Clear H1. - - Tactic Definition IH1BLc := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 (CTail ?2 (Bind ?7) ?8) c2)->(t2:T)(pr0 (lift ?10 ?11 ?3) t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6) |- ? ] -> - IH H1 '(CTail ?5 (Bind ?7) ?8) '(lift ?10 ?11 ?6); Clear H1. - - Tactic Definition IH1T := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 ?2 c2)->(t2:T)(pr0 (TTail ?7 ?8 ?3) t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6) |- ? ] -> - IH H1 ?5 '(TTail ?7 ?8 ?6). - - Tactic Definition IH1T2c := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 ?2 c2)->(t2:T)(pr0 (TTail ?7 ?8 ?3) t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6); H4: (pr0 ?8 ?9) |- ? ] -> - IH H1 ?5 '(TTail ?7 ?9 ?6); Clear H1. - - Tactic Definition IH3B := - Match Context With - [ H1: (c2:C) (wf0 ?1 c2)->(cpr0 (CTail ?2 (Bind ?7) ?8) c2)->(t2:T)(pr0 ?3 t2)->(ty0 ?1 c2 t2 ?4); - H2: (cpr0 ?2 ?5); H3: (pr0 ?3 ?6); H4: (pr0 ?8 ?9) |- ? ] -> - IH H1 '(CTail ?5 (Bind ?7) ?9) ?6. - -(*#* #start file *) - -(*#* #caption "base case" *) -(*#* #cap #cap c1, c2 #alpha t1 in T, t2 in T1, t in T2 *) - - Theorem ty0_sred_cpr0_pr0: (g:?; c1:?; t1,t:?) (ty0 g c1 t1 t) -> - (c2:?) (wf0 g c2) -> (cpr0 c1 c2) -> - (t2:?) (pr0 t1 t2) -> (ty0 g c2 t2 t). - -(*#* #stop file *) - - Intros until 1; XElim H; Intros. -(* case 1: ty0_conv *) - IH1c; IH0c; EApply ty0_conv; XEAuto. -(* case 2: ty0_sort *) - Inversion H2; XAuto. -(* case 3: ty0_abbr *) - Inversion H5; Cpr0Drop; IH1c; XEAuto. -(* case 4: ty0_abst *) - Intros; Inversion H5; Cpr0Drop; IH0; IH1. - EApply ty0_conv; - [ EApply ty0_lift; [ Idtac | XAuto | XEAuto ] - | EApply ty0_abst - | EApply pc3_lift ]; XEAuto. -(* case 5: ty0_bind *) - Intros; Inversion H7; Clear H7. -(* case 5.1: pr0_refl *) - IH0c; IH0Bc; IH0Bc. - EApply ty0_bind; XEAuto. -(* case 5.2: pr0_cont *) - IH0; IH0B; Ty0Correct; IH3B; Ty0Correct. - EApply ty0_conv; [ EApply ty0_bind | EApply ty0_bind | Idtac ]; XEAuto. -(* case 5.3: pr0_delta *) - Rewrite <- H8 in H1; Rewrite <- H8 in H2; - Rewrite <- H8 in H3; Rewrite <- H8 in H4; Clear H8 b. - IH0; IH0B; Ty0Correct; IH3B; Ty0Correct. - EApply ty0_conv; [ EApply ty0_bind | EApply ty0_bind | Idtac ]; XEAuto. -(* case 5.4: pr0_zeta *) - Rewrite <- H11 in H1; Rewrite <- H11 in H2; Clear H8 H9 H10 H11 b0 t2 t7 u0. - IH0; IH1BLc; Move H3 after H8; IH0Bc; Ty0Correct; Move H8 after H4; Clear H H0 H1 H3 H6 c c1 t t1; - NewInduction b. -(* case 5.4.1: Abbr *) - Ty0GenContext; Subst1Gen; LiftGen; Rewrite H in H1; Clear H x0. - EApply ty0_conv; - [ EApply ty0_bind; XEAuto | XEAuto - | EApply pc3_pr3_x; - EApply (pr3_t (TTail (Bind Abbr) u (lift (1) (0) x1))); XEAuto ]. -(* case 5.4.2: Abst *) - EqFalse. -(* case 5.4.3: Void *) - Ty0GenContext; Rewrite H0; Rewrite H0 in H2; Clear H0 t3. - LiftGen; Rewrite <- H in H1; Clear H x0. - EApply ty0_conv; [ EApply ty0_bind; XEAuto | XEAuto | XAuto ]. -(* case 6: ty0_appl *) - Intros; Inversion H5; Clear H5. -(* case 6.1: pr0_refl *) - IH0c; IH0c; EApply ty0_appl; XEAuto. -(* case 6.2: pr0_cont *) - Clear H6 H7 H8 H9 c1 k t t1 t2 t3 u1. - IH0; Ty0Correct; Ty0GenBase; IH1c; IH0; IH1c. - EApply ty0_conv; - [ EApply ty0_appl; [ XEAuto | EApply ty0_bind; XEAuto ] - | EApply ty0_appl; XEAuto - | XEAuto ]. -(* case 6.3: pr0_beta *) - Rewrite <- H7 in H1; Rewrite <- H7 in H2; Clear H6 H7 H9 c1 t t1 t2 v v1. - IH1T; IH0c; Ty0Correct; Ty0GenBase; IH0; IH1c. - Move H5 after H13; Ty0GenBase; Pc3Gen; Repeat CSub0Ty0. - EApply ty0_conv; - [ Apply ty0_appl; [ Idtac | EApply ty0_bind ] - | EApply ty0_bind - | Apply (pc3_t (TTail (Bind Abbr) v2 t0)) - ]; XEAuto. -(* case 6.4: pr0_delta *) - Rewrite <- H7 in H1; Rewrite <- H7 in H2; Clear H6 H7 H11 c1 t t1 t2 v v1. - IH1T2c; Clear H1; Ty0Correct; NonLinear; Ty0GenBase; IH1; IH0c. - Move H5 after H1; Ty0GenBase; Pc3Gen; Rewrite lift_bind in H0. - Move H1 after H0; Ty0Lift b u2; Rewrite lift_bind in H17. - Ty0GenBase. - EApply ty0_conv; - [ Apply ty0_appl; [ Idtac | EApply ty0_bind ]; XEAuto - | EApply ty0_bind; - [ Idtac - | EApply ty0_appl; [ EApply ty0_lift | EApply ty0_conv ] - | EApply ty0_appl; [ EApply ty0_lift | EApply ty0_bind ] - ]; XEAuto - | Idtac ]. - Rewrite <- lift_bind; Apply pc3_pc1; - Apply (pc1_pr0_u2 (TTail (Flat Appl) v2 (TTail (Bind b) u2 (lift (1) (0) (TTail (Bind Abst) u t0))))); XAuto. -(* case 7: ty0_cast *) - Intros; Inversion H5; Clear H5. -(* case 7.1: pr0_refl *) - IH0c; IH0c; EApply ty0_cast; XEAuto. -(* case 7.2: pr0_cont *) - Clear H6 H7 H8 H9 c1 k u1 t t1 t4 t5. - IH0; IH1c; IH1c. - EApply ty0_conv; - [ XEAuto - | EApply ty0_cast; [ EApply ty0_conv; XEAuto | XEAuto ] - | XAuto ]. -(* case 7.3: pr0_epsilon *) - XAuto. - Qed. - - End ty0_sred_cpr0_pr0. - - Section ty0_sred_pr3. (**********************************************) - - Theorem ty0_sred_pr1: (c:?; t1,t2:?) (pr1 t1 t2) -> - (g:?; t:?) (ty0 g c t1 t) -> - (ty0 g c t2 t). - Intros until 1; XElim H; Intros. -(* case 1: pr1_r *) - XAuto. -(* case 2: pr1_u *) - EApply H1; EApply ty0_sred_cpr0_pr0; XEAuto. - Qed. - - Theorem ty0_sred_pr2: (c:?; t1,t2:?) (pr2 c t1 t2) -> - (g:?; t:?) (ty0 g c t1 t) -> - (ty0 g c t2 t). - Intros until 1; XElim H; Intros. -(* case 1: pr2_free *) - EApply ty0_sred_cpr0_pr0; XEAuto. -(* case 2: pr2_u *) - EApply ty0_subst0; Try EApply ty0_sred_cpr0_pr0; XEAuto. - Qed. - -(*#* #start file *) - -(*#* #caption "general case without the reduction in the context" *) -(*#* #cap #cap c #alpha t1 in T, t2 in T1, t in T2 *) - - Theorem ty0_sred_pr3: (c:?; t1,t2:?) (pr3 c t1 t2) -> - (g:?; t:?) (ty0 g c t1 t) -> - (ty0 g c t2 t). - -(*#* #stop file *) - - Intros until 1; XElim H; Intros. -(* case 1: pr3_refl *) - XAuto. -(* case 2: pr3_sing *) - EApply H1; EApply ty0_sred_pr2; XEAuto. - Qed. - - End ty0_sred_pr3. - - Tactic Definition Ty0SRed := - Match Context With - | [ H1: (pr3 ?1 ?2 ?3); H2: (ty0 ?4 ?1 ?2 ?5) |- ? ] -> - LApply (ty0_sred_pr3 ?1 ?2 ?3); [ Intros H_x | XAuto ]; - LApply (H_x ?4 ?5); [ Clear H2 H_x; Intros | XAuto ]. - -(*#* #start file *) - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_sred_props.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_sred_props.v deleted file mode 100644 index 1606efc5c..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_sred_props.v +++ /dev/null @@ -1,176 +0,0 @@ -Require lift_props. -Require drop_props. -Require pc3_props. -Require pc3_gen. -Require ty0_defs. -Require ty0_gen. -Require ty0_props. -Require ty0_sred. - -(*#* #caption "corollaries of subject reduction" #clauses *) - -(*#* #stop file *) - - Section ty0_gen. (********************************************************) - - Tactic Definition IH e := - Match Context With - [ H0: (t:?; d:?) ?1 = (lift ?2 d t) -> ?; H1: ?1 = (lift ?2 ?3 ?4) |- ? ] -> - LApply (H0 ?4 ?3); [ Clear H0 H1; Intros H0 | XAuto ]; - LApply (H0 e); [ Clear H0; Intros H0 | XEAuto ]; - LApply H0; [ Clear H0; Intros H0 | XAuto ]; - XElim H0; Intros. - -(*#* #start file *) - -(*#* #caption "generation lemma for lift" *) -(*#* #cap #cap t2 #alpha c in C1, e in C2, t1 in T, x in T1, d in i *) - - Theorem ty0_gen_lift: (g:?; c:?; t1,x:?; h,d:?) - (ty0 g c (lift h d t1) x) -> - (e:?) (wf0 g e) -> (drop h d c e) -> - (EX t2 | (pc3 c (lift h d t2) x) & (ty0 g e t1 t2)). - -(*#* #stop file *) - - Intros until 1; InsertEq H '(lift h d t1); - UnIntro H d; UnIntro H t1; XElim H; Intros; - Rename x0 into t3; Rename x1 into d0. -(* case 1: ty0_conv *) - IH e; XEAuto. -(* case 2: ty0_sort *) - LiftGenBase; Rewrite H0; Clear H0 t. - EApply ex2_intro; [ Rewrite lift_sort; XAuto | XAuto ]. -(* case 3: ty0_abbr *) - Apply (lt_le_e n d0); Intros. -(* case 3.1: n < d0 *) - LiftGenBase; DropS; Rewrite H3; Clear H3 t3. - Rewrite (le_plus_minus (S n) d0); [ Idtac | XAuto ]. - Rewrite (lt_plus_minus n d0) in H5; [ DropDis; IH x1 | XAuto ]. - EApply ex2_intro; - [ Rewrite lift_d; [ EApply pc3_lift; XEAuto | XEAuto ] - | EApply ty0_abbr; XEAuto ]. -(* case 3.2: n >= d0 *) - Apply (lt_le_e n (plus d0 h)); Intros. -(* case 3.2.1: n < d0 + h *) - LiftGenBase. -(* case 3.2.2: n >= d0 + h *) - Rewrite (le_plus_minus_sym h n) in H3; [ Idtac | XEAuto ]. - LiftGenBase; DropDis; Rewrite H3; Clear H3 t3. - EApply ex2_intro; [ Idtac | EApply ty0_abbr; XEAuto ]. - Rewrite lift_free; [ Idtac | XEAuto | XAuto ]. - Rewrite <- plus_n_Sm; Rewrite <- le_plus_minus; XEAuto. -(* case 4: ty0_abst *) - Apply (lt_le_e n d0); Intros. -(* case 4.1: n < d0 *) - LiftGenBase; Rewrite H3; Clear H3 t3. - Rewrite (le_plus_minus (S n) d0); [ Idtac | XAuto ]. - Rewrite (lt_plus_minus n d0) in H5; [ DropDis; Rewrite H0; IH x1 | XAuto ]. - EApply ex2_intro; [ Rewrite lift_d | EApply ty0_abst ]; XEAuto. -(* case 4.2: n >= d0 *) - Apply (lt_le_e n (plus d0 h)); Intros. -(* case 4.2.1: n < d0 + h *) - LiftGenBase. -(* case 4.2.2: n >= d0 + h *) - Rewrite (le_plus_minus_sym h n) in H3; [ Idtac | XEAuto ]. - LiftGenBase; DropDis; Rewrite H3; Clear H3 t3. - EApply ex2_intro; [ Idtac | EApply ty0_abst; XEAuto ]. - Rewrite lift_free; [ Idtac | XEAuto | XAuto ]. - Rewrite <- plus_n_Sm; Rewrite <- le_plus_minus; XEAuto. -(* case 5: ty0_bind *) - LiftGenBase; Rewrite H5; Rewrite H8; Rewrite H8 in H2; Clear H5 t3. - Move H0 after H2; IH e; IH '(CTail e (Bind b) x0); Ty0Correct. - EApply ex2_intro; [ Rewrite lift_bind; XEAuto | XEAuto ]. -(* case 6: ty0_appl *) - LiftGenBase; Rewrite H3; Rewrite H6; Clear H3 c t3 x y. - IH e; IH e; Pc3Gen; Pc3T; Pc3Gen; Pc3T. - Move H3 after H12; Ty0Correct; Ty0SRed; Ty0GenBase; Wf0Ty0. - EApply ex2_intro; - [ Rewrite lift_flat; Apply pc3_thin_dx; - Rewrite lift_bind; Apply pc3_tail_21; [ EApply pc3_pr3_x | Idtac ] - | EApply ty0_appl; - [ EApply ty0_conv - | EApply ty0_conv; [ EApply ty0_bind | Idtac | Idtac ] ] - ]; XEAuto. -(* case 7: ty0_cast *) - LiftGenBase; Rewrite H3; Rewrite H6; Rewrite H6 in H0. - IH e; IH e; Pc3Gen; XEAuto. - Qed. - - End ty0_gen. - - Tactic Definition Ty0Gen := - Match Context With - | [ H0: (ty0 ?1 ?2 (lift ?3 ?4 ?5) ?6); - H1: (drop ?3 ?4 ?2 ?7) |- ? ] -> - LApply (ty0_gen_lift ?1 ?2 ?5 ?6 ?3 ?4); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7); [ Clear H0; Intros H0 | XEAuto ]; - LApply H0; [ Clear H0 H1; Intros H0 | XAuto ]; - XElim H0; Intros - | [ H0: (ty0 ?1 ?2 (lift ?3 ?4 ?5) ?6); - _: (wf0 ?1 ?7) |- ? ] -> - LApply (ty0_gen_lift ?1 ?2 ?5 ?6 ?3 ?4); [ Clear H0; Intros H0 | XAuto ]; - LApply (H0 ?7); [ Clear H0; Intros H0 | XAuto ]; - LApply H0; [ Clear H0; Intros H0 | XAuto ]; - XElim H0; Intros - | _ -> Ty0GenContext. - - Section ty0_sred_props. (*************************************************) - -(*#* #start file *) - -(*#* #caption "drop preserves well-formedness" *) -(*#* #cap #alpha c in C1, e in C2, d in i *) - - Theorem wf0_drop: (c,e:?; d,h:?) (drop h d c e) -> - (g:?) (wf0 g c) -> (wf0 g e). - -(*#* #stop proof *) - - XElim c. -(* case 1: CSort *) - Intros; DropGenBase; Rewrite H; XAuto. -(* case 2: CTail k *) - Intros c IHc; XElim k; ( - XElim d; - [ XEAuto - | Intros d IHd; Intros; - DropGenBase; Rewrite H; Rewrite H1 in H0; Clear IHd H H1 e t; - Inversion H0; Clear H3 H4 b0 u ]). -(* case 2.1: Bind, d > 0 *) - Ty0Gen; XEAuto. - Qed. - -(*#* #start proof *) - -(*#* #caption "type reduction" *) -(*#* #cap #cap c, t1, t2 #alpha u in T *) - - Theorem ty0_tred: (g:?; c:?; u,t1:?) (ty0 g c u t1) -> - (t2:?) (pr3 c t1 t2) -> (ty0 g c u t2). - -(*#* #stop proof *) - - Intros; Ty0Correct; Ty0SRed; EApply ty0_conv; XEAuto. - Qed. - -(*#* #start proof *) - -(*#* #caption "subject conversion" *) -(*#* #cap #cap c, u1, u2, t1, t2 *) - - Theorem ty0_sconv: (g:?; c:?; u1,t1:?) (ty0 g c u1 t1) -> - (u2,t2:?) (ty0 g c u2 t2) -> - (pc3 c u1 u2) -> (pc3 c t1 t2). - -(*#* #stop file *) - - Intros; Pc3Unfold; Repeat Ty0SRed; XEAuto. - Qed. - - - End ty0_sred_props. - -(*#* #start file *) - -(*#* #single *) diff --git a/helm/coq-contribs/LAMBDA-TYPES/ty0_subst0.v b/helm/coq-contribs/LAMBDA-TYPES/ty0_subst0.v deleted file mode 100644 index ffd80110b..000000000 --- a/helm/coq-contribs/LAMBDA-TYPES/ty0_subst0.v +++ /dev/null @@ -1,334 +0,0 @@ -Require drop_props. -Require csubst0_defs. -Require fsubst0_defs. -Require pc3_props. -Require pc3_subst0. -Require ty0_defs. -Require ty0_gen. -Require ty0_lift. -Require ty0_props. - - Section ty0_fsubst0. (****************************************************) - -(*#* #stop macro *) - - Tactic Definition IH H0 v1 v2 v3 v4 v5 := - LApply (H0 v1 v2 v3 v4); [ Intros H_x | XEAuto ]; - LApply H_x; [ Clear H_x; Intros H_x | XEAuto ]; - LApply (H_x v5); [ Clear H_x; Intros | XEAuto ]. - - Tactic Definition IHT := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 ?1 ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) ?1 (CTail e (Bind Abbr) u0)) -> ?; - _: (subst0 ?4 ?5 ?2 ?6); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H ?4 ?5 ?1 ?6 ?9. - - Tactic Definition IHTb1 := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (subst0 ?4 ?5 ?10 ?6); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?1 (Bind ?11) ?6) ?2 ?9. - - Tactic Definition IHTb2 := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (subst0 (s (Bind ?11) ?4) ?5 ?2 ?6); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?1 (Bind ?11) ?10) ?6 ?9. - - Tactic Definition IHC := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 ?1 ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) ?1 (CTail e (Bind Abbr) u0)) -> ?; - _: (csubst0 ?4 ?5 ?1 ?6); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H ?4 ?5 ?6 ?2 ?9. - - Tactic Definition IHCb := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (csubst0 ?4 ?5 ?1 ?6); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?6 (Bind ?11) ?10) ?2 ?9. - - Tactic Definition IHTTb := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (subst0 ?4 ?5 ?10 ?6); - _: (subst0 (s (Bind ?11) ?4) ?5 ?2 ?7); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?1 (Bind ?11) ?6) ?7 ?9. - - Tactic Definition IHCT := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 ?1 ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) ?1 (CTail e (Bind Abbr) u0)) -> ?; - _: (csubst0 ?4 ?5 ?1 ?6); - _: (subst0 ?4 ?5 ?2 ?7); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H ?4 ?5 ?6 ?7 ?9. - - Tactic Definition IHCTb1 := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (csubst0 ?4 ?5 ?1 ?6); - _: (subst0 ?4 ?5 ?10 ?7); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?6 (Bind ?11) ?7) ?2 ?9. - - Tactic Definition IHCTb2 := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (csubst0 ?4 ?5 ?1 ?6); - _: (subst0 (s (Bind ?11) ?4) ?5 ?2 ?7); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?6 (Bind ?11) ?10) ?7 ?9. - - Tactic Definition IHCTTb := - Match Context With - [ H: (i:nat; u0:T; c2:C; t2:T) (fsubst0 i u0 (CTail ?1 (Bind ?11) ?10) ?2 c2 t2) -> - (wf0 ?3 c2) -> - (e:C) (drop i (0) (CTail ?1 (Bind ?11) ?10) (CTail e (Bind Abbr) u0)) -> ?; - _: (csubst0 ?4 ?5 ?1 ?6); - _: (subst0 ?4 ?5 ?10 ?7); - _: (subst0 (s (Bind ?11) ?4) ?5 ?2 ?8); - _: (drop ?4 (0) ?1 (CTail ?9 (Bind Abbr) ?5)) |- ? ] -> - IH H '(S ?4) ?5 '(CTail ?6 (Bind ?11) ?7) ?8 ?9. - -(*#* #start macro *) - -(*#* #caption "substitution preserves types" *) -(*#* #cap #cap c1, c2, e, t1, t2, t #alpha u in V *) - -(* NOTE: This breaks the mutual recursion between ty0_subst0 and ty0_csubst0 *) - Theorem ty0_fsubst0: (g:?; c1:?; t1,t:?) (ty0 g c1 t1 t) -> - (i:?; u,c2,t2:?) (fsubst0 i u c1 t1 c2 t2) -> - (wf0 g c2) -> - (e:?) (drop i (0) c1 (CTail e (Bind Abbr) u)) -> - (ty0 g c2 t2 t). - -(*#* #stop file *) - - Intros until 1; XElim H. -(* case 1: ty0_conv *) - Intros until 6; XElim H4; Intros. -(* case 1.1: fsubst0_snd *) - IHT; EApply ty0_conv; XEAuto. -(* case 1.2: fsubst0_fst *) - IHC; EApply ty0_conv; Try EApply pc3_fsubst0; XEAuto. -(* case 1.3: fsubst0_both *) - IHCT; IHCT; EApply ty0_conv; Try EApply pc3_fsubst0; XEAuto. -(* case 2: ty0_sort *) - Intros until 2; XElim H0; Intros. -(* case 2.1: fsubst0_snd *) - Subst0GenBase. -(* case 2.2: fsubst0_fst *) - XAuto. -(* case 2.3: fsubst0_both *) - Subst0GenBase. -(* case 3: ty0_abbr *) - Intros until 5; XElim H3; Intros; Clear c1 c2 t t1 t2. -(* case 3.1: fsubst0_snd *) - Subst0GenBase; Rewrite H6; Rewrite <- H3 in H5; Clear H3 H6 i t3. - DropDis; Inversion H5; Rewrite <- H6 in H0; Rewrite H7 in H1; XEAuto. -(* case 3.2: fsubst0_fst *) - Apply (lt_le_e n i); Intros; CSubst0Drop. -(* case 3.2.1: n < i, none *) - EApply ty0_abbr; XEAuto. -(* case 3.2.2: n < i, csubst0_snd *) - Inversion H0; CSubst0Drop. - Rewrite <- H10 in H7; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H8; - Clear H0 H10 H11 H12 x0 x1 x2. - DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase | XAuto ]. - IHT; EApply ty0_abbr; XEAuto. -(* case 3.2.3: n < i, csubst0_fst *) - Inversion H0; CSubst0Drop. - Rewrite <- H10 in H8; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H7; - Clear H0 H10 H11 H12 x0 x1 x3. - DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase; CSubst0Drop | XAuto ]. - IHC; EApply ty0_abbr; XEAuto. -(* case 3.2.4: n < i, csubst0_both *) - Inversion H0; CSubst0Drop. - Rewrite <- H11 in H9; Rewrite <- H12 in H7; Rewrite <- H12 in H8; Rewrite <- H12 in H9; Rewrite <- H13 in H8; - Clear H0 H11 H12 H13 x0 x1 x3. - DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase; CSubst0Drop | XAuto ]. - IHCT; EApply ty0_abbr; XEAuto. -(* case 3.2.5: n >= i *) - EApply ty0_abbr; XEAuto. -(* case 3.3: fsubst0_both *) - Subst0GenBase; Rewrite H7; Rewrite <- H3 in H4; Rewrite <- H3 in H6; Clear H3 H7 i t3. - DropDis; Inversion H6; Rewrite <- H7 in H0; Rewrite H8 in H1. - CSubst0Drop; XEAuto. -(* case 4: ty0_abst *) - Intros until 5; XElim H3; Intros; Clear c1 c2 t t1 t2. -(* case 4.1: fsubst0_snd *) - Subst0GenBase; Rewrite H3 in H0; DropDis; Inversion H0. -(* case 4.2: fsubst0_fst *) - Apply (lt_le_e n i); Intros; CSubst0Drop. -(* case 4.2.1: n < i, none *) - EApply ty0_abst; XEAuto. -(* case 4.2.2: n < i, csubst0_snd *) - Inversion H0; CSubst0Drop. - Rewrite <- H10 in H7; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H8; Rewrite <- H12; - Clear H0 H10 H11 H12 x0 x1 x2. - DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase | XAuto ]. - IHT; EApply ty0_conv; - [ EApply ty0_lift | EApply ty0_abst | EApply pc3_lift ]; XEAuto. -(* case 4.2.3: n < i, csubst0_fst *) - Inversion H0; CSubst0Drop. - Rewrite <- H10 in H8; Rewrite <- H11 in H7; Rewrite <- H11 in H8; Rewrite <- H12 in H7; Rewrite <- H12; - Clear H0 H10 H11 H12 x0 x1 x3. - DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase; CSubst0Drop | XAuto ]. - IHC; EApply ty0_abst; XEAuto. -(* case 4.2.4: n < i, csubst0_both *) - Inversion H0; CSubst0Drop. - Rewrite <- H11 in H9; Rewrite <- H12 in H7; Rewrite <- H12 in H8; Rewrite <- H12 in H9; Rewrite <- H13 in H8; Rewrite <- H13; - Clear H0 H11 H12 H13 x0 x1 x3. - DropDis; Rewrite minus_x_Sy in H0; [ DropGenBase; CSubst0Drop | XAuto ]. - IHCT; IHC; EApply ty0_conv; - [ EApply ty0_lift | EApply ty0_abst - | EApply pc3_lift; Try EApply pc3_fsubst0; Try Apply H0 - ]; XEAuto. -(* case 4.2.4: n >= i *) - EApply ty0_abst; XEAuto. -(* case 4.3: fsubst0_both *) - Subst0GenBase; Rewrite H3 in H0; DropDis; Inversion H0. -(* case 5: ty0_bind *) - Intros until 7; XElim H5; Intros; Clear H4. -(* case 5.1: fsubst0_snd *) - Subst0GenBase; Rewrite H4; Clear H4 t6. -(* case 5.1.1: subst0 on left argument *) - Ty0Correct; IHT; IHTb1; Ty0Correct. - EApply ty0_conv; - [ EApply ty0_bind | EApply ty0_bind | EApply pc3_fsubst0 ]; XEAuto. -(* case 5.1.2: subst0 on right argument *) - IHTb2; Ty0Correct; EApply ty0_bind; XEAuto. -(* case 5.1.3: subst0 on both arguments *) - Ty0Correct; IHT; IHTb1; IHTTb; Ty0Correct. - EApply ty0_conv; - [ EApply ty0_bind | EApply ty0_bind | EApply pc3_fsubst0 ]; XEAuto. -(* case 5.2: fsubst0_fst *) - IHC; IHCb; Ty0Correct; EApply ty0_bind; XEAuto. -(* case 5.3: fsubst0_both *) - Subst0GenBase; Rewrite H4; Clear H4 t6. -(* case 5.3.1: subst0 on left argument *) - IHC; IHCb; Ty0Correct; Ty0Correct; IHCT; IHCTb1; Ty0Correct. - EApply ty0_conv; - [ EApply ty0_bind | EApply ty0_bind - | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto. -(* case 5.3.2: subst0 on right argument *) - IHC; IHCTb2; Ty0Correct; EApply ty0_bind; XEAuto. -(* case 5.3.3: subst0 on both arguments *) - IHC; IHCb; Ty0Correct; Ty0Correct; IHCT; IHCTTb; Ty0Correct. - EApply ty0_conv; - [ EApply ty0_bind | EApply ty0_bind - | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto. -(* case 6: ty0_appl *) - Intros until 5; XElim H3; Intros. -(* case 6.1: fsubst0_snd *) - Subst0GenBase; Rewrite H3; Clear H3 c1 c2 t t1 t2 t3. -(* case 6.1.1: subst0 on left argument *) - Ty0Correct; Ty0GenBase; IHT; Ty0Correct. - EApply ty0_conv; - [ EApply ty0_appl | EApply ty0_appl | EApply pc3_fsubst0 ]; XEAuto. -(* case 6.1.2: subst0 on right argument *) - IHT; EApply ty0_appl; XEAuto. -(* case 6.1.3: subst0 on both arguments *) - Ty0Correct; Ty0GenBase; Move H after H10; Ty0Correct; IHT; Clear H2; IHT. - EApply ty0_conv; - [ EApply ty0_appl | EApply ty0_appl | EApply pc3_fsubst0 ]; XEAuto. -(* case 6.2: fsubst0_fst *) - IHC; Clear H2; IHC; EApply ty0_appl; XEAuto. -(* case 6.3: fsubst0_both *) - Subst0GenBase; Rewrite H3; Clear H3 c1 c2 t t1 t2 t3. -(* case 6.3.1: subst0 on left argument *) - IHC; Ty0Correct; Ty0GenBase; Clear H2; IHC; IHCT. - EApply ty0_conv; - [ EApply ty0_appl | EApply ty0_appl - | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto. -(* case 6.3.2: subst0 on right argument *) - IHCT; Clear H2; IHC; EApply ty0_appl; XEAuto. -(* case 6.3.3: subst0 on both arguments *) - IHC; Ty0Correct; Ty0GenBase; IHCT; Clear H2; IHC; Ty0Correct; IHCT. - EApply ty0_conv; - [ EApply ty0_appl | EApply ty0_appl - | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto. -(* case 7: ty0_cast *) - Clear c1 t t1; Intros until 5; XElim H3; Intros; Clear c2 t3. -(* case 7.1: fsubst0_snd *) - Subst0GenBase; Rewrite H3; Clear H3 t4. -(* case 7.1.1: subst0 on left argument *) - IHT; EApply ty0_conv; - [ Idtac - | EApply ty0_cast; - [ EApply ty0_conv; [ Idtac | Idtac | Apply pc3_s; EApply pc3_fsubst0 ] - | Idtac ] - | EApply pc3_fsubst0 ]; XEAuto. -(* case 7.1.2: subst0 on right argument *) - IHT; EApply ty0_cast; XEAuto. -(* case 7.1.3: subst0 on both arguments *) - IHT; Clear H2; IHT. - EApply ty0_conv; - [ Idtac - | EApply ty0_cast; - [ EApply ty0_conv; [ Idtac | Idtac | Apply pc3_s; EApply pc3_fsubst0 ] - | Idtac ] - | EApply pc3_fsubst0 ]; XEAuto. -(* case 7.2: fsubst0_fst *) - IHC; Clear H2; IHC; EApply ty0_cast; XEAuto. -(* case 6.3: fsubst0_both *) - Subst0GenBase; Rewrite H3; Clear H3 t4. -(* case 7.3.1: subst0 on left argument *) - IHC; IHCT; Clear H2; IHC. - EApply ty0_conv; - [ Idtac - | EApply ty0_cast; - [ EApply ty0_conv; [ Idtac | Idtac | Apply pc3_s; EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ] - | Idtac ] - | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto. -(* case 7.3.2: subst0 on right argument *) - IHCT; IHC; EApply ty0_cast; XEAuto. -(* case 7.3.3: subst0 on both arguments *) - IHC; IHCT; Clear H2; IHCT. - EApply ty0_conv; - [ Idtac - | EApply ty0_cast; - [ EApply ty0_conv; [ Idtac | Idtac | Apply pc3_s; EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ] - | Idtac ] - | EApply pc3_fsubst0; [ Idtac | Idtac | XEAuto ] ]; XEAuto. - Qed. - - Theorem ty0_csubst0: (g:?; c1:?; t1,t2:?) (ty0 g c1 t1 t2) -> - (e:?; u:?; i:?) (drop i (0) c1 (CTail e (Bind Abbr) u)) -> - (c2:?) (wf0 g c2) -> (csubst0 i u c1 c2) -> - (ty0 g c2 t1 t2). - Intros; EApply ty0_fsubst0; XEAuto. - Qed. - - Theorem ty0_subst0: (g:?; c:?; t1,t:?) (ty0 g c t1 t) -> - (e:?; u:?; i:?) (drop i (0) c (CTail e (Bind Abbr) u)) -> - (t2:?) (subst0 i u t1 t2) -> (ty0 g c t2 t). - Intros; EApply ty0_fsubst0; XEAuto. - Qed. - - End ty0_fsubst0. - - Hints Resolve ty0_subst0 : ltlc. diff --git a/helm/coq-contribs/SUBSETS/.cvsignore b/helm/coq-contribs/SUBSETS/.cvsignore deleted file mode 100644 index 419956872..000000000 --- a/helm/coq-contribs/SUBSETS/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.vo diff --git a/helm/coq-contribs/SUBSETS/.depend b/helm/coq-contribs/SUBSETS/.depend deleted file mode 100644 index 4229b4971..000000000 --- a/helm/coq-contribs/SUBSETS/.depend +++ /dev/null @@ -1,13 +0,0 @@ -Toolbox.vo: Toolbox.v st_base.vo st_logic.vo st_nat.vo st_arith.vo Standard.vo xt_fin.vo tbs_base.vo tbs_rel.vo tbs_op.vo tbs_rop.vo tbs_fun.vo tbs_fin.vo -tbs_fin.vo: tbs_fin.v tbs_fun.vo -tbs_fun.vo: tbs_fun.v tbs_rop.vo -tbs_rop.vo: tbs_rop.v tbs_op.vo -tbs_op.vo: tbs_op.v tbs_rel.vo -tbs_rel.vo: tbs_rel.v tbs_base.vo -tbs_base.vo: tbs_base.v xt_fin.vo -xt_fin.vo: xt_fin.v Standard.vo -Standard.vo: Standard.v st_base.vo st_logic.vo st_nat.vo st_arith.vo -st_arith.vo: st_arith.v st_nat.vo -st_nat.vo: st_nat.v st_logic.vo -st_logic.vo: st_logic.v st_base.vo -st_base.vo: st_base.v diff --git a/helm/coq-contribs/SUBSETS/Make b/helm/coq-contribs/SUBSETS/Make deleted file mode 100644 index 30cb09374..000000000 --- a/helm/coq-contribs/SUBSETS/Make +++ /dev/null @@ -1,14 +0,0 @@ -# List of vernac files to compile -st_base.v -st_logic.v -st_nat.v -st_arith.v -Standard.v -xt_fin.v -tbs_base.v -tbs_rel.v -tbs_op.v -tbs_rop.v -tbs_fun.v -tbs_fin.v -Toolbox.v diff --git a/helm/coq-contribs/SUBSETS/Makefile b/helm/coq-contribs/SUBSETS/Makefile deleted file mode 100644 index 45819834b..000000000 --- a/helm/coq-contribs/SUBSETS/Makefile +++ /dev/null @@ -1,196 +0,0 @@ -############################################################################## -## The Calculus of Inductive Constructions ## -## ## -## Projet Coq ## -## ## -## INRIA ENS-CNRS ## -## Rocquencourt Lyon ## -## ## -## Coq V7 ## -## ## -## ## -############################################################################## - -# WARNING -# -# This Makefile has been automagically generated by coq_makefile -# Edit at your own risks ! -# -# END OF WARNING - -# -# This Makefile was generated by the command line : -# coq_makefile -f Make -o Makefile -# - -########################## -# # -# Variables definitions. # -# # -########################## - -CAMLP4LIB=`camlp4 -where` -COQSRC=-I $(COQTOP)/kernel -I $(COQTOP)/lib \ - -I $(COQTOP)/library -I $(COQTOP)/parsing -I $(COQTOP)/pretyping \ - -I $(COQTOP)/proofs -I $(COQTOP)/syntax -I $(COQTOP)/tactics \ - -I $(COQTOP)/toplevel -I $(CAMLP4LIB) -ZFLAGS=$(OCAMLLIBS) $(COQSRC) -OPT= -COQFLAGS=-q $(OPT) $(COQLIBS) -COQC=$(COQBIN)coqc -GALLINA=gallina -COQWEB=coqweb -CAMLC=ocamlc -c -CAMLOPTC=ocamlopt -c -CAMLLINK=ocamlc -CAMLOPTLINK=ocamlopt -COQDEP=$(COQBIN)coqdep -c -COQVO2XML=coq_vo2xml - -######################### -# # -# Libraries definition. # -# # -######################### - -OCAMLLIBS=-I . -COQLIBS=-I . - -################################### -# # -# Definition of the "all" target. # -# # -################################### - -VFILES=st_base.v\ - st_logic.v\ - st_nat.v\ - st_arith.v\ - Standard.v\ - xt_fin.v\ - tbs_base.v\ - tbs_rel.v\ - tbs_op.v\ - tbs_rop.v\ - tbs_fun.v\ - tbs_fin.v\ - Toolbox.v -VOFILES=$(VFILES:.v=.vo) -VIFILES=$(VFILES:.v=.vi) -GFILES=$(VFILES:.v=.g) -HTMLFILES=$(VFILES:.v=.html) -GHTMLFILES=$(VFILES:.v=.g.html) - -all: st_base.vo\ - st_logic.vo\ - st_nat.vo\ - st_arith.vo\ - Standard.vo\ - xt_fin.vo\ - tbs_base.vo\ - tbs_rel.vo\ - tbs_op.vo\ - tbs_rop.vo\ - tbs_fun.vo\ - tbs_fin.vo\ - Toolbox.vo - -spec: $(VIFILES) - -gallina: $(GFILES) - -html: $(HTMLFILES) - -gallinahtml: $(GHTMLFILES) - -all.ps: $(VFILES) - $(COQWEB) -ps -o $@ `$(COQDEP) -sort -suffix .v $(VFILES)` - -all-gal.ps: $(GFILES) - $(COQWEB) -ps -o $@ `$(COQDEP) -sort -suffix .g $(VFILES)` - -xml:: .xml_time_stamp -.xml_time_stamp: st_base.vo\ - st_logic.vo\ - st_nat.vo\ - st_arith.vo\ - Standard.vo\ - xt_fin.vo\ - tbs_base.vo\ - tbs_rel.vo\ - tbs_op.vo\ - tbs_rop.vo\ - tbs_fun.vo\ - tbs_fin.vo\ - Toolbox.vo - $(COQVO2XML) $(COQFLAGS) $(?:%.o=%) - touch .xml_time_stamp - -#################### -# # -# Special targets. # -# # -#################### - -.PHONY: all opt byte archclean clean install depend xml - -.SUFFIXES: .v .vo .vi .g .html .tex .g.tex .g.html - -.v.vo: - $(COQC) $(COQDEBUG) $(COQFLAGS) $* - -.v.vi: - $(COQC) -i $(COQDEBUG) $(COQFLAGS) $* - -.v.g: - $(GALLINA) $< - -.v.tex: - $(COQWEB) $< -o $@ - -.v.html: - $(COQWEB) -html $< -o $@ - -.g.g.tex: - $(COQWEB) $< -o $@ - -.g.g.html: - $(COQWEB) -html $< -o $@ - -byte: - $(MAKE) all "OPT=" - -opt: - $(MAKE) all "OPT=-opt" - -include .depend - -depend: - rm .depend - $(COQDEP) -i $(COQLIBS) *.v *.ml *.mli >.depend - $(COQDEP) $(COQLIBS) -suffix .html *.v >>.depend - -xml:: - -install: - mkdir -p `$(COQC) -where`/user-contrib - cp -f *.vo `$(COQC) -where`/user-contrib - -Makefile: Make - mv -f Makefile Makefile.bak - $(COQBIN)coq_makefile -f Make -o Makefile - -clean: - rm -f *.cmo *.cmi *.cmx *.o *.vo *.vi *.g *~ - rm -f all.ps all-gal.ps $(HTMLFILES) $(GHTMLFILES) - -archclean: - rm -f *.cmx *.o - -# WARNING -# -# This Makefile has been automagically generated by coq_makefile -# Edit at your own risks ! -# -# END OF WARNING - diff --git a/helm/coq-contribs/SUBSETS/README b/helm/coq-contribs/SUBSETS/README deleted file mode 100644 index caf37357d..000000000 --- a/helm/coq-contribs/SUBSETS/README +++ /dev/null @@ -1,45 +0,0 @@ - - Contribution Padova/SUBSETS - ============================ - -This directory contains a formalization in Coq of the content of this paper -describing a theory of subsets on a intuitionistic a predicative foundation: - -G.Sambin, S.Valentini: -Building up a toolbox for Martin-Lof's type theory: subset theory. -In Proc. of Twenty-five years of constructive type theory, -Oxford U.P. (1998) pp. 221-244. - -Author & Date: Ferruccio Guidi - Department of Computer Science, University of Bologna - March 2005 -E-mail : fguidi@cs.unibo.it -WWW : http://www.cs.unibo.it/~fguidi - -Installation procedure: ------------------------ - - To get this contribution compiled, type - - make - - or - - make opt - - The main modules produced by the compilation are: - - Toolbox provides the theory of subsets and its prerequisites - - Base provides just the prerequisites - -Description: ------------- - -Further information on this contribution: ------------------------------------------ - - The latest version of this development is maintained in the CVS repository - of the HELM project and can be downloaded at: - - www.cs.unibo.it/cgi-bin/viewcvs.cgi/helm/coq-contribs/SUBSETS.tgz diff --git a/helm/coq-contribs/SUBSETS/Standard.v b/helm/coq-contribs/SUBSETS/Standard.v deleted file mode 100644 index 05f03f76e..000000000 --- a/helm/coq-contribs/SUBSETS/Standard.v +++ /dev/null @@ -1,5 +0,0 @@ -Require Export st_base. -Require Export st_logic. -Require Export st_nat. -Require Export st_arith. - diff --git a/helm/coq-contribs/SUBSETS/Toolbox.v b/helm/coq-contribs/SUBSETS/Toolbox.v deleted file mode 100644 index 9217ef93c..000000000 --- a/helm/coq-contribs/SUBSETS/Toolbox.v +++ /dev/null @@ -1,12 +0,0 @@ -Require Export st_base. -Require Export st_logic. -Require Export st_nat. -Require Export st_arith. -Require Export Standard. -Require Export xt_fin. -Require Export tbs_base. -Require Export tbs_rel. -Require Export tbs_op. -Require Export tbs_rop. -Require Export tbs_fun. -Require Export tbs_fin. diff --git a/helm/coq-contribs/SUBSETS/description b/helm/coq-contribs/SUBSETS/description deleted file mode 100644 index ac4d053e9..000000000 --- a/helm/coq-contribs/SUBSETS/description +++ /dev/null @@ -1,13 +0,0 @@ -Name: toolbox -Title: A theory of subsets on an intuitionistic and predicative foundation -Author: Ferruccio Guidi -Email: fguidi@cs.unibo.it -Homepage: http://www.cs.unibo.it/~fguidi -Institution: Department of Computer Science, University of Bologna -Address: Mura Anteo Zamboni 7, 40127 Bologna, ITALY -Date: March 31, 2005 -Description: -Url: -Keywords: subsets, toolbox -Version: 7.3.1 -Require: diff --git a/helm/coq-contribs/SUBSETS/st_arith.v b/helm/coq-contribs/SUBSETS/st_arith.v deleted file mode 100644 index 800c74c48..000000000 --- a/helm/coq-contribs/SUBSETS/st_arith.v +++ /dev/null @@ -1,534 +0,0 @@ -Require Export st_nat. - -Section Arith_Functions. - - Section head_tail_append. - - Variable S:Set. -(* -Definition hd: (List S) -> (List S) := (listrec S [_](List S) (empty ?) [_;_](fr ? (empty ?))). -*) - Definition hde: S -> (List S) -> S := [a](listrec S [_]S a [_;_;a]a). - - Definition tl: (List S) -> (List S) := (listrec S [_](List S) (empty ?) [v;_;_]v). - - Definition app: (List S) -> (List S) -> (List S) := [v](listrec S [_](List S) v [_;p;a](fr S p a)). - - Definition app_three: (List S) -> (List S) -> (List S) -> (List S) := [v,w](app (app v w)). -(* -Definition bs_app: (ListS S) -> N -> (List S) := (bs_iter (List S) (empty S) app). - -Definition rbs_app: (ListS S)->N->(List S) := (rbs_iter (List S) (empty S) app). -*) - Definition LIn: S -> (List S) -> Set := [a;l](LEx (List S) [v](LEx (List S) [w](Id (List S) (app (fr S v a) w) l))). - - End head_tail_append. - - Section slicing. - - Variable S:Set; n:N; v:(List S). - - Definition lskip: N -> (List S) -> (List S) := (natrec [_](List S)->(List S) [w]w [_;p;w](p (tl ? w))). -(* -Definition lfirst: N -> (List S) -> (List S) := (natrec [_](List S)->(List S) [_](empty S) [_;p;w](app ? (p (tl ? w)) (hd ? w))). - -Definition lslice: N -> N -> (List S) -> (List S) := [m;n;v](lfirst n (lskip m v)). - -Definition lix: N -> (List S) -> (List S) := [n;v](hd S (lskip n v)). - -Definition lixe: S -> N -> (List S) -> S := [a;n;v](hde S a (lskip n v)). - -Definition llen: (List S) -> N := (listrec S [_]N zero [_;p;_](succ p)). -*) - End slicing. - - Section arithmetic. - - Definition pred: N -> N := (tl One). - - Definition add: N -> N -> N := (app One). - - Definition add_three: N -> N -> N -> N := (app_three One). -(* -Definition bs_add: NS -> N -> N := (bs_app One). - -Definition rbs_add:NS->N->N := (rbs_app One). -*) - Definition sub: N -> N -> N := [m;n](lskip One n m). -(* -Definition sub_t: N -> N -> N -> N := [m,n](sub (sub m n)). - -Definition absv: N -> N -> N := [m;n](plus (minus m n) (minus n m)). -*) - End arithmetic. - -End Arith_Functions. - -Section Arith_Hints. - - Section arith_fold. -(* -Theorem bs_app_fold: (n:N; S:Set; ls:(ListS S); P:(List S)->Set) (P (bs_app S ls n)) -> (P (bs_iter (List S) (empty S) (app S) ls n)). -Intros. -Assumption. -Qed. -*) - Theorem pred_fold: (n:N; P:N->Set) (P (pred n)) -> (P (tl One n)). - Intros. - Assumption. - Qed. -(* -Theorem add_fold: (m,n:N; P:N->Set) (P (add m n)) -> (P (app One m n)). -Intros. -Apply (id_repl N (app One m n) (add m n)). -Apply id_r. -Assumption. -Qed. - -Theorem bs_add_fold: (n:N; ns:NS; P:N->Set) (P (bs_add ns n)) -> (P (bs_app One ns n)). -Intros. -Assumption. -Qed. -*) - End arith_fold. - -End Arith_Hints. - -Section Arith_Results. - - Section head_tail_results. - - Theorem fr_ini1: (S:Set; a,b:S; v,w:(List S)) (Id (List S) (fr S v a) (fr S w b)) -> (Id (List S) v w). - Intros. - MApply '(id_repl (List S) v (tl S (fr S v a))). - MApply '(id_repl (List S) w (tl S (fr S w b))). - MApply '(id_comp (List S)). - Qed. - - Theorem fr_ini2: (S:Set; v,w:(List S); a,b:S) (Id (List S) (fr S v a) (fr S w b)) -> (Id S a b). - Intros. - MApply '(id_repl S a (hde S a (fr S v a))). - MApply '(id_repl S b (hde S a (fr S w b))). - MApply '(id_comp (List S)). - Qed. -(* -Theorem hd_hde_id: (S:Set; a:S; v:(List S)) (GT (llen S v) zero) -> (Id (List S) (hd S v) (fr S (empty S) (hde S a v))). -Intros S a v. -MElim 'v 'listrec. -MApply '(gt_false zero). -Qed. - -Theorem tl_len: (S:Set; v:(List S)) (Id N (llen S (tl S v)) (pred (llen S v))). -Intros. -MElim 'v 'listrec. -Qed. -*) - Theorem app_empty: (S:Set; v:(List S)) (Id (List S) (app S (empty S) v) v). - Intros. - MElim 'v 'listrec. - MApply '(id_comp (List S) (List S) [v:?](fr S v s)). - Qed. -(* -Theorem app_ass: (S:Set; u,v,w:(List S)) (Id (List S) (app S (app S u v) w) (app S u (app S v w))). -Intros. -MElim 'w 'listrec. -MApply '(id_comp (List S) (List S) [v:?](fr S v y)). -Qed. -*) - Theorem lin_i: (S:Set; v,w,l:(List S); a:S) (Id (List S) (app S (fr S v a) w) l) -> (LIn S a l). - Intros. - Unfold LIn. - MApply '(lex_i (List S) v). - MApply '(lex_i (List S) w). - Qed. - - Theorem lin_e: (S:Set; a:S; l:(List S); P:Set) (LIn S a l) -> ((v,w:(List S)) (Id (List S) (app S (fr S v a) w) l) -> P) -> P. - Intros. - MElim 'H 'lex_e. - MElim 'y 'lex_e. - MApply '(H0 a0 a1). - Qed. - - Theorem lin_fr_i: (S:Set; a,b:S; l:(List S)) (LOr (LIn S a l) (Id S a b)) -> (LIn S a (fr S l b)). - Intros. - MElim 'H '(when (LIn S a l) (Id S a b)). - MApply '(lin_e S a l). - MApply '(id_repl (List S) l (app S (fr S v a) w)). - MApply '(lin_i S v (fr S w b)). - MApply '(id_repl S b a). - MApply '(lin_i S l (empty S)). - Qed. - - End head_tail_results. -(* -Section slicing_results. - -Theorem lskip_empty: (S:Set; n:N) (Id (List S) (lskip S n (empty S)) (empty S)). -Intros. -MElim 'n 'natrec. -Qed. - -Theorem lskip_tl: (S:Set; n:N; v:(List S)) (Id (List S) (lskip S n (tl S v)) (tl S (lskip S n v))). -Intros S n. -MElim 'n 'natrec. -MElim 'v 'listrec. -(MApply '(id_repl ? (lskip S n0 (empty S)) (empty S)); MApply 'id_comm). -MApply 'lskip_empty. -MApply '(H l). -Qed. - -Theorem lixe_empty: (n:N; S:Set; a:S) (Id S (lixe S a n (empty S)) a). -Intros. -MElim 'n 'natrec. -Qed. - -Theorem lixe_app_v: (S:Set; a,b:S; w,v:(List S); n:N) (GT (llen S v) n) -> (Id S (lixe S a n (app S w v)) (lixe S b n v)). -Intros S a b w v. -(Elim v using listrec; MSimpl). -Intros. -MApply '(gt_false n). -Intros l H y n. -MElim 'n 'natrec. -(Unfold lixe; Simpl). -Fold (lixe S a n0 (app S w l)) (lixe S b n0 l). (**) -MApply '(H n0). -Qed. - -Theorem lixe_le: (S:Set; a:S; v:(List S); n:N) (LE (llen S v) n) -> (Id S (lixe S a n v) a). -Intros S a v. -(Elim v using listrec; Simpl). -Intros n. -MElim 'n 'natrec. -MApply 'lixe_empty. -Intros l H y n. -MElim 'n 'natrec. -MApply '(le_false (succ (llen S l))). -(Unfold lixe; Simpl). -Fold (lixe S a n0 l). (**) -MApply '(H n0). -Qed. - -Theorem lslice_lix: (S:Set; k:N; v:(List S)) (Id (List S) (lslice S k one v) (lix S k v)). -Intros. -Unfold lslice lfirst. -MSimpl. -MApply 'app_empty. -Qed. - -End slicing_results. -*) - Section arithmetics_results. - - Theorem succ_ini: (m,n:N) (Id N (succ m) (succ n)) -> (Id N m n). - Intros. - MApply '(fr_ini1 One tt tt). - Qed. - - Theorem sub_succ: (m,n:N) (LE m n) -> - (Id N (sub (succ n) m) (succ (sub n m))). - Intros m. - Elim m using natrec. - Intros. - MSimpl. - Intros m' H n. - MElim 'n 'natrec. - MApply '(le_false m'). - MApply '(H n0). - Qed. -(* -Theorem succ_pred: (n:N) (GT n zero) -> (Id N (succ (pred n)) n). -Intros n. -MElim 'n 'natrec. -MApply '(gt_false zero). -Qed. -*) - Theorem add_zero: (n:N) (Id N (add zero n) n). - Intros. - Unfold N add zero. - MApply 'app_empty. - Qed. -(* -Theorem add_ass: (l,m,n:N) (Id N (add (add l m) n) (add l (add m n))). -Intros. -Unfold N add. -MApply 'app_ass. -Qed. -*) - Theorem add_succ: (m,n:N) (Id N (add (succ m) n) (succ (add m n))). - Intros. - (MElim 'n 'natrec; Apply succ_fold). (**) - MApply '(id_comp N). - Qed. - - Theorem add_comm: (m,n:N) (Id N (add m n) (add n m)). - Intros m. - MElim 'm 'natrec. - MApply 'add_zero. - MApply '(id_trans ? (succ (add n n0))). - MApply 'add_succ. - Apply succ_fold. (**) - MApply '(id_comp N). - MApply '(H n0). - Qed. -(* -Theorem add_pred: (n,m:N) (GT n zero) -> (Id N (succ (add (pred n) m)) (add n m)). -Intros n m. -MElim 'm 'natrec. -MApply 'succ_pred. -(Apply succ_fold; Apply succ_fold). (**) -MApply '(id_comp N). -MApply 'H. -Qed. -*) - Theorem le_comp_pred: (m,n:N) (LE m n) -> (LE (pred m) (pred n)). - Intros m. - Elim m using natrec. - Intros. - MApply 'le_wf. - Intros m' H n. - MElim 'n 'natrec. - MApply '(le_false m'). - Qed. - - Theorem le_add: (m,n:N) (LE m (add m n)). - Intros. - MElim 'n 'natrec. - MApply 'le_r. - MApply '(le_trans (add m n0)). - Apply succ_fold. (**) - MApply 'le_succ. - Qed. - - Theorem le_comp_add: (m1,m2,n:N) (LE m1 m2) -> (LE (add m1 n) (add m2 n)). - Intros m1 m2 n. - MElim 'n 'natrec. - (Apply succ_fold; Apply succ_fold). (**) - MApply 'le_comp_succ. - MApply 'H. - Qed. - - Theorem le_comp_add2: (m,n1,n2:N) (LE n1 n2) -> (LE (add m n1) (add m n2)). - Intros. - MApply '(id_repl N (add m n1) (add n1 m)). - MApply 'add_comm. - MApply '(id_repl N (add m n2) (add n2 m)). - MApply 'add_comm. - MApply 'le_comp_add. - Qed. - - Theorem gt_comp_add2: (m,n1,n2:N) (GT n1 n2) -> (GT (add m n1) (add m n2)). - Intros. - MApply 'le_gt. - MApply '(id_repl N (succ (add m n2)) (add m (succ n2))). - MApply 'le_comp_add2. - MApply 'gt_le. - Qed. - - Theorem le_comp_sub: (n,m1,m2:N) (LE m1 m2) -> (LE (sub m1 n) (sub m2 n)). - Intros n. - MElim 'n 'natrec. - MApply '(H (pred m1) (pred m2)). - MApply 'le_comp_pred. - Qed. - - Theorem gt_comp_sub: (m1,m2,n:N) (LE n m2) -> (GT m1 m2) -> (GT (sub m1 n) (sub m2 n)). - Intros. - MApply 'le_gt. - MApply '(id_repl N (succ (sub m2 n)) (sub (succ m2) n)). - MApply 'sub_succ. - MApply 'le_comp_sub. - MApply gt_le. - Qed. -(* -Theorem le_zero_add: (m,n:N) (LE (add n m) zero) -> (Id N n zero). -Intros. -MApply 'le_zero. -MApply '(le_trans (add n m)). -MApply 'le_add. -Qed. - -Theorem sub_pred_l: (n,m:N) (Id N (sub (pred m) n) (pred (sub m n))). -Intros. -Unfold N sub pred. -MApply 'lskip_tl. -Qed. -*) - Theorem sub_zero: (n,m:N) (LE m n) -> (Id N (sub m n) zero). - Intros n. - Elim n using natrec. - Intros. - MSimpl. - MApply 'le_zero. - Intros n' H m. - Elim m using natrec. - Intros. - MSimpl. - MApply '(H zero). - Intros m' H1 H2. - MSimpl. - MApply '(H m'). - Qed. - - Theorem succ_pred_e: (m,n:N) (Id N m (succ n)) -> (Id N (pred m) n). - Intros m. - Elim m using natrec. - Intros. - MApply '(n_false n). - Intros m' H n H2. - MSimpl. - MApply 'succ_ini. - Qed. - - Theorem add_sub_e: (n,m2,m1:N) (Id N m1 (add m2 n)) -> (Id N (sub m1 m2) n). - Intros n. - Elim n using natrec. - MSimpl. - Intros. - MApply 'sub_zero. - MApply '(id_repl N m2 m1). - MApply 'le_r. - Intros n' H m2. - Elim m2 using natrec. - Intros. - MSimpl. - MApply '(id_repl N (succ n') (add zero (succ n'))). - MApply 'add_zero. - Intros m2' H1 m1 H2. - MSimpl. - MApply 'pred_fold. (**) - MApply '(H1 (pred m1)). - Simpl in H2. - Fold (succ (add (succ m2') n')) in H2. (**) - MApply '(id_repl N (add m2' (succ n')) (add (succ m2') n')). - MApply '(add_succ m2' n'). - MApply 'succ_pred_e. - Qed. - - Theorem sub_add: (m,n:N) (Id N (sub (add m n) n) m). - Intros. - MApply 'add_sub_e. - MApply 'add_comm. - Qed. - - Theorem gt_add_di: (a,m,n:N) (GT (add m n) a) -> - (LOr (GT m a) (GT n (sub a m))). - Intros. - MApply '(lor_e (LE m a) (GT m a)). - MCut '(GT n (sub a m)). - MApply '(id_repl N n (sub (add n m) m)). - MApply 'sub_add. - MApply 'gt_comp_sub. - MApply '(id_repl N (add n m) (add m n)). - MApply 'add_comm. - MApply 'in_r. - MApply 'in_l. - MApply 'le_di. - Qed. -(* -Theorem app_llen: (S:Set; w,v:(List S)) (Id N (llen S (app S w v)) (add (llen S w) (llen S v))). -Intros. -MElim 'v 'listrec. -Apply succ_fold. (**) -MApply '(id_comp N). -Qed. - -Theorem bsapp_llen: (S:Set; vs:N->(List S); n:N) (Id N (llen S (bs_app S vs n)) (bs_add [n](llen S (vs n)) n)). -Intros. -MElim 'n 'natrec. -MApply '(id_repl ? (bs_add [n:N](llen S (vs n)) n0) (llen S (bs_app S vs n0))). -MApply 'app_llen. -Qed. - -Theorem rbsapp_llen: (S:Set; vs:N->(List S); n:N) (Id N (llen S (rbs_app S vs n)) (rbs_add [n](llen S (vs n)) n)). -Intros. -Unfold rbs_add rbs_app rbs_iter. -Apply bs_app_fold. -Apply bs_app_fold. -Apply bs_add_fold. (**) -MApply 'bsapp_llen. -Qed. - -Theorem lskip_llen: (S:Set; v:(List S); n:N) (Id N (llen S (lskip S n v)) (sub (llen S v) n)). -Intros. -MElim 'n 'natrec. -Fold (pred (llen S v)). (**) -MApply '(id_trans ? (pred (llen S (lskip S n0 v)))). -MApply '(id_repl ? (lskip S n0 (tl S v)) (tl S (lskip S n0 v))). -(MApply 'id_comm; MApply 'lskip_tl). -MApply 'tl_len. -MApply '(id_trans ? (pred (sub (llen S v) n0))). -MApply '(id_comp N). -(MApply 'id_comm; MApply 'sub_pred_l). -Qed. - -Theorem lskip_le: (S:Set; v:(List S); n:N) (LE (llen S v) n) -> (Id N (llen S (lskip S n v)) zero). -Intros. -MApply '(id_trans ? (sub (llen S v) n)). -MApply 'lskip_llen. -MApply 'sub_zero. -Qed. - -Theorem lslice_succ_r: (S:Set; v:(List S); k,n:N) (Id (List S) (lslice S k (succ n) v) (app S (lslice S (succ k) n v) (lix S k v))). -Intros. -(Unfold lslice lix; MSimpl). -MApply '(id_repl ? (tl S (lskip S k v)) (lskip S k (tl S v))). -MApply 'lskip_tl. -Qed. - -Theorem lslice_succ_l: (S:Set; v:(List S); n,k:N) (Id (List S) (lslice S k (succ n) v) (app S (lix S (add k n) v) (lslice S k n v))). -Intros S v n. -MElim 'n 'natrec. -MApply 'lslice_lix. -MApply '(id_repl ? (succ (add k n0)) (add (succ k) n0)). -MApply 'add_succ. -MApply '(id_repl ? (lslice S k (succ n0) v) (app S (lslice S (succ k) n0 v) (lix S k v))). -(MApply 'id_comm; MApply 'lslice_succ_r). -MApply '(id_repl ? (lslice S k (succ (succ n0)) v) (app S (lslice S (succ k) (succ n0) v) (lix S k v))). -(MApply 'id_comm; MApply 'lslice_succ_r). -MApply '(id_trans (List S) (app S (app S (lix S (add (succ k) n0) v) (lslice S (succ k) n0 v)) (lix S k v))). -MApply '(id_comp (List S) (List S) [u:?](app S u (lix S k v))). -MApply '(H (succ k)). -Apply succ_fold. (**) -MApply '(id_repl N (succ (add k n0)) (add (succ k) n0)). -MApply 'add_succ. -MApply 'app_ass. -Qed. - -Theorem lslice_add: (S:Set; v:(List S); k,m,n:N) (Id (List S) (lslice S k (add m n) v) (app S (lslice S (add k m) n v) (lslice S k m v))). -Intros. -MElim 'n 'natrec. -MApply '(id_repl ? (lslice S (add k m) zero v) (empty S)). -(MApply 'id_comm; MApply 'app_empty). -MApply '(id_trans ? (app S (lix S (add k (add m n0)) v) (lslice S k (add m n0) v))). -Apply succ_fold. (**) -MApply 'lslice_succ_l. -MApply '(id_repl ? (lslice S (add k m) (succ n0) v) (app S (lix S (add (add k m) n0) v) (lslice S (add k m) n0 v))). -(MApply 'id_comm; MApply 'lslice_succ_l). -MApply '(id_trans ? (app S (lix S (add (add k m) n0) v) (app S (lslice S (add k m) n0 v) (lslice S k m v)))). -MApply '(id_repl ? (add k (add m n0)) (add (add k m) n0)). -MApply 'add_ass. -MApply '(id_comp (List S) (List S) [w](app S (lix S (add (add k m) n0) v) w)). -(MApply 'id_comm; MApply 'app_ass). -Qed. - -Theorem lslice_bsadd: (S:Set; v:(List S); k:N; ms:NS; n:N) (Id (List S) (lslice S k (bs_add ms n) v) (bs_app S [m](lslice S (add k (bs_add ms m)) (ms m) v) n)). -Intros. -(MElim 'n 'natrec; Fold (add (ms n0) (bs_add ms n0))). -MApply '(id_repl ? (bs_app S [m:N](lslice S (add k (bs_add ms m)) (ms m) v) n0) (lslice S k (bs_add ms n0) v)). -MApply '(id_repl ? (add (ms n0) (bs_add ms n0)) (add (bs_add ms n0) (ms n0))). -MApply 'add_comm. -MApply 'lslice_add. -Qed. - -Theorem lslice_rbsadd: (S:Set; v:(List S); k:N; ms:NS; n:N) (Id (List S) (lslice S k (rbs_add ms n) v) (rbs_app S [m](lslice S (add k (bs_add ms m)) (ms m) v) n)). -Intros. -Unfold rbs_add rbs_app rbs_iter. -Apply bs_app_fold. -Apply bs_app_fold. -Apply bs_add_fold. (**) -MApply 'lslice_bsadd. -Qed. -*) -End arithmetics_results. - -End Arith_Results. diff --git a/helm/coq-contribs/SUBSETS/st_base.v b/helm/coq-contribs/SUBSETS/st_base.v deleted file mode 100644 index 79b250724..000000000 --- a/helm/coq-contribs/SUBSETS/st_base.v +++ /dev/null @@ -1,185 +0,0 @@ -Section Base_Definitions. - - Section inductive_sets. - - Inductive Set Empty := . - - Inductive Set List [S:Set] := empty: (List S) | fr: (List S) -> S -> (List S). - - Inductive Id [S:Set; a:S]: S -> Set := id_r: (Id S a a). - - Inductive Set Pi [S:Set; P:S->Set] := abst: ((a:S) (P a)) -> (Pi S P). - - Inductive Set Sigma [S:Set; P:S->Set] := pair: (a:S) (P a) -> (Sigma S P). - - Inductive Set Plus [S,T:Set] := in_l : S -> (Plus S T) | in_r : T -> (Plus S T). -(* -Inductive SId [A:Set] : Set -> Set := sid_r: (SId A A). -*) - End inductive_sets. - - Section eliminators. - - Definition efq := Empty_rec. - - Definition listrec := List_rec. - - Definition idrec := Id_rec. - - Definition fsplit := Pi_rec. - - Definition psplit := Sigma_rec. - - Definition when := Plus_rec. - - Definition EmptyFam := Empty_rect. - - Definition ListFam := List_rect. - - Definition IdFam := Id_rect. - - Definition PiFam := Pi_rect. - - Definition SigmaFam := Sigma_rect. - - Definition PlusFam := Plus_rect. - - Definition ap: (S:Set; P:S->Set) (Pi S P) -> (a:S) (P a). - Intros. - Elim H. - Intros. - Apply (p a). - Defined. - - Definition sp: (S:Set; P:S->Set) (Sigma S P) -> S. - Intros. - Elim H. - Intros. - Assumption. - Defined. - - Definition sq: (S:Set; P:S->Set; p:(Sigma S P)) (P (sp S P p)). - Intros. - Elim p. - Intros. - Unfold sp. - Simpl. - Assumption. - Defined. - - End eliminators. - - Section functions. - - Definition id: (S:Set) S -> S. - Intros. - Assumption. - Defined. - - Definition comp: (R,S,T:Set) (R -> S) -> (S -> T) -> (R -> T). - Intros. - Apply H0. - Apply H. - Assumption. - Defined. - - End functions. - -End Base_Definitions. - -Section Base_Results. - - Section general_results. - - Theorem mcut: (S,T:Set) S -> (S -> T) -> T. - Intros. - Apply H0. - Assumption. - Qed. - - End general_results. - - Section ID_results. - - Theorem id_repl: (S:Set; a,b:S; P:S->Set) (Id ? b a) -> (P b) -> (P a). - Intros. - Elim H. - Assumption. - Qed. - - Theorem id_comm: (S:Set; a,b:S) (Id ? b a) -> (Id ? a b). - Intros. - Apply (id_repl S a b). - Assumption. - Apply id_r. - Qed. - - Theorem id_trans: (S:Set; c,a,b:S) (Id S a c) -> (Id S c b) -> (Id S a b). - Intros. - Apply (id_repl S b c). - Assumption. - Assumption. - Qed. - - Theorem id_comp: (S,T:Set; f:S->T; a,b:S) (Id S a b) -> (Id T (f a) (f b)). - Intros. - Apply (id_repl ? b a). - Assumption. - Apply id_r. - Qed. - - Axiom id_ext: (S,T:Set; f,g:S->T) ((a:S) (Id T (f a) (g a))) -> (Id S->T f g). - - End ID_results. -(* -Section SID_results. - -Theorem sid_repl: (A,B:Set; P:Set->Set) (SId B A) -> (P B) -> (P A). -Intros. -Elim H. -Assumption. -Qed. - -Theorem sid_comp: (P:Set->Set; A,B:Set) (SId A B) -> (SId (P A) (P B)). -Intros. -Apply (sid_repl B A). -Assumption. -Apply sid_r. -Qed. - -Axiom sid_ext: (S:Set; P:(S->Set)->Set; Q,R:S->Set) ((a:S) (SId (Q a) (R a))) -> (SId (P Q) (P R)). - -End SID_results. -*) - Section indipendence. - - Axiom list_p4: (S:Set; l:(List S); a:S) (Id (List S) (empty S) (fr S l a)) -> Empty. - - Axiom plus_p4: (S:Set; a:S; T:Set; b:T) (Id (Plus S T) (in_l S T a) (in_r S T b)) -> Empty. -(* -Axiom id_ctt: (S:Set) (P:(a:S)(Id S a a) -> Set) ((a:S) (P a (id_r S a))) -> (a:S; p:(Id S a a)) (P a p). -*) - End indipendence. - -End Base_Results. - -Tactic Definition MTrivial := Try Apply id_r; (* Try Apply sid_r; *) -(*|*) Try Assumption; Try Apply id_comm; - Try Assumption; Try Apply id_comm. - -Tactic Definition MFold := Idtac. - -Tactic Definition MRed := Idtac. - -Tactic Definition MAuto := MTrivial; MFold; MRed. - -Tactic Definition MSimpl := Simpl; MAuto. - -Tactic Definition MElim v e := Pattern v; Elim v using e; Simpl; - Intros; MAuto. - -Tactic Definition MApply t := Apply t; Intros; MTrivial. - -Tactic Definition MCut t := MApply '(mcut t). - -Tactic Definition UnIntros T t := Apply (mcut T); Try Assumption; Clear t. diff --git a/helm/coq-contribs/SUBSETS/st_logic.v b/helm/coq-contribs/SUBSETS/st_logic.v deleted file mode 100644 index 0455d3877..000000000 --- a/helm/coq-contribs/SUBSETS/st_logic.v +++ /dev/null @@ -1,253 +0,0 @@ -Require Export st_base. - -Section Logic_Sets. - - Section logic_aliases. -(* -Definition All := Pi. -*) - Definition LEx := Sigma. - - Definition LBot := Empty. - - Definition LOr := Plus. - - Definition LImp: Set -> Set -> Set := [S,T](Pi S [_:S]T). - - Definition LAnd: Set -> Set -> Set := [S,T](Sigma S [_:S]T). - - Definition LNot: Set -> Set := [S](LImp S LBot). - - Definition LTop: Set := (LNot LBot). - - Definition LIff: Set -> Set -> Set := [S,T](LAnd (LImp S T) (LImp T S)). - - Definition limp_i: (S,T:Set) (S -> T) -> (LImp S T). - Intros. - MApply '(abst S [_]T H). - Defined. - - Definition limp_e: (S,T:Set) (LImp S T) -> (S->T). - Intros. - MApply '(ap S [_:S]T H H0). - Defined. - - Definition land_i: (S,T:Set) S -> T -> (LAnd S T). - Intros. - MApply '(pair S [_:S]T H H0). - Defined. - - Definition land_e2: (T,S:Set) (LAnd S T) -> S. - Intros. - MElim H psplit. - Defined. - - Definition land_e1: (S,T:Set) (LAnd S T) -> T. - Intros. - MElim H psplit. - Defined. -(* -Definition all_e: (S:Set; a:S; P:S->Set) (All S P) -> (P a) := [S;a;P,f](ap S P f a). -*) - Definition lex_i: (S:Set; a:S; P:S->Set) (P a) -> (LEx S P). - Intros. - MApply '(pair S P a H). - Defined. - - Definition lex_e: (S:Set; P:S->Set; P0:(LEx S P)->Set) ((a:S; y:(P a)) (P0 (lex_i S a P y))) -> (s:(LEx S P)) (P0 s). - Intros. - MElim s psplit. - MApply '(H a p). - Defined. - - End logic_aliases. - - Section unit. - - Definition One: Set := (List Empty). - - Definition tt: One := (empty Empty). - - Definition onerec: (P:One->Set) (P tt) -> (u:One) (P u). - Intros. - MElim 'u 'listrec. - MElim 's 'efq. - Defined. - - Definition OneFam: (P:One->Type) (P tt) -> (u:One) (P u). - Intros. - MElim 'u 'ListFam. - MElim 's 'EmptyFam. - Defined. - - End unit. - - Section booleans. - - Definition Boole: Set := (Plus One One). - - Definition false: Boole := (in_l One One tt). - - Definition true: Boole := (in_r One One tt). - - Definition ite: (P:Boole->Set) (P false) -> (P true) -> (b:Boole) (P b). - Intros. - MElim 'b 'when. - MElim 's 'onerec. - MElim 't 'onerec. - Defined. - - Definition BooleFam: (P:Boole->Type) - (P false) -> (P true) -> (b:Boole) (P b). - Intros. - MElim 'b 'PlusFam. - MElim 's 'OneFam. - MElim 't 'OneFam. - Defined. -(* -Definition BF: Set -> Set -> Boole -> Set := (BooleFam [_]Set). - -Definition Two: Set := Boole. -*) - End booleans. - -End Logic_Sets. - -Section Logic_Hints. -(* -Section logic_fold. - -Theorem Top_fold: (P:Set->Set) (P Top) -> (P (Imp Bot Bot)). -Intros. -Apply (sid_repl (Imp Bot Bot) Top). -Apply sid_r. -Assumption. -Qed. - -End logic_fold. -*) - Section logic_red. - - Theorem LTop_red: LTop. - Unfold LTop LNot. - Apply limp_i. - Intros. - Assumption. - Qed. -(* -Theorem Top_And_red: (A:Set) A -> (And Top A). -Intros. -Apply and_i. -Apply Top_red. -Assumption. -Qed. -*) - End logic_red. - -End Logic_Hints. - -Section Logic_Results. - - Section boole_indipendence. - - Axiom lor_p4: (A,B:Set; a:A; b:B) - (Id (LOr A B) (in_l A B a) (in_r A B b)) -> Empty. - - Axiom boole_p4: (Id Boole false true) -> Empty. (**) - - End boole_indipendence. - - Section logic_results. - - Theorem lor_e: (A,B,C:Set) (A -> C) -> (B -> C) -> (LOr A B) -> C. - Intros. - MApply '(when A B [_:?]C). - MApply '(H s). - MApply '(H0 t). - Qed. - - Theorem lnot_i: (S:Set) (S -> LBot) -> (LNot S). - Intros. - Unfold LNot. - MApply 'limp_i. - MApply 'H. - Qed. - - Theorem lnot_e: (S:Set) (LNot S) -> S -> LBot. - Unfold LNot. - Intros. - MApply '(limp_e S). - Qed. - - Theorem liff_i: (A,B:Set) (A -> B) -> (B -> A) -> (LIff A B). - Intros. - Unfold LIff. - (MApply land_i; MApply limp_i). - MApply H. - MApply H0. - Qed. - - Theorem liff_e1: (A,B:Set) A -> (LIff A B) -> B. - Unfold LIff. - Intros. - MApply '(limp_e A). - MApply '(land_e2 (LImp B A)). - Qed. - - Theorem liff_e2: (B,A:Set) B -> (LIff A B) -> A. - Unfold LIff. - Intros. - MApply '(limp_e B). - MApply '(land_e1 (LImp A B)). - Qed. -(* -Theorem iff_trans: (C,A,B:Set) (Iff A C) -> (Iff C B) -> (Iff A B). -Intros. -MApply iff_i. -MApply (iff_e1 C). -MApply (iff_e1 A). -MApply (iff_e2 C). -MApply (iff_e2 B). -Qed. - -Theorem iff_sym: (A,B:Set) (Iff B A) -> (Iff A B). -Intros. -MApply iff_i. -MApply (iff_e2 A). -MApply (iff_e1 B). -Qed. -*) - Theorem lnot_liff_lbot: (A:Set) (LIff A (LNot A)) -> LBot. - Intros. - MApply '(lnot_e (LNot A)). - MApply 'lnot_i. - MApply '(lnot_e A). - MApply '(liff_e2 (LNot A)). - MApply 'lnot_i. - MApply '(lnot_e A). - MApply '(liff_e1 A). - Qed. -(* -Theorem imp_r: (A:Set) (Imp A A). -Intros. -MApply imp_i. -Qed. - -Theorem imp_trans: (C,A,B:Set) (Imp A C) -> (Imp C B) -> (Imp A B). -Intros. -MApply imp_i. -MApply (imp_e C). -MApply (imp_e A). -Qed. - -Theorem all_sigma_l: (S:Set; T:S->Set; P:(Sigma S T)->Set) ((a:S; b:(T a)) (P (pair S T a b))) -> (p:(Sigma S T)) (P p). -Intros. -MElim p psplit. -Apply (H a y). -Qed. -*) - End logic_results. - -End Logic_Results. - - diff --git a/helm/coq-contribs/SUBSETS/st_nat.v b/helm/coq-contribs/SUBSETS/st_nat.v deleted file mode 100644 index 23081f9ff..000000000 --- a/helm/coq-contribs/SUBSETS/st_nat.v +++ /dev/null @@ -1,264 +0,0 @@ -Require Export st_logic. - -Section Nat_Sets. - - Section natural_numbers. - - Definition N: Set := (List One). - - Definition zero: N := (empty One). - - Definition succ: N -> N := [n](fr One n tt). - - Definition natrec: (P:N->Set) (P zero) -> - ((n:N) (P n) -> (P (succ n))) -> (n:N)(P n). - Intros. - MElim 'n 'listrec. - MElim 's 'onerec. - MApply '(H0 l). - Defined. - - Definition NatFam: (P:N->Type) (P zero) -> - ((n:N) (P n) -> (P (succ n))) -> (n:N)(P n). - Intros. - MElim 'n 'ListFam. - MElim 's 'OneFam. - MApply '(X0 l). - Defined. - - Definition one: N := (succ zero). -(* -Definition two:N := (succ one). -*) - End natural_numbers. -(* -Section sequences. - -Definition ListS := [S:Set](N -> (List S)). - -Definition BooleS: Set := N -> Boole. - -Definition NS := N -> N. - -Definition trues:BooleS := [_]true. - -End sequences. -*) -End Nat_Sets. - -Section Nat_Functions. -(* -Section bounded_iteration. - -Variable S:Set; e:S; f:S->S->S. - -Definition bs_iter: (N -> S) -> N -> S := [s](natrec [_]S e [m](f (s m))). - -Definition rbs_iter: (N -> S) -> N -> S := [s;n](bs_iter s (succ n)). - -End bounded_iteration. - -Section nat_boolean_eq. - -Variable S:Set. - -Definition n_id: N -> N -> Boole := (natrec [_]N->Boole (natrec [_]Boole true [_;_]false) - [_;pm'](natrec [_]Boole false [n';_](pm' n'))). - -Definition ifeq: N -> N -> S -> S -> S := [m,n;a;b](ite [_]S b a (n_id m n)). - -Definition ifz: N -> S -> S -> S := [n;a;b](natrec [_]S a [_;_]b n). - -End nat_boolean_eq. -*) - Section less_equal. - - Definition b_le: N -> N -> Boole := (natrec [_]N->Boole [n]true [m';p](natrec [_]Boole false [n';_](p n'))). - - Definition LE: N -> N -> Set := [m,n](Id Boole (b_le m n) true). - - Definition GT: N -> N -> Set := [m,n](Id Boole (b_le m n) false). - - End less_equal. - -End Nat_Functions. - -Section Nat_Hints. - - Section nat_fold. - - Theorem succ_fold: (n:N; P:N->Set) (P (succ n)) -> (P (fr One n tt)). - Intros. - Assumption. - Qed. -(* -Theorem LE_fold: (m,n:N; P:Set->Set) (P (LE m n)) -> (P (Id Boole (b_le m n) true)). -Intros. -Assumption. -Qed. -*) - End nat_fold. - -End Nat_Hints. - -Section Nat_Results. - - Section nat_indipendence. - - Theorem n_p4: (n:N) (Id N zero (succ n)) -> Empty. - Intros. - MApply '(list_p4 One n tt). - Qed. - - Theorem n_false: (n:N; P:Set) (Id N zero (succ n)) -> P. - Intros. - MCut 'Empty. - MApply '(n_p4 n). - MElim 'H0 'efq. - Qed. - - End nat_indipendence. - - Section b_le_results. - - Theorem le_wf: (n:N) (LE zero n). - Intros. - Unfold LE. - MApply 'id_r. - Qed. - - Theorem le_comp_succ: (m,n:N) (LE m n) -> (LE (succ m) (succ n)). - Intros. - Assumption. - Qed. -(* -Theorem le_ssucc: (m,n:N) (LE (succ m) (succ n)) -> (LE m n). -Intros. -Assumption. -Qed. -*) - Theorem le_false: (n:N; P:Set) (LE (succ n) zero) -> P. - Intros n P. - Unfold LE. - MSimpl. - Intros. - MCut 'Empty. - MApply 'boole_p4. - MElim 'H0 'efq. - Qed. - - Theorem le_r: (n:N) (LE n n). - Intros. - MElim 'n 'natrec. - MApply 'le_wf. - Qed. - - Theorem le_succ: (n:N) (LE n (succ n)). - Intros. - MElim 'n 'natrec. - MApply 'le_wf. - Qed. - - Theorem le_zero: (n:N) (LE n zero) -> (Id N n zero). - Intros n. - MElim 'n 'natrec. - MApply '(le_false n0). - Qed. - - Theorem le_trans: (b,c,a:N) (LE a b) -> (LE b c) -> (LE a c). - Intros b. - Elim b using natrec. - Intros c a. - MElim 'a 'natrec. - MApply '(le_false n). - Intros b' H c. - Elim c using natrec. - Intros. - MApply '(le_false b'). - Intros c' H' a. - MElim 'a 'natrec. - MApply 'le_comp_succ. - MCut '(LE n b'). - MCut '(LE b' c'). - MApply '(H c' n). - Qed. - - Theorem gt_wf: (n:N) (GT (succ n) zero). - Intros. - Unfold GT. - MApply 'id_r. - Qed. - - Theorem gt_comp_succ: (m,n:N) (GT m n) -> (GT (succ m) (succ n)). - Intros. - Assumption. - Qed. - - Theorem gt_false: (n:N; P:Set) (GT zero n) -> P. - Intros n P. - Unfold GT. - MSimpl. - Intros. - MCut 'Empty. - MApply 'boole_p4. - MElim 'H0 'efq. - Qed. - - Theorem le_gt: (m,n:N) (LE (succ n) m) -> (GT m n). - Intros m. - Elim m using natrec. - Intros. - MApply '(le_false n). - Intros m' H n. - Elim n using natrec. - Intros. - MApply 'gt_wf. - Intros n' H1 H2. - MApply 'gt_comp_succ. - MApply '(H n'). - Qed. - - Theorem gt_le: (m,n:N) (GT m n) -> (LE (succ n) m). - Intros m. - Elim m using natrec. - Intros. - MApply '(gt_false n). - Intros m' H n. - MElim 'n natrec. - MApply 'le_comp_succ. - MApply 'le_wf. - MApply 'le_comp_succ. - MApply '(H n0). - Qed. - - Theorem le_gt_trans: (b,c,a:N) (LE b a) -> (GT b c) -> (GT a c). - Intros. - MApply 'le_gt. - MApply '(le_trans b). - MApply 'gt_le. - Qed. - - Theorem boole_di: (b:Boole) (LOr (Id Boole b true) (Id Boole b false)). - Intros. - MElim 'b 'ite. - MApply 'in_r. - MApply 'in_l. - Qed. - - Theorem le_di: (m,n:N) (LOr (LE m n) (GT m n)). - Intros. - Unfold LE GT. - MApply '(boole_di (b_le m n)). - Qed. -(* -Theorem ble_trip: (m,n:N; P:N->Set) ((n:N) (LE n m) -> (P n)) -> ((n:N) (GT n m) -> (P n)) -> (P n). -Intros. -MApply '(or_e (LE n m) (GT n m)). -MApply '(H n). -MApply '(H0 n). -MApply 'ble_tri. -Qed. -*) - End b_le_results. - -End Nat_Results. diff --git a/helm/coq-contribs/SUBSETS/tbs_base.v b/helm/coq-contribs/SUBSETS/tbs_base.v deleted file mode 100644 index 88e083b33..000000000 --- a/helm/coq-contribs/SUBSETS/tbs_base.v +++ /dev/null @@ -1,195 +0,0 @@ -(** This module (Toolbox - subsets: basics) defines: - - subset membership: [Eps] (epsilon) - - empty subset: [SBot] (subset bottom) - - full subset: [STop] (subset top) - - singleton: [Sing] (singleton) - - relative universal quantifier: [RAll] (relative all) - - relative existential quantifier: [REx] (relative exists) - - and provides: - - introduction and elimination rules for the defined constants - - epsilon conditions: [eps_1], [eps_2] - - alternative form of epsilon with sigma: [eps2] - -% \hrule % - - We require the support for finite sets and finite domain functions ([xt_fin]) - that includes the basic type theory (the [st] package). - - *) -Require Export xt_fin. - -Section Subset_Definitions. - - Section subset_membership. - -(** Epsilon: [(Eps S a U)] corresponds to $ a \e_S U $. *) - Definition Eps: (S:Set) S -> (S -> Set) -> Set. - Intros S a U. - Exact (LAnd (U a) (Id S a a)). - Defined. - - End subset_membership. - - Section subset_constants. - -(** Subset bottom: [(SBot S)] corresponds to $ \sbot_S $. *) - Definition SBot: (S:Set) S -> Set. - Intros. - Exact LBot. - Defined. - -(** Subset top: [(STop S)] corresponds to $ \stop_S $, %{\ie}% to $S$ as a subset of itself. *) - Definition STop: (S:Set) S -> Set. - Intros. - Exact LTop. - Defined. - -(** Singleton: [(Sing S a)] corresponds to $ \subset{a} $. *) - Definition Sing: (S:Set) S -> (S -> Set). - Intros S a b. - Exact (Id S a b). - Defined. - - End subset_constants. - - Section relative_quantification. - -(** Relative all: [(RAll S U P)] corresponds to $ (\lall x \e U) P(x) $. *) - Definition RAll: (S:Set) (S -> Set) -> (S -> Set) -> Set. - Intros S U P. - Exact (a:S) (Eps S a U) -> (P a). - Defined. - -(** Relative exists: [(REx S U P)] corresponds to $ (\lex x \e U) P(x) $. *) - Definition REx: (S:Set) (S -> Set) -> (S -> Set) -> Set. - Intros S U P. - Exact (LEx S [a](LAnd (Eps S a U) (P a))). - Defined. - - End relative_quantification. - -End Subset_Definitions. - -Section Subset_Results. - - Section epsilon_conditions. - -(** Epsilon elimination: $ a \e U \limp U(a) $. *) - Theorem eps_e: (S:Set; a:S; U:S->Set) (Eps S a U) -> (U a). - Unfold Eps. - Intros. - MApply '(land_e2 (Id S a a)). - Qed. - -(** Epsilon introduction: $ U(a) \limp a \e U $. *) - Theorem eps_i: (S:Set; a:S; U:S->Set) (U a) -> (Eps S a U). - Unfold Eps. - Intros. - MApply 'land_i. - Qed. - -(** Epsilon condition 1: $ a \e U \liff U(a) $. *) - Theorem eps_1: (S:Set; U:(S -> Set)) (a:S)(LIff (Eps S a U) (U a)). - Intros. - MApply 'liff_i. - MApply '(eps_e S a). - MApply 'eps_i. - Qed. - -(** Epsilon condition 2: $ a \e_S U \limp a \in S $. *) - Theorem eps_2: (S:Set; a:S; U:(S -> Set)) (Eps S a U) -> S. - Intros. - Exact a. - Qed. - -(** Epsilon in sigma form: $ a \e_S U \liff (\lex z \in (\Sigma x \in S) U) Id(S, p(z), a) $. *) - Theorem eps2: (S:Set; a:S; U:(S -> Set)) (LIff (Eps S a U) (LEx (Sigma S U) [z](Id S (sp S U z) a))). - Intros. - MApply 'liff_i. - MCut '(U a). - MApply 'eps_e. - MApply '(lex_i (Sigma S U) (pair S U a H0)). - MApply 'eps_i. - MElim 'H 'lex_e. - MApply '(id_repl ? a (sp S U a0)). - MElim 'a0 psplit. - Qed. - - End epsilon_conditions. - - Section subset_top_bottom. - -(** Subset top, epsilon introduction: $ a \e \stop $. *) - Theorem stop_eps_i: (S:Set; a:S) (Eps S a (STop S)). - Intros. - MApply 'eps_i. - Unfold STop. - MApply 'LTop_red. - Qed. - -(** Subset bottom, epsilon elimination: $ a \e \sbot \limp \lbot $. *) - Theorem sbot_eps_e: (S:Set; a:S) (Eps S a (SBot S)) -> LBot. - Intros. - MApply '(eps_e S a). - Qed. - - End subset_top_bottom. - - Section singleton. - -(** Singleton, epsilon introduction: $ Id(S, a, b) \limp b \e \subset{a} $. *) - Theorem sing_eps_i: (S:Set; b,a:S) (Id S a b) -> (Eps S b (Sing S a)). - Intros. - MApply 'eps_i. - Qed. - -(** Singleton, epsilon elimination: $ b \e \subset{a} \limp Id(S, a, b) $. *) - Theorem sing_eps_e: (S:Set; a,b:S) (Eps S b (Sing S a)) -> (Id S a b). - Intros. - MApply 'eps_e. - Qed. - - End singleton. - - Section relative_universal. - -(** Relative all introduction: $ ((\lall a \in S)\ a \e U \limp P(a)) \limp (\lall x \e U) P(x) $. *) - Theorem rall_i: (S:Set; U:S->Set; P:S->Set) ((a:S) (Eps S a U) -> (P a)) -> (RAll S U P). - Unfold RAll. - Intros. - MApply '(H a). - Qed. - -(** Relative all elimination: $ a \e U \limp (\lall x \e U) P(x) \limp P(a) $. *) - Theorem rall_e: (S:Set; a:S; U:S->Set; P:S->Set) (Eps S a U) -> (RAll S U P) -> (P a). - Intros. - Unfold RAll in H0. - MApply '(H0 a). - Qed. - - End relative_universal. - - Section relative_existential. - -(** Relative exists introduction: $ a \e U \limp P(a) \limp (\lex x \e U) P(x) $. *) - Theorem rex_i: (S:Set; a:S; U:S->Set; P:S->Set) (Eps S a U) -> (P a) -> (REx S U P). - Intros. - Unfold REx. - MApply '(lex_i S a). - MApply 'land_i. - Qed. - -(** Relative exists elimination: $ ((\lall a \in S)\ a \e U \limp P(a) \limp T) \limp (\lex x \e U) P(x) \limp T $. *) - Theorem rex_e: (S:Set; U:S->Set; P:S->Set; T:Set) ((a:S) (Eps S a U) -> (P a) -> T) -> (REx S U P) -> T. - Intros. - Unfold REx in H0. - MElim 'H0 'lex_e. - MApply '(H a). - MApply '(land_e2 (P a)). - MApply '(land_e1 (Eps S a U)). - Qed. - - End relative_existential. - -End Subset_Results. diff --git a/helm/coq-contribs/SUBSETS/tbs_fin.v b/helm/coq-contribs/SUBSETS/tbs_fin.v deleted file mode 100644 index cd618b889..000000000 --- a/helm/coq-contribs/SUBSETS/tbs_fin.v +++ /dev/null @@ -1,119 +0,0 @@ -Require Export tbs_fun. - -Section Subset_Finite_Definitions. - - Section subsets_from_lists. - - Definition SList: (S:Set) (List S) -> (S -> Set) := [S](ListFam S [_](S->Set) (SBot S) [_;p;a](SOr S p (Sing S a))). - - End subsets_from_lists. - - Section subset_finite_predicate. - - Definition WFin: (S:Set) (S -> Set) -> Set := [S;U](LEx (FDF S) [z](SbE S U (FDFImg S z))). -(* -Definition SFin: (S:Set) (S -> Set) -> Set := [S;U](Ex (FDF S) [z](SEq S U (FDFImg S z))). -*) - End subset_finite_predicate. -(* -Section subset_finite_quantification. - -Definition FAll: (S:Set) ((Part S) -> Set) -> Set := [S;P](z:(FDF S))(P (SFImg S z)). - -Definition FEx: (S:Set) ((Part S) -> Set) -> Set := [S;P](Ex (FDF S) [z](P (SFImg S z))). - -End subset_finite_quantification. -*) -End Subset_Finite_Definitions. - -Section Subset_Finite_Results. - - Section subset_list. - - Theorem slist_eps_i: (S:Set; a:S; l:(List S)) (LIn S a l) -> (Eps S a (SList S l)). - Intros S a l. - MElim l listrec. - MCut Empty. - Apply (lin_e S a (empty S)). - Assumption. - Intros v w. - MElim w listrec. - MApply '(list_p4 S v a). - MApply '(list_p4 S (app S (fr S v a) l0) s). - MElim H0 efq. - Apply (lin_e S a (fr S l0 s)). - Assumption. - Intros v w. - MElim w listrec. - MApply 'sor_eps_i1. - MApply 'sing_eps_i. - MApply '(fr_ini2 S l0 v). - MApply 'sor_eps_i2. - MApply 'H. - MApply '(lin_i S v l1). - MApply '(fr_ini1 S s0 s). - Qed. - - - Theorem slist_xfdfl: (S:Set; n:N; v:(Fin n)->S) (SbE S (Img (Fin n) S v) (SList S (xfdf_list S n v))). - Intros. - MApply 'sbe_i. - MApply 'slist_eps_i. - MApply '(img_eps_e (Fin n) S v a). - MApply '(id_repl S a (v i)). - MApply 'xfdfl_lin. - Qed. - - Theorem slist_fdfl: (S:Set; v:(FDF S)) (SbE S (FDFImg S v) (SList S (fdfl S v))). - Intros. - MApply '(id_repl (List S) (fdfl S v) (xfdf_list S (fdf_n S v) (fdf_f S v))). - MElim 'v '(fdf_e S). - Unfold FDFImg. - MApply 'slist_xfdfl. - Qed. - - End subset_list. - - Section weakly_finite. - - Theorem wfin_i: (S:Set; v:(FDF S); U:S->Set) (SbE S U (FDFImg S v)) -> (WFin S U). - Intros. - Unfold WFin. - MApply '(lex_i (FDF S) v). - Qed. - - Theorem wfin_e: (S:Set; U:S->Set; P:Set) (WFin S U) -> ((v:(FDF S)) (SbE S U (FDFImg S v)) -> P) -> P. - Intros. - MElim 'H 'lex_e. - MApply '(H0 a). - Qed. - - Theorem wfin_sand: (S:Set; U,V:S->Set) (WFin S U) -> (WFin S (SAnd S U V)). - Intros. - MApply '(wfin_e S U). - MApply '(wfin_i S v). - MApply '(sbe_t S U). - MApply 'sand_sbe_e2. - Qed. - - Theorem wfin_sor: (S:Set; U,V:S->Set) (WFin S U) -> (WFin S V) -> (WFin S (SOr S U V)). - Intros. - MApply '(wfin_e S U). - MApply '(wfin_e S V). - MApply '(wfin_i S (fdf_add S v v0)). - MApply '(sbe_t S (SOr S (FDFImg S v) (FDFImg S v0))). - MApply 'sor_sbe_c. - MApply 'img_fdf_add_i. - Qed. - - Theorem wfin_list: (S:Set; U:S->Set) (WFin S U) -> (LEx (List S) [v](SbE S U (SList S v))). - Intros. - MApply '(wfin_e S U). - MApply '(lex_i (List S) (fdfl S v)). - MApply '(sbe_t S (FDFImg S v)). - MApply 'slist_fdfl. - Qed. - - End weakly_finite. - -End Subset_Finite_Results. diff --git a/helm/coq-contribs/SUBSETS/tbs_fun.v b/helm/coq-contribs/SUBSETS/tbs_fun.v deleted file mode 100644 index 7d03a1b93..000000000 --- a/helm/coq-contribs/SUBSETS/tbs_fun.v +++ /dev/null @@ -1,208 +0,0 @@ -Require Export tbs_rop. - -Section Subset_From_Functions_Definitions. - - Section image_subset. - - Definition Img: (I,S:Set) (I -> S) -> (S -> Set) := [I,S;f;a] (LEx I [i](Id S (f i) a)). - - Definition FDFImg: (S:Set) (FDF S) -> (S -> Set) := [S;v](Img (Fin (fdf_n S v)) S (fdf_f S v)). - - End image_subset. - - Section relative_image_domain_subset. - - Definition RImg: (I,S:Set) (I -> S) -> (I -> Set) -> (S -> Set) := [I,S;f;T;a](REx I T [i](Id S (f i) a)). - - Definition RDom: (I,S:Set) (I -> S) -> (S -> Set) -> (I -> Set) := [I,S;f;U;i](REx S U [a](Id S (f i) a)). - - End relative_image_domain_subset. - -End Subset_From_Functions_Definitions. - -Section Subset_From_Functions_Results. - - Section image. - - Theorem img_eps_i: (I:Set; i:I; S:Set; a:S; f:I->S) (Id S (f i) a) -> (Eps S a (Img I S f)). - Intros. - MApply 'eps_i. - Unfold Img. - MApply '(lex_i I i). - Qed. - - Theorem img_eps_e: (I,S:Set; f:I->S; a:S; P:Set) (Eps S a (Img I S f)) -> ((i:I) (Id S (f i) a) -> P) -> P. - Intros. - MCut '(LEx I [i](Id S (f i) a)). - Fold (Img I S f a). - MApply 'eps_e. - MElim 'H1 'lex_e. - MApply '(H0 a0). - Qed. - - Theorem img_seq: (S:Set; U:(S -> Set)) (SEq S U (Img (Sigma S U) S (sp S U))). - Intros. - MApply 'seq_i. - MCut '(U a). - MApply 'eps_e. - MApply '(img_eps_i (Sigma S U) (pair S U a H0)). - MApply 'eps_i. - MApply '(img_eps_e (Sigma S U) S (sp S U) a). - MApply '(id_repl S a (sp S U i)). - MElim 'i 'psplit. - Qed. - - Theorem img_sbe_i: (I,J,S:Set; f:I->S; g:J->S) (LEx I->J [h](i:I)(Id S (f i) (g (h i)))) -> (SbE S (Img I S f) (Img J S g)). - Intros. - MElim 'H 'lex_e. - MApply 'sbe_i. - MApply '(img_eps_e I S f a0). - MApply '(img_eps_i J (a i)). - MApply '(id_repl S a0 (f i)). - MApply 'id_comm. - MApply '(y i). - Qed. - - Theorem img_xfdf_add_i: (S:Set; m:N; v:(Fin m)->S; n:N; w:(Fin n)->S) (SbE S (SOr S (Img (Fin m) S v) (Img (Fin n) S w)) (Img (Fin (add m n)) S (xfdf_add S m v n w))). - Intros. - MApply 'sor_sbe_e. - MApply 'img_sbe_i. - MApply '(lex_i (Fin m)->(Fin (add m n)) (fil m n)). - MApply 'id_comm. - MApply 'xfdfa_fil. - MApply 'img_sbe_i. - MApply '(lex_i (Fin n)->(Fin (add m n)) (fir m n)). - MApply 'id_comm. - MApply 'xfdfa_fir. - Qed. - - End image. - - Section fdf_image. - - Theorem fdfimg_eps_i: (S:Set; v:(FDF S); i:(Fin (fdf_n S v)); a:S) (Id S (fdf_f S v i) a) -> (Eps S a (FDFImg S v)). - Intros. - Unfold FDFImg. - MApply '(img_eps_i (Fin (fdf_n S v)) i). - Qed. - - Theorem fdfimg_eps_e: (S:Set; v:(FDF S); a:S; P:Set) (Eps S a (FDFImg S v)) -> ((i:(Fin (fdf_n S v))) (Id S (fdf_f S v i) a) -> P) -> P. - Intros. - MApply '(img_eps_e (Fin (fdf_n S v)) S (fdf_f S v) a). - MApply '(H0 i). - Qed. - - Theorem img_fdf_add_i: (S:Set; v,w:(FDF S)) (SbE S (SOr S (FDFImg S v) (FDFImg S w)) (FDFImg S (fdf_add S v w))). - Intros. - Unfold FDFImg fdf_add. - MSimpl. - MApply 'img_xfdf_add_i. - Qed. - - End fdf_image. - - Section relative_image. - - Theorem rimg_eps_i: (I:Set; i:I; T:I->Set) (Eps I i T) -> (S:Set; a:S; f:I->S) (Id S (f i) a) -> (Eps S a (RImg I S f T)). - Intros. - MApply 'eps_i. - Unfold RImg. - MApply '(rex_i I i). - Qed. - - Theorem rimg_eps_e: (I,S:Set; a:S; T:I->Set; f:I->S; P:Set) ((i:I) (Eps I i T) -> (Id S (f i) a) -> P) -> (Eps S a (RImg I S f T)) -> P. - Intros. - Unfold RImg in H0. - MCut '(REx I T [i:I](Id S (f i) a)). - MApply '(eps_e S a). - MApply '(rex_e I T [i:I](Id S (f i) a)). - MApply '(H a0). - Qed. - - Theorem rimg_sbe: (I,S:Set; f:I->S; U,V:I->Set) (SbE I U V) -> (SbE S (RImg I S f U) (RImg I S f V)). - Intros. - MApply 'sbe_i. - MApply '(rimg_eps_e I S a U f). - MApply '(rimg_eps_i I i). - MApply '(sbe_e I U). - Qed. - - Theorem rimg_sing_i: (I,S:Set; f:I->S; T:I->Set) (SbE S (SREx I T S [i;_](Sing S (f i))) (SREx S (RImg I S f T) S [a;_](Sing S a))). - Intros. - MApply 'sbe_i. - MCut '(LEx I [i:I](REps (T i) S a [_:?](Sing S (f i)))). - MApply '(srex_eps_e I T S a [i:I; _:(T i)](Sing S (f i))). - MElim 'H0 'lex_e. - MApply '(srex_eps_i S (f a0)). - MApply '(reps_e (T a0) S a [_:(T a0)](Sing S (f a0))). - MCut '(RImg I S f T (f a0)). - MApply 'eps_e. - MApply '(rimg_eps_i I a0). - MApply 'eps_i. - MApply '(reps_i (RImg I S f T (f a0)) H2). - Qed. - - Theorem rimg_sing_e: (I,S:Set; f:I->S; T:I->Set) (SbE S (SREx S (RImg I S f T) S [a;_](Sing S a)) (SREx I T S [i;_](Sing S (f i)))). - Intros. - MApply 'sbe_i. - MCut '(LEx S [a0:?](REps (RImg I S f T a0) S a [_:?](Sing S a0))). - MApply '(srex_eps_e S (RImg I S f T) S a [a0:S; _:(RImg I S f T a0)](Sing S a0)). - MElim 'H0 'lex_e. - MApply '(reps_e (RImg I S f T a0) S a [_:(RImg I S f T a0)](Sing S a0)). - MCut '(Eps S a0 (RImg I S f T)). - MApply 'eps_i. - MApply '(rimg_eps_e I S a0 T f). - MApply '(srex_eps_i I i0). - MCut '(T i0). - MApply 'eps_e. - MApply '(reps_i (T i0) H5). - MApply 'sing_eps_i. - MApply '(id_repl S (f i0) a0). - MApply 'sing_eps_e. - Qed. - - Theorem rimg_sing: (I,S:Set; f:I->S; T:I->Set) (SEq S (SREx I T S [i;_](Sing S (f i))) (SREx S (RImg I S f T) S [a;_](Sing S a))). - Intros. - MApply 'seq_sbe_i. - MApply 'rimg_sing_i. - MApply 'rimg_sing_e. - Qed. - - Theorem rimg_srex: (I,S:Set; f:I->S; T:I->Set) (SEq S (SREx I T S [i;_](Sing S (f i))) (RImg I S f T)). - Intros. - MApply '(seq_t S (SREx S (RImg I S f T) S [a:S; _:(RImg I S f T a)](Sing S a))). - MApply 'rimg_sing. - MApply 'srex_sing. - Qed. - - Theorem rimg_img_i: (I,S:Set; f:I->S; T:I->Set) (SbE S (Img (Sigma I T) S [x](f (sp I T x))) (RImg I S f T)). - Intros. - MApply 'sbe_i. - Apply (img_eps_e (Sigma I T) S [x:(Sigma I T)](f (sp I T x)) a). - Assumption. - Intros p. - MElim 'p 'psplit. - MApply '(rimg_eps_i I a0). - MApply 'eps_i. - Qed. - - Theorem rimg_img_e: (I,S:Set; f:I->S; T:I->Set) (SbE S (RImg I S f T) (Img (Sigma I T) S [x](f (sp I T x)))). - Intros. - MApply 'sbe_i. - MApply '(rimg_eps_e I S a T f). - MCut '(T i). - MApply 'eps_e. - MApply '(img_eps_i (Sigma I T) (pair I T i H2)). - Qed. - - Theorem rimg_img: (I,S:Set; f:I->S; T:I->Set) (SEq S (Img (Sigma I T) S [x](f (sp I T x))) (RImg I S f T)). - Intros. - MApply 'seq_sbe_i. - MApply 'rimg_img_i. - MApply 'rimg_img_e. - Qed. - - End relative_image. - -End Subset_From_Functions_Results. - diff --git a/helm/coq-contribs/SUBSETS/tbs_op.v b/helm/coq-contribs/SUBSETS/tbs_op.v deleted file mode 100644 index 7a744762a..000000000 --- a/helm/coq-contribs/SUBSETS/tbs_op.v +++ /dev/null @@ -1,778 +0,0 @@ -(** This module (Toolbox - subsets: operations) defines: - - subset binary intersection: [SAnd] (subset and) - - subset binary union: [SOr] (subset or) - - subset implication: [SImp] (subset implies) - - subset opposite: [SNot] (subset not) - - subset infinitary intersection: [SAll] (subset all) - - subset infinitary union: [SEx] (subset exists) - - and provides: - - introduction and elimination rules for the defined constants - - standard properties (idempotency, commutativity, associativity, compatibility, distributivity) for the defined constants - - Cantor's diagonalization theorem: [cantor_diag] - -% \hrule % - - We require Toolbox relations and the underlying theory. - - *) -Require Export tbs_rel. - -Section Subset_Operations_Definitions. - - Section finitary_subset_operations. - -(** Subset and: [(SAnd S U V)] corresponds to $ U \sand_S V $. *) - Definition SAnd: (S:Set) (S -> Set) -> (S -> Set) -> (S -> Set). - Intros S U V a. - Exact (LAnd (U a) (V a)). - Defined. - -(** Subset or: [(SOr S U V)] corresponds to $ U \sor_S V $. *) - Definition SOr: (S:Set) (S -> Set) -> (S -> Set) -> (S -> Set). - Intros S U V a. - Exact (LOr (U a) (V a)). - Defined. - -(** Subset implies: [(SImp S U V)] corresponds to $ U \simp_S V $. *) - Definition SImp: (S:Set) (S -> Set) -> (S -> Set) -> (S -> Set). - Intros S U V a. - Exact (U a)->(V a). - Defined. - -(** Subset not: [(SNot S U)] corresponds to $ \snot_S U $. *) - Definition SNot: (S:Set) (S -> Set) -> (S -> Set). - Intros S U a. - Exact (LNot (U a)). - Defined. - - End finitary_subset_operations. - - Section infinitary_subset_operations. - -(** Subset all: [(SAll I S F)] corresponds to $ \bigsand_S\subset{F(i) \st i \in I} $. *) - Definition SAll: (I,S:Set) (I -> S -> Set) -> (S -> Set). - Intros I S F a. - Exact (i:I)(F i a). - Defined. - -(** Subset exists: [(SEx I S F)] corresponds to $ \bigsor_S\subset{F(i) \st i \in I} $. *) - Definition SEx: (I,S:Set) (I -> S -> Set) -> (S -> Set). - Intros I S F a. - Exact (LEx I [i](F i a)). - Defined. - - End infinitary_subset_operations. - -End Subset_Operations_Definitions. - -Section Subset_Operations_Results. - - Section subset_binary_intersection. - -(** Subset and, epsilon introduction: $ a \e U \limp a \e V \limp a \e U \sand V $. *) - Theorem sand_eps_i: (S:Set; U,V:S->Set; a:S) (Eps S a U) -> (Eps S a V) -> (Eps S a (SAnd S U V)). - Intros. - MApply 'eps_i. - Unfold SAnd. - MApply 'land_i. - MApply 'eps_e. - MApply 'eps_e. - Qed. - -(** Subset and, epsilon elimination 2: $ a \e U \sand V \limp a \e U $. *) - Theorem sand_eps_e2: (S:Set; V,U:S->Set; a:S) (Eps S a (SAnd S U V)) -> (Eps S a U). - Intros. - MApply 'eps_i. - MApply '(land_e2 (V a)). - Fold (SAnd S U V a). - MApply 'eps_e. - Qed. - -(** Subset and, epsilon elimination 1: $ a \e U \sand V \limp a \e V $. *) - Theorem sand_eps_e1: (S:Set; U,V:S->Set; a:S) (Eps S a (SAnd S U V)) -> (Eps S a V). - Intros. - MApply 'eps_i. - MApply '(land_e1 (U a)). - Fold (SAnd S U V a). - MApply 'eps_e. - Qed. - -(** Subset and, epsilon criterion: $ a \e U \land a \e V \liff a \e U \sand V $ *) - Theorem sand_eps: (S:Set; U,V:S->Set; a:S) (LIff (LAnd (Eps S a U) (Eps S a V)) (Eps S a (SAnd S U V))). - Intros. - MApply 'liff_i. - MApply 'sand_eps_i. - MApply '(land_e2 (Eps S a V)). - MApply '(land_e1 (Eps S a U)). - MApply 'land_i. - MApply '(sand_eps_e2 S V). - MApply '(sand_eps_e1 S U). - Qed. - -(** Subset and, sub or equal elimination 2: $ U \sand V \sub U $. *) - Theorem sand_sbe_e2: (S:Set; U,V:S->Set) (SbE S (SAnd S U V) U). - Intros. - MApply 'sbe_i. - MApply '(sand_eps_e2 S V). - Qed. - -(** Subset and, sub or equal elimination 1: $ U \sand V \sub V $. *) - Theorem sand_sbe_e1: (S:Set; U,V:S->Set) (SbE S (SAnd S U V) V). - Intros. - MApply 'sbe_i. - MApply '(sand_eps_e1 S U). - Qed. - -(** Subset and, sub or equal introduction: $ W \sub U \limp W \sub V \limp W \sub U \sand V $. *) - Theorem sand_sbe_i: (S:Set; W,U,V:S->Set) (SbE S W U) -> (SbE S W V) -> (SbE S W (SAnd S U V)). - Intros. - MApply 'sbe_i. - MApply 'sand_eps_i. - MApply '(sbe_e S W). - MApply '(sbe_e S W). - Qed. - -(** Subset and, sub or equal compatibility 2: $ U \sub V \limp U \sand W \sub V \sand W $. *) - Theorem sand_sbe_c2: (S:Set; U,V,W:S->Set) (SbE S U V) -> (SbE S (SAnd S U W) (SAnd S V W)). - Intros. - MApply 'sand_sbe_i. - MApply '(sbe_t S U). - MApply 'sand_sbe_e2. - MApply 'sand_sbe_e1. - Qed. - -(** Subset and, sub or equal subset top: $ U \sub \stop \sand U $. *) - Theorem sand_sbe_stop: (S:Set; U:S->Set) (SbE S U (SAnd S (STop S) U)). - Intros. - MApply 'sand_sbe_i. - MApply 'stop_sbe_i. - MApply 'sbe_r. - Qed. - -(** Subset and, sub or equal idempotency: $ U \sub U \sand U $. *) - Theorem sand_sbe_r: (S:Set; U:S->Set) (SbE S U (SAnd S U U)). - Intros. - MApply 'sand_sbe_i. - MApply 'sbe_r. - MApply 'sbe_r. - Qed. - -(** Subset and, idempotency $ U \sand U = U $. *) - Theorem sand_r: (S:Set; U:S->Set) (SEq S (SAnd S U U) U). - Intros. - MApply 'seq_sbe_i. - MApply 'sand_sbe_e2. - MApply 'sand_sbe_r. - Qed. - -(** Subset and, sub or equal commutativity: $ V \sand U \sub U \sand V $. *) - Theorem sand_sbe_s: (S:Set; U,V:S->Set) (SbE S (SAnd S V U) (SAnd S U V)). - Intros. - MApply 'sand_sbe_i. - MApply 'sand_sbe_e1. - MApply 'sand_sbe_e2. - Qed. - -(** Subset and, commutativity: $ V \sand U = U \sand V $. *) - Theorem sand_s: (S:Set; U,V:S->Set) (SEq S (SAnd S V U) (SAnd S U V)). - Intros. - MApply 'seq_sbe_i. - MApply 'sand_sbe_s. - MApply 'sand_sbe_s. - Qed. - -(** Subset and, sub or equal associativity 1: $ U \sand (V \sand W) \sub (U \sand V) \sand W $. *) - Theorem sand_sbe_a1: (S:Set; U,V,W:S->Set) (SbE S (SAnd S U (SAnd S V W)) (SAnd S (SAnd S U V) W)). - Intros. - MApply 'sand_sbe_i. - MApply 'sand_sbe_i. - MApply 'sand_sbe_e2. - MApply '(sbe_t S (SAnd S V W)). - MApply 'sand_sbe_e1. - MApply 'sand_sbe_e2. - MApply '(sbe_t S (SAnd S V W)). - MApply 'sand_sbe_e1. - MApply 'sand_sbe_e1. - Qed. - -(** Subset and, sub or equal associativity 2: $ (U \sand V) \sand W \sub U \sand (V \sand W) $. *) - Theorem sand_sbe_a2: (S:Set; U,V,W:S->Set) (SbE S (SAnd S (SAnd S U V) W) (SAnd S U (SAnd S V W))). - Intros. - MApply '(sbe_t S (SAnd S W (SAnd S U V))). - MApply 'sand_sbe_s. - MApply '(sbe_t S (SAnd S (SAnd S V W) U)). - MApply '(sbe_t S (SAnd S (SAnd S W U) V)). - MApply 'sand_sbe_a1. - MApply '(sbe_t S (SAnd S V (SAnd S W U))). - MApply 'sand_sbe_s. - MApply 'sand_sbe_a1. - MApply 'sand_sbe_s. - Qed. - -(** Subset and, associativity: $ U \sand (V \sand W) = (U \sand V) \sand W $. *) - Theorem sand_a: (S:Set; U,V,W:S->Set) (SEq S (SAnd S U (SAnd S V W)) (SAnd S (SAnd S U V) W)). - Intros. - MApply 'seq_sbe_i. - MApply 'sand_sbe_a1. - MApply 'sand_sbe_a2. - Qed. - -(** Subset and, sub or equal compatibility 1: $ U \sub V \limp W \sand U \sub W \sand V $. *) - Theorem sand_sbe_c1: (S:Set; U,V,W:S->Set) (SbE S U V) -> (SbE S (SAnd S W U) (SAnd S W V)). - Intros. - MApply '(sbe_t S (SAnd S U W)). - MApply 'sand_sbe_s. - MApply '(sbe_t S (SAnd S V W)). - MApply 'sand_sbe_c2. - MApply 'sand_sbe_s. - Qed. - -(** Subset and, sub or equal compatibility: $ U \sub V \limp W \sub X \limp U \sand W \sub V \sand X $. *) - Theorem sand_sbe_c: (S:Set; U,V,W,X:S->Set) (SbE S U V) -> (SbE S W X) -> (SbE S (SAnd S U W) (SAnd S V X)). - Intros. - MApply '(sbe_t S (SAnd S V W)). - MApply 'sand_sbe_c2. - MApply 'sand_sbe_c1. - Qed. - - End subset_binary_intersection. - - Section subset_binary_union. - -(** Subset or, epsilon introduction 2: $ a \e U \limp a \e U \sor V $. *) - Theorem sor_eps_i2: (S:Set; U,V:S->Set; a:S) (Eps S a U) -> (Eps S a (SOr S U V)). - Intros. - MApply 'eps_i. - Unfold SOr. - MApply 'in_l. - MApply 'eps_e. - Qed. - -(** Subset or, epsilon introduction 1: $ a \e V \limp a \e U \sor V $. *) - Theorem sor_eps_i1: (S:Set; U,V:S->Set; a:S) (Eps S a V) -> (Eps S a (SOr S U V)). - Intros. - MApply 'eps_i. - Unfold SOr. - MApply 'in_r. - MApply 'eps_e. - Qed. - -(** Subset or, epsilon elimination: $ (a \e U \limp T) \limp (a \e V \limp T) \limp a \e U \sor V \limp T $. *) - Theorem sor_eps_e: (S:Set; a:S; U,V:S->Set; T:Set) ((Eps S a U) -> T) -> ((Eps S a V) -> T) -> (Eps S a (SOr S U V)) -> T. - Intros. - MCut '(SOr S U V a). - MApply 'eps_e. - MApply '(lor_e (U a) (V a)). - MApply 'H. - MApply 'eps_i. - MApply 'H0. - MApply 'eps_i. - Qed. - -(** Subset or, epsilon criterion: $ a \e U \lor a \e V \liff a \e U \sor V $. *) - Theorem sor_eps: (S:Set; U,V:S->Set; a:S) (LIff (LOr (Eps S a U) (Eps S a V)) (Eps S a (SOr S U V))). - Intros. - MApply 'liff_i. - MApply '(lor_e (Eps S a U) (Eps S a V)). - MApply 'sor_eps_i2. - MApply 'sor_eps_i1. - MApply '(sor_eps_e S a U V). - MApply 'in_l. - MApply 'in_r. - Qed. - -(** Subset or, sub or equal introduction 2: $ U \sub U \sor V $. *) - Theorem sor_sbe_i2: (S:Set; U,V:S->Set) (SbE S U (SOr S U V)). - Intros. - MApply 'sbe_i. - MApply 'sor_eps_i2. - Qed. - -(** Subset or, sub or equal introduction 1: $ V \sub U \sor V $. *) - Theorem sor_sbe_i1: (S:Set; U,V:S->Set) (SbE S V (SOr S U V)). - Intros. - MApply 'sbe_i. - MApply 'sor_eps_i1. - Qed. - -(** Subset or, sub or equal elimination: $ U \sub W \limp V \sub W \limp U \sor V \sub W $. *) - Theorem sor_sbe_e: (S:Set; W,U,V:S->Set) (SbE S U W) -> (SbE S V W) -> (SbE S (SOr S U V) W). - Intros. - MApply 'sbe_i. - MApply '(sor_eps_e S a U V). - MApply '(sbe_e S U). - MApply '(sbe_e S V). - Qed. - -(** Subset or, sub or equal compatibility 2: $ U \sub V \limp U \sor W \sub V \sor W $. *) - Theorem sor_sbe_c2: (S:Set; U,V,W:S->Set) (SbE S U V) -> (SbE S (SOr S U W) (SOr S V W)). - Intros. - MApply 'sor_sbe_e. - MApply '(sbe_t S V). - MApply 'sor_sbe_i2. - MApply 'sor_sbe_i1. - Qed. - -(** Subset or, sub or equal idempotency: $ U \sor U \sub U $. *) - Theorem sor_sbe_r: (S:Set; U:S->Set) (SbE S (SOr S U U) U). - Intros. - MApply 'sor_sbe_e. - MApply 'sbe_r. - MApply 'sbe_r. - Qed. - -(** Subset or, idempotency: $ U \sor U = U $. *) - Theorem sor_r: (S:Set; U:S->Set) (SEq S (SOr S U U) U). - Intros. - MApply 'seq_sbe_i. - MApply 'sor_sbe_r. - MApply 'sor_sbe_i2. - Qed. - -(** Subset or, sub or equal commutativity: $ V \sor U \sub U \sor V $. *) - Theorem sor_sbe_s: (S:Set; U,V:S->Set) (SbE S (SOr S V U) (SOr S U V)). - Intros. - MApply 'sor_sbe_e. - MApply 'sor_sbe_i1. - MApply 'sor_sbe_i2. - Qed. - -(** Subset or, commutativity: $ V \sor U = U \sor V $. *) - Theorem sor_s: (S:Set; U,V:S->Set) (SEq S (SOr S V U) (SOr S U V)). - Intros. - MApply 'seq_sbe_i. - MApply 'sor_sbe_s. - MApply 'sor_sbe_s. - Qed. - -(** Subset or, sub or equal associativity 1: $ U \sor (V \sor W) \sub (U \sor V) \sor W $. *) - Theorem sor_sbe_a1: (S:Set; U,V,W:S->Set) (SbE S (SOr S U (SOr S V W)) (SOr S (SOr S U V) W)). - Intros. - MApply 'sor_sbe_e. - MApply '(sbe_t S (SOr S U V)). - MApply 'sor_sbe_i2. - MApply 'sor_sbe_i2. - MApply 'sor_sbe_e. - MApply '(sbe_t S (SOr S U V)). - MApply 'sor_sbe_i1. - MApply 'sor_sbe_i2. - MApply 'sor_sbe_i1. - Qed. - -(** Subset or, sub or equal associativity 2: $ (U \sor V) \sor W \sub U \sor (V \sor W) $. *) - Theorem sor_sbe_a2: (S:Set; U,V,W:S->Set) (SbE S (SOr S (SOr S U V) W) (SOr S U (SOr S V W))). - Intros. - MApply '(sbe_t S (SOr S W (SOr S U V))). - MApply 'sor_sbe_s. - MApply '(sbe_t S (SOr S (SOr S V W) U)). - MApply '(sbe_t S (SOr S (SOr S W U) V)). - MApply 'sor_sbe_a1. - MApply '(sbe_t S (SOr S V (SOr S W U))). - MApply 'sor_sbe_s. - MApply 'sor_sbe_a1. - MApply 'sor_sbe_s. - Qed. - -(** Subset or, associativity: $ U \sor (V \sor W) = (U \sor V) \sor W $. *) - Theorem sor_a: (S:Set; U,V,W:S->Set) (SEq S (SOr S U (SOr S V W)) (SOr S (SOr S U V) W)). - Intros. - MApply 'seq_sbe_i. - MApply 'sor_sbe_a1. - MApply 'sor_sbe_a2. - Qed. - -(** Subset or, sub or equal compatibility 1: $ U \sub V \limp W \sor U \sub W \sor V $. *) - Theorem sor_sbe_c1: (S:Set; U,V,W:S->Set) (SbE S U V) -> (SbE S (SOr S W U) (SOr S W V)). - Intros. - MApply '(sbe_t S (SOr S U W)). - MApply 'sor_sbe_s. - MApply '(sbe_t S (SOr S V W)). - MApply 'sor_sbe_c2. - MApply 'sor_sbe_s. - Qed. - -(** Subset or, sub or equal compatibility: $ U \sub V \limp W \sub X \limp U \sor W \sub V \sor X $. *) - Theorem sor_sbe_c: (S:Set; U,V,W,X:S->Set) (SbE S U V) -> (SbE S W X) -> (SbE S (SOr S U W) (SOr S V X)). - Intros. - MApply '(sbe_t S (SOr S V W)). - MApply 'sor_sbe_c2. - MApply 'sor_sbe_c1. - Qed. - - End subset_binary_union. - - Section subset_implication. - -(** Subset implies, epsilon introduction: $ (a \e U \limp a \e V) \limp a \e U \simp V $. *) - Theorem simp_eps_i: (S:Set; U,V:S->Set; a:S) ((Eps S a U) -> (Eps S a V)) -> (Eps S a (SImp S U V)). - Intros. - MApply 'eps_i. - Unfold SImp. - Intros. - MApply 'eps_e. - MApply 'H. - MApply 'eps_i. - Qed. - -(** Subset implies, epsilon elimination: $ a \e U \simp V \limp a \e U \limp a \e V $. *) - Theorem simp_eps_e: (S:Set; U,V:S->Set; a:S) (Eps S a (SImp S U V)) -> (Eps S a U) -> (Eps S a V). - Intros. - MApply 'eps_i. - Apply (mcut (U a)). - MApply 'eps_e. - MApply '(eps_e S a). - Qed. - -(** Subset implies, epsilon criterion: $ a \e U \simp V \liff (a \e U \limp a \e V) $. *) - Theorem simp_eps: (S:Set; U,V:S->Set; a:S) (LIff (Eps S a (SImp S U V)) (Eps S a U) -> (Eps S a V)). - Intros. - MApply 'liff_i. - MApply '(simp_eps_e S U). - MApply 'simp_eps_i. - MApply 'H. - Qed. - -(** Subset implies, sub or equal elimination: $ W \sub U \simp V \limp W \sand U \sub V $. *) - Theorem simp_sbe_e: (S:Set; U,V,W:S->Set) (SbE S W (SImp S U V)) -> (SbE S (SAnd S W U) V). - Intros. - MApply 'sbe_i. - MApply '(simp_eps_e S U). - MApply '(sbe_e S W). - MApply '(sand_eps_e2 S U). - MApply '(sand_eps_e1 S W). - Qed. - -(** Subset implies, sub or equal introduction: $ W \sand U \sub V \limp W \sub U \simp V $. *) - Theorem simp_sbe_i: (S:Set; U,V,W:S->Set) (SbE S (SAnd S W U) V) -> (SbE S W (SImp S U V)). - Intros. - MApply 'sbe_i. - MApply 'simp_eps_i. - MApply '(sbe_e S (SAnd S W U)). - MApply 'sand_eps_i. - Qed. - -(** Subset implies, sub or equal compatibility 2: $ V \sub U \limp U \simp W \sub V \simp W $. *) - Theorem simp_sbe_c2: (S:Set; U,V,W:S->Set) (SbE S V U) -> (SbE S (SImp S U W) (SImp S V W)). - Intros. - MApply 'simp_sbe_i. - MApply '(sbe_t S (SAnd S (SImp S U W) U)). - MApply 'sand_sbe_c1. - MApply 'simp_sbe_e. - MApply 'sbe_r. - Qed. - -(** Subset implies, sub or equal compatibility 2: $ U \sub V \limp W \simp U \sub W \simp V $. *) - Theorem simp_sbe_c1: (S:Set; U,V,W:S->Set) (SbE S U V) -> (SbE S (SImp S W U) (SImp S W V)). - Intros. - MApply 'simp_sbe_i. - MApply '(sbe_t S U). - MApply 'simp_sbe_e. - MApply 'sbe_r. - Qed. - -(** Subset implies, subset top elimination: $ \stop \sub U \simp V \limp U \sub V $. *) - Theorem simp_stop_e: (S:Set; U,V:S->Set) (SbE S (STop S) (SImp S U V)) -> (SbE S U V). - Intros. - MApply '(sbe_t S (SAnd S (STop S) U)). - MApply 'sand_sbe_stop. - MApply 'simp_sbe_e. - Qed. - -(** Subset implies, subset top introduction: $ U \sub V \limp \stop \sub U \simp V $. *) - Theorem simp_stop_i: (S:Set; U,V:S->Set) (SbE S U V) -> (SbE S (STop S) (SImp S U V)). - Intros. - MApply 'simp_sbe_i. - MApply '(sbe_t S U). - MApply 'sand_sbe_e1. - Qed. - -(** Subset implies, subset top criterion: $ \stop \sub U \simp V \liff U \sub V $. *) - Theorem simp_stop: (S:Set; U,V:S->Set) (LIff (SbE S (STop S) (SImp S U V)) (SbE S U V)). - Intros. - MApply 'liff_i. - MApply 'simp_stop_e. - MApply 'simp_stop_i. - Qed. - - End subset_implication. - - Section subset_negation. - -(** Subset not, epsilon introduction: $ \lnot (a \e U) \limp a \e \snot U $. *) - Theorem snot_eps_i: (S:Set; U:S->Set; a:S) (LNot (Eps S a U)) -> (Eps S a (SNot S U)). - Intros. - MApply 'eps_i. - Unfold SNot. - MApply 'lnot_i. - MApply '(lnot_e (Eps S a U)). - MApply 'eps_i. - Qed. - -(** Subset not, epsilon elimination: $ a \e \snot U \limp \lnot (a \e U) $. *) - Theorem snot_eps_e: (S:Set; U:S->Set; a:S) (Eps S a (SNot S U)) -> (LNot (Eps S a U)). - Unfold SNot. - Intros. - MApply 'lnot_i. - MApply '(lnot_e (U a)). - MApply '(eps_e S a [a0:S](LNot (U a0))). - MApply 'eps_e. - Qed. - -(** Subset not, epsilon criterion: $ \lnot (a \e U) \liff a \e \snot U $. *) - Theorem snot_eps: (S:Set; U:S->Set; a:S) (LIff (LNot (Eps S a U)) (Eps S a (SNot S U))). - Intros. - MApply 'liff_i. - MApply 'snot_eps_i. - MApply 'snot_eps_e. - Qed. - -(** Subset not, subset implication compatibility: $ \snot U = U \simp \sbot $. *) - Theorem snot_simp_c: (S:Set; U:S->Set) (SEq S (SNot S U) (SImp S U (SBot S))). - Intros. - MApply 'seq_i. - MApply 'simp_eps_i. - MCut 'Empty. - MApply '(lnot_e (Eps S a U)). - MApply 'snot_eps_e. - MElim 'H1 'efq. - MApply 'snot_eps_i. - MApply 'lnot_i. - MApply '(sbot_eps_e S a). - MApply '(simp_eps_e S U). - Qed. - - End subset_negation. - - Section subset_infinitary_intersection. - -(** Subset all, epsilon introduction: $ ((\lall i \in I)\ a \e F(i)) \limp a \e \bigsand\subset{F(i) \st i \in I} $. *) - Theorem sall_eps_i: (I,S:Set; F:(I->S->Set); a:S) ((i:I) (Eps S a (F i))) -> (Eps S a (SAll I S F)). - Intros. - MApply 'eps_i. - Unfold SAll. - Intros. - MApply 'eps_e. - MApply '(H i). - Qed. - -(** Subset all, epsilon elimination: $ a \e \bigsand\subset{F(i) \st i \in I} \limp (\lall i \in I)\ a \e F(i) $. *) - Theorem sall_eps_e: (I,S:Set; F:(I->S->Set); a:S) (Eps S a (SAll I S F)) -> (i:I) (Eps S a (F i)). - Intros. - MApply 'eps_i. - Apply (mcut (i:I)(F i a)). - MApply '(eps_e S a). - Intros. - MApply '(H0 i). - Qed. - -(** Subset all, epsilon criterion: $ a \e \bigsand\subset{F(i) \st i \in I} \liff (\lall i \in I)\ a \e F(i) $. *) - Theorem sall_eps: (I,S:Set; F:(I->S->Set); a:S) (LIff (Eps S a (SAll I S F)) (i:I) (Eps S a (F i))). - Intros. - MApply 'liff_i. - MApply '(sall_eps_e I). - MApply 'sall_eps_i. - MApply '(H i). - Qed. - -(** Subset all, sub or equal elimination: $ (\lall i \in I)\ \bigsand\subset{F(i) \st i \in I} \sub F(i) $. *) - Theorem sall_sbe_e: (I,S:Set; F:(I->S->Set); i:I) (SbE S (SAll I S F) (F i)). - Intros. - MApply 'sbe_i. - MApply '(sall_eps_e I). - Qed. - -(** Subset all, sub or equal introduction: $ ((\lall i \in I)\ W \sub F(i)) \limp W \sub \bigsand\subset{F(i) \st i \in I} $. *) - Theorem sall_sbe_i: (I,S:Set; F:(I->S->Set); W:S->Set) ((i:I)(SbE S W (F i))) -> (SbE S W (SAll I S F)). - Intros. - MApply 'sbe_i. - MApply 'sall_eps_i. - MApply '(sbe_e S W). - MApply 'H. - Qed. - - End subset_infinitary_intersection. - - Section subset_infinitary_union. - -(** Subset exists, epsilon introduction: $ ((\lex i \in I)\ a \e F(i)) \limp a \e \bigsor\subset{F(i) \st i \in I} $. *) - Theorem sex_eps_i: (I,S:Set; F:(I->S->Set); a:S) (LEx I [i](Eps S a (F i))) -> (Eps S a (SEx I S F)). - Intros. - MApply 'eps_i. - Unfold SEx. - MElim 'H 'lex_e. - MApply '(lex_i I a0). - MApply 'eps_e. - Qed. - -(** Subset exists, epsilon elimination: $ a \e \bigsor\subset{F(i) \st i \in I} \limp (\lex i \in I)\ a \e F(i) $. *) - Theorem sex_eps_e: (I,S:Set; F:(I->S->Set); a:S) (Eps S a (SEx I S F)) -> (LEx I [i](Eps S a (F i))). - Intros. - MCut '(SEx I S F a). - MApply 'eps_e. - MElim 'H0 'lex_e. - MApply '(lex_i I a0). - MApply 'eps_i. - Qed. - -(** Subset exists, epsilon elimination: $ a \e \bigsor\subset{F(i) \st i \in I} \liff (\lex i \in I)\ a \e F(i) $. *) - Theorem sex_eps: (I,S:Set; F:(I->S->Set); a:S) (LIff (Eps S a (SEx I S F)) (LEx I [i](Eps S a (F i)))). - Intros. - MApply 'liff_i. - MApply 'sex_eps_e. - MApply 'sex_eps_i. - Qed. - -(** Subset exists, sub or equal introduction: $ (\lall i \in I)\ F(i) \sub \bigsor\subset{F(i) \st i \in I} $. *) - Theorem sex_sbe_i: (I,S:Set; F:(I->S->Set); i:I) (SbE S (F i) (SEx I S F)). - Intros. - MApply 'sbe_i. - MApply 'sex_eps_i. - MApply '(lex_i I i). - Qed. - -(** Subset exists, sub or equal elimination: $ ((\lall i \in I)\ F(i) \sub W) \limp \bigsor\subset{F(i) \st i \in I} \sub W $. *) - Theorem sex_sbe_e: (I,S:Set; F:(I->S->Set); W:S->Set) ((i:I)(SbE S (F i) W)) -> (SbE S (SEx I S F) W). - Intros. - MApply 'sbe_i. - MCut '(LEx I [i:I](Eps S a (F i))). - MApply 'sex_eps_e. - MElim 'H1 'lex_e. - MApply '(sbe_e S (F a0)). - MApply 'H. - Qed. - - End subset_infinitary_union. - - Section subset_frame. - -(** Frame, subset and introduction: $ U \sub V \limp U \sand V = U $. *) - Theorem frame_sand_i: (S:Set; U,V:S->Set) (SbE S U V) -> (SEq S (SAnd S U V) U). - Intros. - MApply 'seq_sbe_i. - MApply 'sand_sbe_e2. - MApply '(sbe_t S (SAnd S U U)). - MApply 'sand_sbe_r. - MApply 'sand_sbe_c1. - Qed. - -(** Frame, subset and elimination: $ U \sand V = U \limp U \sub V $. *) - Theorem frame_sand_e: (S:Set; U,V:S->Set) (SEq S (SAnd S U V) U) -> (SbE S U V). - Intros. - MApply '(sbe_t S (SAnd S U V)). - MApply '(land_e1 (SbE S (SAnd S U V) U)). - MApply 'seq_sbe_e. - MApply 'sand_sbe_e1. - Qed. - -(** Frame, subset or introduction: $ U \sub V \limp U \sor V = V $. *) - Theorem frame_sor_i: (S:Set; U,V:S->Set) (SbE S U V) -> (SEq S (SOr S U V) V). - Intros. - MApply 'seq_sbe_i. - MApply '(sbe_t S (SOr S V V)). - MApply 'sor_sbe_c2. - MApply 'sor_sbe_r. - MApply 'sor_sbe_i1. - Qed. - -(** Frame, subset or elimination: $ U \sor V = V \limp U \sub V $. *) - Theorem frame_sor_e: (S:Set; U,V:S->Set) (SEq S (SOr S U V) V) -> (SbE S U V). - Intros. - MApply '(sbe_t S (SOr S U V)). - MApply 'sor_sbe_i2. - MApply '(land_e2 (SbE S V (SOr S U V))). - MApply 'seq_sbe_e. - Qed. - -(** Frame, subset exists introduction: $ \bigsor\subset{F(i) \st i \in I} \sand W \sub \bigsor\subset{F(i) \sand W \st i \in I} $. *) - Theorem frame_sex_i: (I,S:Set; F:(I->S->Set); W:S->Set) (SbE S (SAnd S (SEx I S F) W) (SEx I S [i](SAnd S (F i) W))). - Intros. - MApply 'sbe_i. - MApply 'sex_eps_i. - MCut '(Eps S a (SEx I S F)). - MApply '(sand_eps_e2 S W). - MCut '(LEx I [i:I](Eps S a (F i))). - MApply 'sex_eps_e. - MElim 'H1 'lex_e. - MApply '(lex_i I a0). - MApply 'sand_eps_i. - MApply '(sand_eps_e1 S (SEx I S F)). - Qed. - -(** Frame, subset exists elimination: $ \bigsor\subset{F(i) \sand W \st i \in I} \sub \bigsor\subset{F(i) \st i \in I} \sand W $. *) - Theorem frame_sex_e: (I,S:Set; F:(I->S->Set); W:S->Set) (SbE S (SEx I S [i] -(SAnd S (F i) W)) (SAnd S (SEx I S F) W)). - Intros. - MApply 'sand_sbe_i. - MApply 'sex_sbe_e. - MApply '(sbe_t S (F i)). - MApply 'sand_sbe_e2. - MApply 'sex_sbe_i. - MApply 'sex_sbe_e. - MApply 'sand_sbe_e1. - Qed. - -(** Frame, subset exists distributivity: $ \bigsor\subset{F(i) \st i \in I} \sand W = \bigsor\subset{F(i) \sand W \st i \in I} $. *) - Theorem frame_sex_d: (I,S:Set; F:(I->S->Set); W:S->Set) (SEq S (SAnd S (SEx I S F) W) (SEx I S [i](SAnd S (F i) W))). - Intros. - MApply 'seq_sbe_i. - MApply 'frame_sex_i. - MApply 'frame_sex_e. - Qed. - -(** Frame, subset implies elimination: $ \bigsor\subset{F(i) \st i \in I} \simp W \sub \bigsand\subset{F(i) \simp W \st i \in I} $. *) - Theorem frame_simp_e: (I,S:Set; F:(I->S->Set); W:S->Set) (SbE S (SImp S (SEx I S F) W) (SAll I S [i](SImp S (F i) W))). - Intros. - MApply 'sall_sbe_i. - MApply 'simp_sbe_c2. - MApply 'sex_sbe_i. - Qed. - -(** Frame, subset implies introduction: $ \bigsand\subset{F(i) \simp W \st i \in I} \sub \bigsor\subset{F(i) \st i \in I} \simp W $. *) - Theorem frame_simp_i: (I,S:Set; F:(I->S->Set); W:S->Set) (SbE S (SAll I S [i](SImp S (F i) W)) (SImp S (SEx I S F) W)). - Intros. - MApply 'sbe_i. - MApply 'simp_eps_i. - MCut '(LEx I [i:I](Eps S a (F i))). - MApply 'sex_eps_e. - MElim 'H1 'lex_e. - MApply '(simp_eps_e S (F a0)). - MApply '(sall_eps_e I S [i:I](SImp S (F i) W)). - Qed. - -(** Frame, subset implies compatibility: $ \bigsor\subset{F(i) \st i \in I} \simp W = \bigsand\subset{F(i) \simp W \st i \in I} $. *) - Theorem frame_simp_c: (I,S:Set; F:(I->S->Set); W:S->Set) (SEq S (SImp S (SEx I S F) W) (SAll I S [i](SImp S (F i) W))). - Intros. - MApply 'seq_sbe_i. - MApply 'frame_simp_e. - MApply 'frame_simp_i. - Qed. - - End subset_frame. - - Section cantor_diagonalization. - -(** [(D S F)] is Cantor's subset $ D_F $. *) - Local D: (S:Set) (S -> S -> Set) -> (S -> Set). - Intros S F. - Exact (SNot S [a:S](F a a)). - Defined. - -(** Cantor's diagonalization: $ (\lall b \in S)\ \lnot (F(b) = D_F) $. *) - Theorem cantor_diag: (S:Set; F:S->S->Set) (b:S) (LNot (SEq S (F b) (D S F))). - Intros. - MApply 'lnot_i. - MCut '(LIff (Eps S b (F b)) (LNot (Eps S b (F b)))). - MApply 'liff_i. - MApply 'snot_eps_e. - Change (Eps S b (D S F)). - MApply '(seq_e1 S (F b)). - MApply '(seq_e2 S (D S F)). - Change (Eps S b (SNot S (F b))). - MApply 'snot_eps_i. - MApply '(lnot_liff_lbot (Eps S b (F b))). - Qed. - - End cantor_diagonalization. - -End Subset_Operations_Results. diff --git a/helm/coq-contribs/SUBSETS/tbs_rel.v b/helm/coq-contribs/SUBSETS/tbs_rel.v deleted file mode 100644 index c3f1957c1..000000000 --- a/helm/coq-contribs/SUBSETS/tbs_rel.v +++ /dev/null @@ -1,249 +0,0 @@ -(** This module (Toolbox - subsets: relations) defines: - - subset inclusion: [SbE] (sub or equal) - - subset overlap: [SOv] (subset overlap) not used in %\cite{SV}% - - subset equality [SEq] (subset equal) - - and provides: - - introduction and elimination rules for [SbE] and [SEq] - - standard properties (reflexiivity, symmetry, transitivity) for [SbE] and [SEq] - -% \hrule % - - We require Toolbox basics and the underlying theory. - - *) -Require Export tbs_base. - -Section Subset_Relations_Definitions. - - Section subset_inclusion_overlap_equality. - -(** Sub or equal: [(SbE S U V)] means $ U \sub_S V $. *) - Definition SbE: (S:Set) (S -> Set) -> (S -> Set) -> Set. - Intros S U V. - Exact (a:S)(Eps S a U)->(Eps S a V). - Defined. - -(** Subset overlap: [(SOv S U V)] means $ U \meet_S V $ that is $ (\lex a \in S)\ a \e U \land a \e V $. *) - Definition SOv: (S:Set) (S -> Set) -> (S -> Set) -> Set. - Intros S U V. - Exact (LEx S [a](LAnd (Eps S a U) (Eps S a V))). - Defined. -(* -(** Sup or equal: [(SpE S U V)] means $ U \sup_S V $. *) -Definition SpE: (S:Set) (S -> Set) -> (S -> Set) -> Set. -Intros S U V. -Exact (SbE S V U). -Defined. -*) - -(** Subset equal: [(SEq S U V)] means $ U =_S V $. *) - Definition SEq: (S:Set) (S -> Set) -> (S -> Set) -> Set. - Intros S U V. - Exact (a:S)(LIff (Eps S a U) (Eps S a V)). - Defined. - - End subset_inclusion_overlap_equality. -(* -Section subset_completion. - -(** Subset complete: [(SCm S U V)] means $ (\lall a \in S)\ a \e U \lor a \e V $. *) -Definition SCm: (S:Set) (S -> Set) -> (S -> Set) -> Set. -Intros S U V. -Exact (a:S)(LOr (Eps S a U) (Eps S a V)). -Defined. - -End subset_completion. -*) -End Subset_Relations_Definitions. - -Section Subset_Relations_Results. - - Section subset_inclusion. - -(** Sub or equal introduction: $ ((\lall a \in S)\ a \e U \limp a \e V) \limp U \sub V $. *) - Theorem sbe_i: (S:Set; U,V:S-> Set) ((a:S) (Eps S a U) -> (Eps S a V)) -> (SbE S U V). - Unfold SbE. - Intros. - MApply '(H a). - Qed. - -(** Sub or equal elimination: $ a \e U \limp U \sub V \limp a \e V $. *) - Theorem sbe_e: (S:Set; U,V:S -> Set; a:S) (Eps S a U) -> (SbE S U V) -> (Eps S a V). - Unfold SbE. - Intros. - MApply '(H0 a). - Qed. - -(* -Theorem sbe_i2: (S:Set; U,V:(S -> Set)) ((a:S) (U a) -> (V a)) -> (SbE S U V). -Intros. -MApply 'sbe_i. -MApply 'eps_c1_l. -MApply '(H a). -MApply 'eps_c1_r. -Qed. - -Theorem sbe_e2: (S:Set; U,V:(S -> Set); a:S) (U a) -> (SbE S U V) -> (V a). -Intros. -MApply 'eps_c1_r. -MApply '(sbe_e S U). -MApply 'eps_c1_l. -Qed. -*) -(** Sub or equal reflexivity: $ U \sub U $. *) - Theorem sbe_r: (S:Set; U:S->Set) (SbE S U U). - Intros. - MApply 'sbe_i. - Qed. - -(** Sub or equal transitivity: $ U \sub W \limp W \sub V \limp U \sub V $. *) - Theorem sbe_t: (S:Set; W,U,V:S->Set) (SbE S U W) -> (SbE S W V) -> (SbE S U V). - Intros. - MApply 'sbe_i. - MApply '(sbe_e S W). - MApply '(sbe_e S U). - Qed. - - End subset_inclusion. - - Section stop_sbot_sing_inclusion. - -(** Subset top, sub or equal introduction: $ U \sub \stop $. *) - Theorem stop_sbe_i: (S:Set; U:S->Set) (SbE S U (STop S)). - Intros. - MApply 'sbe_i. - MApply 'stop_eps_i. - Qed. - -(** Subset bottom, sub or equal introduction: $ \sbot \sub U $. *) - Theorem sbot_sbe_i: (S:Set; U:S->Set) (SbE S (SBot S) U). - Intros. - MApply 'sbe_i. - MCut 'Empty. - Intros. - MApply '(sbot_eps_e S a). - MElim 'H0 'efq. - Qed. - -(** Singleton, sub or equal introduction: $ a \e U \limp \subset{a} \sub U $. *) - Theorem sing_sbe_i: (S:Set; a:S; U:S->Set) (Eps S a U) -> (SbE S (Sing S a) U). - Intros. - MApply 'sbe_i. - MCut '(Id S a a0). - MApply 'sing_eps_e. - MApply '(id_repl S a0 a). - Qed. - -(** Singleton, sub or equal elimination: $ \subset{a} \sub U \limp a \e U $. *) - Theorem sing_sbe_e: (S:Set; a:S; U:S->Set) (SbE S (Sing S a) U) -> (Eps S a U). - Intros. - MApply '(sbe_e S (Sing S a)). - MApply 'sing_eps_i. - Qed. - -(** Singleton, sub or equal criterion: $ a \e U \liff \subset{a} \sub U $. *) - Theorem sing_sbe: (S:Set; a:S; U:S->Set) (LIff (Eps S a U) (SbE S (Sing S a) U)). - Intros. - MApply 'liff_i. - MApply 'sing_sbe_i. - MApply 'sing_sbe_e. - Qed. - - End stop_sbot_sing_inclusion. - - Section subset_equality. - -(** Set equal introduction: $ ((\lall a \in S)\ a \e U \limp a \e V) \limp ((\lall a \in S)\ a \e V \limp a \e U) \limp U = V $. *) - Theorem seq_i: (S:Set; U,V:S->Set) ((a:S) (Eps S a U) -> (Eps S a V)) -> ((a:S) (Eps S a V) -> (Eps S a U)) -> (SEq S U V). - Unfold SEq. - Intros. - MApply 'liff_i. - MApply '(H a). - MApply '(H0 a). - Qed. - -(** Set equal elimination 1: $ a \e U \limp U = V \limp a \e V $. *) - Theorem seq_e1: (S:Set; U,V:S->Set; a:S) (Eps S a U) -> (SEq S U V) -> (Eps S a V). - Unfold SEq. - Intros. - MApply '(liff_e1 (Eps S a U)). - MApply '(H0 a). - Qed. - -(** Set equal elimination 2: $ a \e V \limp U = V \limp a \e U $. *) - Theorem seq_e2: (S:Set; V,U:(S -> Set); a:S) (Eps S a V) -> (SEq S U V) -> (Eps S a U). - Unfold SEq. - Intros. - MApply '(liff_e2 (Eps S a V)). - MApply '(H0 a). - Qed. - -(* -Theorem seq_i2: (S:Set; U,V:(S -> Set)) ((a:S) (U a) -> (V a)) -> ((a:S) (V a) -> (U a)) -> (SEq S U V). -Intros. -MApply 'seq_i. -MApply 'eps_c1_l. -MApply '(H a). -MApply 'eps_c1_r. -MApply 'eps_c1_l. -MApply '(H0 a). -MApply 'eps_c1_r. -Qed. -*) -(** Set equal, sub or equal introduction: $ U \sub V \limp V \sub U \limp U = V $. *) - Theorem seq_sbe_i: (S:Set; U,V:S->Set) (SbE S U V) -> (SbE S V U) -> (SEq S U V). - Intros. - MApply 'seq_i. - MApply '(sbe_e S U). - MApply '(sbe_e S V). - Qed. - -(** Set equal, sub or equal elimination: $ U = V \limp U \sub V \land V \sub U $. *) - Theorem seq_sbe_e: (S:Set; U,V:S->Set) (SEq S U V) -> (LAnd (SbE S U V) (SbE S V U)). - Intros. - MApply 'land_i. - MApply 'sbe_i. - MApply '(seq_e1 S U). - MApply 'sbe_i. - MApply '(seq_e2 S V). - Qed. - -(** Set equal, sub or equal criterion: $ U = V \liff U \sub V \land V \sub U $. *) - Theorem seq_sbe: (S:Set; U,V:S->Set) (LIff (SEq S U V) (LAnd (SbE S U V) (SbE S V U))). - Intros. - MApply 'liff_i. - MApply 'seq_sbe_e. - MApply 'seq_sbe_i. - MApply '(land_e2 (SbE S V U)). - MApply '(land_e1 (SbE S U V)). - Qed. - -(** Subset equal reflexivity: $ U = U $. *) - Theorem seq_r: (S:Set; U:S->Set) (SEq S U U). - Intros. - MApply 'seq_i. - Qed. - -(** Subset equal transitivity: $ U = W \limp W = V \limp U = V $. *) - Theorem seq_t: (S:Set; W,U,V:S->Set) (SEq S U W) -> (SEq S W V) -> (SEq S U V). - Intros. - MApply 'seq_i. - MApply '(seq_e1 S W). - MApply '(seq_e1 S U). - MApply '(seq_e2 S W). - MApply '(seq_e2 S V). - Qed. - -(** Subset equal symmetry: $ U = V \limp V = U $. *) - Theorem seq_s: (S:Set; U,V:S-> Set) (SEq S U V) -> (SEq S V U). - Intros. - MApply 'seq_i. - MApply '(seq_e2 S V). - MApply '(seq_e1 S U). - Qed. - - End subset_equality. - -End Subset_Relations_Results. - diff --git a/helm/coq-contribs/SUBSETS/tbs_rop.v b/helm/coq-contribs/SUBSETS/tbs_rop.v deleted file mode 100644 index 2abccd67c..000000000 --- a/helm/coq-contribs/SUBSETS/tbs_rop.v +++ /dev/null @@ -1,130 +0,0 @@ -Require Export tbs_op. - -Section Subset_Relative_Operations_Definitions. - - Section relative_membership. - - Definition REps: (I,S:Set) S -> (I -> S -> Set) -> Set := [I,S;a;F](LEx I [i](Eps S a (F i))). - - End relative_membership. - - Section infinitary_subset_relative_operations. - - Definition SRAll: (I:Set; T:I->Set; S:Set) ((i:I) (T i) -> (S -> Set)) -> (S -> Set) := [I;T;S;R;a](RAll I T [i](REps (T i) S a (R i))). - - Definition SREx: (I:Set; T:I->Set; S:Set) ((i:I) (T i) -> (S -> Set)) -> (S -> Set) := [I;T;S;R;a](REx I T [i](REps (T i) S a (R i))). - - End infinitary_subset_relative_operations. - -End Subset_Relative_Operations_Definitions. - -Section Subset_Relative_Operations_Results. - - Section relative_epsilon_conditions. - - Theorem reps_i: (I:Set; i:I; S:Set; a:S; F:I->S->Set) (Eps S a (F i)) -> (REps I S a F). - Intros. - Unfold REps. - MApply '(lex_i I i). - Qed. - - Theorem reps_e: (I,S:Set; a:S; F:I->S->Set; P:Set) ((i:I) (Eps S a (F i)) -> P) -> (REps I S a F) -> P. - Intros. - Unfold REps in H0. - MElim 'H0 'lex_e. - MApply '(H a0). - Qed. - - End relative_epsilon_conditions. - - Section infinitary_relative_intersection. - - Theorem srall_eps_i: (I:Set; T:I->Set; S:Set; a:S; R:(i:I)(T i)->(S->Set)) ((i:I) (REps (T i) S a (R i))) -> (Eps S a (SRAll I T S R)). - Intros. - MApply 'eps_i. - Unfold SRAll. - MApply 'rall_i. - MApply '(H a0). - Qed. - - Theorem srall_eps_e: (I:Set; i:I; T:I->Set) (T i) -> (S:Set; a:S; R:(i:I)(T i)->(S->Set)) (Eps S a (SRAll I T S R)) -> (REps (T i) S a (R i)). - Intros. - MCut '(SRAll I T S R a). - MApply 'eps_e. - Unfold SRAll in H1. - MApply '(rall_e I i T). - MApply 'eps_i. - Qed. - - End infinitary_relative_intersection. - - Section infinitary_relative_union. - - Theorem srex_eps_i: (I:Set; i:I; S:Set; a:S; T:I->Set; R:(i:I)(T i)->(S->Set)) (REps (T i) S a (R i)) -> (Eps S a (SREx I T S R)). - Intros. - MApply 'eps_i. - Unfold SREx. - MApply '(rex_i I i). - MApply 'eps_i. - MApply '(reps_e (T i) S a (R i)). - Qed. - - Theorem srex_eps_e: (I:Set; T:I->Set; S:Set; a:S; R:(i:I)(T i)->(S->Set)) (Eps S a (SREx I T S R)) -> (LEx I [i](REps (T i) S a (R i))). - Intros. - MCut '(SREx I T S R a). - MApply 'eps_e. - Unfold SREx in H0. - MApply '(rex_e I T [i:I](REps (T i) S a (R i))). - MApply '(lex_i I a0). - Qed. - - Theorem srex_sbe: (I:Set; V,W:I->Set; S:Set; F:I->S->Set) (SbE I V W) -> (SbE S (SREx I V S [i;_](F i)) (SREx I W S [i;_](F i))). - Intros. - MApply 'sbe_i. - MCut '(LEx I [i:?](REps (V i) S a [_:?](F i))). - MApply '(srex_eps_e I V S a [i:?; _:(V i)](F i)). - MElim 'H1 'lex_e. - MApply '(srex_eps_i I a0). - MCut '(W a0). - MApply 'eps_e. - MApply '(sbe_e I V). - MApply 'eps_i. - MApply '(reps_e (V a0) S a [_:(V a0)](F a0)). - MApply '(reps_i (W a0) H2). - MApply '(reps_e (V a0) S a [_:(V a0)](F a0)). - Qed. - - Theorem srex_sing_e: (S:Set; U:S->Set) (SbE S (SREx S U S [a;_](Sing S a)) U). - Intros. - MApply 'sbe_i. - MCut '(LEx S [b:?](REps (U b) S a [_:?](Sing S b))). - MApply '(srex_eps_e S U S a [a0:S; _:(U a0)](Sing S a0)). - MElim 'H0 'lex_e. - MApply '(reps_e (U a0) S a [_:(U a0)](Sing S a0)). - MCut '(Id S a0 a). - MApply 'sing_eps_e. - MApply '(id_repl S a a0). - MApply 'eps_i. - Qed. - - Theorem srex_sing_i: (S:Set; U:S->Set) (SbE S U (SREx S U S [a;_](Sing S a))). - Intros. - MApply 'sbe_i. - MApply '(srex_eps_i S a). - MCut '(U a). - MApply 'eps_e. - MApply '(reps_i (U a) H0). - MApply 'sing_eps_i. - Qed. - - Theorem srex_sing: (S:Set; U:S->Set) (SEq S (SREx S U S [a;_](Sing S a)) U). - Intros. - MApply 'seq_sbe_i. - MApply 'srex_sing_e. - MApply 'srex_sing_i. - Qed. - - End infinitary_relative_union. - -End Subset_Relative_Operations_Results. - diff --git a/helm/coq-contribs/SUBSETS/xt_fin.v b/helm/coq-contribs/SUBSETS/xt_fin.v deleted file mode 100644 index 694632494..000000000 --- a/helm/coq-contribs/SUBSETS/xt_fin.v +++ /dev/null @@ -1,304 +0,0 @@ -Require Export Standard. - -Section Fin_Definitions. - - Section finite_sets. - - Definition Fin: N -> Set := (NatFam [_]Set Empty [_](LOr One)). - -(* Constructors: first element, next element *) - Definition ffe: (n:N) (Fin (succ n)). - Intros. - MApply '(in_l One (Fin n) tt). - Defined. - - Definition fne: (n:N) (Fin n) -> (Fin (succ n)). - Intros. - MApply '(in_r One (Fin n)). - Defined. - -(* Eliminator *) - Definition finrec: (n:N; P:(Fin (succ n))->Set) (P (ffe n)) -> ((a:(Fin n))(P (fne n a))) -> (p:(Fin (succ n))) (P p). - Intros. - MElim 'p '(when One (Fin n)). - MElim 's 'onerec. - MApply '(H0 t). - Defined. - -(* Predecessor *) - Definition fpe: (n:N) (Fin (succ (succ n))) -> (Fin (succ n)). - Intros. - MElim 'H '(finrec (succ n)). - MApply '(ffe n). - Defined. - -(* Injection of (Fin (succ n)) in N *) - Definition fn: (n:N) (Fin (succ n)) -> N := (natrec [m](Fin (succ m))->N [_]zero [m;p](finrec (succ m) [_]N zero [a](succ (p a)))). -(* - Intros n. - Elim n using natrec. - Intros. - Exact zero. - Intros. - Apply H. - Apply fpe. - Apply H0. -*) - -(* Surjection of N in (Fin (succ n)): (ffe n) returned if m >= n *) - Definition nf: (n,m:N) (Fin (succ n)) := (natrec [m]N->(Fin (succ m)) [_](ffe zero) [n';p](natrec [_](Fin (succ (succ n'))) (ffe (succ n')) [m';p'](fne (succ n') (p m')))). - -(* Left injection of (Fin m) -> (Fin (add m n)) *) - Definition fil: (m,n:N) (Fin m) -> (Fin (add m n)) := - (natrec [m](n:N) (Fin m) -> (Fin (add m n)) - [n](efq [_](Fin (add zero n))) - [m';_](natrec [n](Fin (succ m')) -> (Fin (add (succ m') n)) - [a]a [n';_;a](nf (add (succ m') n') (fn m' a)))). - -(* Right injection of (Fin n) -> (Fin (add m n)) *) - Definition fir: (m,n:N) (Fin n) -> (Fin (add m n)) := - [m](natrec [n](Fin n) -> (Fin (add m n)) - (efq [_](Fin m)) - [n';_;a](nf (add m n') (add (fn n' a) m))). - - End finite_sets. - - Section explicit_finite_domain_functions. - - Definition xfdf_list: (S:Set; n:N) ((Fin n) -> S) -> (List S) := [S](natrec [m]((Fin m)->S)->(List S) [_](empty S) [m;p;f](fr S (p [k](f (fne m k))) (f (ffe m)))). - - Definition xfdf_add': (S:Set; m:N) ((Fin (succ m))->S) -> (n:N) ((Fin (succ n))->S) -> (Fin (add_three (succ m) n one)) -> S := - [S;m;v;n;w;a](ite [_]S (w (nf n (sub (fn (add (succ m) n) a) (succ m)))) - (v (nf m (fn (add (succ m) n) a))) - (b_le (fn (add (succ m) n) a) m)). - - Definition xfdf_add: (S:Set; m:N) ((Fin m)->S) -> (n:N) ((Fin n)->S) -> (Fin (add m n)) -> S := - [S](natrec [m]((Fin m)->S) -> (n:N) ((Fin n)->S) -> (Fin (add m n)) -> S - [_](natrec [n]((Fin n)->S) -> (Fin (add zero n)) -> S - [w]w [n';_;w;a](w (nf n' (fn (add zero n') a)))) - [m';_;v](natrec [n]((Fin n)->S) -> (Fin (add (succ m') n)) -> S - [_]v [n';_](xfdf_add' S m' v n'))). - - End explicit_finite_domain_functions. - - Section finite_domain_functions. - - Definition FDF: Set -> Set := [S](Sigma N [n](Fin n)->S). - - Definition fdf_i: (S:Set; n:N) ((Fin n)->S) -> (FDF S) := [S](pair N [n](Fin n)->S). - - Definition fdf_e: (S:Set; P:(FDF S)->Set) ((n:N; f:(Fin n)->S) (P (fdf_i S n f))) -> (v:(FDF S))(P v) := - [S:Set](psplit N [n](Fin n)->S). - - Definition fdf_n: (S:Set) (FDF S) -> N := [S](fdf_e S [_]N [a;_]a). - - Definition fdf_f: (S:Set; v:(FDF S)) (Fin (fdf_n S v)) -> S := [S](fdf_e S [p](Fin (fdf_n S p))->S [_;p]p). - - Definition fdf_empty: (S:Set) (FDF S) := [S](fdf_i S zero (efq [_]S)). - - Definition fdf_fr: (S:Set) (FDF S) -> S -> (FDF S) := [S;v;a](fdf_i S (succ (fdf_n S v)) (when One (Fin (fdf_n S v)) [_]S [_]a (fdf_f S v))). -(* - Definition lfdf: (S:Set) (List S) -> (FDF S) := [S](listrec S [_](FDF S) (fdf_empty S) [_](fdf_fr S)). -*) - Definition fdfl: (S:Set) (FDF S) -> (List S) := [S](fdf_e S [_](List S) (xfdf_list S)). - - Definition fdf_add: (S:Set) (FDF S) -> (FDF S) -> (FDF S) := [S;v;w](fdf_i S (add (fdf_n S v) (fdf_n S w)) (xfdf_add S (fdf_n S v) (fdf_f S v) (fdf_n S w) (fdf_f S w))). - - End finite_domain_functions. - -End Fin_Definitions. - -Section Fin_Results. - - Section fin_results. - -(* Immediate result used for reference - Theorem fpe_fne: (n:N; a:(Fin (succ n))) (Id (Fin (succ n)) (fpe n (fne (succ n) a)) a). -*) - Theorem fne_ini: (n:N; a,b:(Fin n)) (Id (Fin (succ n)) (fne n a) (fne n b)) -> (Id (Fin n) a b). - Intros n. - Elim n using natrec. - Intros. - MElim a efq. - Intros. - MApply '(id_repl (Fin (succ n0)) a (fpe n0 (fne (succ n0) a))). - MApply '(id_repl (Fin (succ n0)) b (fpe n0 (fne (succ n0) b))). - MApply '(id_comp (Fin (succ (succ n0))) (Fin (succ n0)) (fpe n0)). - Qed. - - Theorem fn_le: (n:N; a:(Fin (succ n))) (LE (fn n a) n). - Intros n. - Elim n using natrec; Intros. - MApply 'le_r. - MElim 'a '(finrec (succ n0)). - MApply 'le_wf. - MApply 'le_comp_succ. - MApply '(H a0). - Qed. - - Theorem nfn': (n:N; a:(Fin (succ n)); m:N) (LE m n) -> (Id (Fin (succ n)) (nf n m) a) -> (Id N (fn n a) m). - Intros n. - Elim n using natrec. - Intros; Simpl. - MApply 'id_comm. - MApply '(le_zero m). - Intros n' H a m. - Elim a using (finrec (succ n')). - MElim 'm 'natrec. - MCut 'Empty. - Unfold fne in H2. - MApply '(lor_p4 One (Fin (succ n')) tt (nf n' n0)). - MElim 'H3 'efq. - Intros a'. - Elim m using natrec. - Simpl. - Intros. - MCut 'Empty. - MApply '(lor_p4 One (Fin (succ n')) tt a'). - MElim 'H2 'efq. - Intros. - Simpl. - MApply '(id_comp N). - Change (Id N (fn n' a') n0). - MApply '(H a' n0). - Simpl in H2. - Change (Id (Fin (succ (succ n'))) (fne (succ n') (nf n' n0)) (fne (succ n') a')) in H2. - MApply 'fne_ini. - Qed. - - Theorem nfn: (n:N; m:N) (LE m n) -> (Id N (fn n (nf n m)) m). - Intros. - MApply 'nfn'. - Qed. - - Theorem fnf_fne: (n:N; a:(Fin n)) (Id (Fin (succ n)) (nf n (fn n (fne n a))) (fne n a)). - Intros n. - Elim n using natrec; Intros. - MElim 'a 'efq. - Elim a using (finrec n0); Intros. - MElim 'n0 'natrec. - MSimpl. - MApply '(id_comp (Fin (succ n0))). - MApply '(H a0). - Qed. - - Theorem fnf: (n:N; a:(Fin (succ n))) (Id (Fin (succ n)) (nf n (fn n a)) a). - Intros. - Elim a using (finrec n); Intros. - MElim 'n 'natrec. - MApply 'fnf_fne. - Qed. - - End fin_results. - - Section xfdf_results. - - Theorem xfdfl_lin: (S:Set; n:N; a:(Fin n); v:(Fin n)->S) (LIn S (v a) (xfdf_list S n v)). - Intros S n. - Elim n using natrec; Intros. - MElim a efq. - MSimpl. - MApply 'lin_fr_i. - MElim 'a '(finrec n0). - MApply 'in_r. - MApply 'in_l. - MApply '(H a0 [k:(Fin n0)](v (fne n0 k))). - Qed. - - Theorem xfdfa_fil: (S:Set; m:N; a:(Fin m); v:(Fin m)->S; n:N; w:(Fin n)->S) (Id S (xfdf_add S m v n w (fil m n a)) (v a)). - Intros S m. - Elim m using natrec. - Intros a. - Elim a using efq. - Intros m' H a v n. - Elim n using natrec. - Intros. - MApply 'id_r. - Intros n' H0 w. - Simpl. - MCut '(LE (fn m' a) (add (succ m') n')). - MApply '(le_trans m'). - MApply 'fn_le. - MApply '(id_repl N (add (succ m') n') (add_three m' n' one)). - MApply 'id_comm. - MApply '(add_succ m' n'). - MApply '(le_add m' (succ n')). - Unfold xfdf_add'. - MApply '(id_repl Boole (b_le (fn (add (succ m') n') (nf (add (succ m') n') (fn m' a))) m') true). - MApply 'id_comm. - Fold (LE (fn (add (succ m') n') (nf (add (succ m') n') (fn m' a))) m'). - MApply '(id_repl N (fn (add (succ m') n') (nf (add (succ m') n') (fn m' a))) (fn m' a)). - MApply 'id_comm. - MApply 'nfn. - MApply 'fn_le. - Simpl. - MApply '(id_comp (Fin (succ m'))). - MApply '(id_repl N (fn (add (succ m') n') (nf (add (succ m') n') (fn m' a))) (fn m' a)). - MApply 'id_comm. - MApply 'nfn. - MApply 'fnf. - Qed. - - Theorem xfdfa_fir: (S:Set; m:N; v:(Fin m)->S; n:N; a:(Fin n); w:(Fin n)->S) (Id S (xfdf_add S m v n w (fir m n a)) (w a)). - Intros S m. - Elim m using natrec. - Intros v n. - Elim n using natrec. - Intros a. - Elim a using efq. - Intros n' H a w. - MSimpl. - MApply '(id_comp (Fin (succ n'))). - MApply '(id_repl N (fn (add zero n') (nf (add zero n') (fn n' a))) (fn n' a)). - MApply 'id_comm. - MApply 'nfn. - MApply '(le_trans n'). - MApply 'fn_le. - MApply '(id_repl N (add zero n') n'). - MApply '(add_comm n' zero). - MApply 'le_r. - MApply 'fnf. - Intros m' H v n. - Elim n using natrec. - Intros a. - Elim a using efq. - Intros n' H' a w. - (MSimpl; Apply succ_fold). (**) - MCut '(LE (succ (add (fn n' a) m')) (add (succ m') n')). - MApply '(id_repl N (add (succ m') n') (succ (add m' n'))). - MApply 'id_comm. - MApply 'add_succ. - MApply 'le_comp_succ. - MApply '(id_repl N (add m' n') (add n' m')). - MApply 'add_comm. - MApply 'le_comp_add. - MApply 'fn_le. - Unfold xfdf_add'. - MApply '(id_repl Boole (b_le (fn (add (succ m') n') (nf (add (succ m') n') (succ (add (fn n' a) m')))) m') false). - MApply 'id_comm. - Fold (GT (fn (add (succ m') n') (nf (add (succ m') n') (succ (add (fn n' a) m')))) m'). - MApply 'le_gt. - MApply '(id_repl N (fn (add (succ m') n') (nf (add (succ m') n') (succ (add (fn n' a) m')))) (succ (add (fn n' a) m'))). - MApply 'id_comm. - MApply 'nfn. - MApply 'le_comp_succ. - MApply '(id_repl N (add (fn n' a) m') (add m' (fn n' a))). - MApply 'add_comm. - MApply 'le_add. - MSimpl. - MApply 'pred_fold. - MApply '(id_comp (Fin (succ n'))). - MApply '(id_repl N (sub (pred (fn (add (succ m') n') (nf (add (succ m') n') (succ (add (fn n' a) m'))))) m') (fn n' a)). - MApply 'id_comm. - MApply 'add_sub_e. - MApply 'succ_pred_e. - MApply '(id_repl N (add m' (fn n' a)) (add (fn n' a) m')). - MApply 'add_comm. - MApply 'nfn. - MApply 'fnf. - Qed. - - End xfdf_results. - -End Fin_Results. - diff --git a/helm/dtd/annotations.dtd b/helm/dtd/annotations.dtd deleted file mode 100644 index 518541049..000000000 --- a/helm/dtd/annotations.dtd +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/backward.dtd b/helm/dtd/backward.dtd deleted file mode 100644 index 60c27c4a7..000000000 --- a/helm/dtd/backward.dtd +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/cic.dtd b/helm/dtd/cic.dtd deleted file mode 100644 index 28f2804f9..000000000 --- a/helm/dtd/cic.dtd +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/cicobject.dtd b/helm/dtd/cicobject.dtd deleted file mode 100644 index 10f001df6..000000000 --- a/helm/dtd/cicobject.dtd +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%mathml; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/cictypes.dtd b/helm/dtd/cictypes.dtd deleted file mode 100644 index c5e199658..000000000 --- a/helm/dtd/cictypes.dtd +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%cicdtd; - - - - - - - - - - diff --git a/helm/dtd/forward.dtd b/helm/dtd/forward.dtd deleted file mode 100644 index 4fd7ea419..000000000 --- a/helm/dtd/forward.dtd +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isoamsa.ent b/helm/dtd/isoamsa.ent deleted file mode 100644 index 5ecf4db21..000000000 --- a/helm/dtd/isoamsa.ent +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isoamsb.ent b/helm/dtd/isoamsb.ent deleted file mode 100644 index 08e646c2b..000000000 --- a/helm/dtd/isoamsb.ent +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isoamsc.ent b/helm/dtd/isoamsc.ent deleted file mode 100644 index cce399cf9..000000000 --- a/helm/dtd/isoamsc.ent +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isoamsn.ent b/helm/dtd/isoamsn.ent deleted file mode 100644 index cddeba066..000000000 --- a/helm/dtd/isoamsn.ent +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isoamso.ent b/helm/dtd/isoamso.ent deleted file mode 100644 index 8ac4bdb61..000000000 --- a/helm/dtd/isoamso.ent +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isoamsr.ent b/helm/dtd/isoamsr.ent deleted file mode 100644 index 7fec58255..000000000 --- a/helm/dtd/isoamsr.ent +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isobox.ent b/helm/dtd/isobox.ent deleted file mode 100644 index 630edc559..000000000 --- a/helm/dtd/isobox.ent +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isocyr1.ent b/helm/dtd/isocyr1.ent deleted file mode 100644 index 4bcc9e416..000000000 --- a/helm/dtd/isocyr1.ent +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isocyr2.ent b/helm/dtd/isocyr2.ent deleted file mode 100644 index 67c477b24..000000000 --- a/helm/dtd/isocyr2.ent +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isodia.ent b/helm/dtd/isodia.ent deleted file mode 100644 index ba6496300..000000000 --- a/helm/dtd/isodia.ent +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isogrk3.ent b/helm/dtd/isogrk3.ent deleted file mode 100644 index fa0335504..000000000 --- a/helm/dtd/isogrk3.ent +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isolat1.ent b/helm/dtd/isolat1.ent deleted file mode 100644 index 849d360ae..000000000 --- a/helm/dtd/isolat1.ent +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isolat2.ent b/helm/dtd/isolat2.ent deleted file mode 100644 index 3049be7f1..000000000 --- a/helm/dtd/isolat2.ent +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isomfrk.ent b/helm/dtd/isomfrk.ent deleted file mode 100644 index d3d92aaee..000000000 --- a/helm/dtd/isomfrk.ent +++ /dev/null @@ -1,79 +0,0 @@ - - - -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > diff --git a/helm/dtd/isomopf.ent b/helm/dtd/isomopf.ent deleted file mode 100644 index 6b5e01f79..000000000 --- a/helm/dtd/isomopf.ent +++ /dev/null @@ -1,53 +0,0 @@ - - - -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > diff --git a/helm/dtd/isomscr.ent b/helm/dtd/isomscr.ent deleted file mode 100644 index 75d3bc5df..000000000 --- a/helm/dtd/isomscr.ent +++ /dev/null @@ -1,79 +0,0 @@ - - - -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > -" > diff --git a/helm/dtd/isonum.ent b/helm/dtd/isonum.ent deleted file mode 100644 index d6d346169..000000000 --- a/helm/dtd/isonum.ent +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isopub.ent b/helm/dtd/isopub.ent deleted file mode 100644 index 5591fc390..000000000 --- a/helm/dtd/isopub.ent +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/isotech.ent b/helm/dtd/isotech.ent deleted file mode 100644 index 8b30af833..000000000 --- a/helm/dtd/isotech.ent +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/ls.dtd b/helm/dtd/ls.dtd deleted file mode 100644 index 93997e72a..000000000 --- a/helm/dtd/ls.dtd +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/helm/dtd/mathml2-qname-1.mod b/helm/dtd/mathml2-qname-1.mod deleted file mode 100644 index 4dea63a00..000000000 --- a/helm/dtd/mathml2-qname-1.mod +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - -]]> - - - - -]]> - - - - -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/mathml2.dtd b/helm/dtd/mathml2.dtd deleted file mode 100644 index a9b7bf1ac..000000000 --- a/helm/dtd/mathml2.dtd +++ /dev/null @@ -1,1948 +0,0 @@ - - - - - - - - - -%mathml-qname.mod;]]> - - ---> - -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%ent-isoamsa; - - -%ent-isoamsb; - - -%ent-isoamsc; - - -%ent-isoamsn; - - -%ent-isoamso; - - -%ent-isoamsr; - - -%ent-isogrk3; - - -%ent-isomfrk; - - -%ent-isomopf; - - -%ent-isomscr; - - -%ent-isotech; - - - - -%ent-isobox; - - -%ent-isocyr1; - - -%ent-isocyr2; - - -%ent-isodia; - - -%ent-isolat1; - - -%ent-isolat2; - - -%ent-isonum; - - -%ent-isopub; - - - - -%ent-mmlextra; - - - - -%ent-mmlalias; - -]]> - - - - - - diff --git a/helm/dtd/maththeory.dtd b/helm/dtd/maththeory.dtd deleted file mode 100644 index 7158611ed..000000000 --- a/helm/dtd/maththeory.dtd +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - typesetting ( paragraph | inline ) paragraph - - heading ( true | false ) true - - uri_base ( true | false ) true - - notation ( true | false ) false - - params ( true | false ) false - - Params ( true | false ) true - - type ( true | false ) true - - body ( true | false ) true > - - - - - - - - - - -(*CSC: In the case of a set of mutual (Co)Inductive DEFINITIONS, *) -(*CSC: all the entries inside ht:MUTUAL have the same URI ;-| *) - diff --git a/helm/dtd/mmlalias.ent b/helm/dtd/mmlalias.ent deleted file mode 100644 index f5901b384..000000000 --- a/helm/dtd/mmlalias.ent +++ /dev/null @@ -1,529 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/mmlextra.ent b/helm/dtd/mmlextra.ent deleted file mode 100644 index e76de448c..000000000 --- a/helm/dtd/mmlextra.ent +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/theoryobject.dtd b/helm/dtd/theoryobject.dtd deleted file mode 100644 index 1a8cb131d..000000000 --- a/helm/dtd/theoryobject.dtd +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%cicobj; - - - - - - - - - - - - - - - - typesetting ( paragraph | inline ) paragraph - - heading ( true | false ) true - - uri_base ( true | false ) true - - notation ( true | false ) false - - params ( true | false ) false - - Params ( true | false ) true - - type ( true | false ) true - - body ( true | false ) true > - - - - - - diff --git a/helm/dtd/xhtml-lat1.ent b/helm/dtd/xhtml-lat1.ent deleted file mode 100644 index ffee223eb..000000000 --- a/helm/dtd/xhtml-lat1.ent +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/xhtml-special.ent b/helm/dtd/xhtml-special.ent deleted file mode 100644 index ca358b2fe..000000000 --- a/helm/dtd/xhtml-special.ent +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/dtd/xhtml-symbol.ent b/helm/dtd/xhtml-symbol.ent deleted file mode 100644 index 63c2abfa6..000000000 --- a/helm/dtd/xhtml-symbol.ent +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/fix_params/.cvsignore b/helm/fix_params/.cvsignore deleted file mode 100644 index 7335d1661..000000000 --- a/helm/fix_params/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.cm[iox] *.o fix_params fix_params.opt diff --git a/helm/fix_params/.depend b/helm/fix_params/.depend deleted file mode 100644 index 152053f35..000000000 --- a/helm/fix_params/.depend +++ /dev/null @@ -1,2 +0,0 @@ -fix_params.cmo: cicFindParameters.cmo -fix_params.cmx: cicFindParameters.cmx diff --git a/helm/fix_params/Makefile b/helm/fix_params/Makefile deleted file mode 100644 index 92ac930bc..000000000 --- a/helm/fix_params/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -REQUIRES = helm-getter helm-cic_cache helm-xml -PREDICATES = -OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)" -pp camlp4o -OCAMLDEP = ocamldep -OCAMLFIND = ocamlfind -OCAMLC = $(OCAMLFIND) ocamlc $(OCAMLOPTIONS) -OCAMLOPT = $(OCAMLFIND) ocamlopt $(OCAMLOPTIONS) - -LIBRARIES = $(shell ocamlfind query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES)) -LIBRARIES_OPT = $(shell ocamlfind query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES)) - -all: fix_params -opt: fix_params.opt - -DEPOBJS = cic2Xml.ml cicFindParameters.ml fix_params.ml - -FIXPARAMSOBJS = cic2Xml.cmo cicFindParameters.cmo fix_params.cmo - -depend: - $(OCAMLDEP) $(DEPOBJS) > .depend - -fix_params: $(FIXPARAMSOBJS) $(LIBRARIES) - $(OCAMLC) -linkpkg -o fix_params $(FIXPARAMSOBJS) - -fix_params.opt: $(FIXPARAMSOBJS:.cmo=.cmx) $(LIBRARIES_OPT) - $(OCAMLOPT) -linkpkg -o fix_params.opt $(FIXPARAMSOBJS:.cmo=.cmx) - -.SUFFIXES: .ml .mli .cmo .cmi .cmx -.ml.cmo: $(LIBRARIES) - $(OCAMLC) -c $< -.mli.cmi: $(LIBRARIES) - $(OCAMLC) -c $< -.ml.cmx: $(LIBRARIES_OPT) - $(OCAMLOPT) -c $< - -clean: - rm -f *.cm[iox] *.o fix_params fix_params.opt - -.PHONY: clean - -include .depend diff --git a/helm/fix_params/cic2Xml.ml b/helm/fix_params/cic2Xml.ml deleted file mode 100644 index 0d433d64a..000000000 --- a/helm/fix_params/cic2Xml.ml +++ /dev/null @@ -1,251 +0,0 @@ - -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(*CSC codice cut & paste da cicPp e xmlcommand *) - -exception ImpossiblePossible;; -exception NotImplemented;; -let dtdname = "http://localhost:8081/getdtd?url=cic.dtd";; - -(*CSC ottimizzazione: al posto di curi cdepth (vedi codice) *) -let print_term curi = - let rec aux = - let module C = Cic in - let module X = Xml in - let module U = UriManager in - function - C.ARel (id,n,b) -> - X.xml_empty "REL" ["value",(string_of_int n);"binder",b;"id",id] - | C.AVar (id,uri) -> - let vdepth = U.depth_of_uri uri - and cdepth = U.depth_of_uri curi in - X.xml_empty "VAR" - ["relUri",(string_of_int (cdepth - vdepth)) ^ "," ^ - (U.name_of_uri uri) ; - "id",id] - | C.AMeta (id,n) -> - X.xml_empty "META" ["no",(string_of_int n) ; "id",id] - | C.ASort (id,s) -> - let string_of_sort = - function - C.Prop -> "Prop" - | C.Set -> "Set" - | C.Type -> "Type" - in - X.xml_empty "SORT" ["value",(string_of_sort s) ; "id",id] - | C.AImplicit _ -> raise NotImplemented - | C.AProd (id,C.Anonimous,s,t) -> - X.xml_nempty "PROD" ["id",id] - [< X.xml_nempty "source" [] (aux s) ; - X.xml_nempty "target" [] (aux t) - >] - | C.AProd (xid,C.Name id,s,t) -> - X.xml_nempty "PROD" ["id",xid] - [< X.xml_nempty "source" [] (aux s) ; - X.xml_nempty "target" ["binder",id] (aux t) - >] - | C.ACast (id,v,t) -> - X.xml_nempty "CAST" ["id",id] - [< X.xml_nempty "term" [] (aux v) ; - X.xml_nempty "type" [] (aux t) - >] - | C.ALambda (id,C.Anonimous,s,t) -> - X.xml_nempty "LAMBDA" ["id",id] - [< X.xml_nempty "source" [] (aux s) ; - X.xml_nempty "target" [] (aux t) - >] - | C.ALambda (xid,C.Name id,s,t) -> - X.xml_nempty "LAMBDA" ["id",xid] - [< X.xml_nempty "source" [] (aux s) ; - X.xml_nempty "target" ["binder",id] (aux t) - >] - | C.ALetIn (xid,C.Anonimous,s,t) -> - assert false (*CSC: significa che e' sbagliato il tipo di LetIn!!!*) - | C.ALetIn (xid,C.Name id,s,t) -> - X.xml_nempty "LETIN" ["id",xid] - [< X.xml_nempty "term" [] (aux s) ; - X.xml_nempty "letintarget" ["binder",id] (aux t) - >] - | C.AAppl (id,li) -> - X.xml_nempty "APPLY" ["id",id] - [< (List.fold_right (fun x i -> [< (aux x) ; i >]) li [<>]) - >] - | C.AConst (id,uri,_) -> - X.xml_empty "CONST" ["uri", (U.string_of_uri uri) ; "id",id] - | C.AMutInd (id,uri,_,i) -> - X.xml_empty "MUTIND" - ["uri", (U.string_of_uri uri) ; - "noType",(string_of_int i) ; - "id",id] - | C.AMutConstruct (id,uri,_,i,j) -> - X.xml_empty "MUTCONSTRUCT" - ["uri", (U.string_of_uri uri) ; - "noType",(string_of_int i) ; "noConstr",(string_of_int j) ; - "id",id] - | C.AMutCase (id,uri,_,typeno,ty,te,patterns) -> - X.xml_nempty "MUTCASE" - ["uriType",(U.string_of_uri uri) ; - "noType", (string_of_int typeno) ; - "id", id] - [< X.xml_nempty "patternsType" [] [< (aux ty) >] ; - X.xml_nempty "inductiveTerm" [] [< (aux te) >] ; - List.fold_right - (fun x i -> [< X.xml_nempty "pattern" [] [< aux x >] ; i>]) - patterns [<>] - >] - | C.AFix (id, no, funs) -> - X.xml_nempty "FIX" ["noFun", (string_of_int no) ; "id",id] - [< List.fold_right - (fun (fi,ai,ti,bi) i -> - [< X.xml_nempty "FixFunction" - ["name", fi; "recIndex", (string_of_int ai)] - [< X.xml_nempty "type" [] [< aux ti >] ; - X.xml_nempty "body" [] [< aux bi >] - >] ; - i - >] - ) funs [<>] - >] - | C.ACoFix (id,no,funs) -> - X.xml_nempty "COFIX" ["noFun", (string_of_int no) ; "id",id] - [< List.fold_right - (fun (fi,ti,bi) i -> - [< X.xml_nempty "CofixFunction" ["name", fi] - [< X.xml_nempty "type" [] [< aux ti >] ; - X.xml_nempty "body" [] [< aux bi >] - >] ; - i - >] - ) funs [<>] - >] - in - aux -;; - -let encode params = - List.fold_right - (fun (n,l) i -> - match l with - [] -> i - | _ -> - string_of_int n ^ ": " ^ - String.concat " " (List.map UriManager.name_of_uri l) ^ - i - ) params "" -;; - -let print_mutual_inductive_type curi (typename,inductive,arity,constructors) = - let module C = Cic in - let module X = Xml in - [< X.xml_nempty "InductiveType" - ["name",typename ; - "inductive",(string_of_bool inductive) - ] - [< X.xml_nempty "arity" [] (print_term curi arity) ; - (List.fold_right - (fun (name,ty,_) i -> - [< X.xml_nempty "Constructor" ["name",name] - (print_term curi ty) ; - i - >]) - constructors - [<>] - ) - >] - >] -;; - -let pp obj curi = - let module C = Cic in - let module X = Xml in - match obj with - C.ADefinition (xid, id, te, ty, params) -> - [< X.xml_cdata "\n" ; - X.xml_cdata ("\n\n") ; - X.xml_nempty "Definition" - (["name", id ; "id",xid] @ - match params with - C.Possible _ -> raise ImpossiblePossible - (*CSC params are kept in inverted order in the internal *) - (* representation (the order of application) *) - | C.Actual fv' -> ["params",(encode (List.rev fv'))]) - [< X.xml_nempty "body" [] (print_term curi te) ; - X.xml_nempty "type" [] (print_term curi ty) >] - >] - | C.AAxiom (xid, id, ty, params) -> - [< X.xml_cdata "\n" ; - X.xml_cdata ("\n\n") ; - X.xml_nempty "Axiom" - (*CSC params are kept in inverted order in the internal *) - (* representation (the order of application) *) - ["name",id ; "params",(encode (List.rev params)) ; "id",xid] - [< X.xml_nempty "type" [] (print_term curi ty) >] - >] - | C.AVariable (xid, name, bo, ty) -> - [< X.xml_cdata "\n" ; - X.xml_cdata ("\n\n") ; - X.xml_nempty "Variable" ["name",name ; "id",xid] - [< (match bo with - None -> [<>] - | Some bo -> X.xml_nempty "body" [] (print_term curi bo) - ) ; - X.xml_nempty "type" [] (print_term curi ty) - >] - >] - | C.ACurrentProof (xid, name, conjs, bo, ty) -> - [< X.xml_cdata "\n" ; - X.xml_cdata ("\n\n"); - X.xml_nempty "CurrentProof" ["name",name ; "id",xid] - [< List.fold_right - (fun (j,t) i -> - [< X.xml_nempty "Conjecture" ["no",(string_of_int j)] - [< print_term curi t >] ; i >]) - conjs [<>] ; - X.xml_nempty "body" [] [< print_term curi bo >] ; - X.xml_nempty "type" [] [< print_term curi ty >] - >] - >] - | C.AInductiveDefinition (xid, tys, params, paramsno) -> - let names = - List.map - (fun (typename,_,_,_) -> typename) - tys - in - [< X.xml_cdata "\n" ; - X.xml_cdata ("\n\n") ; - X.xml_nempty "InductiveDefinition" - (*CSC params are kept in inverted order in the internal *) - (* representation (the order of application) *) - ["noParams",string_of_int paramsno ; - "params",(encode (List.rev params)) ; - "id",xid] - [< List.fold_right - (fun x i -> [< print_mutual_inductive_type curi x ; i >]) - tys [< >] - >] - >] -;; diff --git a/helm/fix_params/cicFindParameters.ml b/helm/fix_params/cicFindParameters.ml deleted file mode 100644 index c78d8d219..000000000 --- a/helm/fix_params/cicFindParameters.ml +++ /dev/null @@ -1,158 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -exception WrongUriToConstant;; -exception WrongUriToInductiveDefinition;; -exception CircularDependency of string;; - -module OrderedUris = - struct - type t = UriManager.uri - let compare (s1 : t) (s2 : t) = - (* library function for = *) - compare s1 s2 - (*if s1 = s2 then 0 else if s1 < s2 then (-1) else 1*) - end -;; - -let filename_of_uri uri = - let uri' = UriManager.string_of_uri uri in - let fn = Str.replace_first (Str.regexp "cic:") Configuration.helm_dir uri' in - fn ^ ".xml" -;; - -(* quite inefficient coding of a set of strings: the only operations *) -(* performed are mem O(log n), and union O(n * log n?) *) -(* Perhaps a better implementation would be an array of bits or a map *) -(* from uri to booleans *) -module SetOfUris = Set.Make(OrderedUris);; - -let (@@) = SetOfUris.union;; - -let rec parameters_of te ty pparams= - let module S = SetOfUris in - let module C = Cic in - let rec aux = - function - C.Rel _ -> S.empty - | C.Var uri -> S.singleton uri - | C.Meta _ -> S.empty - | C.Sort _ -> S.empty - | C.Implicit -> S.empty - | C.Cast (te, ty) -> aux te @@ aux ty - | C.Prod (_, s, t) -> aux s @@ aux t - | C.Lambda (_, s, t) -> aux s @@ aux t - | C.LetIn (_, s, t) -> aux s @@ aux t - | C.Appl l -> List.fold_right (fun x i -> aux x @@ i) l S.empty - | C.Const (uri,_) -> - (* the parameters could be not exact but only possible *) - fix_params uri (Some (filename_of_uri uri)) ; - (* now the parameters are surely possible *) - (match CicCache.get_obj uri with - C.Definition (_, _, _, params) -> - List.fold_right - (fun (_,l) i -> - List.fold_right - (fun x i -> S.singleton x @@ i) l i - ) params S.empty - | C.Axiom (_, _, params) -> - List.fold_right - (fun (_,l) i -> - List.fold_right - (fun x i -> S.singleton x @@ i) l i - ) params S.empty - | C.CurrentProof _ -> S.empty (*CSC wrong *) - | _ -> raise WrongUriToConstant - ) - | C.MutInd (uri,_,_) -> - (match CicCache.get_obj uri with - C.InductiveDefinition (_, params, _) -> - List.fold_right - (fun (_,l) i -> - List.fold_right - (fun x i -> S.singleton x @@ i) l i - ) params S.empty - | _ -> raise WrongUriToInductiveDefinition - ) - | C.MutConstruct (uri,_,_,_) -> - (match CicCache.get_obj uri with - C.InductiveDefinition (_, params, _) -> - List.fold_right - (fun (_,l) i -> - List.fold_right - (fun x i -> S.singleton x @@ i) l i - ) params S.empty - | _ -> raise WrongUriToInductiveDefinition - ) - | C.MutCase (uri,_,_,outtype,term,patterns) -> - (*CSC cosa basta? Ci vuole anche uri? *) - (match CicCache.get_obj uri with - C.InductiveDefinition (_, params, _) -> - List.fold_right - (fun (_,l) i -> - List.fold_right - (fun x i -> S.singleton x @@ i) l i - ) params S.empty - | _ -> raise WrongUriToInductiveDefinition - ) @@ aux outtype @@ aux term @@ - List.fold_right (fun x i -> aux x @@ i) patterns S.empty - | C.Fix (_,fl) -> - List.fold_right - (fun (_,_,ty,bo) i -> aux ty @@ aux bo @@ i) - fl S.empty - | C.CoFix (_,fl) -> - List.fold_right - (fun (_,ty,bo) i -> aux ty @@ aux bo @@ i) - fl S.empty - in - let actual_params = aux te @@ aux ty in - (* sort_actual_params wants in input the ordered list of possible params *) - let rec sort_actual_params2 = - function - [] -> [] - | he::tl when S.mem he actual_params -> he::(sort_actual_params2 tl) - | _::tl -> sort_actual_params2 tl - in - let rec sort_actual_params = - function - [] -> [] - | (n,l)::tl -> (n, sort_actual_params2 l)::(sort_actual_params tl) - in - sort_actual_params pparams - -and fix_params uri filename = - let module C = Cic in - let ann = CicCache.get_annobj uri in - match ann with - C.ADefinition (xid, id, te, ty, C.Possible pparams) -> - let te' = Deannotate.deannotate_term te in - let ty' = Deannotate.deannotate_term ty in - let real_params = parameters_of te' ty' pparams in - let fixed = - C.ADefinition (xid,id,te,ty,C.Actual real_params) - in - Xml.pp (Cic2Xml.pp fixed uri) filename ; - | _ -> () -;; diff --git a/helm/fix_params/fix_params.ml b/helm/fix_params/fix_params.ml deleted file mode 100644 index f1edf091a..000000000 --- a/helm/fix_params/fix_params.ml +++ /dev/null @@ -1,74 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -let read_from_stdin = ref false;; - -let uri_of_filename fn = - let uri = - Str.replace_first (Str.regexp (Str.quote Configuration.helm_dir)) "cic:" fn - in - let uri' = Str.replace_first (Str.regexp "\.xml$") "" uri in - UriManager.uri_of_string uri' -;; - -let main() = - Deannotate.expect_possible_parameters := true ; - let files = ref [] in - Arg.parse - ["-stdin", Arg.Set read_from_stdin, "Read from stdin"] - (fun x -> files := (x, uri_of_filename x) :: !files) - " -usage: experiment file ... - -List of options:"; - if !read_from_stdin then - begin - try - while true do - let l = Str.split (Str.regexp " ") (read_line ()) in - List.iter (fun x -> files := (x, uri_of_filename x) :: !files) l - done - with - End_of_file -> () - end ; - files := List.rev !files; - Getter.update () ; - print_endline "ATTENTION: have you changed servers.txt so that you'll try \ - to repair your own objs instead of others'?" ; - flush stdout ; - List.iter - (function (fn, uri) -> - print_string (UriManager.string_of_uri uri) ; - flush stdout ; - (try - CicFindParameters.fix_params uri (Some fn) - with - e -> print_newline () ; flush stdout ; raise e ) ; - print_endline " OK!" ; - flush stdout - ) !files -;; - -main();; diff --git a/helm/gTopLevel/.cvsignore b/helm/gTopLevel/.cvsignore deleted file mode 100644 index ddbcaa9ee..000000000 --- a/helm/gTopLevel/.cvsignore +++ /dev/null @@ -1,15 +0,0 @@ -*.cm[aiox] *.cmxa *.[ao] -gTopLevel gTopLevel.opt -regtest regtest.opt -testlibrary testlibrary.opt -typecheck_uri typecheck_uri.opt -styles stylesheets meta_stylesheets -chosenTermEditor.ml -chosenTransformer.ml -disambiguatingParser.ml -.debug_script -autom4te.cache -config.log -config.status -configure -Makefile diff --git a/helm/gTopLevel/.depend b/helm/gTopLevel/.depend deleted file mode 100644 index d28c5220f..000000000 --- a/helm/gTopLevel/.depend +++ /dev/null @@ -1,42 +0,0 @@ -termEditor.cmi: disambiguatingParser.cmi -texTermEditor.cmi: disambiguatingParser.cmi -invokeTactics.cmi: termViewer.cmi termEditor.cmi -hbugs.cmi: invokeTactics.cmi -chosenTermEditor.cmi: disambiguatingParser.cmi -proofEngine.cmo: proofEngine.cmi -proofEngine.cmx: proofEngine.cmi -logicalOperations.cmo: proofEngine.cmi logicalOperations.cmi -logicalOperations.cmx: proofEngine.cmx logicalOperations.cmi -disambiguatingParser.cmo: disambiguatingParser.cmi -disambiguatingParser.cmx: disambiguatingParser.cmi -termEditor.cmo: disambiguatingParser.cmi termEditor.cmi -termEditor.cmx: disambiguatingParser.cmx termEditor.cmi -texTermEditor.cmo: disambiguatingParser.cmi texTermEditor.cmi -texTermEditor.cmx: disambiguatingParser.cmx texTermEditor.cmi -chosenTransformer.cmo: chosenTransformer.cmi -chosenTransformer.cmx: chosenTransformer.cmi -termViewer.cmo: logicalOperations.cmi termViewer.cmi -termViewer.cmx: logicalOperations.cmx termViewer.cmi -invokeTactics.cmo: termViewer.cmi termEditor.cmi proofEngine.cmi \ - logicalOperations.cmi invokeTactics.cmi -invokeTactics.cmx: termViewer.cmx termEditor.cmx proofEngine.cmx \ - logicalOperations.cmx invokeTactics.cmi -hbugs.cmo: proofEngine.cmi invokeTactics.cmi hbugs.cmi -hbugs.cmx: proofEngine.cmx invokeTactics.cmx hbugs.cmi -chosenTermEditor.cmo: termEditor.cmi chosenTermEditor.cmi -chosenTermEditor.cmx: termEditor.cmx chosenTermEditor.cmi -helmGtkLogger.cmo: helmGtkLogger.cmi -helmGtkLogger.cmx: helmGtkLogger.cmi -gTopLevel.cmo: termViewer.cmi termEditor.cmi proofEngine.cmi \ - logicalOperations.cmi invokeTactics.cmi helmGtkLogger.cmi hbugs.cmi \ - disambiguatingParser.cmi chosenTermEditor.cmi -gTopLevel.cmx: termViewer.cmx termEditor.cmx proofEngine.cmx \ - logicalOperations.cmx invokeTactics.cmx helmGtkLogger.cmx hbugs.cmx \ - disambiguatingParser.cmx chosenTermEditor.cmx -regtest.cmo: disambiguatingParser.cmi batchParser.cmi -regtest.cmx: disambiguatingParser.cmx batchParser.cmx -testlibrary.cmo: batchParser.cmi -testlibrary.cmx: batchParser.cmx -batchParser.cmo: disambiguatingParser.cmi batchParser.cmi -batchParser.cmx: disambiguatingParser.cmx batchParser.cmi -batchParser.cmi: disambiguatingParser.cmi diff --git a/helm/gTopLevel/INSTALL b/helm/gTopLevel/INSTALL deleted file mode 100644 index d8a8d1f8a..000000000 --- a/helm/gTopLevel/INSTALL +++ /dev/null @@ -1,12 +0,0 @@ -1) Customize script.sh. You should load script.sh before compiling or - executing gTopLevel -2) Customize gTopLevel.ml and rootcontent.xsl in order to make them communicate. -3) Check out the "stylesheets" and "meta_stylesheets" directories from the - MoWGLI CVS repository. -4) Type "make" to compile to bytecode and "make opt" to compile to nativecode. - -Enjoy! - -Note: - Every time that you upgrade stylesheets, you should "rm -rf" the styles - directory and do make again. diff --git a/helm/gTopLevel/Makefile.in b/helm/gTopLevel/Makefile.in deleted file mode 100644 index b64716cc2..000000000 --- a/helm/gTopLevel/Makefile.in +++ /dev/null @@ -1,161 +0,0 @@ -BIN_DIR = /usr/local/bin - -TEST_REQUIRES = \ - helm-registry \ - helm-tactics \ - helm-cic_transformations \ - helm-cic_textual_parser2 \ - helm-mathql_interpreter \ - helm-mathql_generator \ - helm-xmldiff \ - lablgtk2 \ - mathml-editor \ - lablgtkmathview \ - mysql - -REQUIRES = $(TEST_REQUIRES) gdome2-xslt helm-hbugs lablgtk2.init lablgtk2.glade - -OCAMLOPTIONS = \ - -package "$(REQUIRES)" -predicates "$(PREDICATES)" -pp camlp4o -thread -OCAMLFIND = @OCAMLFIND@ -OCAMLDEBUGOPTIONS = -g -OCAMLC = $(OCAMLFIND) ocamlc $(OCAMLDEBUGOPTIONS) $(OCAMLOPTIONS) -OCAMLOPT = $(OCAMLFIND) ocamlopt $(OCAMLOPTIONS) -OCAMLDEP = $(OCAMLFIND) ocamldep -pp camlp4o -OCAMLDEBUG = wowcamldebug - -LIBRARIES = $(shell $(OCAMLFIND) query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES)) -LIBRARIES_OPT = $(shell $(OCAMLFIND) query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES)) -TEST_LIBRARIES = $(shell $(OCAMLFIND) query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(TEST_REQUIRES)) -TEST_LIBRARIES_OPT = $(shell $(OCAMLFIND) query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(TEST_REQUIRES)) - -all: styles gTopLevel -opt: styles gTopLevel.opt - -start: - $(MAKE) -C ../hbugs/ start -stop: - $(MAKE) -C ../hbugs/ stop - -INTERFACE_FILES = \ - proofEngine.mli \ - logicalOperations.mli \ - disambiguatingParser.mli \ - termEditor.mli \ - texTermEditor.mli \ - termViewer.mli \ - invokeTactics.mli \ - hbugs.mli \ - chosenTermEditor.mli \ - helmGtkLogger.mli - -DEPOBJS = \ - $(INTERFACE_FILES) $(INTERFACE_FILES:%.mli=%.ml) \ - gTopLevel.ml regtest.ml testlibrary.ml batchParser.ml batchParser.mli - -TOPLEVELOBJS = $(INTERFACE_FILES:%.mli=%.cmo) gTopLevel.cmo -TESTOBJS = \ - disambiguatingParser.cmo \ - batchParser.cmo -REGTESTOBJS = $(TESTOBJS) regtest.cmo -TESTLIBOBJS = $(TESTOBJS) testlibrary.cmo - -$(INTERFACE_FILES:%.mli=%.cmo): $(LIBRARIES) -$(INTERFACE_FILES:%.mli=%.cmx): $(LIBRARIES_OPT) - -styles: - @echo "***********************************************************************" - @if [ -d stylesheets -a -d meta_stylesheets ] ; then echo -e "* stylesheets and metastylesheets found: *\\n* I will create the request hyperlinks in styles *" ; else echo -e "* stylesheets or meta_stylesheets not found: *\\n* you should check-out the two directories from the MoWGLI repository *" ; exit -1 ; fi - @echo "***********************************************************************" - mkdir styles - (cd styles && for i in ../stylesheets/*.xsl ; do ln -s $$i; done) - (cd styles && for i in ../stylesheets/generated/*.xsl ; do ln -s $$i; done) - (cd styles && rm rootcontent.xsl && ln -s ../rootcontent.xsl) - -depend: - $(OCAMLDEP) $(DEPOBJS) > .depend - -gTopLevel: $(TOPLEVELOBJS) $(LIBRARIES) - $(OCAMLC) -thread -linkpkg -o $@ $(TOPLEVELOBJS) -gTopLevel.opt: $(TOPLEVELOBJS:.cmo=.cmx) $(LIBRARIES_OPT) - $(OCAMLOPT) -thread -linkpkg -o $@ $(TOPLEVELOBJS:.cmo=.cmx) - -testlibrary: $(TESTLIBOBJS) $(TEST_LIBRARIES) - $(OCAMLFIND) ocamlc -thread $(OCAMLDEBUGOPTIONS) -linkpkg \ - -package "$(TEST_REQUIRES)" -o $@ $(TESTLIBOBJS) -testlibrary.opt: $(TESTLIBOBJS:.cmo=.cmx) $(TEST_LIBRARIES_OPT) - $(OCAMLFIND) ocamlopt -thread -linkpkg -package "$(TEST_REQUIRES)" -o $@ \ - $(TESTLIBOBJS:.cmo=.cmx) - -regtest: $(REGTESTOBJS) $(TEST_LIBRARIES) - $(OCAMLFIND) ocamlc -thread $(OCAMLDEBUGOPTIONS) -linkpkg \ - -package "$(TEST_REQUIRES)" -o $@ $(REGTESTOBJS) -regtest.opt: $(REGTESTOBJS:.cmo=.cmx) $(TEST_LIBRARIES_OPT) - $(OCAMLFIND) ocamlopt -thread -linkpkg -package "$(TEST_REQUIRES)" -o $@ \ - $(REGTESTOBJS:.cmo=.cmx) - -.SUFFIXES: .ml .mli .cmo .cmi .cmx -.ml.cmo: - $(OCAMLC) -c $< -.mli.cmi: - $(OCAMLC) -c $< -.ml.cmx: - $(OCAMLOPT) -c $< - -$(TOPLEVELOBJS): $(LIBRARIES) -$(TOPLEVELOBJS:.cmo=.cmx)): $(LIBRARIES_OPT) - -clean: - rm -f *.cm[iox] *.o gTopLevel{,.opt} regtest{,.opt} testlibrary{,.opt} -install: - cp gTopLevel gTopLevel.opt $(BIN_DIR) -uninstall: - rm -f $(BIN_DIR)/gTopLevel $(BIN_DIR)/gTopLevel.opt - -.PHONY: install uninstall clean test - -INTESTS := $(wildcard tests/*.cic) -OUTTESTS := $(patsubst %, %.test, $(INTESTS)) -gentest: $(OUTTESTS) -cleantest: - rm -f $(OUTTESTS) -tests/%.cic.test: tests/%.cic regtest - time ./regtest -gen $< -test: regtest - ./regtest $(INTESTS) 2> /dev/null -test.opt: regtest.opt - ./regtest.opt $(INTESTS) 2> /dev/null -envtest: regtest - ./regtest -dump $(INTESTS) 2> /dev/null -envtest.opt: regtest.opt - ./regtest.opt -dump $(INTESTS) 2> /dev/null -librarytest: testlibrary - ./testlibrary -vars -varsprefix cic:/Coq index.txt 2>/dev/null >LOG -librarytest.opt: testlibrary.opt - ./testlibrary.opt -vars -varsprefix cic:/Coq index.txt 2>/dev/null >LOG -typecheck_uri: typecheck_uri.ml - $(OCAMLFIND) ocamlc -thread -package helm-cic_proof_checking -linkpkg -o $@ $< -typecheck_uri.opt: typecheck_uri.ml - $(OCAMLFIND) opt -thread -package helm-cic_proof_checking -linkpkg -o $@ $< - -MAIN = ./gTopLevel -ARGS = -debug: - echo "load_printer \"threads.cma\"" > .debug_script - $(OCAMLFIND) query -recursive -predicates "mt,byte" -a-format \ - helm-cic_unification | \ - sed 's/\(.*\)/load_printer "\1"/' \ - >> .debug_script - echo "install_printer CicMetaSubst.fppsubst" >> .debug_script - echo "install_printer CicMetaSubst.fppterm" >> .debug_script - echo "install_printer CicMetaSubst.fppmetasenv" >> .debug_script - ledit $(OCAMLDEBUG) \ - -source .debug_script \ - -I +threads \ - $(shell $(OCAMLFIND) query -recursive -i-format $(REQUIRES)) \ - $(MAIN) $(ARGS) - -ifneq ($(MAKECMDGOALS), depend) - include .depend -endif - diff --git a/helm/gTopLevel/TATTICHE b/helm/gTopLevel/TATTICHE deleted file mode 100644 index 88d989ded..000000000 --- a/helm/gTopLevel/TATTICHE +++ /dev/null @@ -1,144 +0,0 @@ -V7.2: - -Da valutare: - * MetaLinguaggio di David Delayale per l'implementazione di tattiche - -V6.3: - -Da valutare: - * Print - * Extraction - * Opaque/Transparent - * SearchIsos - * Load di script di tattiche - * "Pretty" Parsing - * Log dei tempi per ogni possibile richiesta - * Undo - * Focus/Unfocus (nella prova completa in linguaggio naturale) - * Show Tree (resa dell'albero dei sequenti) - * Tatticali: - - OrElse - - Repeat - - Do - - Info - - Try - - First - - Solve - - Abstract - - ; - - ; [ ... | ... | ... ] - - (...) - * Assumption - * Apply with - * LApply - * Absurd - * Contradiction - * Cbv/Lazy Beta Delta Iota Zeta - * Red (riduzione di un backbone con delta della testa + beta e iota) - * Unfold (equivalente a Hnf dell'occorrenza) - * Pattern - * Constructor n / Split / Left/ Right/ Exists/ Reflexivity - * Elim term quando term ha come tipo un Pi - * ElimType (fatta da Zack; metterla disponibile) - * Induction su una applicazione - * Induction su una ipotesi - * Case su una applicazione e su una ipotesi - * Intros destrutturante - * Decompose - * Double Induction - * Rewrite (ma eliminare un'uguaglianza o applicare eq_ind_r non funziona gia'?) - * Replace (che prende due termini _NON_ convertibili e genera come goal - l'uguaglianza dei due). Unificarla con la change, che diventa la replace - non overkilling? - * Symmetry e Transitivity (basta applicare i due teoremi giusti) - * Decide Equality (ma non dovrebbe essere un teorema???) - * Compare - * Discriminate - * Injection - * Simplify_eq (== Discriminate o Injection su una ipotesi) - * Dependent Rewrite - * Inversion [Nota: Derive Inversion genera e salva il teorema!] - * Quote (per implementare tattiche riflessive senza scrivere codice ML!!!!) - * Tauto/Intuition - * Linear - * AutoRewrite - * Realizer/Program - * Scheme - * Omega - -Implementate: - * Enunciare un teorema - * (Ri)aprire un teorema gia' dimostrato per modificarne certe parti - * Check (e successiva possibilita' di applicare reduction tactics) - * Exact - * Apply/EApply - * Cut - * Change [Una conversion tactic. Problema: il termine digitato viene - parsato nel contesto della conclusione e non in quello della selezione!!!] - * Conversion tactics, sia nelle ipotesi che nella conclusione: - - Reduce (== Compute) - - Hnf - - Simpl - * Fold - * ElimIntrosSimpl - * Let...In (= LetTac) - * Salvare e caricare una prova incompleta (ma nel posto sbagliato!) - * ClearBody - * Clear - * Ring - -Da implementare: - * Implicit: quando si usano gli implicit, l'input non puo' piu' essere - type-checkato, ma bisogna fare una refine (ancora non implementata). - Di conseguenza _OGNI_ tattica si rompe. Inoltre l'implementazione di - Implicit e' ancora errata in quanto il contesto canonico delle nuove - variabili e' sempre vuoto anche se dovrebbe essere uguale a quello - di partenza + le nuove variabili introdotte durante il parsing. - * Nella type_of NON viene controllato che il metasenv di una current-proof - sia ben formato. PUNTO IMPORTANTE: farlo nel metasenv parziale, cosi' da - evitare cicli; ma dopo e' un bordello l'unificazione. Oppure fare un - semplice controllo di aciclicita'. - * ClearBody e Clear NON restringono ancora altre metavariabili. Invece viene - sollevata un'eccezione di tipaggio. Esempio: n:nat |- ?1[n] se faccio clear - di n dovrei restringere ?1. Se invece prima faccio clear di n in ?1, quando - torno su questo goal e faccio clear di n ottengo un'eccezione di CicPp. - * La reduction_tactic (in ProofEngine.ml) e' bacatissima, come descritto - nei commenti. Fixare. - * Reimplementare Cut usando LetIn + applicazione + Intro oppure usando - LetIn + ClearBody (soluzione piu' elegante IMHO) - * Refine - ? Sia [x:=t]r il tipo di [x:t]k e x non occorra mai libera in r. - Dovrei forse tornare semplicemente r? - ? Cambiare il nome delle META da int a una stringa? - [ATTENZIONE: CAMBIAMENTO NELLA DTD] - * Fold e' l'inverso di Reduce e quindi non disfa cio' che viene fatto da - Simpl e da Whd. Generalizzarlo facendo Reduce e poi Change con ogni termine? - Oppure fare una FoldWhd, una FoldHnf, una FoldSimpl, etc.? - * Fold localizzato in un termine selezionato - * Move e "Unclear" (che fa l'undo di Clear/Move e conversioni nelle ipotesi) - Non sono implementabili. Ma avrebbero senso? - * queries e roba basata sulle queries: - - Search - - Locate (anche di tipi induttivi e costruttori) - - Auto - - EAuto - - Prolog (???????????) - * Save con tanto di esportazione: esportare nel posto giusto! - * Dare una definizione (quasi equivalente a check + unfold, ma mancano - gli inner-types) - * Dare una definizione induttiva - * Intro (Come scegliere i nomi freschi?) e Intros until - * Generalize - * Fissare il bug di change (ovvero il problema del contesto in cui viene - parsato l'input dell'utente) - * Tornare un errore se si cerca di applicare una reduction tactic in una - ipotesi nella scratch area - * Field - * JProver. Che rapporto c'e' fra JProver e Tauto/Intuition? - * altre contrib da integrare? - -Da non implementare: - * Print All - * Compile/Read/Require - * Print/Save/Restore States - * Let diff --git a/helm/gTopLevel/batchParser.ml b/helm/gTopLevel/batchParser.ml deleted file mode 100644 index 8eb800b84..000000000 --- a/helm/gTopLevel/batchParser.ml +++ /dev/null @@ -1,90 +0,0 @@ -(* Copyright (C) 2004, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -let verbose = false - -exception Failure of string -let fail msg = raise (Failure msg) - -let constants_only ~prefix = - let test_prefix = - if prefix = "" then - (fun _ -> true) - else - (fun uri -> Pcre.pmatch ~rex:(Pcre.regexp ("^" ^ prefix)) uri) - in - fun uri -> - test_prefix uri && (not (String.sub uri (String.length uri - 4) 4 = ".var")) - -let uri_predicate = ref (constants_only ~prefix:"") - -let uri_pred_of_conf tryvars ~prefix ~varsprefix = - if not tryvars then - constants_only ~prefix - else - let test_prefix = Pcre.pmatch ~rex:(Pcre.regexp ("^" ^ prefix)) in - let test_varsprefix = Pcre.pmatch ~rex:(Pcre.regexp ("^" ^ varsprefix)) in - fun uri -> - if String.sub uri (String.length uri - 4) 4 = ".var" then - test_varsprefix uri - else - test_prefix uri - -module DisambiguateCallbacks = - struct - let interactive_user_uri_choice - ~selection_mode ?ok ?enable_button_for_non_vars ~title ~msg ~id choices = - List.filter !uri_predicate choices - - let interactive_interpretation_choice = - let rec aux n = - function - [] -> [] - | _::tl -> n::(aux (n+1) tl) - in - aux 0 - - let input_or_locate_uri ~title = fail "Unknown identifier" - end - -module Disambiguate' = DisambiguatingParser.Make (DisambiguateCallbacks) - -let parse dbd ?(uri_pred = constants_only ~prefix:"") = - uri_predicate := uri_pred; - let empty_environment = - DisambiguatingParser.EnvironmentP3.of_string - DisambiguatingParser.EnvironmentP3.empty - in - let empty_context = [] in - let empty_metasenv = [] in - fun input ugraph -> - (Disambiguate'.disambiguate_term - ~dbd empty_context empty_metasenv input empty_environment - ~initial_ugraph:ugraph) - -let parse_pp dbd ?uri_pred input ugraph = - List.map (fun (_,_,t,_) -> CicPp.ppterm t) - (parse dbd ?uri_pred input ugraph ) - diff --git a/helm/gTopLevel/batchParser.mli b/helm/gTopLevel/batchParser.mli deleted file mode 100644 index 6d2900304..000000000 --- a/helm/gTopLevel/batchParser.mli +++ /dev/null @@ -1,54 +0,0 @@ -(* Copyright (C) 2004, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -exception Failure of string - - (** uri_pred which rejects ll .var URIs *) -val constants_only: prefix:string -> (string -> bool) - - (** @param variables enabled - * @param variables prefix varsprefix - * @return uri predicate suitable for functions below *) -val uri_pred_of_conf: - bool -> prefix:string -> varsprefix:string -> (string -> bool) - - (** Parse a cic term from the given string using disambiguating parser in - * batch mode if possible, otherwise raises Failure above. - * uri_pred is the predicate used to select which uris are tried. Per default - * only constant URIs are accepted *) -val parse: - Mysql.dbd -> ?uri_pred:(string -> bool) -> string -> - CicUniv.universe_graph -> - (DisambiguatingParser.EnvironmentP3.t * - Cic.metasenv * - Cic.term * - CicUniv.universe_graph) list - - (** as above, but instead of returning the parsed cic term, pretty prints it - * (ignoring returned metasenv) - *) -val parse_pp: Mysql.dbd -> ?uri_pred:(string -> bool) -> - string -> CicUniv.universe_graph -> string list - diff --git a/helm/gTopLevel/chosenTermEditor.ml.in b/helm/gTopLevel/chosenTermEditor.ml.in deleted file mode 100644 index d501e8d06..000000000 --- a/helm/gTopLevel/chosenTermEditor.ml.in +++ /dev/null @@ -1 +0,0 @@ -@CHOSEN_TERM_EDITOR@ diff --git a/helm/gTopLevel/chosenTermEditor.mli b/helm/gTopLevel/chosenTermEditor.mli deleted file mode 100644 index 8a5402449..000000000 --- a/helm/gTopLevel/chosenTermEditor.mli +++ /dev/null @@ -1,23 +0,0 @@ -class type term_editor = - object - method coerce : GObj.widget - method get_as_string : string - method get_metasenv_and_term : - context:Cic.context -> - metasenv:Cic.metasenv -> Cic.metasenv * Cic.term * CicUniv.universe_graph - method environment : DisambiguatingParser.EnvironmentP3.t ref - method reset : unit - method set_term : string -> unit - end - -module Make : - functor (C : DisambiguateTypes.Callbacks) -> - sig - val term_editor : - dbd:Mysql.dbd -> - ?packing:(GObj.widget -> unit) -> - ?width:int -> - ?height:int -> - ?isnotempty_callback:(bool -> unit) -> - ?share_environment_with:term_editor -> unit -> term_editor - end diff --git a/helm/gTopLevel/configure.ac b/helm/gTopLevel/configure.ac deleted file mode 100644 index 27d1ac8df..000000000 --- a/helm/gTopLevel/configure.ac +++ /dev/null @@ -1,82 +0,0 @@ -AC_INIT(gTopLevel.ml) - -AC_CHECK_PROG(HAVE_OCAMLFIND, ocamlfind, yes, no) -if test $HAVE_OCAMLFIND = "yes"; then - OCAMLFIND="ocamlfind" -else - AC_MSG_ERROR(could not find ocamlfind) -fi -OCAMLFIND_COMMANDS="" -AC_CHECK_PROG(HAVE_OCAMLC_OPT, ocamlc.opt, yes, no) -if test $HAVE_OCAMLC_OPT = "yes"; then - if test "$OCAMLFIND_COMMANDS" = ""; then - OCAMLFIND_COMMANDS="ocamlc=ocamlc.opt" - else - OCAMLFIND_COMMANDS="$OCAMLFIND_COMMANDS ocamlc=ocamlc.opt" - fi -fi -AC_CHECK_PROG(HAVE_OCAMLOPT_OPT, ocamlopt.opt, yes, no) -if test $HAVE_OCAMLOPT_OPT = "yes"; then - if test "$OCAMLFIND_COMMANDS" = ""; then - OCAMLFIND_COMMANDS="ocamlopt=ocamlopt.opt" - else - OCAMLFIND_COMMANDS="$OCAMLFIND_COMMANDS ocamlopt=ocamlopt.opt" - fi -fi -if test "$OCAMLFIND_COMMANDS" != ""; then - OCAMLFIND="OCAMLFIND_COMMANDS='$OCAMLFIND_COMMANDS' $OCAMLFIND" -fi - - -AC_ARG_WITH(term-editor, - AS_HELP_STRING([--with-term-editor=(tex|textual)], - [choose term editor (default is tex)]), - [TERM_EDITOR=$withval], [TERM_EDITOR=textual]) -if test $TERM_EDITOR = "tex"; then - CHOSEN_TERM_EDITOR="include TexTermEditor" -else - if test $TERM_EDITOR = "textual"; then - CHOSEN_TERM_EDITOR="include TermEditor" - else - AC_MSG_ERROR(unknwon term editor $TERM_EDITOR) - fi -fi - -AC_ARG_WITH(term-parser, - AS_HELP_STRING([--with-term-parser=(cscTex|cscTextual|new)], - [choose term parser (default is new)]), - [TERM_PARSER=$withval], [TERM_PARSER=new]) -if test $TERM_PARSER = "cscTex"; then - CHOSEN_TERM_PARSER="include CSCTexDisambiguatingParser" -else - if test $TERM_PARSER = "cscTextual"; then - CHOSEN_TERM_PARSER="include CSCTextualDisambiguatingParser" - else - if test $TERM_PARSER = "new"; then - CHOSEN_TERM_PARSER="include AndreaAndZackDisambiguatingParser" - else - AC_MSG_ERROR(unknwon term parser $TERM_PARSER) - fi - fi -fi - -if test $TERM_EDITOR = "tex"; then - CHOSEN_TERM_EDITOR="include TexTermEditor" -else - if test $TERM_EDITOR = "textual"; then - CHOSEN_TERM_EDITOR="include TermEditor" - else - AC_MSG_ERROR(unknwon term editor $TERM_EDITOR) - fi -fi - -AC_SUBST(OCAMLFIND) -AC_SUBST(CHOSEN_TERM_EDITOR) -AC_SUBST(CHOSEN_TERM_PARSER) - -AC_OUTPUT([ - chosenTermEditor.ml - disambiguatingParser.ml - Makefile -]) - diff --git a/helm/gTopLevel/dictionary-cic.xml b/helm/gTopLevel/dictionary-cic.xml deleted file mode 100644 index 1d63dac83..000000000 --- a/helm/gTopLevel/dictionary-cic.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/helm/gTopLevel/disambiguatingParser.ml.in b/helm/gTopLevel/disambiguatingParser.ml.in deleted file mode 100644 index c3302c8b9..000000000 --- a/helm/gTopLevel/disambiguatingParser.ml.in +++ /dev/null @@ -1,104 +0,0 @@ -(* Copyright (C) 2004, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -exception NoWellTypedInterpretation - -module AndreaAndZackDisambiguatingParser = - struct - module EnvironmentP3 = CicTextualParser2.EnvironmentP3 - - module Make (C : DisambiguateTypes.Callbacks) = - struct - let disambiguate_term ~(dbd:Mysql.dbd) ~context ~metasenv - ?initial_ugraph ~aliases term_as_string - = - let module Disambiguate' = Disambiguate.Make (C) in - let term = - CicTextualParser2.parse_term (Stream.of_string term_as_string) - in - Disambiguate'.disambiguate_term ~dbd ~context ~metasenv - ?initial_ugraph ~aliases term - end - end - - -(* -module CSCTextualDisambiguatingParser = - struct - module EnvironmentP3 = OldDisambiguate.EnvironmentP3 - - module Make (C : DisambiguateTypes.Callbacks) = - struct - let - disambiguate_term mqi_handle context metasenv term_as_string environment - = - let module Disambiguate' = OldDisambiguate.Make (C) in - let name_context = - List.map - (function - Some (n,_) -> Some n - | None -> None - ) context - in - let lexbuf = Lexing.from_string term_as_string in - let dom,mk_metasenv_and_expr = - CicTextualParserContext.main - ~context:name_context ~metasenv CicTextualLexer.token lexbuf - in - Disambiguate'.disambiguate_input mqi_handle - context metasenv dom mk_metasenv_and_expr environment - end - end - -module CSCTexDisambiguatingParser = - struct - module EnvironmentP3 = OldDisambiguate.EnvironmentP3 - - module Make (C : DisambiguateTypes.Callbacks) = - struct - let - disambiguate_term mqi_handle context metasenv term_as_string environment - = - let module Disambiguate' = OldDisambiguate.Make (C) in - let name_context = - List.map - (function - Some (n,_) -> Some n - | None -> None - ) context - in - let lexbuf = Lexing.from_string term_as_string in - let dom,mk_metasenv_and_expr = - TexCicTextualParserContext.main - ~context:name_context ~metasenv TexCicTextualLexer.token lexbuf - in - Disambiguate'.disambiguate_input mqi_handle - context metasenv dom mk_metasenv_and_expr environment - end - end -*) - -@CHOSEN_TERM_PARSER@ - diff --git a/helm/gTopLevel/disambiguatingParser.mli b/helm/gTopLevel/disambiguatingParser.mli deleted file mode 100644 index 710401f4a..000000000 --- a/helm/gTopLevel/disambiguatingParser.mli +++ /dev/null @@ -1,50 +0,0 @@ -(* Copyright (C) 2004, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -exception NoWellTypedInterpretation - -module EnvironmentP3 : - sig - type t - val empty : string - val to_string : t -> string - val of_string : string -> t - end - -module Make (C : DisambiguateTypes.Callbacks) : - sig - val disambiguate_term : - dbd:Mysql.dbd -> - context:Cic.context -> - metasenv:Cic.metasenv -> - ?initial_ugraph:CicUniv.universe_graph -> - aliases:EnvironmentP3.t -> (* previous interpretation status *) - string -> - (EnvironmentP3.t * (* new interpretation status *) - Cic.metasenv * (* new metasenv *) - Cic.term * - CicUniv.universe_graph) list (* disambiguated term *) - end - diff --git a/helm/gTopLevel/esempi/and_implies_or.cic b/helm/gTopLevel/esempi/and_implies_or.cic deleted file mode 100644 index c47bf76b6..000000000 --- a/helm/gTopLevel/esempi/and_implies_or.cic +++ /dev/null @@ -1,11 +0,0 @@ -alias and /Coq/Init/Logic/Conjunction/and.ind#1/1 -alias conj /Coq/Init/Logic/Conjunction/and.ind#1/1/1 - -alias or /Coq/Init/Logic/Disjunction/or.ind#1/1 -alias or_introl /Coq/Init/Logic/Disjunction/or.ind#1/1/1 -alias or_intror /Coq/Init/Logic/Disjunction/or.ind#1/1/2 - -\A:Prop. -\B:Prop. -\H:(and A B). - Case (H : and ; (or A B)) { \a:A.\b:B.(or_introl A B a) } diff --git a/helm/gTopLevel/esempi/and_implies_or2.cic b/helm/gTopLevel/esempi/and_implies_or2.cic deleted file mode 100644 index 46cfb9e1b..000000000 --- a/helm/gTopLevel/esempi/and_implies_or2.cic +++ /dev/null @@ -1,8 +0,0 @@ -alias and /Coq/Init/Logic/and.ind#1/1 -alias conj /Coq/Init/Logic/and.ind#1/1/1 - -alias or /Coq/Init/Logic/or.ind#1/1 -alias or_introl /Coq/Init/Logic/or.ind#1/1/1 -alias or_intror /Coq/Init/Logic/or.ind#1/1/2 - -!A:Prop.!B:Prop.!H:(and A B).(or A B) diff --git a/helm/gTopLevel/esempi/apply.cic b/helm/gTopLevel/esempi/apply.cic deleted file mode 100644 index 902ae2fbb..000000000 --- a/helm/gTopLevel/esempi/apply.cic +++ /dev/null @@ -1,21 +0,0 @@ -alias nat /Coq/Init/Datatypes/nat.ind#1/1 -alias eq /Coq/Init/Logic/eq.ind#1/1 -alias eq_ind /Coq/Init/Logic/eq_ind.con -alias O /Coq/Init/Datatypes/nat.ind#1/1/1 -alias S /Coq/Init/Datatypes/nat.ind#1/1/2 -alias plus /Coq/Init/Peano/plus.con -alias mult /Coq/Init/Peano/mult.con -alias le /Coq/Init/Peano/le.ind#1/1 -alias lt /Coq/Init/Peano/lt.con -alias not /Coq/Init/Logic/not.con -(eq nat (\x:nat.\y:nat.O O O) (\x:nat.\y:nat.O O O)) -/Coq/Init/Logic/f_equal2.con -/Coq/Init/Logic/eq.ind#1/1/1 - -(* -(le O (S O)) -/Coq/Arith/Gt/gt_S_le.con - -(not (lt O (plus O O))) -/Coq/Arith/Lt/lt_n_n.con -*) diff --git a/helm/gTopLevel/esempi/bug.cic b/helm/gTopLevel/esempi/bug.cic deleted file mode 100644 index cab0f5ff2..000000000 --- a/helm/gTopLevel/esempi/bug.cic +++ /dev/null @@ -1,22 +0,0 @@ -alias nat /Coq/Init/Datatypes/nat.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias eq /Coq/Init/Logic/eq.ind#1/1 -alias refl_equal /Coq/Init/Logic/eq.ind#1/1/1 -alias eq_ind /Coq/Init/Logic/eq_ind.con -alias eq_ind_r /Coq/Init/Logic/eq_ind_r.con -alias O /Coq/Init/Datatypes/nat.ind#1/1/1 -alias S /Coq/Init/Datatypes/nat.ind#1/1/2 -alias plus /Coq/Init/Peano/plus.con -alias mult /Coq/Init/Peano/mult.con -alias le /Coq/Init/Peano/le.ind#1/1 -alias lt /Coq/Init/Peano/lt.con -alias not /Coq/Init/Logic/not.con -alias f_equal /Coq/Init/Logic/f_equal.con -alias le_trans /Coq/Arith/Le/le_trans.con - -alias plus_n_O /Coq/Init/Peano/plus_n_O.con - -alias or /Coq/Init/Logic/or.ind#1/1 -alias or_ind /Coq/Init/Logic/or_ind.con - -(or (eq nat O O) (eq nat O O)) -> (lt O O) diff --git a/helm/gTopLevel/esempi/calcolo_proposizioni.cic b/helm/gTopLevel/esempi/calcolo_proposizioni.cic deleted file mode 100644 index a069a8b39..000000000 --- a/helm/gTopLevel/esempi/calcolo_proposizioni.cic +++ /dev/null @@ -1,17 +0,0 @@ -alias True /Coq/Init/Logic/True.ind#1/1 -alias I /Coq/Init/Logic/True.ind#1/1/1 -alias True_ind /Coq/Init/Logic/True_ind.con - -alias False /Coq/Init/Logic/False.ind#1/1 -alias False_ind /Coq/Init/Logic/False_ind.con - -alias and /Coq/Init/Logic/and.ind#1/1 -alias conj /Coq/Init/Logic/and.ind#1/1/1 -alias and_ind /Coq/Init/Logic/and_ind.con - -alias or /Coq/Init/Logic/or.ind#1/1 -alias or_introl /Coq/Init/Logic/or.ind#1/1/1 -alias or_intror /Coq/Init/Logic/or.ind#1/1/2 -alias or_ind /Coq/Init/Logic/or_ind.con - -alias not /Coq/Init/Logic/not.con diff --git a/helm/gTopLevel/esempi/conversion.cic b/helm/gTopLevel/esempi/conversion.cic deleted file mode 100644 index 9114f3aa5..000000000 --- a/helm/gTopLevel/esempi/conversion.cic +++ /dev/null @@ -1,17 +0,0 @@ -alias nat /Coq/Init/Datatypes/nat.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias eq /Coq/Init/Logic/eq.ind#1/1 -alias refl_equal /Coq/Init/Logic/eq.ind#1/1/1 -alias eq_ind /Coq/Init/Logic/eq_ind.con -alias eq_ind_r /Coq/Init/Logic/eq_ind_r.con -alias O /Coq/Init/Datatypes/nat.ind#1/1/1 -alias S /Coq/Init/Datatypes/nat.ind#1/1/2 -alias plus /Coq/Init/Peano/plus.con -alias mult /Coq/Init/Peano/mult.con -alias le /Coq/Init/Peano/le.ind#1/1 -alias lt /Coq/Init/Peano/lt.con -alias not /Coq/Init/Logic/not.con -alias f_equal /Coq/Init/Logic/f_equal.con - -!n:nat.(eq nat (mult (S (S O)) n) O) -!n:nat.(eq nat (plus O n) (plus n O)) diff --git a/helm/gTopLevel/esempi/decompose.cic b/helm/gTopLevel/esempi/decompose.cic deleted file mode 100644 index 1a06fcba3..000000000 --- a/helm/gTopLevel/esempi/decompose.cic +++ /dev/null @@ -1,8 +0,0 @@ -!A:Prop.!B:Prop.!C:Prop.(and (sumbool A False) (and (or True B) (or B False))) -> True - -!A:Prop.!B:Prop.!C:Prop.(and (sumbool A C) (and (or A B) !D:Prop.(or B D))) -> True - -!A:Prop.!B:Prop.!C:Prop.(and (and A C) (and (and A B) (and B C))) -> True - -(and True True) -> True -(and True False) -> True diff --git a/helm/gTopLevel/esempi/elim.cic b/helm/gTopLevel/esempi/elim.cic deleted file mode 100644 index 0ef611ff7..000000000 --- a/helm/gTopLevel/esempi/elim.cic +++ /dev/null @@ -1,13 +0,0 @@ -alias nat /Coq/Init/Datatypes/nat.ind#1/1 -alias eq /Coq/Init/Logic/eq.ind#1/1 -alias eq_ind /Coq/Init/Logic/eq_ind.con -alias O /Coq/Init/Datatypes/nat.ind#1/1/1 -alias S /Coq/Init/Datatypes/nat.ind#1/1/2 -alias plus /Coq/Init/Peano/plus.con -alias mult /Coq/Init/Peano/mult.con -alias le /Coq/Init/Peano/le.ind#1/1 -alias lt /Coq/Init/Peano/lt.con -alias not /Coq/Init/Logic/not.con -alias f_equal /Coq/Init/Logic/f_equal.con - -!n:nat.(eq nat (plus O n) (plus n O)) diff --git a/helm/gTopLevel/esempi/elim2.cic b/helm/gTopLevel/esempi/elim2.cic deleted file mode 100644 index f44eba834..000000000 --- a/helm/gTopLevel/esempi/elim2.cic +++ /dev/null @@ -1,44 +0,0 @@ -alias nat /Coq/Init/Datatypes/nat.ind#1/1 -alias eq /Coq/Init/Logic/eq.ind#1/1 -alias eq_ind /Coq/Init/Logic/eq_ind.con -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias O /Coq/Init/Datatypes/nat.ind#1/1/1 -alias S /Coq/Init/Datatypes/nat.ind#1/1/2 -alias plus /Coq/Init/Peano/plus.con -alias mult /Coq/Init/Peano/mult.con -alias le /Coq/Init/Peano/le.ind#1/1 -alias lt /Coq/Init/Peano/lt.con -alias not /Coq/Init/Logic/not.con -alias and /Coq/Init/Logic/and.ind#1/1 -alias prod /Coq/Init/Datatypes/prod.ind#1/1 -alias list /Coq/Lists/PolyList/list.ind#1/1 -alias AllS_assoc /Coq/Lists/TheoryList/AllS_assoc.ind#1/1 -alias V /Coq/Lists/PolyList/Lists/A.var -alias VA /Coq/Lists/TheoryList/Lists/A.var -alias VB /Coq/Lists/TheoryList/Lists/Assoc_sec/B.var - -!A:Set.!B:Set.!P:!a:A.Prop.!l:list{V := (prod A B)}. - !H:(AllS_assoc {VA := A ; VB := B} P l). - (and - (eq list{V := (prod A B)} l l) - (eqT !n:A.Prop P P)) - -\forall A,B: Set. \forall P: A \to Prop. - \forall l: list \subst [ A \Assign (prod A B) ]. - \forall H:(AllS_assoc \subst [ A \Assign A ; B \Assign B] P l). - l = l \wedge P = P - -(* Intros; Elim H: - -?1: (A,B:Set; P:(A->Prop); l:(list A*B)) - (AllS_assoc A B P l) -> (nil A*B)=(nil A*B)/\P==P -?2: (A,B:Set; P:(A->Prop); l:(list A*B)) - (AllS_assoc A B P l) -> - (a:A; b:B; l0:(list A*B)) - (P a) -> (AllS_assoc A B P l0) -> l0=l0/\P==P -> - (cons (a,b) l0)=(cons (a,b) l0)/\P==P -[A,B:Set; P:(A->Prop); l:(list A*B); H:(AllS_assoc A B P l)] - (AllS_assoc_ind A B P [l0:(list A*B)]l0=l0/\P==P - (?1 A B P l H) (?2 A B P l H) l H) - -*) diff --git a/helm/gTopLevel/esempi/evars.cic b/helm/gTopLevel/esempi/evars.cic deleted file mode 100644 index 36ce17e2e..000000000 --- a/helm/gTopLevel/esempi/evars.cic +++ /dev/null @@ -1,33 +0,0 @@ -alias nat /Coq/Init/Datatypes/nat.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias eq /Coq/Init/Logic/eq.ind#1/1 -alias refl_equal /Coq/Init/Logic/eq.ind#1/1/1 -alias eq_ind /Coq/Init/Logic/eq_ind.con -alias eq_ind_r /Coq/Init/Logic/eq_ind_r.con -alias O /Coq/Init/Datatypes/nat.ind#1/1/1 -alias S /Coq/Init/Datatypes/nat.ind#1/1/2 -alias plus /Coq/Init/Peano/plus.con -alias mult /Coq/Init/Peano/mult.con -alias le /Coq/Init/Peano/le.ind#1/1 -alias lt /Coq/Init/Peano/lt.con -alias not /Coq/Init/Logic/not.con -alias f_equal /Coq/Init/Logic/f_equal.con -alias le_trans /Coq/Arith/Le/le_trans.con - -alias le_plus_plus /Coq/Arith/Plus/le_plus_plus.con -alias le_reg_r /Coq/Arith/Plus/le_reg_r.con -alias le_reg_l /Coq/Arith/Plus/le_reg_l.con - -alias plus_n_O /Coq/Init/Peano/plus_n_O.con - -!n:nat.!m:nat.(le n m)->(le (mult (S (S O)) n) (mult (S (S O)) m)) - -(* Lo scopo dell'esercizio e' riuscire a effettuare la dimostrazione che *) -(* (n <= m) -> (2*n <= 2*m) come la si farebbe su carta, ovvero: *) -(* *) -(* 2 * n *) -(* == n + n + 0 Simpl *) -(* <= m + n + 0 le_reg_r because n <= m because hypothesis *) -(* <= m + m + 0 le_reg_l because n + 0 <= m + 0 because le_reg_r *) -(* because hypothesis *) -(* == 2 * m Change *) diff --git a/helm/gTopLevel/esempi/fourier.cic b/helm/gTopLevel/esempi/fourier.cic deleted file mode 100644 index 09caea79b..000000000 --- a/helm/gTopLevel/esempi/fourier.cic +++ /dev/null @@ -1,35 +0,0 @@ -alias Rge /Coq/Reals/Rdefinitions/Rge.con -alias Rle /Coq/Reals/Rdefinitions/Rle.con -alias Rgt /Coq/Reals/Rdefinitions/Rgt.con -alias Rlt /Coq/Reals/Rdefinitions/Rlt.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -alias Rinv /Coq/Reals/Rdefinitions/Rinv.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rminus /Coq/Reals/Rdefinitions/Rminus.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias R /Coq/Reals/Rdefinitions/R.con -alias Eq /Coq/Init/Logic_Type/eqT.ind#1/1 - -//test base1 ok -!x:R.!y:R.(Rle x y) -> (Rge (Rplus y R1) (Rminus x R1)) - -//test base2 ok -!x:R.!y:R.(Rlt x y) -> (Rgt (Rplus y R1) (Rminus x R1)) - -//test base3 (unification fails) -!x:R.!y:R.(Rge x y) -> (Rlt (Rplus y R1) (Rplus x (Rplus R1 R1))) - -//test base4 ok -!x:R.!y:R.(Rgt x y) -> (Rle (Rminus y R1) (Rplus x R1)) - -//test base5 ok -!x:R.!y:R.(Rlt x ( Rplus y R1 ) ) -> (Rge (Rplus y (Rplus R1 R1)) (Rminus x R0)) - -//test base6 (unification fails) -!x:R.!y:R.(Eq R x y) -> (Rgt (Rplus y R1) (Rminus x R1)) - -//test base7 (should fail) ok -!x:R.!y:R.(Rlt x y) -> (Rlt (Rplus y R1) (Rminus x R1)) - - diff --git a/helm/gTopLevel/esempi/fourier/fourier.cic b/helm/gTopLevel/esempi/fourier/fourier.cic deleted file mode 100644 index 23062f3bd..000000000 --- a/helm/gTopLevel/esempi/fourier/fourier.cic +++ /dev/null @@ -1,137 +0,0 @@ -alias Rge /Coq/Reals/Rdefinitions/Rge.con -alias Rle /Coq/Reals/Rdefinitions/Rle.con -alias Rgt /Coq/Reals/Rdefinitions/Rgt.con -alias Rlt /Coq/Reals/Rdefinitions/Rlt.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -alias Rinv /Coq/Reals/Rdefinitions/Rinv.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rminus /Coq/Reals/Rdefinitions/Rminus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias R /Coq/Reals/Rdefinitions/R.con -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias not /Coq/Init/Logic/not.con -alias or /Coq/Init/Logic/or.ind#1/1 - -!x:R. -(Rlt (Rmult(Ropp x)R1) -R0) -->(Rlt R0 x) - -// test 3x4 -> 35'' -!x:R.!y:R.!z:R. -(Rge -(Rplus - (Rmult (Ropp (Rplus R1 R1)) x) (Rplus - (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) y) (Rplus - (Rmult (Rplus R1 (Rplus R1 R1)) z) R1) -)) R0) --> -(Rge -(Rplus - (Rmult (Ropp (Rplus R1 (Rplus R1 R1))) x) (Rplus - (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) y) (Rplus - R1 (Rplus R1 R1)) -)) R0) --> -(Rgt -(Rplus - x (Rplus - (Rmult (Rplus R1 R1) y) (Ropp z) ) -) R0) --> -(Rgt -(Rplus - (Rmult (Rplus R1 (Rplus R1 R1)) x) (Rplus - z (Ropp R1)) -) R0) - --> (Rlt z R1) - -// test 6x6 -> - -!x:R.!y:R.!z:R.!t:R.!u:R.!v:R. -(Rgt -(Rplus (Ropp x) (Rplus y (Rplus z (Rplus t (Rplus u (Rplus v (Rplus R1 R1))))))) - R0) --> -(Rgt -(Rplus x (Rplus (Ropp y) (Rplus (Ropp z) (Rplus (Ropp t) (Rplus (Ropp u) (Rplus R1 R1)))))) - R0) --> -(Rgt -(Rplus y (Rplus (Ropp z) (Rplus t (Rplus u (Rplus R1 R1))))) - R0) --> -(Rgt -(Rplus y (Rplus z (Rplus (Ropp t) (Rplus (Ropp (Rmult (Rplus R1 R1)v)) (Rplus R1 R1))))) - R0) --> -(Rgt -(Rplus y (Rplus z (Rplus t (Rplus (Ropp u) (Rplus R1 R1))))) - R0) --> -(Rlt -(Rplus (Rmult (Rplus R1 R1) x) (Rplus v y)) - R0) --> (Rlt (Rmult (Rplus R1 R1) x) R0) - - - - - - -//test base1 ok -!x:R.!y:R.(Rle x y) -> (Rge (Rplus y R1) (Rminus x R1)) - -//test base2 ok -!x:R.!y:R.(Rlt x y) -> (Rgt (Rplus y R1) (Rminus x R1)) - -//test base3 ok -!x:R.!y:R.(Rge x y) -> (Rlt (Rplus y R1) (Rplus x (Rplus R1 R1))) - -/Coq/fourier/Fourier_util/Rfourier_not_ge_lt.con - -intros - -/Coq/Init/Logic/False.ind#1/1 - -(not (Rle (Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus x (Rplus R1 R1))) (Rmult (Rmult R1 (Rinv R1)) y)) (Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus y R1)) (Rmult (Rmult R1 (Rinv R1)) x)))) - -/Coq/fourier/Fourier_util/Rnot_le_le.con - -t1=(Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus x (Rplus R1 R1))) (Rmult (Rmult R1 (Rinv R1)) y)) - -t2=(Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus y R1)) (Rmult (Rmult R1 (Rinv R1)) x)) - -(t1-t2)=(Rminus -(Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus x (Rplus R1 R1))) (Rmult (Rmult R1 (Rinv R1)) y)) -(Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus y R1)) (Rmult (Rmult R1 (Rinv R1)) x))) - -tc=(Rmult (Ropp R1) (Rinv R1)) - -rewrite=(eqT R (Rminus (Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus y R1)) (Rmult (Rmult R1 (Rinv R1)) x)) - (Rplus (Rmult (Rmult R1 (Rinv R1)) (Rplus x (Rplus R1 R1))) (Rmult (Rmult R1 (Rinv R1)) y))) (Rmult (Ropp R1) (Rinv R1))) - -change=(not (or -(Rlt R0 (Rmult (Ropp R1) (Rinv R1))) -(eqT R R0 (Rmult (Ropp R1) (Rinv R1))) -)) - -tac2 -/Coq/fourier/Fourier_util/Rnot_lt0.con - -//test base4 ok -!x:R.!y:R.(Rgt x y) -> (Rle (Rminus y R1) (Rplus x R1)) - -//test base5 ok -!x:R.!y:R.(Rlt x ( Rplus y R1 ) ) -> (Rge (Rplus y (Rplus R1 R1)) (Rminus x R0)) - -//test base6 ok -!x:R.!y:R.(eqT R x y) -> (Rgt (Rplus y R1) (Rminus x R1)) - -//test base7 (should fail) ok -!x:R.!y:R.(Rlt x y) -> (Rlt (Rplus y R1) (Rminus x R1)) - - diff --git a/helm/gTopLevel/esempi/fourier/fourier_benchmarks.cic b/helm/gTopLevel/esempi/fourier/fourier_benchmarks.cic deleted file mode 100644 index 68166c149..000000000 --- a/helm/gTopLevel/esempi/fourier/fourier_benchmarks.cic +++ /dev/null @@ -1,170 +0,0 @@ -!x:R.!y:R.!z:R.!t:R. -(Rle (Rplus (Rmult R0 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) z) (Rplus (Rmult R1 t) (Ropp R1))))) R0) --> -(Rle (Rplus (Rmult R1 x) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) y) (Rplus (Rmult R0 z) (Rplus (Rmult (Rplus R1 R1) t) (Ropp R1))))) R0) --> -(Rle (Rplus (Rmult R0 x) (Rplus (Rmult (Rplus R1 R1) y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) t) (Ropp R1))))) R0) --> -(Rle (Rplus (Rmult R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) t) (Ropp R1))))) R0) --> -(Rle (Rplus (Rmult R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) t) (Ropp R1))))) R0) - -[1'02'' 363K m=5 n=4 K=8] - ------------------------------------------------------------------------------------------------------------- -!x:R.!y:R.!z:R.!t:R.!u:R.!v:R. -(Rle (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) y) (Rplus (Rmult (Rplus R1 R1) z) (Rplus (Rmult (Rplus R1 R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) v) (Ropp R1))))))) R0) --> -(Rle (Rplus (Rmult R1 x) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) t) (Rplus (Rmult R1 u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) v) (Ropp R1))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) x) (Rplus (Rmult R0 y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) t) (Rplus (Rmult (Rplus R1 R1) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) v) (Ropp R1))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) t) (Rplus (Rmult R0 u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) v) (Ropp R1))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) x) (Rplus (Rmult R0 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) t) (Rplus (Rmult (Ropp (Rplus R1 R1)) u) (Rplus (Rmult R1 v) (Ropp R1))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) u) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 R1)))) v) (Ropp R1))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) u) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 R1)))) v) (Ropp R1))))))) R0) - -[1'25'' 501K m=7 n=6 K=8] - ------------------------------------------------------------------------------------------------------------ -!x:R.!y:R.!z:R.!t:R.!u:R.!v:R.!w:R.!g:R.!h:R.!j:R. -(Rle (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) x) (Rplus (Rmult R1 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) z) (Rplus (Rmult R1 t) (Rplus (Rmult (Rplus R1 R1) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) v) (Rplus (Rmult R0 w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) g) (Rplus (Rmult R0 h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 R1) x) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) t) (Rplus (Rmult R0 u) (Rplus (Rmult R0 v) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) h) (Rplus (Rmult (Rplus R1 R1) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) w) (Rplus (Rmult R0 g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) t) (Rplus (Rmult R0 u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) x) (Rplus (Rmult R0 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) t) (Rplus (Rmult R0 u) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) v) (Rplus (Rmult R1 w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) g) (Rplus (Rmult R0 h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) t) (Rplus (Rmult R0 u) (Rplus (Rmult (Ropp R1) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) w) (Rplus (Rmult R0 g) (Rplus (Rmult R1 h) (Rplus (Rmult R1 j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) t) (Rplus (Rmult (Rplus R1 R1) u) (Rplus (Rmult (Rplus R1 R1) v) (Rplus (Rmult (Ropp (Rplus R1 R1)) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) u) (Rplus (Rmult R0 v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) w) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) z) (Rplus (Rmult R1 t) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) u) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) w) (Rplus (Rmult (Rplus R1 R1) g) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) h) (Rplus (Rmult R1 j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult R0 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) y) (Rplus (Rmult R1 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) v) (Rplus (Rmult R1 w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) g) (Rplus (Rmult (Rplus R1 R1) h) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 R1))) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult R0 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) y) (Rplus (Rmult R1 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) v) (Rplus (Rmult R1 w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) g) (Rplus (Rmult (Rplus R1 R1) h) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 R1))) j) (Ropp R1))))))))))) R0) - -[1'50'' 787K m=11 n=10 K=8] - -------------------------------------------------------------------------------------------------------- - -!x:R.!y:R.!z:R.!t:R.!u:R.!v:R.!w:R.!g:R.!h:R.!j:R.!l:R.!m:R.!n:R.!o:R.!p:R.!q:R.!r:R.!s:R.!a:R.!b:R. -(Rle (Rplus (Rmult (Ropp (Rplus R1 R1)) x) (Rplus (Rmult R0 y) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) z) (Rplus (Rmult R0 t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) g) (Rplus (Rmult R1 h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) j) (Rplus (Rmult R1 l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) o) (Rplus (Rmult R1 p) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) q) (Rplus (Rmult (Rplus R1 R1) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) x) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) y) (Rplus (Rmult (Rplus R1 R1) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) w) (Rplus (Rmult (Rplus R1 R1) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) h) (Rplus (Rmult (Rplus R1 R1) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) o) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) a) (Rplus (Rmult R0 b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult R1 x) (Rplus (Rmult R1 y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) t) (Rplus (Rmult R1 u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) v) (Rplus (Rmult R0 w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) g) (Rplus (Rmult R0 h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) j) (Rplus (Rmult (Rplus R1 R1) l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) m) (Rplus (Rmult R1 n) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) o) (Rplus (Rmult R1 p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) q) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) r) (Rplus (Rmult R0 s) (Rplus (Rmult (Rplus R1 R1) a) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) x) (Rplus (Rmult R1 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) t) (Rplus (Rmult (Rplus R1 R1) u) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) w) (Rplus (Rmult R0 g) (Rplus (Rmult (Rplus R1 R1) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) j) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) l) (Rplus (Rmult (Rplus R1 R1) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) o) (Rplus (Rmult R0 p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) q) (Rplus (Rmult R1 r) (Rplus (Rmult R1 s) (Rplus (Rmult R0 a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) t) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) j) (Rplus (Rmult R1 l) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) p) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) q) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) r) (Rplus (Rmult R0 s) (Rplus (Rmult (Rplus R1 R1) a) (Rplus (Rmult (Rplus R1 R1) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult R1 x) (Rplus (Rmult (Rplus R1 R1) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) u) (Rplus (Rmult (Ropp R1) v) (Rplus (Rmult (Rplus R1 R1) w) (Rplus (Rmult R1 g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) h) (Rplus (Rmult R1 j) (Rplus (Rmult (Rplus R1 R1) l) (Rplus (Rmult R0 m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) o) (Rplus (Rmult (Rplus R1 R1) p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) r) (Rplus (Rmult (Rplus R1 R1) s) (Rplus (Rmult (Rplus R1 R1) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) z) (Rplus (Rmult R1 t) (Rplus (Rmult R1 u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) v) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) w) (Rplus (Rmult R1 g) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) h) (Rplus (Rmult R1 j) (Rplus (Rmult R1 l) (Rplus (Rmult (Rplus R1 R1) m) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) o) (Rplus (Rmult R1 p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) q) (Rplus (Rmult R0 r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) s) (Rplus (Rmult R0 a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) t) (Rplus (Rmult (Rplus R1 R1) u) (Rplus (Rmult (Rplus R1 R1) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) w) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 R1)))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) j) (Rplus (Rmult R0 l) (Rplus (Rmult R1 m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) o) (Rplus (Rmult (Rplus R1 R1) p) (Rplus (Rmult (Rplus R1 R1) q) (Rplus (Rmult R0 r) (Rplus (Rmult R1 s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) a) (Rplus (Rmult R1 b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 R1) x) (Rplus (Rmult (Rplus R1 R1) y) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) v) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) g) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 R1)))) h) (Rplus (Rmult R1 j) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) l) (Rplus (Rmult R1 m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) o) (Rplus (Rmult R0 p) (Rplus (Rmult R0 q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) r) (Rplus (Rmult R0 s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) y) (Rplus (Rmult (Rplus R1 R1) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) w) (Rplus (Rmult (Rplus R1 R1) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) h) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) l) (Rplus (Rmult R1 m) (Rplus (Rmult R0 n) (Rplus (Rmult (Rplus R1 R1) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) p) (Rplus (Rmult (Rplus R1 R1) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) s) (Rplus (Rmult R0 a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) x) (Rplus (Rmult R0 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) u) (Rplus (Rmult R0 v) (Rplus (Rmult R1 w) (Rplus (Rmult R0 g) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) j) (Rplus (Rmult R0 l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) a) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) v) (Rplus (Rmult (Rplus R1 R1) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) h) (Rplus (Rmult R0 j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) l) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) o) (Rplus (Rmult R0 p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) r) (Rplus (Rmult (Rplus R1 R1) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) z) (Rplus (Rmult (Rplus R1 R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) u) (Rplus (Rmult (Rplus R1 R1) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) m) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) o) (Rplus (Rmult R0 p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) a) (Rplus (Rmult R1 b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) z) (Rplus (Rmult (Rplus R1 R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) w) (Rplus (Rmult R0 g) (Rplus (Rmult R1 h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) l) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) n) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 R1)))) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) q) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) a) (Rplus (Rmult R1 b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) z) (Rplus (Rmult (Rplus R1 R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) l) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) o) (Rplus (Rmult (Ropp R1) p) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) q) (Rplus (Rmult (Rplus R1 R1) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) s) (Rplus (Rmult R1 a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) u) (Rplus (Rmult R0 v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) g) (Rplus (Rmult (Rplus R1 R1) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) m) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) n) (Rplus (Rmult R0 o) (Rplus (Rmult (Rplus R1 R1) p) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 R1)))) q) (Rplus (Rmult R1 r) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) x) (Rplus (Rmult R1 y) (Rplus (Rmult (Rplus R1 R1) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) t) (Rplus (Rmult R0 u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) w) (Rplus (Rmult R0 g) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) j) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) m) (Rplus (Rmult R0 n) (Rplus (Rmult (Rplus R1 R1) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) p) (Rplus (Rmult R0 q) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult R1 x) (Rplus (Rmult R0 y) (Rplus (Rmult (Rplus R1 R1) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) u) (Rplus (Rmult R1 v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) j) (Rplus (Rmult R1 l) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) m) (Rplus (Rmult R0 n) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) p) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) q) (Rplus (Rmult R0 r) (Rplus (Rmult (Ropp R1) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) a) (Rplus (Rmult R1 b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) x) (Rplus (Rmult R1 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) z) (Rplus (Rmult (Rplus R1 R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) u) (Rplus (Rmult (Rplus R1 R1) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) w) (Rplus (Rmult R0 g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) j) (Rplus (Rmult (Rplus R1 R1) l) (Rplus (Rmult (Rplus R1 R1) m) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) p) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) q) (Rplus (Rmult (Rplus R1 R1) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) s) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) a) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) z) (Rplus (Rmult (Rplus R1 R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) u) (Rplus (Rmult R0 v) (Rplus (Rmult R0 w) (Rplus (Rmult R0 g) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) h) (Rplus (Rmult (Rplus R1 R1) j) (Rplus (Rmult R0 l) (Rplus (Rmult R1 m) (Rplus (Rmult R0 n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) p) (Rplus (Rmult R0 q) (Rplus (Rmult (Rplus R1 R1) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) a) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) b) (Ropp R1))))))))))))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) z) (Rplus (Rmult (Rplus R1 R1) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) u) (Rplus (Rmult R0 v) (Rplus (Rmult R0 w) (Rplus (Rmult R0 g) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) h) (Rplus (Rmult (Rplus R1 R1) j) (Rplus (Rmult R0 l) (Rplus (Rmult R1 m) (Rplus (Rmult R0 n) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) o) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) p) (Rplus (Rmult R0 q) (Rplus (Rmult (Rplus R1 R1) r) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) s) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) a) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) b) (Ropp R1))))))))))))))))))))) R0) - - -[19'30'' 1.9M m=21 n=20 K=8 ty=13'35''] - --------------------------------------------------------------------------------------------------------- - -!x:R.!y:R.!z:R.!t:R.!u:R.!v:R.!w:R.!g:R.!h:R.!j:R. -(Rle (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) x) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) v) (Rplus (Rmult R0 w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))) y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) h) (Rplus (Rmult (Rplus R1 R1) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))))))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) g) (Rplus (Rmult R0 h) (Rplus (Rmult R1 j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) y) (Rplus (Rmult R0 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))))))) t) (Rplus (Rmult (Ropp (Rplus R1 R1)) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))) y) (Rplus (Rmult R0 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) u) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))) h) (Rplus (Rmult R0 j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult R1 x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))) v) (Rplus (Rmult (Ropp R1) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) w) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) u) (Rplus (Rmult (Rplus R1 R1) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) g) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))))) h) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) y) (Rplus (Rmult R1 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) h) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))))) j) (Ropp R1))))))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) y) (Rplus (Rmult R1 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))))) v) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) w) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) g) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) h) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))))) j) (Ropp R1))))))))))) R0) - -[ K m=11 n=10 K=18 ty=] (TRASH) - - ----------------------------------------------- - -!x:R.!y:R.!z:R.!t:R.!u:R.!v:R. -(Rle (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) t) (Rplus (Rmult (Rplus R1 R1) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) v) (Ropp R1))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) x) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) y) (Rplus (Rmult R0 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 R1))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))) u) (Rplus (Rmult R0 v) (Ropp R1))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) v) (Ropp R1))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))) x) (Rplus (Rmult R0 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) v) (Ropp R1))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) t) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) u) (Rplus (Rmult (Rplus R1 (Rplus R1 R1)) v) (Ropp R1))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))) x) (Rplus (Rmult R1 y) (Rplus (Rmult R1 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) u) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) v) (Ropp R1))))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))) x) (Rplus (Rmult R1 y) (Rplus (Rmult R1 z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))) t) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) u) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))) v) (Ropp R1))))))) R0) - -[4' 658K m=7 n=6 K=13 ty=50''] - ----------------------------------------------------------------- - -!x:R.!y:R.!z:R.!t:R. -(Rle (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))))) t) (Ropp R1))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))) x) (Rplus (Rmult (Ropp (Rplus R1 R1)) y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))) z) (Rplus (Rmult (Rplus R1 R1) t) (Ropp R1))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 R1) x) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) y) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))))) z) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))))))))) t) (Ropp R1))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 R1) x) (Rplus (Rmult R1 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) t) (Ropp R1))))) R0) --> -(Rle (Rplus (Rmult (Rplus R1 R1) x) (Rplus (Rmult R1 y) (Rplus (Rmult (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1)))) z) (Rplus (Rmult (Ropp (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 (Rplus R1 R1))))))))))) t) (Ropp R1))))) R0) - -[3':20'' 658K m=5 n=4 K=13 ty=41''] - - - - diff --git a/helm/gTopLevel/esempi/fourier/fourier_make_benchmarks.ml b/helm/gTopLevel/esempi/fourier/fourier_make_benchmarks.ml deleted file mode 100644 index d783089a2..000000000 --- a/helm/gTopLevel/esempi/fourier/fourier_make_benchmarks.ml +++ /dev/null @@ -1,61 +0,0 @@ -let rec int_to_cic n = - if n < 0 then - "(Ropp "^int_to_cic (-n)^")" - else - match n with - 0 -> " R0" - |1 -> " R1" - |k -> "(Rplus R1 " ^ int_to_cic (n-1) ^")" -;; - -let dimx = ref 3;; -let dimy = ref 3;; -let kmax = ref 5;; -let vl = [|"x";"y";"z";"t";"u";"v";"w";"g";"h";"j";"l";"m";"n";"o";"p";"q";"r";"s";"a";"b";"c";"d"|] -;; - -let nth_inc n = - vl.(n) -;; - -let preamble () = - for i = 0 to !dimx do - print_string ("!"^nth_inc i^":R."); - done; - print_string "\n"; -;; - -let main () = - print_string "Immetti m : ";dimy := (read_int ()) - 1; - print_string "Immetti n : ";dimx := (read_int ()) - 1; - print_string "Immetti K : ";kmax := (read_int ()) + 1; - print_string ("Genero un sistema di "^ - string_of_int (!dimy+1)^" disequazioni in "^ - string_of_int (!dimx+1)^" incognite con coefficenti "^string_of_int !kmax^"\n\n"); - Random.self_init (); - preamble (); - let max = ref 0 in - for i=0 to !dimy do - begin - print_string "(Rle "; - for o=0 to !dimx do - let k = ref ((Random.int !kmax)) in - if !k > !max then max := !k; - if i=o then - k := - !k - else - k := !k; - print_string ("(Rplus (Rmult "^int_to_cic !k^" "^nth_inc o^") "); - done; - print_string "(Ropp R1)"; - for o=0 to !dimx do - print_string (")"); - done; - print_string (" R0)\n->\n"); - end - done; - print_string ("\n\nIl massimo K e' "^string_of_int !max^".\nLa tesi la puoi scegliere tu, ma se ricopi una ipotesi vai tranquillo.\n"); -;; - - -main ();; diff --git a/helm/gTopLevel/esempi/prova.cic b/helm/gTopLevel/esempi/prova.cic deleted file mode 100644 index 3f65458d2..000000000 --- a/helm/gTopLevel/esempi/prova.cic +++ /dev/null @@ -1,16 +0,0 @@ -alias eq /Coq/Init/Logic/eq.ind#1/1 -alias nat /Coq/Init/Datatypes/nat.ind#1/1 -alias O /Coq/Init/Datatypes/nat.ind#1/1/1 -alias S /Coq/Init/Datatypes/nat.ind#1/1/2 -alias plus /Coq/Init/Peano/plus.con -alias mult /Coq/Init/Peano/mult.con -(mult (plus (S (S O)) (S O)) (S (S O))) -Case ((S O) : nat ; nat) { O ; \x:nat.x } -Fix f {f(0) : !x:nat.nat ; g(0) : !x:nat.nat} - { \x:nat.O - ; \x:nat. - Case (x : nat ; nat) { (S O) ; \x:nat.(f x) } - } - -(* Nel caso seguente sbagliavamo a fare la whd!!!! *) -!n:nat.(eq nat O (Case (n : nat ; \z:nat.!a:nat.nat) {\x:nat.x ; \y:nat.\x:nat.x} O)) diff --git a/helm/gTopLevel/esempi/rewrite.cic b/helm/gTopLevel/esempi/rewrite.cic deleted file mode 100644 index ff2b92e52..000000000 --- a/helm/gTopLevel/esempi/rewrite.cic +++ /dev/null @@ -1,5 +0,0 @@ -!v:nat.(eq nat -> nat -> nat \x:nat.\y:nat.(plus y v) \x:nat.\y:nat.O) - -Fare cut di: - (eq nat -> nat \w:nat.(plus w v) \w:nat.(plus (plus w w) v)) -e poi riscriverlo diff --git a/helm/gTopLevel/esempi/ring/0eq0.cic b/helm/gTopLevel/esempi/ring/0eq0.cic deleted file mode 100644 index 0b6f8f22e..000000000 --- a/helm/gTopLevel/esempi/ring/0eq0.cic +++ /dev/null @@ -1,10 +0,0 @@ -(* prova di 0 == 0 *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -(eqT R R0 R0) diff --git a/helm/gTopLevel/esempi/ring/aliases.cic b/helm/gTopLevel/esempi/ring/aliases.cic deleted file mode 100644 index f3fb95c0b..000000000 --- a/helm/gTopLevel/esempi/ring/aliases.cic +++ /dev/null @@ -1,24 +0,0 @@ -alias false /Coq/Init/Datatypes/bool.ind#1/1/2 -alias apolynomial_normalize_ok /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize_ok.con -alias RTheory /Coq/Reals/Rbase/RTheory.con -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -alias interp_sacs /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con -alias apolynomial_normalize /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con -alias Node_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/2 -alias Empty_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/1 -alias APvar /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1 -alias AP0 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2 -alias AP1 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3 -alias APplus /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4 -alias APmult /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5 -alias APopp /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6 -alias Left_idx /Coq/ring/Quote/variables_map/index.ind#1/1/1 -alias Right_idx /Coq/ring/Quote/variables_map/index.ind#1/1/2 -alias End_idx /Coq/ring/Quote/variables_map/index.ind#1/1/3 diff --git a/helm/gTopLevel/esempi/ring/caso0.cic b/helm/gTopLevel/esempi/ring/caso0.cic deleted file mode 100644 index afe37f563..000000000 --- a/helm/gTopLevel/esempi/ring/caso0.cic +++ /dev/null @@ -1,23 +0,0 @@ -(* OK, meglio di coq *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -alias interp_sacs /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con -alias apolynomial_normalize /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con -alias Node_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/2 -alias Empty_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/1 -alias APvar /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1 -alias AP0 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2 -alias AP1 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3 -alias APplus /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4 -alias APmult /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5 -alias APopp /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6 -alias Left_idx /Coq/ring/Quote/variables_map/index.ind#1/1/1 -alias Right_idx /Coq/ring/Quote/variables_map/index.ind#1/1/2 -alias End_idx /Coq/ring/Quote/variables_map/index.ind#1/1/3 -(eqT R R1 R1) diff --git a/helm/gTopLevel/esempi/ring/caso1.cic b/helm/gTopLevel/esempi/ring/caso1.cic deleted file mode 100644 index 250e8cbeb..000000000 --- a/helm/gTopLevel/esempi/ring/caso1.cic +++ /dev/null @@ -1,25 +0,0 @@ -(* ok *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -alias interp_sacs /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con -alias apolynomial_normalize /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con -alias Node_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/2 -alias Empty_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/1 -alias APvar /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1 -alias AP0 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2 -alias AP1 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3 -alias APplus /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4 -alias APmult /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5 -alias APopp /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6 -alias Left_idx /Coq/ring/Quote/variables_map/index.ind#1/1/1 -alias Right_idx /Coq/ring/Quote/variables_map/index.ind#1/1/2 -alias End_idx /Coq/ring/Quote/variables_map/index.ind#1/1/3 -(eqT R - R1 - (Rmult R1 R1)) diff --git a/helm/gTopLevel/esempi/ring/caso2.cic b/helm/gTopLevel/esempi/ring/caso2.cic deleted file mode 100644 index c9c389674..000000000 --- a/helm/gTopLevel/esempi/ring/caso2.cic +++ /dev/null @@ -1,25 +0,0 @@ -(* ok *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -alias interp_sacs /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con -alias apolynomial_normalize /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con -alias Node_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/2 -alias Empty_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/1 -alias APvar /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1 -alias AP0 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2 -alias AP1 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3 -alias APplus /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4 -alias APmult /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5 -alias APopp /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6 -alias Left_idx /Coq/ring/Quote/variables_map/index.ind#1/1/1 -alias Right_idx /Coq/ring/Quote/variables_map/index.ind#1/1/2 -alias End_idx /Coq/ring/Quote/variables_map/index.ind#1/1/3 -(eqT R - (Rmult R1 R1) - R1) diff --git a/helm/gTopLevel/esempi/ring/caso3.1.cic b/helm/gTopLevel/esempi/ring/caso3.1.cic deleted file mode 100644 index 0d698cd48..000000000 --- a/helm/gTopLevel/esempi/ring/caso3.1.cic +++ /dev/null @@ -1,25 +0,0 @@ -(* ok *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -alias interp_sacs /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con -alias apolynomial_normalize /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con -alias Node_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/2 -alias Empty_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/1 -alias APvar /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1 -alias AP0 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2 -alias AP1 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3 -alias APplus /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4 -alias APmult /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5 -alias APopp /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6 -alias Left_idx /Coq/ring/Quote/variables_map/index.ind#1/1/1 -alias Right_idx /Coq/ring/Quote/variables_map/index.ind#1/1/2 -alias End_idx /Coq/ring/Quote/variables_map/index.ind#1/1/3 -(eqT R - (Rmult R1 R1) - (Rplus R1 R1)) diff --git a/helm/gTopLevel/esempi/ring/caso3.1bis.cic b/helm/gTopLevel/esempi/ring/caso3.1bis.cic deleted file mode 100644 index ec85c071a..000000000 --- a/helm/gTopLevel/esempi/ring/caso3.1bis.cic +++ /dev/null @@ -1,25 +0,0 @@ -(* ok *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -alias interp_sacs /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con -alias apolynomial_normalize /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con -alias Node_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/2 -alias Empty_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/1 -alias APvar /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1 -alias AP0 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2 -alias AP1 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3 -alias APplus /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4 -alias APmult /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5 -alias APopp /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6 -alias Left_idx /Coq/ring/Quote/variables_map/index.ind#1/1/1 -alias Right_idx /Coq/ring/Quote/variables_map/index.ind#1/1/2 -alias End_idx /Coq/ring/Quote/variables_map/index.ind#1/1/3 -(eqT R - (Rplus R1 R1) - (Rmult R1 R1)) diff --git a/helm/gTopLevel/esempi/ring/caso3.2.cic b/helm/gTopLevel/esempi/ring/caso3.2.cic deleted file mode 100644 index d6d0b5ad8..000000000 --- a/helm/gTopLevel/esempi/ring/caso3.2.cic +++ /dev/null @@ -1,25 +0,0 @@ -(* ok *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -alias interp_sacs /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con -alias apolynomial_normalize /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con -alias Node_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/2 -alias Empty_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/1 -alias APvar /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1 -alias AP0 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2 -alias AP1 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3 -alias APplus /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4 -alias APmult /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5 -alias APopp /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6 -alias Left_idx /Coq/ring/Quote/variables_map/index.ind#1/1/1 -alias Right_idx /Coq/ring/Quote/variables_map/index.ind#1/1/2 -alias End_idx /Coq/ring/Quote/variables_map/index.ind#1/1/3 -(eqT R - (Rmult (Rplus R1 R1) R1) - (Rmult R1 (Rplus R1 R1))) diff --git a/helm/gTopLevel/esempi/ring/caso3.3.cic b/helm/gTopLevel/esempi/ring/caso3.3.cic deleted file mode 100644 index 0ac953aa3..000000000 --- a/helm/gTopLevel/esempi/ring/caso3.3.cic +++ /dev/null @@ -1,25 +0,0 @@ -(* ok *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -alias interp_sacs /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con -alias apolynomial_normalize /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con -alias Node_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/2 -alias Empty_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/1 -alias APvar /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1 -alias AP0 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2 -alias AP1 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3 -alias APplus /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4 -alias APmult /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5 -alias APopp /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6 -alias Left_idx /Coq/ring/Quote/variables_map/index.ind#1/1/1 -alias Right_idx /Coq/ring/Quote/variables_map/index.ind#1/1/2 -alias End_idx /Coq/ring/Quote/variables_map/index.ind#1/1/3 -(eqT R - (Rmult (Rplus R1 R1) R1) - (Rmult R1 R1)) diff --git a/helm/gTopLevel/esempi/ring/coq_overkill_helm_rulez.cic b/helm/gTopLevel/esempi/ring/coq_overkill_helm_rulez.cic deleted file mode 100644 index f7879b576..000000000 --- a/helm/gTopLevel/esempi/ring/coq_overkill_helm_rulez.cic +++ /dev/null @@ -1,23 +0,0 @@ -(* meglio di coq *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -alias interp_sacs /Coq/ring/Ring_abstract/abstract_rings/interp_sacs.con -alias apolynomial_normalize /Coq/ring/Ring_abstract/abstract_rings/apolynomial_normalize.con -alias Node_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/2 -alias Empty_vm /Coq/ring/Quote/variables_map/varmap.ind#1/1/1 -alias APvar /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/1 -alias AP0 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/2 -alias AP1 /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/3 -alias APplus /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/4 -alias APmult /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/5 -alias APopp /Coq/ring/Ring_abstract/abstract_rings/apolynomial.ind#1/1/6 -alias Left_idx /Coq/ring/Quote/variables_map/index.ind#1/1/1 -alias Right_idx /Coq/ring/Quote/variables_map/index.ind#1/1/2 -alias End_idx /Coq/ring/Quote/variables_map/index.ind#1/1/3 -(eqT R R1 R0) diff --git a/helm/gTopLevel/esempi/ring/novarmap.cic b/helm/gTopLevel/esempi/ring/novarmap.cic deleted file mode 100644 index 63deeff13..000000000 --- a/helm/gTopLevel/esempi/ring/novarmap.cic +++ /dev/null @@ -1,13 +0,0 @@ -(* Goal ``-1 + 1*2 == 2*0 + 1`` *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -(eqT R - (Rplus (Ropp R1) (Rmult R1 (Rplus R1 R1))) - (Rplus (Rmult (Rplus R1 R1) R0) R1) -) diff --git a/helm/gTopLevel/esempi/ring/novarmap_tofinish.cic b/helm/gTopLevel/esempi/ring/novarmap_tofinish.cic deleted file mode 100644 index 1a335f3b2..000000000 --- a/helm/gTopLevel/esempi/ring/novarmap_tofinish.cic +++ /dev/null @@ -1,13 +0,0 @@ -(* Goal: ``1 = 2`` *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -(eqT R - R1 - (Rplus R1 R1) -) diff --git a/helm/gTopLevel/esempi/ring/varmap.cic b/helm/gTopLevel/esempi/ring/varmap.cic deleted file mode 100644 index d2cf450b3..000000000 --- a/helm/gTopLevel/esempi/ring/varmap.cic +++ /dev/null @@ -1,14 +0,0 @@ -(* Goal: ``x+y == 2*y+(x-y)`` *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -!x:R.!y:R. -(eqT R - (Rplus x y) - (Rplus (Rmult (Rplus R1 R1) y) (Rplus x (Ropp y))) -) diff --git a/helm/gTopLevel/esempi/ring/varmap2.cic b/helm/gTopLevel/esempi/ring/varmap2.cic deleted file mode 100644 index d3aa6c85b..000000000 --- a/helm/gTopLevel/esempi/ring/varmap2.cic +++ /dev/null @@ -1,14 +0,0 @@ -(* Goal: ``x+y == x+y+x`` *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -!x:R.!y:R. -(eqT R - (Rplus x y) - (Rplus (Rplus x y) x) -) diff --git a/helm/gTopLevel/esempi/ring/varmap_trivial.cic b/helm/gTopLevel/esempi/ring/varmap_trivial.cic deleted file mode 100644 index 15e2a512b..000000000 --- a/helm/gTopLevel/esempi/ring/varmap_trivial.cic +++ /dev/null @@ -1,14 +0,0 @@ -(* Goal (x,y:R)``x+y==y+x`` *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -!x:R.!y:R. -(eqT R - (Rplus x y) - (Rplus y x) -) diff --git a/helm/gTopLevel/esempi/ring/varmap_trivial2.cic b/helm/gTopLevel/esempi/ring/varmap_trivial2.cic deleted file mode 100644 index e05aecd89..000000000 --- a/helm/gTopLevel/esempi/ring/varmap_trivial2.cic +++ /dev/null @@ -1,14 +0,0 @@ -(* Goal (x,y,z:R)``x+y+z==z+y+x`` *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -!x:R.!y:R.!z:R. -(eqT R - (Rplus (Rplus x y) z) - (Rplus (Rplus z y) x) -) diff --git a/helm/gTopLevel/esempi/ring/varmap_trivial3.cic b/helm/gTopLevel/esempi/ring/varmap_trivial3.cic deleted file mode 100644 index c1bb161b8..000000000 --- a/helm/gTopLevel/esempi/ring/varmap_trivial3.cic +++ /dev/null @@ -1,14 +0,0 @@ -(* Goal (x:R)``2*x==x+x``. *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -!x:R. -(eqT R - (Rmult (Rplus R1 R1) x) - (Rplus x x) -) diff --git a/helm/gTopLevel/esempi/ring/varmap_trivial_molte_variabili.cic b/helm/gTopLevel/esempi/ring/varmap_trivial_molte_variabili.cic deleted file mode 100644 index ce9d86da0..000000000 --- a/helm/gTopLevel/esempi/ring/varmap_trivial_molte_variabili.cic +++ /dev/null @@ -1,14 +0,0 @@ -(* Goal (u,v,w,x,y,z:R)``u+v+w+x+y+z==z+y+x+w+v+u``. *) -alias eq /Coq/Init/Logic/Equality/eq.ind#1/1 -alias eqT /Coq/Init/Logic_Type/eqT.ind#1/1 -alias R /Coq/Reals/Rdefinitions/R.con -alias Rplus /Coq/Reals/Rdefinitions/Rplus.con -alias Rmult /Coq/Reals/Rdefinitions/Rmult.con -alias R1 /Coq/Reals/Rdefinitions/R1.con -alias R0 /Coq/Reals/Rdefinitions/R0.con -alias Ropp /Coq/Reals/Rdefinitions/Ropp.con -!u:R.!v:R.!w:R.!x:R.!y:R.!z:R. -(eqT R - (Rplus (Rplus (Rplus (Rplus (Rplus u v) w) x) y) z) - (Rplus (Rplus (Rplus (Rplus (Rplus z y) x) w) v) u) -) diff --git a/helm/gTopLevel/esempi/sets.cic b/helm/gTopLevel/esempi/sets.cic deleted file mode 100644 index 5bd913e72..000000000 --- a/helm/gTopLevel/esempi/sets.cic +++ /dev/null @@ -1,17 +0,0 @@ -Open: -/Coq/Sets/Powerset_facts/Union_commutative.con - -We prove the conjunction again: - -alias U /Coq/Sets/Ensembles/Ensembles/U.var -alias V /Coq/Sets/Powerset_facts/Sets_as_an_algebra/U.var -alias Ensemble /Coq/Sets/Ensembles/Ensemble.con -alias Union /Coq/Sets/Ensembles/Union.ind#1/1 -alias Included /Coq/Sets/Ensembles/Included.con -alias and /Coq/Init/Logic/and.ind#1/1 - -The two parts of the conjunction can be proved in the same way. So we -can make a Cut: - -!C:Ensemble{U:=V}.!D:Ensemble{U:=V}. - (Included{U:=V} (Union{U:=V} C D) (Union{U:=V} D C)) diff --git a/helm/gTopLevel/esempi/various.cic b/helm/gTopLevel/esempi/various.cic deleted file mode 100644 index 11141d4ab..000000000 --- a/helm/gTopLevel/esempi/various.cic +++ /dev/null @@ -1,7 +0,0 @@ - -!n:nat.(eq nat n n) - -!n:nat.!m:nat.(eq nat n m)->(eq nat m n) - -!n:nat.!m:nat.!p:nat.(eq nat n p)->(eq nat p m)->(eq nat n m) - diff --git a/helm/gTopLevel/gTopLevel.conf.xml.sample b/helm/gTopLevel/gTopLevel.conf.xml.sample deleted file mode 100644 index e4f23f7ce..000000000 --- a/helm/gTopLevel/gTopLevel.conf.xml.sample +++ /dev/null @@ -1,58 +0,0 @@ - - - -
- - /home/sacerdot/helm/local_stuff - - - http://mowgli.cs.unibo.it -
- - -
- mowgli.cs.unibo.it - helm - mowgli -
-
- mathql_db_map.txt -
- mowgli.cs.unibo.it - mowgli - - - helm -
- dbname=mowgli host=mowgli.cs.unibo.it user=helm - - - - - - - - - - - -
-
- $(users_settings.per_user_work_directory)/objects - $(local_library.dir) -
-
- remote - $(users_settings.daemons_host):58081/ -
-
- $(users_settings.per_user_work_directory)/constanttype - $(users_settings.per_user_work_directory)/environment - $(users_settings.per_user_work_directory)/innertypes - $(users_settings.per_user_work_directory)/currentproof - $(users_settings.per_user_work_directory)/currentprooftype -
-
- $(users_settings.daemons_host):58080/ -
-
diff --git a/helm/gTopLevel/gTopLevel.ml b/helm/gTopLevel/gTopLevel.ml deleted file mode 100644 index d3e39351c..000000000 --- a/helm/gTopLevel/gTopLevel.ml +++ /dev/null @@ -1,2879 +0,0 @@ -(* Copyright (C) 2000-2004, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -(*****************************************************************************) -(* *) -(* PROJECT HELM *) -(* *) -(* Claudio Sacerdoti Coen *) -(* 06/01/2002 *) -(* *) -(* *) -(*****************************************************************************) - -let debug_level = ref 1 -let debug_print ?(level = 1) s = if !debug_level >= level then prerr_endline s -let error s = prerr_endline ("E: " ^ s) -let warning s = prerr_endline ("W: " ^ s) - -open Printf - -module MQI = MQueryInterpreter -module MQIC = MQIConn -module MQGT = MQGTypes -module MQGU = MQGUtil -module MQG = MQueryGenerator - -(* first of all let's initialize the Helm_registry *) -let _ = - let configuration_file = "gTopLevel.conf.xml" in - if not (Sys.file_exists configuration_file) then begin - eprintf "E: Can't find configuration file '%s'\n" configuration_file; - exit 2 - end; - Helm_registry.load_from configuration_file -;; - -(* GLOBAL CONSTANTS *) - -let mqi_handle = MQIC.init_if_connected () - -let dbd = - Mysql.quick_connect - ~host:(Helm_registry.get "db.host") - ~user:(Helm_registry.get "db.user") - ~database:(Helm_registry.get "db.database") - () - -let restore_environment_on_boot = true ;; -let notify_hbugs_on_goal_change = false ;; - -let auto_disambiguation = ref true ;; - -(* GLOBAL REFERENCES (USED BY CALLBACKS) *) - -let check_term = ref (fun _ _ _ -> assert false);; - -exception RenderingWindowsNotInitialized;; - -let set_rendering_window,rendering_window = - let rendering_window_ref = ref None in - (function rw -> rendering_window_ref := Some rw), - (function () -> - match !rendering_window_ref with - None -> raise RenderingWindowsNotInitialized - | Some rw -> rw - ) -;; - -exception SettingsWindowsNotInitialized;; - -let set_settings_window,settings_window = - let settings_window_ref = ref None in - (function rw -> settings_window_ref := Some rw), - (function () -> - match !settings_window_ref with - None -> raise SettingsWindowsNotInitialized - | Some rw -> rw - ) -;; - -exception QedSetSensitiveNotInitialized;; -let qed_set_sensitive = - ref (function _ -> raise QedSetSensitiveNotInitialized) -;; - -exception SaveSetSensitiveNotInitialized;; -let save_set_sensitive = - ref (function _ -> raise SaveSetSensitiveNotInitialized) -;; - -(* COMMAND LINE OPTIONS *) - -let usedb = ref true - -let argspec = - [ - "-nodb", Arg.Clear usedb, "disable use of MathQL DB" - ] -in -Arg.parse argspec ignore "" - -(* UTILITY FUNCTIONS TO DISAMBIGUATE AN URI *) - -(* Check window *) - -let check_window uris = - let window = - GWindow.window - ~width:800 ~modal:true ~title:"Check" ~border_width:2 () in - let notebook = - GPack.notebook ~scrollable:true ~packing:window#add () in - window#show () ; - let render_terms = - List.map - (function uri -> - let scrolled_window = - GBin.scrolled_window ~border_width:10 - ~packing: - (notebook#append_page ~tab_label:((GMisc.label ~text:uri ())#coerce)) - () - in - lazy - (let mmlwidget = - TermViewer.sequent_viewer - ~mml_of_cic_sequent:ApplyTransformation.mml_of_cic_sequent - ~packing:scrolled_window#add ~width:400 ~height:280 () in - let expr = - let term = CicUtil.term_of_uri uri in - (Cic.Cast (term, fst(CicTypeChecker.type_of_aux' [] [] term - CicUniv.empty_ugraph ))) - in - try - mmlwidget#load_sequent [] (111,[],expr) - with - e -> - HelmLogger.log (`Error (`T (Printexc.to_string e))) - ) - ) uris - in - ignore - (notebook#connect#switch_page - (function i -> - Lazy.force (List.nth render_terms i))) -;; - -exception NoChoice;; - -let interactive_user_uri_choice - ~(selection_mode:[ `SINGLE | `MULTIPLE ]) - ?(ok="Ok") ?(enable_button_for_non_vars=false) ~title ~msg uris -= - let only_constant_choices = - lazy - (List.filter - (fun uri -> not (String.sub uri (String.length uri - 4) 4 = ".var")) - uris) - in - if selection_mode <> `SINGLE && !auto_disambiguation then - Lazy.force only_constant_choices - else begin - let choices = ref [] in - let chosen = ref false in - let use_only_constants = ref false in - let window = - GWindow.dialog ~modal:true ~title ~width:600 () in - let lMessage = - GMisc.label ~text:msg - ~packing:(window#vbox#pack ~expand:false ~fill:false ~padding:5) () in - let scrolled_window = - GBin.scrolled_window ~border_width:10 - ~packing:(window#vbox#pack ~expand:true ~fill:true ~padding:5) () in - let clist = - let expected_height = 18 * List.length uris in - let height = if expected_height > 400 then 400 else expected_height in - GList.clist ~columns:1 ~packing:scrolled_window#add - ~height ~selection_mode:(selection_mode :> Gtk.Tags.selection_mode) () in - let _ = List.map (function x -> clist#append [x]) uris in - let hbox2 = - GPack.hbox ~border_width:0 - ~packing:(window#vbox#pack ~expand:false ~fill:false ~padding:5) () in - let explain_label = - GMisc.label ~text:"None of the above. Try this one:" - ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5) () in - let manual_input = - GEdit.entry ~editable:true - ~packing:(hbox2#pack ~expand:true ~fill:true ~padding:5) () in - let hbox = - GPack.hbox ~border_width:0 ~packing:window#action_area#add () in - let okb = - GButton.button ~label:ok - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let _ = okb#misc#set_sensitive false in - let nonvarsb = - GButton.button - ~packing: - (function w -> - if enable_button_for_non_vars then - hbox#pack ~expand:false ~fill:false ~padding:5 w) - ~label:"Try constants only" () in - let autob = - GButton.button - ~packing: - (fun w -> - if enable_button_for_non_vars then - hbox#pack ~expand:false ~fill:false ~padding:5 w) - ~label:"Auto" () in - let checkb = - GButton.button ~label:"Check" - ~packing:(hbox#pack ~padding:5) () in - let _ = checkb#misc#set_sensitive false in - let cancelb = - GButton.button ~label:"Abort" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - (* actions *) - let check_callback () = - assert (List.length !choices > 0) ; - check_window !choices - in - ignore (window#connect#destroy GMain.Main.quit) ; - ignore (cancelb#connect#clicked window#destroy) ; - ignore - (okb#connect#clicked (function () -> chosen := true ; window#destroy ())) ; - ignore - (nonvarsb#connect#clicked - (function () -> - use_only_constants := true ; - chosen := true ; - window#destroy () - )) ; - ignore (autob#connect#clicked (fun () -> - auto_disambiguation := true; - (rendering_window ())#set_auto_disambiguation true; - use_only_constants := true ; - chosen := true; - window#destroy ())); - ignore (checkb#connect#clicked check_callback) ; - ignore - (clist#connect#select_row - (fun ~row ~column ~event -> - checkb#misc#set_sensitive true ; - okb#misc#set_sensitive true ; - choices := (List.nth uris row)::!choices)) ; - ignore - (clist#connect#unselect_row - (fun ~row ~column ~event -> - choices := - List.filter (function uri -> uri != (List.nth uris row)) !choices)) ; - ignore - (manual_input#connect#changed - (fun _ -> - if manual_input#text = "" then - begin - choices := [] ; - checkb#misc#set_sensitive false ; - okb#misc#set_sensitive false ; - clist#misc#set_sensitive true - end - else - begin - choices := [manual_input#text] ; - clist#unselect_all () ; - checkb#misc#set_sensitive true ; - okb#misc#set_sensitive true ; - clist#misc#set_sensitive false - end)); - window#set_position `CENTER ; - window#show () ; - GtkThread.main (); - if !chosen then - if !use_only_constants then - Lazy.force only_constant_choices - else - if List.length !choices > 0 then !choices else raise NoChoice - else - raise NoChoice - end -;; - -let interactive_interpretation_choice interpretations = - let chosen = ref None in - let window = - GWindow.window - ~modal:true ~title:"Ambiguous well-typed input." ~border_width:2 () in - let vbox = GPack.vbox ~packing:window#add () in - let lMessage = - GMisc.label - ~text: - ("Ambiguous input since there are many well-typed interpretations." ^ - " Please, choose one of them.") - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let notebook = - GPack.notebook ~scrollable:true - ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in - let _ = - List.map - (function interpretation -> - let clist = - let expected_height = 18 * List.length interpretation in - let height = if expected_height > 400 then 400 else expected_height in - GList.clist ~columns:2 ~packing:notebook#append_page ~height - ~titles:["id" ; "URI"] () - in - ignore - (List.map - (function (id,uri) -> - let n = clist#append [id;uri] in - clist#set_row ~selectable:false n - ) interpretation - ) ; - clist#columns_autosize () - ) interpretations in - let hbox = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let okb = - GButton.button ~label:"Ok" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let cancelb = - GButton.button ~label:"Abort" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - (* actions *) - ignore (window#connect#destroy GMain.Main.quit) ; - ignore (cancelb#connect#clicked window#destroy) ; - ignore - (okb#connect#clicked - (function () -> chosen := Some notebook#current_page ; window#destroy ())) ; - window#set_position `CENTER ; - window#show () ; - GtkThread.main (); - match !chosen with - None -> raise NoChoice - | Some n -> [n] -;; - - -(* MISC FUNCTIONS *) - -let - save_object_to_disk uri annobj ids_to_inner_sorts ids_to_inner_types pathname -= - let name = - let struri = UriManager.string_of_uri uri in - let idx = (String.rindex struri '/') + 1 in - String.sub struri idx (String.length struri - idx) - in - let path = pathname ^ "/" ^ name in - let xml, bodyxml = - Cic2Xml.print_object uri ~ids_to_inner_sorts ~ask_dtd_to_the_getter:false - annobj - in - let xmlinnertypes = - Cic2Xml.print_inner_types uri ~ids_to_inner_sorts ~ids_to_inner_types - ~ask_dtd_to_the_getter:false - in - (* innertypes *) - let innertypesuri = UriManager.innertypesuri_of_uri uri in - Xml.pp ~gzip:false xmlinnertypes (Some (path ^ ".types.xml")) ; - Http_getter.register' innertypesuri - (Helm_registry.get "local_library.url" ^ - Str.replace_first (Str.regexp "^cic:") "" - (UriManager.string_of_uri innertypesuri) ^ ".xml" - ) ; - (* constant type / variable / mutual inductive types definition *) - Xml.pp ~gzip:false xml (Some (path ^ ".xml")) ; - Http_getter.register' uri - (Helm_registry.get "local_library.url" ^ - Str.replace_first (Str.regexp "^cic:") "" - (UriManager.string_of_uri uri) ^ ".xml" - ) ; - match bodyxml with - None -> () - | Some bodyxml' -> - (* constant body *) - let bodyuri = - match UriManager.bodyuri_of_uri uri with - None -> assert false - | Some bodyuri -> bodyuri - in - Xml.pp ~gzip:false bodyxml' (Some (path ^ ".body.xml")) ; - Http_getter.register' bodyuri - (Helm_registry.get "local_library.url" ^ - Str.replace_first (Str.regexp "^cic:") "" - (UriManager.string_of_uri bodyuri) ^ ".xml" - ) -;; - - -(* CALLBACKS *) - -exception OpenConjecturesStillThere;; -exception WrongProof;; - -let pathname_of_annuri uristring = - Helm_registry.get "local_library.dir" ^ - Str.replace_first (Str.regexp "^cic:") "" uristring -;; - -let make_dirs dirpath = - ignore (Unix.system ("mkdir -p " ^ dirpath)) -;; - -let save_obj uri obj = - let - (acic,ids_to_terms,ids_to_father_ids,ids_to_inner_sorts, - ids_to_inner_types,ids_to_conjectures,ids_to_hypotheses) - = - Cic2acic.acic_object_of_cic_object ~eta_fix:false obj - in - (* let's save the theorem and register it to the getter *) - let pathname = pathname_of_annuri (UriManager.buri_of_uri uri) in - make_dirs pathname ; - save_object_to_disk uri acic ids_to_inner_sorts ids_to_inner_types - pathname -;; - -let qed () = - match ProofEngine.get_proof () with - None -> assert false - | Some (uri,[],bo,ty) -> - let uri = match uri with Some uri -> uri | _ -> assert false in - (* we want to typecheck in the ENV *) - prerr_endline "-------------> QED"; - let ty_bo,u = - CicTypeChecker.type_of_aux' [] [] bo CicUniv.empty_ugraph in - let b,u1 = CicReduction.are_convertible [] ty_bo ty u in - if b then - begin - (*CSC: Wrong: [] is just plainly wrong *) - let proof = - Cic.Constant (UriManager.name_of_uri uri,Some bo,ty,[],[]) - in - let (acic,ids_to_inner_types,ids_to_inner_sorts) = - (rendering_window ())#output#load_proof proof - in - !qed_set_sensitive false ; - (* let's save the theorem and register it to the getter *) - let pathname = - pathname_of_annuri (UriManager.buri_of_uri uri) - in - let list_of_universes = - CicUnivUtils.universes_of_obj uri - (Cic.Constant ("",None,ty,[],[])) - in - let u1_clean = CicUniv.clean_ugraph u1 list_of_universes in - let u2 = CicUniv.fill_empty_nodes_with_uri u1_clean uri in - (********************************************** - TASSI: to uncomment whe universes will be ON - ***********************************************) - (* - make_dirs pathname ; - save_object_to_disk uri acic ids_to_inner_sorts - ids_to_inner_types pathname; - *) - (* save the universe graph u2 *) - (* add the object to the env *) - CicEnvironment.add_type_checked_term uri (( - Cic.Constant ((UriManager.name_of_uri uri), - (Some bo),ty,[],[])),u2); - (* FIXME: the variable list!! *) - prerr_endline "-------------> FINE"; - end - else - raise WrongProof - | _ -> raise OpenConjecturesStillThere -;; - - (** save an unfinished proof on the filesystem *) -let save_unfinished_proof () = - let (xml, bodyxml) = ProofEngine.get_current_status_as_xml () in - let proof_file_type = Helm_registry.get "gtoplevel.proof_file_type" in - let proof_file = Helm_registry.get "gtoplevel.proof_file" in - Xml.pp ~gzip:false xml (Some proof_file_type) ; - HelmLogger.log - (`Msg (`T ("Current proof type saved to " ^ proof_file_type))) ; - Xml.pp ~gzip:false bodyxml (Some proof_file) ; - HelmLogger.log - (`Msg (`T ("Current proof body saved to " ^ proof_file))) -;; - -(* Used to typecheck the loaded proofs *) -let typecheck_loaded_proof metasenv bo ty = - let module T = CicTypeChecker in - ignore ( - List.fold_left - (fun metasenv ((_,context,ty) as conj) -> - ignore (T.type_of_aux' metasenv context ty CicUniv.empty_ugraph) ; - metasenv @ [conj] - ) [] metasenv) ; - ignore (T.type_of_aux' metasenv [] ty CicUniv.empty_ugraph) ; - ignore (T.type_of_aux' metasenv [] bo CicUniv.empty_ugraph) -;; - -let decompose_uris_choice_callback uris = -(* N.B.: in questo passaggio perdo l'informazione su exp_named_subst !!!! *) - let module U = UriManager in - List.map - (function uri -> - match CicUtil.term_of_uri uri with - | Cic.MutInd (uri, typeno, _) -> (uri, typeno, []) - | _ -> assert false) - (interactive_user_uri_choice - ~selection_mode:`MULTIPLE ~ok:"Ok" ~enable_button_for_non_vars:false - ~title:"Decompose" ~msg:"Please, select the Inductive Types to decompose" - (List.map - (function (uri,typeno,_) -> - U.string_of_uri uri ^ "#1/" ^ string_of_int (typeno+1) - ) uris) - ) -;; - -let mk_fresh_name_callback metasenv context name ~typ = - let fresh_name = - match FreshNamesGenerator.mk_fresh_name ~subst:[] metasenv context name ~typ with - Cic.Name fresh_name -> fresh_name - | Cic.Anonymous -> assert false - in - match - GToolbox.input_string ~title:"Enter a fresh hypothesis name" ~text:fresh_name - ("Enter a fresh name for the hypothesis " ^ - CicPp.pp typ - (List.map (function None -> None | Some (n,_) -> Some n) context)) - with - Some fresh_name' -> Cic.Name fresh_name' - | None -> raise NoChoice -;; - -let refresh_proof (output : TermViewer.proof_viewer) = - try - let uri,currentproof = - match ProofEngine.get_proof () with - None -> assert false - | Some (uri,metasenv,bo,ty) -> - ProofEngine.set_proof (Some (uri,metasenv,bo,ty)) ; - if List.length metasenv = 0 then - begin - !qed_set_sensitive true ; - Hbugs.clear () - end - else - Hbugs.notify () ; - (*CSC: Wrong: [] is just plainly wrong *) - let uri = match uri with Some uri -> uri | _ -> assert false in - (uri, - Cic.CurrentProof (UriManager.name_of_uri uri,metasenv,bo,ty,[],[])) - in - ignore (output#load_proof currentproof) - with - e -> - match ProofEngine.get_proof () with - None -> assert false - | Some (uri,metasenv,bo,ty) -> - debug_print ("Offending proof: " ^ - CicPp.ppobj (Cic.CurrentProof ("questa",metasenv,bo,ty,[],[]))); - raise (InvokeTactics.RefreshProofException e) - -let set_proof_engine_goal g = - ProofEngine.goal := g -;; - -let refresh_goals ?(empty_notebook=true) notebook = - try - match !ProofEngine.goal with - None -> - if empty_notebook then - begin - notebook#remove_all_pages ~skip_switch_page_event:false ; - notebook#set_empty_page - end - else - notebook#proofw#unload - | Some metano -> - let metasenv = - match ProofEngine.get_proof () with - None -> assert false - | Some (_,metasenv,_,_) -> metasenv - in - let currentsequent = - List.find (function (m,_,_) -> m=metano) metasenv - in - let regenerate_notebook () = - let skip_switch_page_event = - match metasenv with - (m,_,_)::_ when m = metano -> false - | _ -> true - in - notebook#remove_all_pages ~skip_switch_page_event ; - List.iter (function (m,_,_) -> notebook#add_page m) metasenv ; - in - if empty_notebook then - begin - regenerate_notebook () ; - notebook#set_current_page - ~may_skip_switch_page_event:false metano - end - else - begin - notebook#set_current_page - ~may_skip_switch_page_event:true metano ; - notebook#proofw#load_sequent metasenv currentsequent ; - end - with - e -> -let metano = - match !ProofEngine.goal with - None -> assert false - | Some m -> m -in -let metasenv = - match ProofEngine.get_proof () with - None -> assert false - | Some (_,metasenv,_,_) -> metasenv -in -try - let currentsequent = List.find (function (m,_,_) -> m=metano) metasenv in - debug_print - ("Offending sequent: " ^ SequentPp.TextualPp.print_sequent currentsequent); - raise (InvokeTactics.RefreshSequentException e) -with Not_found -> - debug_print ("Offending sequent " ^ string_of_int metano ^ " unknown."); - raise (InvokeTactics.RefreshSequentException e) - -module InvokeTacticsCallbacks = - struct - let sequent_viewer () = (rendering_window ())#notebook#proofw - let term_editor () = (rendering_window ())#inputt - let scratch_window () = (rendering_window ())#scratch_window - - let refresh_proof () = - let output = ((rendering_window ())#output : TermViewer.proof_viewer) in - refresh_proof output - - let refresh_goals () = - let notebook = (rendering_window ())#notebook in - refresh_goals notebook - - let decompose_uris_choice_callback = decompose_uris_choice_callback - let mk_fresh_name_callback = mk_fresh_name_callback - let mqi_handle = mqi_handle - let dbd = dbd - end -;; -module InvokeTactics' = InvokeTactics.Make (InvokeTacticsCallbacks);; -(* -(* Just to initialize the Hbugs module *) -module Ignore = Hbugs.Initialize (InvokeTactics');; -Hbugs.set_describe_hint_callback (fun hint -> - match hint with - | Hbugs_types.Use_apply_Luke term -> check_window [term] - | _ -> ()) -;; -*) -let dummy_uri = "/dummy.con" - - (** load an unfinished proof from filesystem *) -let load_unfinished_proof () = - let output = ((rendering_window ())#output : TermViewer.proof_viewer) in - let notebook = (rendering_window ())#notebook in - try - match - GToolbox.input_string ~title:"Load Unfinished Proof" ~text:dummy_uri - "Choose an URI:" - with - None -> raise NoChoice - | Some uri0 -> - let uri = UriManager.uri_of_string ("cic:" ^ uri0) in - let proof_file_type = Helm_registry.get "gtoplevel.proof_file_type" in - let proof_file = Helm_registry.get "gtoplevel.proof_file" in - match CicParser.obj_of_xml proof_file_type (Some proof_file) with - Cic.CurrentProof (_,metasenv,bo,ty,_,_) -> - typecheck_loaded_proof metasenv bo ty ; - ProofEngine.set_proof (Some (Some uri, metasenv, bo, ty)); - refresh_proof output ; - set_proof_engine_goal - (match metasenv with - [] -> None - | (metano,_,_)::_ -> Some metano - ) ; - refresh_goals notebook ; - HelmLogger.log - (`Msg (`T ("Current proof type loaded from " ^ proof_file_type))); - HelmLogger.log - (`Msg (`T ("Current proof body loaded from " ^ proof_file))) ; - !save_set_sensitive true; - | _ -> assert false - with - InvokeTactics.RefreshSequentException e -> - HelmLogger.log - (`Error (`T ("Exception raised during the refresh of the " ^ - "sequent: " ^ Printexc.to_string e))) - | InvokeTactics.RefreshProofException e -> - HelmLogger.log - (`Error (`T ("Exception raised during the refresh of the " ^ - "proof: " ^ Printexc.to_string e))) - | e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) -;; - -let clear_aliases () = - let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - inputt#environment := - DisambiguatingParser.EnvironmentP3.of_string - DisambiguatingParser.EnvironmentP3.empty -;; - -let edit_aliases () = - let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - let disambiguation_env = inputt#environment in - let chosen_aliases = ref None in - let window = - GWindow.window - ~width:400 ~modal:true ~title:"Edit Aliases..." ~border_width:2 () in - let vbox = - GPack.vbox ~border_width:0 ~packing:window#add () in - let scrolled_window = - GBin.scrolled_window ~border_width:10 - ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in - let input = GText.view ~editable:true ~width:400 ~height:100 - ~packing:scrolled_window#add () in - let hbox = - GPack.hbox ~border_width:0 - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let okb = - GButton.button ~label:"Ok" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let clearb = - GButton.button ~label:"Clear" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let cancelb = - GButton.button ~label:"Cancel" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - ignore (window#connect#destroy GMain.Main.quit) ; - ignore (cancelb#connect#clicked window#destroy) ; - ignore (clearb#connect#clicked (fun () -> - input#buffer#set_text DisambiguatingParser.EnvironmentP3.empty)) ; - ignore (okb#connect#clicked (fun () -> - chosen_aliases := Some (input#buffer#get_text ()); - window#destroy ())); - ignore - (input#buffer#insert ~iter:(input#buffer#get_iter_at_char 0) - (DisambiguatingParser.EnvironmentP3.to_string !disambiguation_env ^ "\n")); - window#show () ; - GtkThread.main (); - match !chosen_aliases with - | None -> () - | Some raw_aliases -> - let new_disambiguation_env = - (try - DisambiguatingParser.EnvironmentP3.of_string raw_aliases - with e -> - HelmLogger.log - (`Error (`T - ("Error while parsing aliases: " ^ Printexc.to_string e))); - !disambiguation_env) - in - disambiguation_env := new_disambiguation_env -;; - -let proveit () = - let module L = LogicalOperations in - let module G = Gdome in - let notebook = (rendering_window ())#notebook in - let output = (rendering_window ())#output in - try - output#make_sequent_of_selected_term ; - refresh_proof output ; - refresh_goals notebook - with - InvokeTactics.RefreshSequentException e -> - HelmLogger.log - (`Error (`T ("Exception raised during the refresh of the " ^ - "sequent: " ^ Printexc.to_string e))) - | InvokeTactics.RefreshProofException e -> - HelmLogger.log - (`Error (`T ("Exception raised during the refresh of the " ^ - "proof: " ^ Printexc.to_string e))) - | e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) -;; - -let focus () = - let module L = LogicalOperations in - let module G = Gdome in - let notebook = (rendering_window ())#notebook in - let output = (rendering_window ())#output in - try - output#focus_sequent_of_selected_term ; - refresh_goals notebook - with - InvokeTactics.RefreshSequentException e -> - HelmLogger.log - (`Error (`T ("Exception raised during the refresh of the " ^ - "sequent: " ^ Printexc.to_string e))) - | InvokeTactics.RefreshProofException e -> - HelmLogger.log - (`Error (`T ("Exception raised during the refresh of the " ^ - "proof: " ^ Printexc.to_string e))) - | e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) -;; - -exception NoPrevGoal;; -exception NoNextGoal;; - -let setgoal metano = - let module L = LogicalOperations in - let module G = Gdome in - let notebook = (rendering_window ())#notebook in - let output = (rendering_window ())#output in - let metasenv = - match ProofEngine.get_proof () with - None -> assert false - | Some (_,metasenv,_,_) -> metasenv - in - try - refresh_goals ~empty_notebook:false notebook - with - InvokeTactics.RefreshSequentException e -> - HelmLogger.log - (`Error (`T ("Exception raised during the refresh of the " ^ - "sequent: " ^ Printexc.to_string e))) - | e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) -;; - -let - show_in_show_window_obj, show_in_show_window_uri, show_in_show_window_callback -= - let window = - GWindow.window ~width:800 ~border_width:2 () in - let scrolled_window = - GBin.scrolled_window ~border_width:10 ~packing:window#add () in - let mmlwidget = - GMathViewAux.single_selection_math_view - ~packing:scrolled_window#add ~width:600 ~height:400 () - in - let _ = window#event#connect#delete (fun _ -> window#misc#hide () ; true ) in - let href = Gdome.domString "href" in - let show_in_show_window_obj uri obj = - try - let mml,(_,(ids_to_terms,ids_to_father_ids,ids_to_conjectures, - ids_to_hypotheses,_,_)) = - ApplyTransformation.mml_of_cic_object obj - in - window#set_title (UriManager.string_of_uri uri) ; - window#misc#hide () ; window#show () ; - mmlwidget#load_root mml#get_documentElement ; - with - e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) - in - let show_in_show_window_uri uri = - let obj,_ = CicEnvironment.get_obj CicUniv.empty_ugraph uri in - show_in_show_window_obj uri obj - in - let show_in_show_window_callback mmlwidget ((n : Gdome.element option),_,_,_) = - match n with - None -> () - | Some n' -> - if n'#hasAttributeNS ~namespaceURI:Misc.xlink_ns ~localName:href then - let uri = - (n'#getAttributeNS ~namespaceURI:Misc.xlink_ns ~localName:href)#to_string - in - show_in_show_window_uri (UriManager.uri_of_string uri) - else - ignore (mmlwidget#action_toggle n') - in - let _ = - mmlwidget#connect#click (show_in_show_window_callback mmlwidget) - in - show_in_show_window_obj, show_in_show_window_uri, - show_in_show_window_callback -;; - -exception NoObjectsLocated;; - -let user_uri_choice ~title ~msg uris = - let uri = - match uris with - [] -> raise NoObjectsLocated - | [uri] -> uri - | uris -> - match - interactive_user_uri_choice ~selection_mode:`SINGLE ~title ~msg uris - with - [uri] -> uri - | _ -> assert false - in - String.sub uri 4 (String.length uri - 4) -;; - -let locate_callback id = - let uris = MetadataQuery.locate ~dbd id in - HelmLogger.log (`Msg (`T ("Locate Query: " ^ id))) ; - HelmLogger.log (`Msg (`T "Result:")) ; - List.iter (fun uri -> HelmLogger.log (`Msg (`T uri))) uris; - user_uri_choice ~title:"Ambiguous input." - ~msg:(sprintf "Ambiguous input \"%s\". Please, choose one interpetation:" id) - uris -;; - - -let input_or_locate_uri ~title = - let uri = ref None in - let window = - GWindow.window - ~width:400 ~modal:true ~title ~border_width:2 () in - let vbox = GPack.vbox ~packing:window#add () in - let hbox1 = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let _ = - GMisc.label ~text:"Enter a valid URI:" ~packing:(hbox1#pack ~padding:5) () in - let manual_input = - GEdit.entry ~editable:true - ~packing:(hbox1#pack ~expand:true ~fill:true ~padding:5) () in - let checkb = - GButton.button ~label:"Check" - ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in - let _ = checkb#misc#set_sensitive false in - let hbox2 = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let _ = - GMisc.label ~text:"You can also enter an indentifier to locate:" - ~packing:(hbox2#pack ~padding:5) () in - let locate_input = - GEdit.entry ~editable:true - ~packing:(hbox2#pack ~expand:true ~fill:true ~padding:5) () in - let locateb = - GButton.button ~label:"Locate" - ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5) () in - let _ = locateb#misc#set_sensitive false in - let hbox3 = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let okb = - GButton.button ~label:"Ok" - ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in - let _ = okb#misc#set_sensitive false in - let cancelb = - GButton.button ~label:"Cancel" - ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () - in - ignore (window#connect#destroy GMain.Main.quit) ; - ignore - (cancelb#connect#clicked (function () -> uri := None ; window#destroy ())) ; - let check_callback () = - let uri = "cic:" ^ manual_input#text in - try - ignore (Http_getter.resolve' (UriManager.uri_of_string uri)) ; - HelmLogger.log (`Msg (`T "OK")) ; - true - with - Http_getter_types.Key_not_found _ -> - HelmLogger.log - (`Error (`T ("URI " ^ uri ^ - " does not correspond to any object."))) ; - false - | UriManager.IllFormedUri _ -> - HelmLogger.log - (`Error (`T ("URI " ^ uri ^ " is not well-formed."))) ; - false - | e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) ; - false - in - ignore - (okb#connect#clicked - (function () -> - if check_callback () then - begin - uri := Some manual_input#text ; - window#destroy () - end - )) ; - ignore (checkb#connect#clicked (function () -> ignore (check_callback ()))) ; - ignore - (manual_input#connect#changed - (fun _ -> - if manual_input#text = "" then - begin - checkb#misc#set_sensitive false ; - okb#misc#set_sensitive false - end - else - begin - checkb#misc#set_sensitive true ; - okb#misc#set_sensitive true - end)); - ignore - (locate_input#connect#changed - (fun _ -> locateb#misc#set_sensitive (locate_input#text <> ""))) ; - ignore - (locateb#connect#clicked - (function () -> - let id = locate_input#text in - manual_input#set_text (locate_callback id) ; - locate_input#delete_text 0 (String.length id) - )) ; - window#show () ; - GtkThread.main (); - match !uri with - None -> raise NoChoice - | Some uri -> UriManager.uri_of_string ("cic:" ^ uri) -;; - -exception AmbiguousInput;; - -(* A WIDGET TO ENTER CIC TERMS *) - -module DisambiguateCallbacks = - struct - let interactive_user_uri_choice = - fun ~selection_mode ?ok ?enable_button_for_non_vars ~title ~msg ~id -> - interactive_user_uri_choice ~selection_mode ?ok - ?enable_button_for_non_vars ~title ~msg - let interactive_interpretation_choice = interactive_interpretation_choice - let input_or_locate_uri ~title ?id () = input_or_locate_uri ~title - end -;; - -module TermEditor' = ChosenTermEditor.Make (DisambiguateCallbacks);; - -(* OTHER FUNCTIONS *) - -let locate () = - let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - try - match - GToolbox.input_string ~title:"Locate" "Enter an identifier to locate:" - with - None -> raise NoChoice - | Some input -> - let uri = locate_callback input in - inputt#set_term uri - with - e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) -;; - - -exception UriAlreadyInUse;; -exception NotAUriToAConstant;; - -let new_inductive () = - let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - let output = ((rendering_window ())#output : TermViewer.proof_viewer) in - let notebook = (rendering_window ())#notebook in - - let chosen = ref false in - let inductive = ref true in - let paramsno = ref 0 in - let get_uri = ref (function _ -> assert false) in - let get_base_uri = ref (function _ -> assert false) in - let get_names = ref (function _ -> assert false) in - let get_types_and_cons = ref (function _ -> assert false) in - let get_context_and_subst = ref (function _ -> assert false) in - let window = - GWindow.window - ~width:600 ~modal:true ~position:`CENTER - ~title:"New Block of Mutual (Co)Inductive Definitions" - ~border_width:2 () in - let vbox = GPack.vbox ~packing:window#add () in - let hbox = - GPack.hbox ~border_width:0 - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let _ = - GMisc.label ~text:"Enter the URI for the new block:" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let uri_entry = - GEdit.entry ~editable:true - ~packing:(hbox#pack ~expand:true ~fill:true ~padding:5) () in - let hbox0 = - GPack.hbox ~border_width:0 - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let _ = - GMisc.label - ~text: - "Enter the number of left parameters in every arity and constructor type:" - ~packing:(hbox0#pack ~expand:false ~fill:false ~padding:5) () in - let paramsno_entry = - GEdit.entry ~editable:true ~text:"0" - ~packing:(hbox0#pack ~expand:true ~fill:true ~padding:5) () in - let hbox1 = - GPack.hbox ~border_width:0 - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let _ = - GMisc.label ~text:"Are the definitions inductive or coinductive?" - ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in - let inductiveb = - GButton.radio_button ~label:"Inductive" - ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in - let coinductiveb = - GButton.radio_button ~label:"Coinductive" - ~group:inductiveb#group - ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in - let hbox2 = - GPack.hbox ~border_width:0 - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let _ = - GMisc.label ~text:"Enter the list of the names of the types:" - ~packing:(hbox2#pack ~expand:false ~fill:false ~padding:5) () in - let names_entry = - GEdit.entry ~editable:true - ~packing:(hbox2#pack ~expand:true ~fill:true ~padding:5) () in - let hboxn = - GPack.hbox ~border_width:0 - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let okb = - GButton.button ~label:"> Next" - ~packing:(hboxn#pack ~expand:false ~fill:false ~padding:5) () in - let _ = okb#misc#set_sensitive true in - let cancelb = - GButton.button ~label:"Abort" - ~packing:(hboxn#pack ~expand:false ~fill:false ~padding:5) () in - ignore (window#connect#destroy GMain.Main.quit) ; - ignore (cancelb#connect#clicked window#destroy) ; - (* First phase *) - let rec phase1 () = - ignore - (okb#connect#clicked - (function () -> - try - let uristr = "cic:" ^ uri_entry#text in - let namesstr = names_entry#text in - let paramsno' = int_of_string (paramsno_entry#text) in - match Str.split (Str.regexp " +") namesstr with - [] -> assert false - | (he::tl) as names -> - let uri = UriManager.uri_of_string (uristr ^ "/" ^ he ^ ".ind") in - begin - try - ignore (Http_getter.resolve' uri) ; - raise UriAlreadyInUse - with Http_getter_types.Key_not_found _ -> - get_uri := (function () -> uri) ; - get_names := (function () -> names) ; - inductive := inductiveb#active ; - paramsno := paramsno' ; - phase2 () - end - with - e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) - )) - (* Second phase *) - and phase2 () = - let type_widgets = - List.map - (function name -> - let frame = - GBin.frame ~label:name - ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in - let vbox = GPack.vbox ~packing:frame#add () in - let hbox = GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false) () in - let _ = - GMisc.label ~text:("Enter its type:") - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let scrolled_window = - GBin.scrolled_window ~border_width:5 - ~packing:(vbox#pack ~expand:true ~padding:0) () in - let newinputt = - TermEditor'.term_editor - ~dbd - ~width:400 ~height:20 ~packing:scrolled_window#add - ~share_environment_with:inputt () - ~isnotempty_callback: - (function b -> - (*non_empty_type := b ;*) - okb#misc#set_sensitive true) (*(b && uri_entry#text <> ""))*) - in - let hbox = - GPack.hbox ~border_width:0 - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let _ = - GMisc.label ~text:("Enter the list of its constructors:") - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let cons_names_entry = - GEdit.entry ~editable:true - ~packing:(hbox#pack ~expand:true ~fill:true ~padding:5) () in - (newinputt,cons_names_entry) - ) (!get_names ()) - in - vbox#remove hboxn#coerce ; - let hboxn = - GPack.hbox ~border_width:0 - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let okb = - GButton.button ~label:"> Next" - ~packing:(hboxn#pack ~expand:false ~fill:false ~padding:5) () in - let cancelb = - GButton.button ~label:"Abort" - ~packing:(hboxn#pack ~expand:false ~fill:false ~padding:5) () in - ignore (cancelb#connect#clicked window#destroy) ; - ignore - (okb#connect#clicked - (function () -> - try - let names = !get_names () in - let types_and_cons = - List.map2 - (fun name (newinputt,cons_names_entry) -> - let consnamesstr = cons_names_entry#text in - let cons_names = Str.split (Str.regexp " +") consnamesstr in - let metasenv,expr,ugraph = - newinputt#get_metasenv_and_term ~context:[] ~metasenv:[] - in - match metasenv with - [] -> expr,cons_names - | _ -> raise AmbiguousInput - ) names type_widgets - in - let uri = !get_uri () in - let _ = - (* Let's see if so far the definition is well-typed *) - let params = [] in - let paramsno = 0 in - (* To test if the arities of the inductive types are well *) - (* typed, we check the inductive block definition where *) - (* no constructor is given to each type. *) - let tys = - List.map2 - (fun name (ty,cons) -> (name, !inductive, ty, [])) - names types_and_cons - in - CicTypeChecker.typecheck_mutual_inductive_defs uri - (tys,params,paramsno) - in - get_context_and_subst := - (function () -> - let i = ref 0 in - List.fold_left2 - (fun (context,subst) name (ty,_) -> - let res = - (Some (Cic.Name name, Cic.Decl ty))::context, - (Cic.MutInd (uri,!i,[]))::subst - in - incr i ; res - ) ([],[]) names types_and_cons) ; - let types_and_cons' = - List.map2 - (fun name (ty,cons) -> (name, !inductive, ty, phase3 name cons)) - names types_and_cons - in - get_types_and_cons := (function () -> types_and_cons') ; - chosen := true ; - window#destroy () - with - e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) - )) - (* Third phase *) - and phase3 name cons = - let get_cons_types = ref (function () -> assert false) in - let window2 = - GWindow.window - ~width:600 ~modal:true ~position:`CENTER - ~title:(name ^ " Constructors") - ~border_width:2 () in - let vbox = GPack.vbox ~packing:window2#add () in - let cons_type_widgets = - List.map - (function consname -> - let hbox = - GPack.hbox ~border_width:0 - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let _ = - GMisc.label ~text:("Enter the type of " ^ consname ^ ":") - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let scrolled_window = - GBin.scrolled_window ~border_width:5 - ~packing:(vbox#pack ~expand:true ~padding:0) () in - let newinputt = - TermEditor'.term_editor - ~dbd - ~width:400 ~height:20 ~packing:scrolled_window#add - ~share_environment_with:inputt () - ~isnotempty_callback: - (function b -> - (* (*non_empty_type := b ;*) - okb#misc#set_sensitive true) (*(b && uri_entry#text <> ""))*) *)()) - in - newinputt - ) cons in - let hboxn = - GPack.hbox ~border_width:0 - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let okb = - GButton.button ~label:"> Next" - ~packing:(hboxn#pack ~expand:false ~fill:false ~padding:5) () in - let _ = okb#misc#set_sensitive true in - let cancelb = - GButton.button ~label:"Abort" - ~packing:(hboxn#pack ~expand:false ~fill:false ~padding:5) () in - ignore (window2#connect#destroy GMain.Main.quit) ; - ignore (cancelb#connect#clicked window2#destroy) ; - ignore - (okb#connect#clicked - (function () -> - try - chosen := true ; - let context,subst= !get_context_and_subst () in - let cons_types = - List.map2 - (fun name inputt -> - let metasenv,expr,ugraph = - inputt#get_metasenv_and_term ~context ~metasenv:[] - in - match metasenv with - [] -> - let undebrujined_expr = - List.fold_left - (fun expr t -> CicSubstitution.subst t expr) expr subst - in - name, undebrujined_expr - | _ -> raise AmbiguousInput - ) cons cons_type_widgets - in - get_cons_types := (function () -> cons_types) ; - window2#destroy () - with - e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) - )) ; - window2#show () ; - GtkThread.main (); - let okb_pressed = !chosen in - chosen := false ; - if (not okb_pressed) then - begin - window#destroy () ; - assert false (* The control never reaches this point *) - end - else - (!get_cons_types ()) - in - phase1 () ; - (* No more phases left or Abort pressed *) - window#show () ; - GtkThread.main (); - window#destroy () ; - if !chosen then - try - let uri = !get_uri () in -(*CSC: Da finire *) - let params = [] in - let tys = !get_types_and_cons () in - let obj = Cic.InductiveDefinition(tys,params,!paramsno,[]) in - let u = - begin - try - debug_print (CicPp.ppobj obj); - CicTypeChecker.typecheck_mutual_inductive_defs uri - (tys,params,!paramsno) CicUniv.empty_ugraph - with - e -> - debug_print "Offending mutual (co)inductive type declaration:" ; - debug_print (CicPp.ppobj obj) ; - (* I think we should fail here! *) - CicUniv.empty_ugraph - end - in - (* We already know that obj is well-typed. We need to add it to the *) - (* environment in order to compute the inner-types without having to *) - (* debrujin it or having to modify lots of other functions to avoid *) - (* asking the environment for the MUTINDs we are defining now. *) - - (* u should be cleaned before adding it to the env *) - CicEnvironment.put_inductive_definition uri (obj,u) ; - save_obj uri obj ; - (* TASSI: FIXME we should save the cleaned u here *) - show_in_show_window_obj uri obj - with - e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) -;; - -let new_proof () = - let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - let output = ((rendering_window ())#output : TermViewer.proof_viewer) in - let notebook = (rendering_window ())#notebook in - - let chosen = ref false in - let get_metasenv_and_term = ref (function _ -> assert false) in - let get_uri = ref (function _ -> assert false) in - let non_empty_type = ref false in - let window = - GWindow.window - ~width:600 ~modal:true ~title:"New Proof or Definition" - ~border_width:2 () in - let vbox = GPack.vbox ~packing:window#add () in - let hbox = - GPack.hbox ~border_width:0 - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let _ = - GMisc.label ~text:"Enter the URI for the new theorem or definition:" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let uri_entry = - GEdit.entry ~editable:true - ~packing:(hbox#pack ~expand:true ~fill:true ~padding:5) () in - uri_entry#set_text dummy_uri; - uri_entry#select_region ~start:1 ~stop:(String.length dummy_uri); - let hbox1 = - GPack.hbox ~border_width:0 - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let _ = - GMisc.label ~text:"Enter the theorem or definition type:" - ~packing:(hbox1#pack ~expand:false ~fill:false ~padding:5) () in - let scrolled_window = - GBin.scrolled_window ~border_width:5 - ~packing:(vbox#pack ~expand:true ~padding:0) () in - (* the content of the scrolled_window is moved below (see comment) *) - let hbox = - GPack.hbox ~border_width:0 - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let okb = - GButton.button ~label:"Ok" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let _ = okb#misc#set_sensitive false in - let cancelb = - GButton.button ~label:"Cancel" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - (* moved here to have visibility of the ok button *) - let newinputt = - TermEditor'.term_editor - ~dbd - ~width:400 ~height:100 ~packing:scrolled_window#add - ~share_environment_with:inputt () - ~isnotempty_callback: - (function b -> - non_empty_type := b ; - okb#misc#set_sensitive (b && uri_entry#text <> "")) - in - let _ = - newinputt#set_term inputt#get_as_string ; - inputt#reset in - let _ = - uri_entry#connect#changed - (function () -> - okb#misc#set_sensitive (!non_empty_type && uri_entry#text <> "")) - in - ignore (window#connect#destroy GMain.Main.quit) ; - ignore (cancelb#connect#clicked window#destroy) ; - ignore - (okb#connect#clicked - (function () -> - chosen := true ; - try - let metasenv,parsed,ugraph = newinputt#get_metasenv_and_term [] [] in - let uristr = "cic:" ^ uri_entry#text in - let uri = UriManager.uri_of_string uristr in - if String.sub uristr (String.length uristr - 4) 4 <> ".con" then - raise NotAUriToAConstant - else - begin - try - ignore (Http_getter.resolve' uri) ; - raise UriAlreadyInUse - with Http_getter_types.Key_not_found _ -> - get_metasenv_and_term := (function () -> metasenv,parsed) ; - get_uri := (function () -> uri) ; - window#destroy () - end - with - e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) - )) ; - window#show () ; - GtkThread.main (); - if !chosen then - try - let metasenv,expr = !get_metasenv_and_term () in - let _ = CicTypeChecker.type_of_aux' metasenv [] expr in - ProofEngine.set_proof - (Some (Some (!get_uri ()), (1,[],expr)::metasenv, Cic.Meta (1,[]), expr)); - set_proof_engine_goal (Some 1) ; - refresh_goals notebook ; - refresh_proof output ; - !save_set_sensitive true ; - inputt#reset ; - ProofEngine.intros ~mk_fresh_name_callback () ; - refresh_goals notebook ; - refresh_proof output - with - InvokeTactics.RefreshSequentException e -> - HelmLogger.log - (`Error (`T ("Exception raised during the refresh of the " ^ - "sequent: " ^ Printexc.to_string e))) - | InvokeTactics.RefreshProofException e -> - HelmLogger.log - (`Error (`T ("Exception raised during the refresh of the " ^ - "proof: " ^ Printexc.to_string e))) - | e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) -;; - -let check_term_in_scratch scratch_window metasenv context expr = - try - let ty,ugraph = - CicTypeChecker.type_of_aux' metasenv context expr CicUniv.empty_ugraph - in - let expr = Cic.Cast (expr,ty) in - scratch_window#show () ; - scratch_window#set_term expr ; - scratch_window#set_context context ; - scratch_window#set_metasenv metasenv ; - scratch_window#sequent_viewer#load_sequent metasenv (111,context,expr) - with - e -> - print_endline ("? " ^ CicPp.ppterm expr) ; - raise e -;; - -let check scratch_window () = - let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - let metasenv = - match ProofEngine.get_proof () with - None -> [] - | Some (_,metasenv,_,_) -> metasenv - in - let context = - match !ProofEngine.goal with - None -> [] - | Some metano -> - let (_,canonical_context,_) = - List.find (function (m,_,_) -> m=metano) metasenv - in - canonical_context - in - try - let metasenv',expr,ugraph = - inputt#get_metasenv_and_term context metasenv - in - check_term_in_scratch scratch_window metasenv' context expr - with - e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) -;; - -let show () = - try - show_in_show_window_uri (input_or_locate_uri ~title:"Show") - with - e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) -;; - -exception NotADefinition;; - -let open_ () = - let output = ((rendering_window ())#output : TermViewer.proof_viewer) in - let notebook = (rendering_window ())#notebook in - try - let uri = input_or_locate_uri ~title:"Open" in - ignore(CicTypeChecker.typecheck uri CicUniv.empty_ugraph); - (* TASSI: typecheck mette la uri nell'env... cosa fa la open_ ?*) - let metasenv,bo,ty = - match fst(CicEnvironment.get_cooked_obj CicUniv.empty_ugraph uri ) with - Cic.Constant (_,Some bo,ty,_,_) -> [],bo,ty - | Cic.CurrentProof (_,metasenv,bo,ty,_,_) -> metasenv,bo,ty - | Cic.Constant _ - | Cic.Variable _ - | Cic.InductiveDefinition _ -> raise NotADefinition - in - ProofEngine.set_proof (Some (Some uri, metasenv, bo, ty)) ; - set_proof_engine_goal None ; - refresh_goals notebook ; - refresh_proof output ; - !save_set_sensitive true - with - InvokeTactics.RefreshSequentException e -> - HelmLogger.log - (`Error (`T ("Exception raised during the refresh of the " ^ - "sequent: " ^ Printexc.to_string e))) - | InvokeTactics.RefreshProofException e -> - HelmLogger.log - (`Error (`T ("Exception raised during the refresh of the " ^ - "proof: " ^ Printexc.to_string e))) - | e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) -;; - -let show_query_results results = - let window = - GWindow.window - ~modal:false ~title:"Query results." ~border_width:2 () in - let vbox = GPack.vbox ~packing:window#add () in - let hbox = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let lMessage = - GMisc.label - ~text:"Click on a URI to show that object" - ~packing:hbox#add () in - let scrolled_window = - GBin.scrolled_window ~border_width:10 ~height:400 ~width:600 - ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in - let clist = GList.clist ~columns:1 ~packing:scrolled_window#add () in - ignore - (List.map - (function (uri,_) -> - let n = - clist#append [uri] - in - clist#set_row ~selectable:false n - ) results - ) ; - clist#columns_autosize () ; - ignore - (clist#connect#select_row - (fun ~row ~column ~event -> - let (uristr,_) = List.nth results row in - match CicUtil.term_of_uri uristr with - | Cic.Const (uri, _) - | Cic.Var (uri, _) - | Cic.MutInd (uri, _, _) - | Cic.MutConstruct (uri, _, _, _) -> - show_in_show_window_uri uri - | _ -> assert false - ) - ) ; - window#show () -;; - -let refine_constraints (must_obj,must_rel,must_sort) = - let chosen = ref false in - let use_only = ref false in - let window = - GWindow.window - ~modal:true ~title:"Constraints refinement." - ~width:800 ~border_width:2 () in - let vbox = GPack.vbox ~packing:window#add () in - let hbox = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let lMessage = - GMisc.label - ~text: "\"Only\" constraints can be enforced or not." - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let onlyb = - GButton.toggle_button ~label:"Enforce \"only\" constraints" - ~active:false ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () - in - ignore - (onlyb#connect#toggled (function () -> use_only := onlyb#active)) ; - (* Notebook for the constraints choice *) - let notebook = - GPack.notebook ~scrollable:true - ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in - (* Rel constraints *) - let label = - GMisc.label - ~text: "Constraints on Rels" () in - let vbox' = - GPack.vbox ~packing:(notebook#append_page ~tab_label:label#coerce) - () in - let hbox = - GPack.hbox ~packing:(vbox'#pack ~expand:false ~fill:false ~padding:5) () in - let lMessage = - GMisc.label - ~text: "You can now specify the constraints on Rels." - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let expected_height = 25 * (List.length must_rel + 2) in - let height = if expected_height > 400 then 400 else expected_height in - let scrolled_window = - GBin.scrolled_window ~border_width:10 ~height ~width:600 - ~packing:(vbox'#pack ~expand:true ~fill:true ~padding:5) () in - let scrolled_vbox = GPack.vbox ~packing:scrolled_window#add_with_viewport () in - let mk_depth_button (hbox:GPack.box) d = - let mutable_ref = ref (Some d) in - let depthb = - GButton.toggle_button - ~label:("depth = " ^ string_of_int d) - ~active:true - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () - in - ignore - (depthb#connect#toggled - (function () -> - let sel_depth = if depthb#active then Some d else None in - mutable_ref := sel_depth - )) ; mutable_ref - in - let rel_constraints = - List.map - (function p -> - let hbox = - GPack.hbox - ~packing:(scrolled_vbox#pack ~expand:false ~fill:false ~padding:5) () in - let lMessage = - GMisc.label - ~text:(MQGU.text_of_position (p:>MQGT.full_position)) - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - match p with - | `MainHypothesis None - | `MainConclusion None -> p, ref None - | `MainHypothesis (Some depth') - | `MainConclusion (Some depth') -> p, mk_depth_button hbox depth' - ) must_rel in - (* Sort constraints *) - let label = - GMisc.label - ~text: "Constraints on Sorts" () in - let vbox' = - GPack.vbox ~packing:(notebook#append_page ~tab_label:label#coerce) - () in - let hbox = - GPack.hbox ~packing:(vbox'#pack ~expand:false ~fill:false ~padding:5) () in - let lMessage = - GMisc.label - ~text: "You can now specify the constraints on Sorts." - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let expected_height = 25 * (List.length must_sort + 2) in - let height = if expected_height > 400 then 400 else expected_height in - let scrolled_window = - GBin.scrolled_window ~border_width:10 ~height ~width:600 - ~packing:(vbox'#pack ~expand:true ~fill:true ~padding:5) () in - let scrolled_vbox = GPack.vbox ~packing:scrolled_window#add_with_viewport () in - let sort_constraints = - List.map - (function (p, sort) -> - let hbox = - GPack.hbox - ~packing:(scrolled_vbox#pack ~expand:false ~fill:false ~padding:5) () in - let lMessage = - GMisc.label - ~text:(MQGU.text_of_sort sort ^ " " ^ MQGU.text_of_position (p:>MQGT.full_position)) - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - match p with - | `MainHypothesis None - | `MainConclusion None -> p, ref None, sort - | `MainHypothesis (Some depth') - | `MainConclusion (Some depth') -> p, mk_depth_button hbox depth', sort - ) must_sort in - (* Obj constraints *) - let label = - GMisc.label - ~text: "Constraints on constants" () in - let vbox' = - GPack.vbox ~packing:(notebook#append_page ~tab_label:label#coerce) - () in - let hbox = - GPack.hbox ~packing:(vbox'#pack ~expand:false ~fill:false ~padding:5) () in - let lMessage = - GMisc.label - ~text: "You can now specify the constraints on constants." - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let expected_height = 25 * (List.length must_obj + 2) in - let height = if expected_height > 400 then 400 else expected_height in - let scrolled_window = - GBin.scrolled_window ~border_width:10 ~height ~width:600 - ~packing:(vbox'#pack ~expand:true ~fill:true ~padding:5) () in - let scrolled_vbox = GPack.vbox ~packing:scrolled_window#add_with_viewport () in - let obj_constraints = - List.map - (function (p, uri) -> - let hbox = - GPack.hbox - ~packing:(scrolled_vbox#pack ~expand:false ~fill:false ~padding:5) () in - let lMessage = - GMisc.label - ~text:(uri ^ " " ^ (MQGU.text_of_position p)) - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - match p with - | `InBody - | `InHypothesis - | `InConclusion - | `MainHypothesis None - | `MainConclusion None -> p, ref None, uri - | `MainHypothesis (Some depth') - | `MainConclusion (Some depth') -> p, mk_depth_button hbox depth', uri - ) must_obj in - (* Confirm/abort buttons *) - let hbox = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let okb = - GButton.button ~label:"Ok" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let cancelb = - GButton.button ~label:"Abort" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () - in - ignore (window#connect#destroy GMain.Main.quit) ; - ignore (cancelb#connect#clicked window#destroy) ; - ignore - (okb#connect#clicked (function () -> chosen := true ; window#destroy ())); - window#set_position `CENTER ; - window#show () ; - GtkThread.main (); - if !chosen then - let chosen_must_rel = - List.map - (function (position, ref_depth) -> MQGU.set_main_position position !ref_depth) - rel_constraints - in - let chosen_must_sort = - List.map - (function (position, ref_depth, sort) -> - MQGU.set_main_position position !ref_depth,sort) - sort_constraints - in - let chosen_must_obj = - List.map - (function (position, ref_depth, uri) -> MQGU.set_full_position position !ref_depth, uri) - obj_constraints - in - (chosen_must_obj,chosen_must_rel,chosen_must_sort), - (if !use_only then -(*CSC: ???????????????????????? I assume that must and only are the same... *) - Some chosen_must_obj,Some chosen_must_rel,Some chosen_must_sort - else - None,None,None - ) - else - raise NoChoice -;; - -let completeSearchPattern () = - let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - try - let metasenv,expr,ugraph = - inputt#get_metasenv_and_term ~context:[] ~metasenv:[] in - let must = CGSearchPattern.get_constraints expr in - let must',only = refine_constraints must in - let query = - MQG.query_of_constraints (Some CGSearchPattern.universe) must' only - in - let results = MQI.execute mqi_handle query in - show_query_results results - with - e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) -;; - -let insertQuery () = - try - let chosen = ref None in - let window = - GWindow.window - ~modal:true ~title:"Insert Query (Experts Only)" ~border_width:2 () in - let vbox = GPack.vbox ~packing:window#add () in - let label = - GMisc.label ~text:"Insert Query. For Experts Only." - ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let scrolled_window = - GBin.scrolled_window ~border_width:10 ~height:400 ~width:600 - ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in - let input = GText.view ~editable:true - ~packing:scrolled_window#add () in - let hbox = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let okb = - GButton.button ~label:"Ok" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let loadb = - GButton.button ~label:"Load from file..." - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let cancelb = - GButton.button ~label:"Abort" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - ignore (window#connect#destroy GMain.Main.quit) ; - ignore (cancelb#connect#clicked window#destroy) ; - ignore - (okb#connect#clicked - (function () -> - chosen := Some (input#buffer#get_text ()) ; window#destroy ())) ; - ignore - (loadb#connect#clicked - (function () -> - match - GToolbox.select_file ~title:"Select Query File" () - with - None -> () - | Some filename -> - let inch = open_in filename in - let rec read_file () = - try - let line = input_line inch in - line ^ "\n" ^ read_file () - with - End_of_file -> "" - in - let text = read_file () in - input#buffer#delete input#buffer#start_iter input#buffer#end_iter ; - ignore (input#buffer#insert text))) ; - window#set_position `CENTER ; - window#show () ; - GtkThread.main (); - match !chosen with - None -> () - | Some q -> - let results = - MQI.execute mqi_handle (MQueryUtil.query_of_text (Lexing.from_string q)) - in - show_query_results results - with - e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) -;; - -let choose_must list_of_must only = - let chosen = ref None in - let user_constraints = ref [] in - let window = - GWindow.window - ~modal:true ~title:"Query refinement." ~border_width:2 () in - let vbox = GPack.vbox ~packing:window#add () in - let hbox = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let lMessage = - GMisc.label - ~text: - ("You can now specify the genericity of the query. " ^ - "The more generic the slower.") - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let hbox = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let lMessage = - GMisc.label - ~text: - "Suggestion: start with faster queries before moving to more generic ones." - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let notebook = - GPack.notebook ~scrollable:true - ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in - let _ = - let page = ref 0 in - let last = List.length list_of_must in - List.map - (function must -> - incr page ; - let label = - GMisc.label ~text: - (if !page = 1 then "More generic" else - if !page = last then "More precise" else " ") () in - let expected_height = 25 * (List.length must + 2) in - let height = if expected_height > 400 then 400 else expected_height in - let scrolled_window = - GBin.scrolled_window ~border_width:10 ~height ~width:600 - ~packing:(notebook#append_page ~tab_label:label#coerce) () in - let clist = - GList.clist ~columns:2 ~packing:scrolled_window#add - ~titles:["URI" ; "Position"] () - in - ignore - (List.map - (function (position, uri) -> - let n = - clist#append - [uri; MQGUtil.text_of_position position] - in - clist#set_row ~selectable:false n - ) must - ) ; - clist#columns_autosize () - ) list_of_must in - let _ = - let label = GMisc.label ~text:"User provided" () in - let vbox = - GPack.vbox ~packing:(notebook#append_page ~tab_label:label#coerce) () in - let hbox = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let lMessage = - GMisc.label - ~text:"Select the constraints that must be satisfied and press OK." - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let expected_height = 25 * (List.length only + 2) in - let height = if expected_height > 400 then 400 else expected_height in - let scrolled_window = - GBin.scrolled_window ~border_width:10 ~height ~width:600 - ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in - let clist = - GList.clist ~columns:2 ~packing:scrolled_window#add - ~selection_mode:`MULTIPLE - ~titles:["URI" ; "Position"] () - in - ignore - (List.map - (function (position, uri) -> - let n = - clist#append - [uri; MQGUtil.text_of_position position] - in - clist#set_row ~selectable:true n - ) only - ) ; - clist#columns_autosize () ; - ignore - (clist#connect#select_row - (fun ~row ~column ~event -> - user_constraints := (List.nth only row)::!user_constraints)) ; - ignore - (clist#connect#unselect_row - (fun ~row ~column ~event -> - user_constraints := - List.filter - (function uri -> uri != (List.nth only row)) !user_constraints)) ; - in - let hbox = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let okb = - GButton.button ~label:"Ok" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let cancelb = - GButton.button ~label:"Abort" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - (* actions *) - ignore (window#connect#destroy GMain.Main.quit) ; - ignore (cancelb#connect#clicked window#destroy) ; - ignore - (okb#connect#clicked - (function () -> chosen := Some notebook#current_page ; window#destroy ())) ; - window#set_position `CENTER ; - window#show () ; - GtkThread.main (); - match !chosen with - None -> raise NoChoice - | Some n -> - if n = List.length list_of_must then - (* user provided constraints *) - !user_constraints - else - List.nth list_of_must n -;; - -let searchPattern () = - let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - try - let proof = - match ProofEngine.get_proof () with - None -> assert false - | Some proof -> proof - in - match !ProofEngine.goal with - | None -> () - | Some metano -> - let uris' = List.map fst (MetadataQuery.hint ~dbd (proof, metano)) in - let uri' = - user_uri_choice ~title:"Ambiguous input." - ~msg: "Many lemmas can be successfully applied. Please, choose one:" - uris' - in - inputt#set_term uri' ; - InvokeTactics'.apply () - with - e -> - HelmLogger.log - (`Error (`T (Printexc.to_string e))) -;; - -let choose_selection mmlwidget (element : Gdome.element option) = - let module G = Gdome in - let rec aux element = - if element#hasAttributeNS - ~namespaceURI:Misc.helm_ns - ~localName:(G.domString "xref") - then - mmlwidget#set_selection (Some element) - else - try - match element#get_parentNode with - None -> assert false - (*CSC: OCAML DIVERGES! - | Some p -> aux (new G.element_of_node p) - *) - | Some p -> aux (new Gdome.element_of_node p) - with - GdomeInit.DOMCastException _ -> - debug_print - "******* trying to select above the document root ********" - in - match element with - Some x -> aux x - | None -> mmlwidget#set_selection None -;; - -(* STUFF TO BUILD THE GTK INTERFACE *) - -(* Stuff for the widget settings *) - -(* -let export_to_postscript output = - let lastdir = ref (Unix.getcwd ()) in - function () -> - match - GToolbox.select_file ~title:"Export to PostScript" - ~dir:lastdir ~filename:"screenshot.ps" () - with - None -> () - | Some filename -> - (output :> GMathView.math_view)#export_to_postscript - ~filename:filename (); -;; -*) - -(* -let activate_t1 output button_set_anti_aliasing - button_set_transparency export_to_postscript_menu_item - button_t1 () -= - let is_set = button_t1#active in - output#set_font_manager_type - ~fm_type:(if is_set then `font_manager_t1 else `font_manager_gtk) ; - if is_set then - begin - button_set_anti_aliasing#misc#set_sensitive true ; - button_set_transparency#misc#set_sensitive true ; - export_to_postscript_menu_item#misc#set_sensitive true ; - end - else - begin - button_set_anti_aliasing#misc#set_sensitive false ; - button_set_transparency#misc#set_sensitive false ; - export_to_postscript_menu_item#misc#set_sensitive false ; - end -;; - -let set_anti_aliasing output button_set_anti_aliasing () = - output#set_anti_aliasing button_set_anti_aliasing#active -;; - -let set_transparency output button_set_transparency () = - output#set_transparency button_set_transparency#active -;; -*) - -let changefont output font_size_spinb () = - output#set_font_size font_size_spinb#value_as_int -;; - -let set_log_verbosity output log_verbosity_spinb () = - output#set_log_verbosity log_verbosity_spinb#value_as_int -;; - -class settings_window output sw - export_to_postscript_menu_item selection_changed_callback -= - let settings_window = GWindow.window ~title:"GtkMathView settings" () in - let vbox = - GPack.vbox ~packing:settings_window#add () in - let table = - GPack.table - ~rows:1 ~columns:3 ~homogeneous:false ~row_spacings:5 ~col_spacings:5 - ~border_width:5 ~packing:vbox#add () in - let button_t1 = - GButton.toggle_button ~label:"activate t1 fonts" - ~packing:(table#attach ~left:0 ~top:0) () in - let button_set_anti_aliasing = - GButton.toggle_button ~label:"set_anti_aliasing" - ~packing:(table#attach ~left:0 ~top:1) () in - let button_set_transparency = - GButton.toggle_button ~label:"set_transparency" - ~packing:(table#attach ~left:2 ~top:1) () in - let table = - GPack.table - ~rows:2 ~columns:2 ~homogeneous:false ~row_spacings:5 ~col_spacings:5 - ~border_width:5 ~packing:vbox#add () in - let font_size_label = - GMisc.label ~text:"font size:" - ~packing:(table#attach ~left:0 ~top:0 ~expand:`NONE) () in - let font_size_spinb = - let sadj = - GData.adjustment ~value:(float_of_int output#get_font_size) - ~lower:5.0 ~upper:50.0 ~step_incr:1.0 () - in - GEdit.spin_button - ~adjustment:sadj ~packing:(table#attach ~left:1 ~top:0 ~fill:`NONE) () in - let log_verbosity_label = - GMisc.label ~text:"log verbosity:" - ~packing:(table#attach ~left:0 ~top:1) () in - let log_verbosity_spinb = - let sadj = - GData.adjustment ~value:0.0 ~lower:0.0 ~upper:3.0 ~step_incr:1.0 () - in - GEdit.spin_button - ~adjustment:sadj ~packing:(table#attach ~left:1 ~top:1) () in - let hbox = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let closeb = - GButton.button ~label:"Close" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in -object(self) - method show = settings_window#show - initializer - button_set_anti_aliasing#misc#set_sensitive false ; - button_set_transparency#misc#set_sensitive false ; - (* Signals connection *) - (* - ignore(button_t1#connect#clicked - (activate_t1 output button_set_anti_aliasing - button_set_transparency export_to_postscript_menu_item button_t1)) ; - *) - ignore(font_size_spinb#connect#changed (changefont output font_size_spinb)) ; - (* - ignore(button_set_anti_aliasing#connect#toggled - (set_anti_aliasing output button_set_anti_aliasing)); - ignore(button_set_transparency#connect#toggled - (set_transparency output button_set_transparency)) ; - *) - ignore(log_verbosity_spinb#connect#changed - (set_log_verbosity output log_verbosity_spinb)) ; - ignore(closeb#connect#clicked settings_window#misc#hide) -end;; - -(* Scratch window *) - -class scratch_window = - let window = - GWindow.window - ~title:"MathML viewer" - ~border_width:2 () in - let vbox = - GPack.vbox ~packing:window#add () in - let hbox = - GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in - let whdb = - GButton.button ~label:"Whd" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let reduceb = - GButton.button ~label:"Reduce" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let simplb = - GButton.button ~label:"Simpl" - ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in - let scrolled_window = - GBin.scrolled_window ~border_width:10 - ~packing:(vbox#pack ~expand:true ~padding:5) () in - let sequent_viewer = - TermViewer.sequent_viewer - ~mml_of_cic_sequent:ApplyTransformation.mml_of_cic_sequent - ~packing:(scrolled_window#add) ~width:400 ~height:280 () in -object(self) - val mutable term = Cic.Rel 1 (* dummy value *) - val mutable context = ([] : Cic.context) (* dummy value *) - val mutable metasenv = ([] : Cic.metasenv) (* dummy value *) - method sequent_viewer = sequent_viewer - method show () = window#misc#hide () ; window#show () - method term = term - method set_term t = term <- t - method context = context - method set_context t = context <- t - method metasenv = metasenv - method set_metasenv t = metasenv <- t - initializer - ignore - (sequent_viewer#connect#selection_changed (choose_selection sequent_viewer)); - ignore(window#event#connect#delete (fun _ -> window#misc#hide () ; true )) ; - ignore(whdb#connect#clicked InvokeTactics'.whd_in_scratch) ; - ignore(reduceb#connect#clicked InvokeTactics'.reduce_in_scratch) ; - ignore(simplb#connect#clicked InvokeTactics'.simpl_in_scratch) -end;; - -let open_contextual_menu_for_selected_terms mmlwidget infos = - let button = GdkEvent.Button.button infos in - let terms_selected = List.length mmlwidget#get_selections > 0 in - if button = 3 then - begin - let time = GdkEvent.Button.time infos in - let menu = GMenu.menu () in - let f = new GMenu.factory menu in - let whd_menu_item = - f#add_item "Whd" ~key:GdkKeysyms._W ~callback:InvokeTactics'.whd in - let reduce_menu_item = - f#add_item "Reduce" ~key:GdkKeysyms._R ~callback:InvokeTactics'.reduce in - let simpl_menu_item = - f#add_item "Simpl" ~key:GdkKeysyms._S ~callback:InvokeTactics'.simpl in - let _ = f#add_separator () in - let generalize_menu_item = - f#add_item "Generalize" - ~key:GdkKeysyms._G ~callback:InvokeTactics'.generalize in - let _ = f#add_separator () in - let clear_menu_item = - f#add_item "Clear" ~key:GdkKeysyms._C ~callback:InvokeTactics'.clear in - let clearbody_menu_item = - f#add_item "ClearBody" - ~key:GdkKeysyms._B ~callback:InvokeTactics'.clearbody - in - whd_menu_item#misc#set_sensitive terms_selected ; - reduce_menu_item#misc#set_sensitive terms_selected ; - simpl_menu_item#misc#set_sensitive terms_selected ; - generalize_menu_item#misc#set_sensitive terms_selected ; - clear_menu_item#misc#set_sensitive terms_selected ; - clearbody_menu_item#misc#set_sensitive terms_selected ; - menu#popup ~button ~time - end ; - true -;; - -class page () = - let vbox1 = GPack.vbox () in -object(self) - val mutable proofw_ref = None - val mutable compute_ref = None - method proofw = - Lazy.force self#compute ; - match proofw_ref with - None -> assert false - | Some proofw -> proofw - method content = vbox1 - method compute = - match compute_ref with - None -> assert false - | Some compute -> compute - initializer - compute_ref <- - Some (lazy ( - let scrolled_window1 = - GBin.scrolled_window ~border_width:10 - ~packing:(vbox1#pack ~expand:true ~padding:5) () in - let proofw = - TermViewer.sequent_viewer - ~mml_of_cic_sequent:ApplyTransformation.mml_of_cic_sequent - ~width:400 ~height:275 ~packing:(scrolled_window1#add) () in - let _ = proofw_ref <- Some proofw in - let hbox3 = - GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in - let ringb = - GButton.button ~label:"Ring" - ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in - let fourierb = - GButton.button ~label:"Fourier" - ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in - let reflexivityb = - GButton.button ~label:"Reflexivity" - ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in - let symmetryb = - GButton.button ~label:"Symmetry" - ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in - let assumptionb = - GButton.button ~label:"Assumption" - ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in - let contradictionb = - GButton.button ~label:"Contradiction" - ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in - let autob= - GButton.button ~label:"Auto" - ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in - let hbox4 = - GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in - let existsb = - GButton.button ~label:"Exists" - ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in - let splitb = - GButton.button ~label:"Split" - ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in - let leftb = - GButton.button ~label:"Left" - ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in - let rightb = - GButton.button ~label:"Right" - ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in - let searchpatternb = - GButton.button ~label:"SearchPattern_Apply" - ~packing:(hbox4#pack ~expand:false ~fill:false ~padding:5) () in - let hbox5 = - GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in - let exactb = - GButton.button ~label:"Exact" - ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in - let introsb = - GButton.button ~label:"Intros" - ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in - let applyb = - GButton.button ~label:"Apply" - ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in - let elimintrossimplb = - GButton.button ~label:"ElimIntrosSimpl" - ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in - let elimtypeb = - GButton.button ~label:"ElimType" - ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in - let foldwhdb = - GButton.button ~label:"Fold_whd" - ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in - let foldreduceb = - GButton.button ~label:"Fold_reduce" - ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in - let hbox6 = - GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in - let foldsimplb = - GButton.button ~label:"Fold_simpl" - ~packing:(hbox6#pack ~expand:false ~fill:false ~padding:5) () in - let cutb = - GButton.button ~label:"Cut" - ~packing:(hbox6#pack ~expand:false ~fill:false ~padding:5) () in - let changeb = - GButton.button ~label:"Change" - ~packing:(hbox6#pack ~expand:false ~fill:false ~padding:5) () in - let letinb = - GButton.button ~label:"Let ... In" - ~packing:(hbox6#pack ~expand:false ~fill:false ~padding:5) () in - let rewritesimplb = - GButton.button ~label:"RewriteSimpl ->" - ~packing:(hbox6#pack ~expand:false ~fill:false ~padding:5) () in - let rewritebacksimplb = - GButton.button ~label:"RewriteSimpl <-" - ~packing:(hbox6#pack ~expand:false ~fill:false ~padding:5) () in - let hbox7 = - GPack.hbox ~packing:(vbox1#pack ~expand:false ~fill:false ~padding:5) () in - let absurdb = - GButton.button ~label:"Absurd" - ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in - let decomposeb = - GButton.button ~label:"Decompose" - ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in - let transitivityb = - GButton.button ~label:"Transitivity" - ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in - let replaceb = - GButton.button ~label:"Replace" - ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in - let injectionb = - GButton.button ~label:"Injection" - ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in - let discriminateb = - GButton.button ~label:"Discriminate" - ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in -(* Zack: spostare in una toolbar - let generalizeb = - GButton.button ~label:"Generalize" - ~packing:(hbox7#pack ~expand:false ~fill:false ~padding:5) () in - let clearbodyb = - GButton.button ~label:"ClearBody" - ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in - let clearb = - GButton.button ~label:"Clear" - ~packing:(hbox5#pack ~expand:false ~fill:false ~padding:5) () in - let whdb = - GButton.button ~label:"Whd" - ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in - let reduceb = - GButton.button ~label:"Reduce" - ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in - let simplb = - GButton.button ~label:"Simpl" - ~packing:(hbox3#pack ~expand:false ~fill:false ~padding:5) () in -*) - - ignore(exactb#connect#clicked InvokeTactics'.exact) ; - ignore(applyb#connect#clicked InvokeTactics'.apply) ; - ignore(elimintrossimplb#connect#clicked InvokeTactics'.elimintrossimpl) ; - ignore(elimtypeb#connect#clicked InvokeTactics'.elimtype) ; - ignore(foldwhdb#connect#clicked InvokeTactics'.fold_whd) ; - ignore(foldreduceb#connect#clicked InvokeTactics'.fold_reduce) ; - ignore(foldsimplb#connect#clicked InvokeTactics'.fold_simpl) ; - ignore(cutb#connect#clicked InvokeTactics'.cut) ; - ignore(changeb#connect#clicked InvokeTactics'.change) ; - ignore(letinb#connect#clicked InvokeTactics'.letin) ; - ignore(ringb#connect#clicked InvokeTactics'.ring) ; - ignore(fourierb#connect#clicked InvokeTactics'.fourier) ; - ignore(rewritesimplb#connect#clicked InvokeTactics'.rewritesimpl) ; - ignore(rewritebacksimplb#connect#clicked InvokeTactics'.rewritebacksimpl) ; - ignore(replaceb#connect#clicked InvokeTactics'.replace) ; - ignore(reflexivityb#connect#clicked InvokeTactics'.reflexivity) ; - ignore(symmetryb#connect#clicked InvokeTactics'.symmetry) ; - ignore(transitivityb#connect#clicked InvokeTactics'.transitivity) ; - ignore(existsb#connect#clicked InvokeTactics'.exists) ; - ignore(splitb#connect#clicked InvokeTactics'.split) ; - ignore(leftb#connect#clicked InvokeTactics'.left) ; - ignore(rightb#connect#clicked InvokeTactics'.right) ; - ignore(assumptionb#connect#clicked InvokeTactics'.assumption) ; - ignore(absurdb#connect#clicked InvokeTactics'.absurd) ; - ignore(contradictionb#connect#clicked InvokeTactics'.contradiction) ; - ignore(introsb#connect#clicked InvokeTactics'.intros) ; - ignore(decomposeb#connect#clicked InvokeTactics'.decompose) ; - ignore(searchpatternb#connect#clicked searchPattern) ; - ignore(injectionb#connect#clicked InvokeTactics'.injection) ; - ignore(discriminateb#connect#clicked InvokeTactics'.discriminate) ; - ignore(autob#connect#clicked InvokeTactics'.auto) ; -(* Zack: spostare in una toolbar - ignore(whdb#connect#clicked whd) ; - ignore(reduceb#connect#clicked reduce) ; - ignore(simplb#connect#clicked simpl) ; - ignore(clearbodyb#connect#clicked clearbody) ; - ignore(clearb#connect#clicked clear) ; - ignore(generalizeb#connect#clicked generalize) ; -*) - ignore(proofw#connect#selection_changed (choose_selection proofw)) ; - ignore - ((new GObj.event_ops proofw#as_widget)#connect#button_press - (open_contextual_menu_for_selected_terms proofw)) ; - )) -end -;; - -class empty_page = - let vbox1 = GPack.vbox () in - let scrolled_window1 = - GBin.scrolled_window ~border_width:10 - ~packing:(vbox1#pack ~expand:true ~padding:5) () in - let proofw = - TermViewer.sequent_viewer - ~mml_of_cic_sequent:ApplyTransformation.mml_of_cic_sequent - ~width:400 ~height:275 ~packing:(scrolled_window1#add) () in -object(self) - method proofw = (assert false : TermViewer.sequent_viewer) - method content = vbox1 - method compute = (assert false : unit) -end -;; - -let empty_page = new empty_page;; - -class notebook = -object(self) - val notebook = GPack.notebook () - val pages = ref [] - val mutable skip_switch_page_event = false - val mutable empty = true - method notebook = notebook - method add_page n = - let new_page = new page () in - empty <- false ; - pages := !pages @ [n,lazy (setgoal n),new_page] ; - notebook#append_page - ~tab_label:((GMisc.label ~text:("?" ^ string_of_int n) ())#coerce) - new_page#content#coerce - method remove_all_pages ~skip_switch_page_event:skip = - if empty then - notebook#remove_page 0 (* let's remove the empty page *) - else - List.iter (function _ -> notebook#remove_page 0) !pages ; - pages := [] ; - skip_switch_page_event <- skip - method set_current_page ~may_skip_switch_page_event n = - let (_,_,page) = List.find (function (m,_,_) -> m=n) !pages in - let new_page = notebook#page_num page#content#coerce in - if may_skip_switch_page_event && new_page <> notebook#current_page then - skip_switch_page_event <- true ; - notebook#goto_page new_page - method set_empty_page = - empty <- true ; - pages := [] ; - notebook#append_page - ~tab_label:((GMisc.label ~text:"No proof in progress" ())#coerce) - empty_page#content#coerce - method proofw = - let (_,_,page) = List.nth !pages notebook#current_page in - page#proofw - initializer - ignore - (notebook#connect#switch_page - (function i -> - let skip = skip_switch_page_event in - skip_switch_page_event <- false ; - if not skip then - try - let (metano,setgoal,page) = List.nth !pages i in - set_proof_engine_goal (Some metano) ; - Lazy.force (page#compute) ; - Lazy.force setgoal; - if notify_hbugs_on_goal_change then - Hbugs.notify () - with _ -> () - )) -end -;; - -let dump_environment () = - try - let oc = open_out (Helm_registry.get "gtoplevel.environment_file") in - HelmLogger.log (`Msg (`T "Dumping environment ...")); - CicEnvironment.dump_to_channel oc; - HelmLogger.log (`Msg (`T "... done!")) ; - close_out oc - with exc -> - HelmLogger.log - (`Error (`T (Printf.sprintf "Dump failure, uncaught exception:%s" - (Printexc.to_string exc)))) -;; -let restore_environment () = - try - let ic = open_in (Helm_registry.get "gtoplevel.environment_file") in - HelmLogger.log (`Msg (`T "Restoring environment ... ")); - CicEnvironment.restore_from_channel ic; - HelmLogger.log (`Msg (`T "... done!")); - close_in ic - with exc -> - HelmLogger.log - (`Error (`T (Printf.sprintf "Restore failure, uncaught exception:%s" - (Printexc.to_string exc)))) -;; - -(* Main window *) - -class rendering_window output (notebook : notebook) = - let scratch_window = new scratch_window in - let window = - GWindow.window - ~title:"gTopLevel - Helm's Proof Assistant" - ~border_width:0 ~allow_shrink:false () in - let vbox_for_menu = GPack.vbox ~packing:window#add () in - (* menus *) - let handle_box = GBin.handle_box ~border_width:2 - ~packing:(vbox_for_menu#pack ~padding:0) () in - let menubar = GMenu.menu_bar ~packing:handle_box#add () in - let factory0 = new GMenu.factory menubar in - let accel_group = factory0#accel_group in - (* file menu *) - let file_menu = factory0#add_submenu "File" in - let factory1 = new GMenu.factory file_menu ~accel_group in - (* let export_to_postscript_menu_item = *) - let _ = - begin - let _ = - factory1#add_item "New Block of (Co)Inductive Definitions..." - ~key:GdkKeysyms._B ~callback:new_inductive - in - let _ = - factory1#add_item "New Proof or Definition..." ~key:GdkKeysyms._N - ~callback:new_proof - in - let reopen_menu_item = - factory1#add_item "Reopen a Finished Proof..." ~key:GdkKeysyms._R - ~callback:open_ - in - let qed_menu_item = - factory1#add_item "Qed" ~key:GdkKeysyms._E ~callback:qed in - ignore (factory1#add_separator ()) ; - ignore - (factory1#add_item "Load Unfinished Proof..." ~key:GdkKeysyms._L - ~callback:load_unfinished_proof) ; - let save_menu_item = - factory1#add_item "Save Unfinished Proof" ~key:GdkKeysyms._S - ~callback:save_unfinished_proof - in - ignore (factory1#add_separator ()) ; - ignore (factory1#add_item "Clear Environment" ~callback:CicEnvironment.empty); - ignore (factory1#add_item "Dump Environment" ~callback:dump_environment); - ignore - (factory1#add_item "Restore Environment" ~callback:restore_environment); - ignore - (save_set_sensitive := function b -> save_menu_item#misc#set_sensitive b); - ignore (!save_set_sensitive false); - ignore (qed_set_sensitive:=function b -> qed_menu_item#misc#set_sensitive b); - ignore (!qed_set_sensitive false); - ignore (factory1#add_separator ()) ; - (* - let export_to_postscript_menu_item = - factory1#add_item "Export to PostScript..." - ~callback:(export_to_postscript output) in - *) - ignore (factory1#add_separator ()) ; - ignore - (factory1#add_item "Exit" ~key:GdkKeysyms._Q ~callback:GMain.Main.quit) (*; - export_to_postscript_menu_item *) - end in - (* edit menu *) - let edit_menu = factory0#add_submenu "Edit Current Proof" in - let factory2 = new GMenu.factory edit_menu ~accel_group in - let focus_and_proveit_set_sensitive = ref (function _ -> assert false) in - let proveit_menu_item = - factory2#add_item "Prove It" ~key:GdkKeysyms._I - ~callback:(function () -> proveit ();!focus_and_proveit_set_sensitive false) - in - let focus_menu_item = - factory2#add_item "Focus" ~key:GdkKeysyms._F - ~callback:(function () -> focus () ; !focus_and_proveit_set_sensitive false) - in - let _ = - focus_and_proveit_set_sensitive := - function b -> - proveit_menu_item#misc#set_sensitive b ; - focus_menu_item#misc#set_sensitive b - in - let _ = !focus_and_proveit_set_sensitive false in - (* edit term menu *) - let edit_term_menu = factory0#add_submenu "Edit Term" in - let factory5 = new GMenu.factory edit_term_menu ~accel_group in - let check_menu_item = - factory5#add_item "Check Term" ~key:GdkKeysyms._C - ~callback:(check scratch_window) in - let _ = check_menu_item#misc#set_sensitive false in - (* search menu *) - let search_menu = factory0#add_submenu "Search" in - let factory4 = new GMenu.factory search_menu ~accel_group in - let _ = - factory4#add_item "Locate..." ~key:GdkKeysyms._T - ~callback:locate in - let searchPattern_menu_item = - factory4#add_item "SearchPattern..." ~key:GdkKeysyms._D - ~callback:completeSearchPattern in - let _ = searchPattern_menu_item#misc#set_sensitive false in - let show_menu_item = - factory4#add_item "Show..." ~key:GdkKeysyms._H ~callback:show - in - let insert_query_item = - factory4#add_item "Insert Query (Experts Only)..." ~key:GdkKeysyms._Y - ~callback:insertQuery in - (* hbugs menu *) - let hbugs_menu = factory0#add_submenu "HBugs" in - let factory6 = new GMenu.factory hbugs_menu ~accel_group in - let _ = - factory6#add_check_item - ~active:false ~key:GdkKeysyms._F5 ~callback:Hbugs.toggle "HBugs enabled" - in - let _ = - factory6#add_item ~key:GdkKeysyms._Return ~callback:Hbugs.notify - "(Re)Submit status!" - in - let _ = factory6#add_separator () in - let _ = - factory6#add_item ~callback:Hbugs.start_web_services "Start Web Services" - in - let _ = - factory6#add_item ~callback:Hbugs.stop_web_services "Stop Web Services" - in - (* settings menu *) - let settings_menu = factory0#add_submenu "Settings" in - let factory3 = new GMenu.factory settings_menu ~accel_group in - let _ = - factory3#add_item "Edit Aliases..." ~key:GdkKeysyms._A - ~callback:edit_aliases in - let _ = - factory3#add_item "Clear Aliases" ~key:GdkKeysyms._K - ~callback:clear_aliases in - let autoitem = - factory3#add_check_item "Auto disambiguation" - ~callback:(fun checked -> auto_disambiguation := checked) in - let _ = factory3#add_separator () in - let _ = - factory3#add_item "MathML Widget Preferences..." ~key:GdkKeysyms._P - ~callback:(function _ -> (settings_window ())#show ()) in - let _ = factory3#add_separator () in - let _ = - factory3#add_item "Reload Stylesheets" - ~callback: - (function _ -> - if ProofEngine.get_proof () <> None then - try - refresh_goals notebook ; - refresh_proof output - with - InvokeTactics.RefreshSequentException e -> - HelmLogger.log - (`Error (`T ("An error occurred while refreshing the " ^ - "sequent: " ^ Printexc.to_string e))) ; - (*notebook#remove_all_pages ~skip_switch_page_event:false ;*) - notebook#set_empty_page - | InvokeTactics.RefreshProofException e -> - HelmLogger.log - (`Error (`T ("An error occurred while refreshing the proof: " ^ Printexc.to_string e))) ; - output#unload - ) in - (* accel group *) - let _ = window#add_accel_group accel_group in - (* end of menus *) - let hbox0 = - GPack.hbox - ~packing:(vbox_for_menu#pack ~expand:true ~fill:true ~padding:5) () in - let vbox = - GPack.vbox ~packing:(hbox0#pack ~expand:true ~fill:true ~padding:5) () in - let scrolled_window0 = - GBin.scrolled_window ~border_width:10 - ~packing:(vbox#pack ~expand:true ~padding:5) () in - let _ = scrolled_window0#add output#coerce in - let frame = - GBin.frame ~label:"Insert Term" - ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in - let scrolled_window1 = - GBin.scrolled_window ~border_width:5 - ~packing:frame#add () in - let inputt = - TermEditor'.term_editor - ~dbd - ~width:400 ~height:100 ~packing:scrolled_window1#add () - ~isnotempty_callback: - (function b -> - check_menu_item#misc#set_sensitive b ; - searchPattern_menu_item#misc#set_sensitive b) in - let vboxl = - GPack.vbox ~packing:(hbox0#pack ~expand:true ~fill:true ~padding:5) () in - let _ = - vboxl#pack ~expand:true ~fill:true ~padding:5 notebook#notebook#coerce in - let frame = - GBin.frame ~shadow_type:`IN ~packing:(vboxl#pack ~expand:true ~padding:5) () - in - let _ = - new HelmGtkLogger.html_logger - ~width:400 ~height: 100 ~show:true ~packing:frame#add () - in -object - method inputt = inputt - method output = (output : TermViewer.proof_viewer) - method scratch_window = scratch_window - method notebook = notebook - method show = window#show - method set_auto_disambiguation set = autoitem#set_active set - initializer - notebook#set_empty_page ; - (*export_to_postscript_menu_item#misc#set_sensitive false ;*) - check_term := (check_term_in_scratch scratch_window) ; - - (* signal handlers here *) - ignore(output#connect#selection_changed - (function elem -> - choose_selection output elem ; - !focus_and_proveit_set_sensitive true - )) ; - ignore (output#connect#click (show_in_show_window_callback output)) ; - let settings_window = new settings_window output scrolled_window0 - (*export_to_postscript_menu_item*)() (choose_selection output) in - set_settings_window settings_window ; - ignore(window#event#connect#delete (fun _ -> GMain.Main.quit () ; true )) -end - -(* MAIN *) - -let initialize_everything () = - let output = - TermViewer.proof_viewer - ~mml_of_cic_object:ApplyTransformation.mml_of_cic_object - ~width:350 ~height:280 () - in - let notebook = new notebook in - let rendering_window' = new rendering_window output notebook in - rendering_window'#set_auto_disambiguation !auto_disambiguation; - set_rendering_window rendering_window'; - let print_error_as_html prefix msg = - HelmLogger.log (`Error (`T (prefix ^ msg))) - in - Gdome_xslt.setErrorCallback (Some (print_error_as_html "XSLT Error: ")); - Gdome_xslt.setDebugCallback - (Some (print_error_as_html "XSLT Debug Message: ")); - rendering_window'#show () ; - if restore_environment_on_boot && - Sys.file_exists (Helm_registry.get "gtoplevel.environment_file") - then - restore_environment (); - GtkThread.main () -;; - -let main () = - ignore (GtkMain.Main.init ()) ; - initialize_everything () ; - MQIC.close mqi_handle; - Hbugs.quit () -;; - -try -(* CicEnvironment.set_trust (fun _ -> false); *) - Sys.catch_break true; - main (); -with Sys.Break -> () (* exit nicely, invoking at_exit functions *) - diff --git a/helm/gTopLevel/hbugs.ml b/helm/gTopLevel/hbugs.ml deleted file mode 100644 index c8947c54d..000000000 --- a/helm/gTopLevel/hbugs.ml +++ /dev/null @@ -1,143 +0,0 @@ -(* - * Copyright (C) 2003: - * Stefano Zacchiroli - * for the HELM Team http://helm.cs.unibo.it/ - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Hbugs_types;; -open Printf;; - -let debug_print = - let debug = true in - fun s -> prerr_endline (sprintf "HBUGS DEBUG: %s" s) -;; - -exception NoProofInProgress;; - -let hbugs_client = ref None -let use_hint_callback = ref ignore -let describe_hint_callback = ref ignore - -let set_describe_hint_callback c = describe_hint_callback := c - -let quit () = - match !hbugs_client with - | Some c -> c#unregisterFromBroker () - | None -> () - -let hbugs_enabled = ref false - -let get_hbugs_client () = - match !hbugs_client with - | Some c -> c - | None -> assert false - -let disable () = - match !hbugs_client with None -> () | Some c -> c#hide () - -let notify () = - try - if !hbugs_enabled then begin - let client = get_hbugs_client () in - let goal = - match !ProofEngine.goal with - | Some g -> g - | None -> raise NoProofInProgress - in - let (type_string, body_string) = - let (type_xml, body_xml) = ProofEngine.get_current_status_as_xml () in - (Xml.pp_to_string type_xml, Xml.pp_to_string body_xml) - in - let new_state = - (Misc.strip_xml_headings type_string, - Misc.strip_xml_headings body_string, - goal) - in - client#stateChange (Some new_state) - end - with NoProofInProgress -> () - -let clear () = - if !hbugs_enabled then - begin - let client = get_hbugs_client () in - client#stateChange None - end - -let rec enable () = - (match !hbugs_client with - | None -> (* create an hbugs client and show its window *) - hbugs_client := - (try - Some (new Hbugs_client.hbugsClient - ~use_hint_callback:!use_hint_callback - ~describe_hint_callback:!describe_hint_callback - ()) - with e -> - prerr_endline (sprintf "Can't start HBugs client: %s" - (Printexc.to_string e)); - None); - (match !hbugs_client with - |Some client -> - client#show (); - client#subscribeAll () - | None -> ()) - | Some c -> (* show hbugs client window *) - c#show ()) - -let toggle state = - if state <> !hbugs_enabled then begin (* status has been changed *) - if state then enable () else disable (); - clear () - end; - hbugs_enabled := state - -module type Unit = sig end - -module Initialize (Tactics: InvokeTactics.Tactics) : Unit = - struct - let use_hint = function - | Use_ring -> Tactics.ring () - | Use_fourier -> Tactics.fourier () - | Use_reflexivity -> Tactics.reflexivity () - | Use_symmetry -> Tactics.symmetry () - | Use_assumption -> Tactics.assumption () - | Use_contradiction -> Tactics.contradiction () - | Use_exists -> Tactics.exists () - | Use_split -> Tactics.split () - | Use_left -> Tactics.left () - | Use_right -> Tactics.right () - | Use_apply term -> - (* we remove the "cic:" prefix *) - let term' = String.sub term 4 (String.length term - 4) in - Tactics.apply ~term:term' () - | Hints _ -> assert false - - let _ = use_hint_callback := use_hint - end - -let start_web_services () = ignore (Unix.system "make -C ../hbugs/ start") -let stop_web_services () = ignore (Unix.system "make -C ../hbugs/ stop") - diff --git a/helm/gTopLevel/hbugs.mli b/helm/gTopLevel/hbugs.mli deleted file mode 100644 index 80f8c74e9..000000000 --- a/helm/gTopLevel/hbugs.mli +++ /dev/null @@ -1,57 +0,0 @@ -(* - * Copyright (C) 2003: - * Stefano Zacchiroli - * for the HELM Team http://helm.cs.unibo.it/ - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -val enable: unit -> unit -val disable: unit -> unit -val toggle: bool -> unit - -val quit: unit -> unit - - (** send current proof assistant state to hbugs broker *) -val notify: unit -> unit - -val clear: unit -> unit - -module type Unit = sig end - -module Initialize (Tactics: InvokeTactics.Tactics) : Unit - -(* - External Web Services controls. TEMPORARY(?) -*) - -val start_web_services: unit -> unit -val stop_web_services: unit -> unit - -(* Other callbacks *) - -open Hbugs_types - - (* what to do when the user single click on an hint *) -val set_describe_hint_callback: (hint -> unit) -> unit - diff --git a/helm/gTopLevel/helmGtkLogger.ml b/helm/gTopLevel/helmGtkLogger.ml deleted file mode 100644 index cfb2c487a..000000000 --- a/helm/gTopLevel/helmGtkLogger.ml +++ /dev/null @@ -1,71 +0,0 @@ -(* Copyright (C) 2004, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -class html_logger ?width ?height ?packing ?show () = - let scrolled_window = GBin.scrolled_window ?packing ?show () in - let vadj = scrolled_window#vadjustment in - let tv = - GText.view ~editable:false ~cursor_visible:false - ?width ?height ~packing:(scrolled_window#add) () - in - let colors = Hashtbl.create 13 in - let get_color color = - try - Hashtbl.find colors color - with Not_found -> - let tag = - tv#buffer#create_tag - [`FOREGROUND_SET true ; - `FOREGROUND_GDK - (Gdk.Color.alloc (Gdk.Color.get_system_colormap ()) (`NAME color))] - in - Hashtbl.add colors color tag; - tag - in - let log ?(append_NL = true) msg = - let rec aux color indent = - let indent_str = String.make indent ' ' in - function - | `T s -> tv#buffer#insert ~tags:[ get_color color ] s - | `L tags -> - List.iter - (fun tag -> aux color indent tag; tv#buffer#insert indent_str) - tags - | `BR -> tv#buffer#insert ("\n" ^ indent_str) - | `DIV (local_indent, new_color, tag) -> - tv#buffer#insert ("\n" ^ indent_str); - aux - (match new_color with None -> color | Some new_color -> new_color) - (indent + local_indent) tag - in - (match msg with - | `Error tag -> aux "red" 0 tag - | `Msg tag -> aux "black" 0 tag); - if append_NL then tv#buffer#insert "\n" - in - object (self) - initializer HelmLogger.register_log_callback log - end - diff --git a/helm/gTopLevel/helmGtkLogger.mli b/helm/gTopLevel/helmGtkLogger.mli deleted file mode 100644 index 06206dd3d..000000000 --- a/helm/gTopLevel/helmGtkLogger.mli +++ /dev/null @@ -1,31 +0,0 @@ -(* Copyright (C) 2004, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -class html_logger: - ?width:int -> ?height:int -> ?packing:(GObj.widget -> unit) -> ?show:bool -> - unit -> - object - end - diff --git a/helm/gTopLevel/invokeTactics.ml b/helm/gTopLevel/invokeTactics.ml deleted file mode 100644 index 13dc83f1d..000000000 --- a/helm/gTopLevel/invokeTactics.ml +++ /dev/null @@ -1,359 +0,0 @@ -(* Copyright (C) 2000-2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(******************************************************************************) -(* *) -(* PROJECT HELM *) -(* *) -(* Claudio Sacerdoti Coen *) -(* 29/01/2003 *) -(* *) -(* *) -(******************************************************************************) - -open Printf - -exception RefreshSequentException of exn;; -exception RefreshProofException of exn;; - -module type Callbacks = - sig - (* input widgets *) - val sequent_viewer : unit -> TermViewer.sequent_viewer - val term_editor : unit -> TermEditor.term_editor - val scratch_window : - unit -> - < sequent_viewer: TermViewer.sequent_viewer ; - show: unit -> unit ; - term: Cic.term ; - set_term : Cic.term -> unit ; - metasenv: Cic.metasenv ; - set_metasenv : Cic.metasenv -> unit ; - context: Cic.context ; - set_context : Cic.context -> unit > - (* GUI refresh functions *) - val refresh_proof : unit -> unit - val refresh_goals : unit -> unit - (* callbacks for user-tactics interaction *) - val decompose_uris_choice_callback : - (UriManager.uri * int * 'a) list -> - (UriManager.uri * int * 'b list) list - val mk_fresh_name_callback : ProofEngineTypes.mk_fresh_name_type - val mqi_handle : MQIConn.handle - val dbd:Mysql.dbd - end -;; - -module type Tactics = - sig - val intros : unit -> unit - val exact : ?term:string -> unit -> unit - val apply : ?term:string -> unit -> unit - val elimintrossimpl : ?term:string -> unit -> unit - val elimtype : ?term:string -> unit -> unit - val whd : unit -> unit - val reduce : unit -> unit - val simpl : unit -> unit - val fold_whd : ?term:string -> unit -> unit - val fold_reduce : ?term:string -> unit -> unit - val fold_simpl : ?term:string -> unit -> unit - val cut : ?term:string -> unit -> unit - val change : unit -> unit - val letin : ?term:string -> unit -> unit - val ring : unit -> unit - val clearbody : unit -> unit - val clear : unit -> unit - val fourier : unit -> unit - val rewritesimpl : ?term:string -> unit -> unit - val rewritebacksimpl : ?term:string -> unit -> unit - val replace : unit -> unit - val reflexivity : unit -> unit - val symmetry : unit -> unit - val transitivity : ?term:string -> unit -> unit - val exists : unit -> unit - val split : unit -> unit - val left : unit -> unit - val right : unit -> unit - val assumption : unit -> unit - val generalize : unit -> unit - val absurd : ?term:string -> unit -> unit - val contradiction : unit -> unit - val decompose : ?term:string -> unit -> unit - val injection : ?term:string -> unit -> unit - val discriminate : ?term:string -> unit -> unit - val whd_in_scratch : unit -> unit - val reduce_in_scratch : unit -> unit - val simpl_in_scratch : unit -> unit - val auto : unit -> unit - end - -module Make (C: Callbacks) : Tactics = - struct - - let print_uncaught_exception e = - HelmLogger.log (`Error (`T (sprintf "Uncaught exception: %s" - (Printexc.to_string e)))) - - let handle_refresh_exception f savedproof savedgoal = - try - f () - with - | RefreshSequentException e -> - HelmLogger.log (`Error (`T - (sprintf "Exception raised during the refresh of the sequent: %s" - (Printexc.to_string e)))); - ProofEngine.set_proof savedproof ; - ProofEngine.goal := savedgoal ; - C.refresh_goals () - | RefreshProofException e -> - HelmLogger.log (`Error (`T - (sprintf "Exception raised during the refresh of the proof: %s" - (Printexc.to_string e)))); - ProofEngine.set_proof savedproof ; - ProofEngine.goal := savedgoal ; - C.refresh_goals () ; - C.refresh_proof () - | e -> - print_uncaught_exception e; - ProofEngine.set_proof savedproof ; - ProofEngine.goal := savedgoal - - let call_tactic tactic () = - let savedproof = ProofEngine.get_proof () in - let savedgoal = !ProofEngine.goal in - handle_refresh_exception - (fun () -> - tactic (); - C.refresh_goals (); - C.refresh_proof ()) - savedproof savedgoal - - let call_tactic_with_input tactic ?term () = - let savedproof = ProofEngine.get_proof () in - let savedgoal = !ProofEngine.goal in - let uri,metasenv,bo,ty = - match ProofEngine.get_proof () with - None -> assert false - | Some (uri,metasenv,bo,ty) -> uri,metasenv,bo,ty - in - let canonical_context = - match !ProofEngine.goal with - None -> assert false - | Some metano -> - let (_,canonical_context,_) = - List.find (function (m,_,_) -> m=metano) metasenv - in - canonical_context - in - handle_refresh_exception - (fun () -> - let metasenv',expr,ugraph = (*TASSI: FIX THIS*) - (match term with - | None -> () - | Some t -> (C.term_editor ())#set_term t); - (C.term_editor ())#get_metasenv_and_term canonical_context metasenv - in - ProofEngine.set_proof (Some (uri,metasenv',bo,ty)) ; - tactic expr ; - C.refresh_goals () ; - C.refresh_proof () ; - (C.term_editor ())#reset) - savedproof savedgoal - - let call_tactic_with_goal_input tactic () = - let module L = LogicalOperations in - let module G = Gdome in - let savedproof = ProofEngine.get_proof () in - let savedgoal = !ProofEngine.goal in - match (C.sequent_viewer ())#get_selected_terms with - | [term] -> - handle_refresh_exception - (fun () -> - tactic term ; - C.refresh_goals () ; - C.refresh_proof ()) - savedproof savedgoal - | [] -> HelmLogger.log (`Error (`T "No term selected")) - | _ -> HelmLogger.log (`Error (`T "Too many terms selected")) - - let call_tactic_with_goal_inputs tactic () = - let module L = LogicalOperations in - let module G = Gdome in - let savedproof = ProofEngine.get_proof () in - let savedgoal = !ProofEngine.goal in - handle_refresh_exception - (fun () -> - match (C.sequent_viewer ())#get_selected_terms with - | [] -> HelmLogger.log (`Error (`T "No term selected")) - | terms -> - tactic terms ; - C.refresh_goals () ; - C.refresh_proof ()) - savedproof savedgoal - - let call_tactic_with_input_and_goal_input tactic () = - let module L = LogicalOperations in - let module G = Gdome in - let savedproof = ProofEngine.get_proof () in - let savedgoal = !ProofEngine.goal in - match (C.sequent_viewer ())#get_selected_terms with - [term] -> - handle_refresh_exception - (fun () -> - let uri,metasenv,bo,ty = - match ProofEngine.get_proof () with - None -> assert false - | Some (uri,metasenv,bo,ty) -> uri,metasenv,bo,ty - in - let canonical_context = - match !ProofEngine.goal with - None -> assert false - | Some metano -> - let (_,canonical_context,_) = - List.find (function (m,_,_) -> m=metano) metasenv - in - canonical_context in - let (metasenv',expr,ugraph) =(* FIX THIS AND *) - (C.term_editor ())#get_metasenv_and_term - canonical_context metasenv - in - ProofEngine.set_proof (Some (uri,metasenv',bo,ty)) ; - tactic ~goal_input:term ~input:expr ; - C.refresh_goals () ; - C.refresh_proof () ; - (C.term_editor ())#reset) - savedproof savedgoal - | [] -> HelmLogger.log (`Error (`T "No term selected")) - | _ -> HelmLogger.log (`Error (`T "Too many terms selected")) - - let call_tactic_with_goal_input_in_scratch tactic () = - let module L = LogicalOperations in - let module G = Gdome in - let scratch_window = C.scratch_window () in - match scratch_window#sequent_viewer#get_selected_terms with - | [term] -> - begin - try - let expr = tactic term scratch_window#term in - scratch_window#sequent_viewer#load_sequent - scratch_window#metasenv (111,scratch_window#context,expr) ; - scratch_window#set_term expr ; - scratch_window#show () ; - with - e -> print_uncaught_exception e - end - | [] -> HelmLogger.log (`Error (`T "No term selected")) - | _ -> HelmLogger.log (`Error (`T "Too many terms selected")) - - let call_tactic_with_goal_inputs_in_scratch tactic () = - let module L = LogicalOperations in - let module G = Gdome in - let scratch_window = C.scratch_window () in - match scratch_window#sequent_viewer#get_selected_terms with - | [] -> HelmLogger.log (`Error (`T "No term selected")) - | terms -> - try - let expr = tactic terms scratch_window#term in - scratch_window#sequent_viewer#load_sequent - scratch_window#metasenv (111,scratch_window#context,expr) ; - scratch_window#set_term expr ; - scratch_window#show () ; - with - e -> print_uncaught_exception e - - let call_tactic_with_hypothesis_input tactic () = - let module L = LogicalOperations in - let module G = Gdome in - let savedproof = ProofEngine.get_proof () in - let savedgoal = !ProofEngine.goal in - match (C.sequent_viewer ())#get_selected_hypotheses with - | [hypothesis] -> - handle_refresh_exception - (fun () -> - tactic hypothesis ; - C.refresh_goals () ; - C.refresh_proof ()) - savedproof savedgoal - | [] -> HelmLogger.log (`Error (`T "No hypothesis selected")) - | _ -> HelmLogger.log (`Error (`T "Too many hypotheses selected")) - - - - let intros = - call_tactic - (ProofEngine.intros ~mk_fresh_name_callback:C.mk_fresh_name_callback) - let exact = call_tactic_with_input ProofEngine.exact - let apply = call_tactic_with_input ProofEngine.apply - let auto = call_tactic (ProofEngine.auto ~dbd:C.dbd) - let elimintrossimpl = call_tactic_with_input ProofEngine.elim_intros_simpl - let elimtype = call_tactic_with_input ProofEngine.elim_type - let whd = call_tactic_with_goal_inputs ProofEngine.whd - let reduce = call_tactic_with_goal_inputs ProofEngine.reduce - let simpl = call_tactic_with_goal_inputs ProofEngine.simpl - let fold_whd = call_tactic_with_input ProofEngine.fold_whd - let fold_reduce = call_tactic_with_input ProofEngine.fold_reduce - let fold_simpl = call_tactic_with_input ProofEngine.fold_simpl - let cut = - call_tactic_with_input - (ProofEngine.cut ~mk_fresh_name_callback:C.mk_fresh_name_callback) - let change = call_tactic_with_input_and_goal_input ProofEngine.change - let letin = - call_tactic_with_input - (ProofEngine.letin ~mk_fresh_name_callback:C.mk_fresh_name_callback) - let ring = call_tactic ProofEngine.ring - let clearbody = call_tactic_with_hypothesis_input ProofEngine.clearbody - let clear = call_tactic_with_hypothesis_input ProofEngine.clear - let fourier = call_tactic ProofEngine.fourier - let rewritesimpl = call_tactic_with_input ProofEngine.rewrite_simpl - let rewritebacksimpl = call_tactic_with_input ProofEngine.rewrite_back_simpl - let replace = call_tactic_with_input_and_goal_input ProofEngine.replace - let reflexivity = call_tactic ProofEngine.reflexivity - let symmetry = call_tactic ProofEngine.symmetry - let transitivity = call_tactic_with_input ProofEngine.transitivity - let exists = call_tactic ProofEngine.exists - let split = call_tactic ProofEngine.split - let left = call_tactic ProofEngine.left - let right = call_tactic ProofEngine.right - let assumption = call_tactic ProofEngine.assumption - let injection = call_tactic_with_input ProofEngine.injection - let discriminate = call_tactic_with_input ProofEngine.discriminate - let generalize = - call_tactic_with_goal_inputs - (ProofEngine.generalize ~mk_fresh_name_callback:C.mk_fresh_name_callback) - let absurd = call_tactic_with_input ProofEngine.absurd - let contradiction = call_tactic ProofEngine.contradiction - let decompose = - call_tactic_with_input - (ProofEngine.decompose - ~uris_choice_callback:C.decompose_uris_choice_callback) - let whd_in_scratch = - call_tactic_with_goal_inputs_in_scratch ProofEngine.whd_in_scratch - let reduce_in_scratch = - call_tactic_with_goal_inputs_in_scratch ProofEngine.reduce_in_scratch - let simpl_in_scratch = - call_tactic_with_goal_inputs_in_scratch ProofEngine.simpl_in_scratch - -end -;; diff --git a/helm/gTopLevel/invokeTactics.mli b/helm/gTopLevel/invokeTactics.mli deleted file mode 100644 index 993199fe4..000000000 --- a/helm/gTopLevel/invokeTactics.mli +++ /dev/null @@ -1,110 +0,0 @@ -(* Copyright (C) 2000-2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(******************************************************************************) -(* *) -(* PROJECT HELM *) -(* *) -(* Claudio Sacerdoti Coen *) -(* 30/01/2003 *) -(* *) -(* *) -(******************************************************************************) - -exception RefreshSequentException of exn -exception RefreshProofException of exn - -module type Callbacks = - sig - (* input widgets *) - val sequent_viewer : unit -> TermViewer.sequent_viewer - val term_editor : unit -> TermEditor.term_editor - val scratch_window : - unit -> - < sequent_viewer: TermViewer.sequent_viewer ; - show: unit -> unit ; - term: Cic.term ; - set_term : Cic.term -> unit ; - metasenv: Cic.metasenv ; - set_metasenv : Cic.metasenv -> unit ; - context: Cic.context ; - set_context : Cic.context -> unit > - (* GUI refresh functions *) - val refresh_proof : unit -> unit - val refresh_goals : unit -> unit - (* callbacks for user-tactics interaction *) - val decompose_uris_choice_callback : - (UriManager.uri * int * 'a) list -> - (UriManager.uri * int * 'b list) list - val mk_fresh_name_callback : ProofEngineTypes.mk_fresh_name_type - val mqi_handle : MQIConn.handle - val dbd:Mysql.dbd - end - -module type Tactics = - sig - val intros : unit -> unit - val exact : ?term:string -> unit -> unit - val apply : ?term:string -> unit -> unit - val elimintrossimpl : ?term:string -> unit -> unit - val elimtype : ?term:string -> unit -> unit - val whd : unit -> unit - val reduce : unit -> unit - val simpl : unit -> unit - val fold_whd : ?term:string -> unit -> unit - val fold_reduce : ?term:string -> unit -> unit - val fold_simpl : ?term:string -> unit -> unit - val cut : ?term:string -> unit -> unit - val change : unit -> unit - val letin : ?term:string -> unit -> unit - val ring : unit -> unit - val clearbody : unit -> unit - val clear : unit -> unit - val fourier : unit -> unit - val rewritesimpl : ?term:string -> unit -> unit - val rewritebacksimpl : ?term:string -> unit -> unit - val replace : unit -> unit - val reflexivity : unit -> unit - val symmetry : unit -> unit - val transitivity : ?term:string -> unit -> unit - val exists : unit -> unit - val split : unit -> unit - val left : unit -> unit - val right : unit -> unit - val assumption : unit -> unit - val generalize : unit -> unit - val absurd : ?term:string -> unit -> unit - val contradiction : unit -> unit - val decompose : ?term:string -> unit -> unit - val injection : ?term:string -> unit -> unit - val discriminate : ?term:string -> unit -> unit - val whd_in_scratch : unit -> unit - val reduce_in_scratch : unit -> unit - val simpl_in_scratch : unit -> unit - val auto : unit -> unit - end - -module Make (C : Callbacks) : Tactics - diff --git a/helm/gTopLevel/logicalOperations.ml b/helm/gTopLevel/logicalOperations.ml deleted file mode 100644 index 3fab938a0..000000000 --- a/helm/gTopLevel/logicalOperations.ml +++ /dev/null @@ -1,121 +0,0 @@ -(* Copyright (C) 2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -let get_parent id ids_to_terms ids_to_father_ids = - match Hashtbl.find ids_to_father_ids id with - None -> None - | Some id -> Some (id, Hashtbl.find ids_to_terms id) -;; - -let get_context ids_to_terms ids_to_father_ids = - let module C = Cic in - let rec aux id = - match get_parent id ids_to_terms ids_to_father_ids with - None -> [] - | Some (parentid,parent) -> - let term = Hashtbl.find ids_to_terms id in - let binding = - match parent with - C.Rel _ - | C.Var _ - | C.Meta _ - | C.Sort _ - | C.Implicit _ - | C.Cast _ -> [] - | C.Prod (n,s,t) when t == term -> [Some (n,C.Decl s)] - | C.Prod _ -> [] - | C.Lambda (n,s,t) when t == term -> [Some (n,C.Decl s)] - | C.Lambda _ -> [] - | C.LetIn (n,s,t) when t == term -> [Some (n,C.Def (s,None))] - | C.LetIn _ -> [] - | C.Appl _ - | C.Const _ -> [] - | C.MutInd _ - | C.MutConstruct _ - | C.MutCase _ -> [] -(*CSC: sbagliato: manca il when *) - | C.Fix (_,ifl) -> - let counter = ref 0 in - List.rev_map - (function (name,_,ty,bo) -> - let res = - Some (C.Name name, (C.Def ((C.Fix (!counter,ifl)), Some ty))) - in - incr counter ; - res - ) ifl - | C.CoFix (_,ifl) -> - let counter = ref 0 in - List.rev_map - (function (name,ty,bo) -> - let res = - Some (C.Name name,(C.Def ((C.CoFix (!counter,ifl)), Some ty))) - in - incr counter ; - res - ) ifl - in - binding@(aux parentid) - in - aux -;; - -exception NotImplemented;; - -(* A subterm is changed into a fresh meta *) -let to_sequent id ids_to_terms ids_to_father_ids = - let module P = ProofEngine in - let term = Hashtbl.find ids_to_terms id in - let context = get_context ids_to_terms ids_to_father_ids id in - let metasenv = - match P.get_proof () with - None -> assert false - | Some (_,metasenv,_,_) -> metasenv - in - let ty,_ = (* TASSI: FIXME ehhmmmm *) - CicTypeChecker.type_of_aux' metasenv context term CicUniv.empty_ugraph - in - P.perforate context term ty (* P.perforate also sets the goal *) -;; - -exception FocusOnlyOnMeta;; - -(* If the current selection is a Meta, that Meta becomes the current goal *) -let focus id ids_to_terms ids_to_father_ids = - let module P = ProofEngine in - let term = Hashtbl.find ids_to_terms id in - let context = get_context ids_to_terms ids_to_father_ids id in - let metasenv = - match P.get_proof () with - None -> assert false - | Some (_,metasenv,_,_) -> metasenv - in - let ty,_ = - CicTypeChecker.type_of_aux' metasenv context term CicUniv.empty_ugraph - in - match term with - Cic.Meta (n,_) -> P.goal := Some n - | _ -> raise FocusOnlyOnMeta -;; diff --git a/helm/gTopLevel/logicalOperations.mli b/helm/gTopLevel/logicalOperations.mli deleted file mode 100644 index c44acfcbb..000000000 --- a/helm/gTopLevel/logicalOperations.mli +++ /dev/null @@ -1,32 +0,0 @@ -(* Copyright (C) 2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -exception NotImplemented -exception FocusOnlyOnMeta - -val to_sequent : - 'a -> ('a, Cic.term) Hashtbl.t -> ('a, 'a option) Hashtbl.t -> unit -val focus : - 'a -> ('a, Cic.term) Hashtbl.t -> ('a, 'a option) Hashtbl.t -> unit diff --git a/helm/gTopLevel/oldDisambiguate.ml b/helm/gTopLevel/oldDisambiguate.ml deleted file mode 100644 index 24dd30f91..000000000 --- a/helm/gTopLevel/oldDisambiguate.ml +++ /dev/null @@ -1,354 +0,0 @@ -(* Copyright (C) 2000-2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(******************************************************************************) -(* *) -(* PROJECT HELM *) -(* *) -(* Claudio Sacerdoti Coen *) -(* 06/01/2002 *) -(* *) -(* *) -(******************************************************************************) - -open Printf - -(** This module provides a functor to disambiguate the input **) -(** given a set of user-interface call-backs **) - -module type Callbacks = - sig - val interactive_user_uri_choice : - selection_mode:[`SINGLE | `MULTIPLE] -> - ?ok:string -> - ?enable_button_for_non_vars:bool -> - title:string -> msg:string -> id:string -> string list -> string list - val interactive_interpretation_choice : - (string * string) list list -> int list - val input_or_locate_uri : title:string -> ?id:string -> unit -> UriManager.uri - end -;; - -type domain_and_interpretation = - CicTextualParser0.interpretation_domain_item list * - CicTextualParser0.interpretation -;; - -module Make(C:Callbacks) = - struct - - let locate_one_id mqi_handle id = - let query = MQueryGenerator.locate id in - let result = MQueryInterpreter.execute mqi_handle query in - let uris = - List.map - (function uri,_ -> - MQueryMisc.wrong_xpointer_format_from_wrong_xpointer_format' uri - ) result in - HelmLogger.log (`Msg (`T "Locate query:")); - MQueryUtil.text_of_query - (fun s -> HelmLogger.log ~append_NL:false (`Msg (`T s))) - "" query; - HelmLogger.log (`Msg (`T "Result:")); - MQueryUtil.text_of_result (fun s -> HelmLogger.log (`Msg (`T s))) "" result; - let uris' = - match uris with - [] -> - [UriManager.string_of_uri - (C.input_or_locate_uri - ~title:("URI matching \"" ^ id ^ "\" unknown.") ~id ())] - | [uri] -> [uri] - | _ -> - C.interactive_user_uri_choice - ~selection_mode:`MULTIPLE - ~ok:"Try every selection." - ~enable_button_for_non_vars:true - ~title:"Ambiguous input." - ~msg: - ("Ambiguous input \"" ^ id ^ - "\". Please, choose one or more interpretations:") - ~id - uris - in - List.map MQueryMisc.cic_textual_parser_uri_of_string uris' - - - exception ThereDoesNotExistAnyWellTypedInterpretationOfTheInput - - type test_result = - Ok of Cic.term * Cic.metasenv - | Ko - | Uncertain - - type ambiguous_choices = - Uris of CicTextualParser0.uri list - | Symbols of (CicTextualParser0.interpretation -> Cic.term) list - - let disambiguate_input mqi_handle context metasenv dom mk_metasenv_and_expr ~id_to_uris= - let known_ids,resolve_id = id_to_uris in - let dom' = - let rec filter = - function - [] -> [] - | he::tl -> - if List.mem he known_ids then filter tl else he::(filter tl) - in - filter dom - in - (* for each id in dom' we get the list of uris associated to it *) - let list_of_uris = - List.map - (function - CicTextualParser0.Id id -> Uris (locate_one_id mqi_handle id) - | CicTextualParser0.Symbol (descr,choices) -> - (* CSC: Implementare la funzione di filtraggio manuale *) - (* CSC: corrispondente alla locate_one_id *) - Symbols (List.map snd choices) - ) dom' in - let tests_no = - List.fold_left - (fun i uris -> - let len = - match uris with - Uris l -> List.length l - | Symbols l -> List.length l - in - i * len - ) 1 list_of_uris - in - if tests_no > 1 then - HelmLogger.log (`Msg (`T (sprintf - "Disambiguation phase started: up to %d cases will be tried" - tests_no))); - (* and now we compute the list of all possible assignments from *) - (* id to uris that generate well-typed terms *) - let resolve_ids = - (* function to test if a partial interpretation is so far correct *) - let test resolve_id residual_dom = - (* We put implicits in place of every identifier that is not *) - (* resolved by resolve_id *) - let resolve_id' = - List.fold_left - (fun f id -> - function id' -> - if id = id' then Some (CicTextualParser0.Implicit) else f id' - ) resolve_id residual_dom - in - (* and we try to refine the term *) - let metasenv',expr = mk_metasenv_and_expr resolve_id' in -(*CSC: Bug here: we do not try to typecheck also the metasenv' *) - try - let term,_,metasenv'',_ = (* TASSI: FIXME what are we doning here?*) - CicRefine.type_of_aux' metasenv' context expr CicUniv.empty_ugraph - in - Ok (term,metasenv'') (* TASSI: whould we pass back the ugraph? *) - with - CicRefine.Uncertain _ -> -prerr_endline ("%%% UNCERTAIN!!! " ^ CicPp.ppterm expr) ; - Uncertain - | CicRefine.RefineFailure _ -> -prerr_endline ("%%% PRUNED!!! " ^ CicPp.ppterm expr) ; - Ko - in - let rec aux resolve_id ids list_of_uris = - match ids,list_of_uris with - [],[] -> - (match test resolve_id [] with - Ok (term,metasenv) -> [resolve_id,term,metasenv] - | Ko | Uncertain -> []) - | id::idtl,uris::uristl -> - let rec filter = - function - [] -> [] - | (uri : CicTextualParser0.interpretation_codomain_item)::uritl -> - let resolve_id' = - function id' -> if id = id' then Some uri else resolve_id id' - in - (match test resolve_id' idtl with - Ok (term,metasenv) -> - (* the next three ``if''s are used to avoid the base *) - (* case where the term would be refined a second time. *) - (if uristl = [] then - [resolve_id',term,metasenv] - else - (aux resolve_id' idtl uristl) - ) @ (filter uritl) - | Uncertain -> - (if uristl = [] then [] - else - (aux resolve_id' idtl uristl) - ) @ (filter uritl) - | Ko -> - filter uritl - ) - in - (match uris with - Uris uris -> - filter - (List.map (function uri -> CicTextualParser0.Uri uri) uris) - | Symbols symbols -> - filter - (List.map - (function sym -> CicTextualParser0.Term sym) symbols)) - | _,_ -> assert false - in - aux resolve_id dom' list_of_uris - in - List.iter - (function (resolve,term,newmetasenv) -> - (* If metasen <> newmetasenv is a normal condition, we should *) - (* be prepared to apply the returned substitution to the *) - (* whole current proof. *) - if metasenv <> newmetasenv then - begin - prerr_endline - (Printf.sprintf - "+++++ ASSERTION FAILED: a refine operation should not modify the metasenv. Old metasenv:\n %s\n New metasenv:\n %s\n" - (CicMetaSubst.ppmetasenv metasenv []) - (CicMetaSubst.ppmetasenv newmetasenv [])) ; - (* an assert would raise an exception that could be caught *) - exit 1 - end - ) resolve_ids ; - let res = - match resolve_ids with - [] -> raise ThereDoesNotExistAnyWellTypedInterpretationOfTheInput - | [_] -> resolve_ids - | _ -> - let choices = - List.map - (function (resolve,_,_) -> - List.map - (function id -> - (match id with - CicTextualParser0.Id id -> id - | CicTextualParser0.Symbol (descr,_) -> descr - ), - match resolve id with - None -> assert false - | Some (CicTextualParser0.Uri uri) -> - (match uri with - CicTextualParser0.ConUri uri - | CicTextualParser0.VarUri uri -> - UriManager.string_of_uri uri - | CicTextualParser0.IndTyUri (uri,tyno) -> - UriManager.string_of_uri uri ^ "#xpointer(1/" ^ - string_of_int (tyno+1) ^ ")" - | CicTextualParser0.IndConUri (uri,tyno,consno) -> - UriManager.string_of_uri uri ^ "#xpointer(1/" ^ - string_of_int (tyno+1) ^ "/" ^ string_of_int consno ^ ")") - | Some (CicTextualParser0.Term term) -> - (* CSC: Implementare resa delle scelte *) - "To be implemented XXX01" - | Some CicTextualParser0.Implicit -> assert false - ) dom - ) resolve_ids - in - let indexes = C.interactive_interpretation_choice choices in - List.map (List.nth resolve_ids) indexes - in - List.map - (fun (resolve_id',term,metasenv') -> - (known_ids @ dom', resolve_id'), metasenv',term - ) res -end -;; - -module EnvironmentP3 = - struct - type t = domain_and_interpretation - - let empty = "" - - let to_string (dom,resolve_id) = - let string_of_cic_textual_parser_uri uri = - let module C = Cic in - let module CTP = CicTextualParser0 in - let uri' = - match uri with - CTP.ConUri uri -> UriManager.string_of_uri uri - | CTP.VarUri uri -> UriManager.string_of_uri uri - | CTP.IndTyUri (uri,tyno) -> - UriManager.string_of_uri uri ^ "#1/" ^ string_of_int (tyno + 1) - | CTP.IndConUri (uri,tyno,consno) -> - UriManager.string_of_uri uri ^ "#1/" ^ string_of_int (tyno + 1) ^ "/" ^ - string_of_int consno - in - (* 4 = String.length "cic:" *) - String.sub uri' 4 (String.length uri' - 4) - in - String.concat "\n" - (List.map - (function v -> - let uri = - match resolve_id v with - None -> assert false - | Some (CicTextualParser0.Uri uri) -> uri - | Some (CicTextualParser0.Term _) - | Some CicTextualParser0.Implicit -> assert false - in - "alias " ^ - (match v with - CicTextualParser0.Id id -> id - | CicTextualParser0.Symbol (descr,_) -> - (* CSC: To be implemented *) - assert false - )^ " " ^ (string_of_cic_textual_parser_uri uri) - ) dom) - - let of_string inputtext = - let regexpr = - let alfa = "[a-zA-Z_-]" in - let digit = "[0-9]" in - let ident = alfa ^ "\\(" ^ alfa ^ "\\|" ^ digit ^ "\\)*" in - let blanks = "\\( \\|\t\\|\n\\)+" in - let nonblanks = "[^ \t\n]+" in - let uri = "/\\(" ^ ident ^ "/\\)*" ^ nonblanks in - (* not very strict check *) - Str.regexp - ("alias" ^ blanks ^ "\\(" ^ ident ^ "\\)" ^ blanks ^ "\\(" ^ uri ^ "\\)") - in - let rec aux n = - try - let n' = Str.search_forward regexpr inputtext n in - let id = CicTextualParser0.Id (Str.matched_group 2 inputtext) in - let uri = - MQueryMisc.cic_textual_parser_uri_of_string - ("cic:" ^ (Str.matched_group 5 inputtext)) - in - let dom,resolve_id = aux (n' + 1) in - if List.mem id dom then - dom,resolve_id - else - id::dom, - (function id' -> - if id = id' then - Some (CicTextualParser0.Uri uri) - else resolve_id id') - with - Not_found -> ([],function _ -> None) - in - aux 0 - end diff --git a/helm/gTopLevel/oldDisambiguate.mli b/helm/gTopLevel/oldDisambiguate.mli deleted file mode 100644 index c9b2775fe..000000000 --- a/helm/gTopLevel/oldDisambiguate.mli +++ /dev/null @@ -1,74 +0,0 @@ -(* Copyright (C) 2000-2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(******************************************************************************) -(* *) -(* PROJECT HELM *) -(* *) -(* Claudio Sacerdoti Coen *) -(* 15/01/2003 *) -(* *) -(* *) -(******************************************************************************) - -(** This module provides a functor to disambiguate the input **) -(** given a set of user-interface call-backs **) - -module type Callbacks = - sig - val interactive_user_uri_choice : - selection_mode:[`SINGLE | `MULTIPLE] -> - ?ok:string -> - ?enable_button_for_non_vars:bool -> - title:string -> msg:string -> id:string -> string list -> string list - val interactive_interpretation_choice : - (string * string) list list -> int list - val input_or_locate_uri : title:string -> ?id:string -> unit -> UriManager.uri - end - -type domain_and_interpretation = - CicTextualParser0.interpretation_domain_item list * - CicTextualParser0.interpretation - -module Make (C : Callbacks) : - sig - exception ThereDoesNotExistAnyWellTypedInterpretationOfTheInput - val disambiguate_input : - MQIConn.handle -> - Cic.context -> - Cic.metasenv -> - CicTextualParser0.interpretation_domain_item list -> - (CicTextualParser0.interpretation -> Cic.metasenv * Cic.term) -> - id_to_uris:domain_and_interpretation -> - (domain_and_interpretation * Cic.metasenv * Cic.term) list - end - -module EnvironmentP3 : - sig - type t = domain_and_interpretation - val empty : string - val to_string : t -> string - val of_string : string -> t - end diff --git a/helm/gTopLevel/proofEngine.ml b/helm/gTopLevel/proofEngine.ml deleted file mode 100644 index 0cfd8f07c..000000000 --- a/helm/gTopLevel/proofEngine.ml +++ /dev/null @@ -1,268 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -open ProofEngineHelpers -open ProofEngineTypes - - (* proof assistant status *) - -let proof = ref (None : proof option) -let goal = ref (None : goal option) - -let get_proof () = !proof;; -let set_proof p = proof := p;; - -let get_current_status_as_xml () = - match get_proof () with - None -> assert false - | Some (uri, metasenv, bo, ty) -> - let uri = match uri with Some uri -> uri | None -> assert false in - let currentproof = - (*CSC: Wrong: [] is just plainly wrong *) - Cic.CurrentProof (UriManager.name_of_uri uri,metasenv,bo,ty,[],[]) - in - let (acurrentproof,_,_,ids_to_inner_sorts,_,_,_) = - Cic2acic.acic_object_of_cic_object ~eta_fix:false currentproof - in - let xml, bodyxml = - match - Cic2Xml.print_object uri ~ids_to_inner_sorts - ~ask_dtd_to_the_getter:true acurrentproof - with - xml,Some bodyxml -> xml,bodyxml - | _,None -> assert false - in - (xml, bodyxml) -;; - -let apply_tactic ~tactic = - let module PET = ProofEngineTypes in - match get_proof (),!goal with - | None,_ - | _,None -> assert false - | Some proof', Some goal' -> - let (newproof, newgoals) = PET.apply_tactic tactic (proof', goal') in - set_proof (Some newproof); - goal := - (match newgoals, newproof with - goal::_, _ -> Some goal - | [], (_,(goal,_,_)::_,_,_) -> - (* the tactic left no open goal ; let's choose the first open goal *) - (*CSC: here we could implement and use a proof-tree like notion... *) - Some goal - | _, _ -> None) -;; - -(* metas_in_term term *) -(* Returns the ordered list of the metas that occur in [term]. *) -(* Duplicates are removed. The implementation is not very efficient. *) -let metas_in_term term = - let module C = Cic in - let rec aux = - function - C.Rel _ -> [] - | C.Meta (n,_) -> [n] - | C.Sort _ - | C.Implicit _ -> [] - | C.Cast (te,ty) -> (aux te) @ (aux ty) - | C.Prod (_,s,t) -> (aux s) @ (aux t) - | C.Lambda (_,s,t) -> (aux s) @ (aux t) - | C.LetIn (_,s,t) -> (aux s) @ (aux t) - | C.Appl l -> List.fold_left (fun i t -> i @ (aux t)) [] l - | C.Var (_,exp_named_subst) - | C.Const (_,exp_named_subst) - | C.MutInd (_,_,exp_named_subst) - | C.MutConstruct (_,_,_,exp_named_subst) -> - List.fold_left (fun i (_,t) -> i @ (aux t)) [] exp_named_subst - | C.MutCase (_,_,outt,t,pl) -> - (aux outt) @ (aux t) @ - (List.fold_left (fun i t -> i @ (aux t)) [] pl) - | C.Fix (_,fl) -> - List.fold_left (fun i (_,_,ty,bo) -> i @ (aux bo) @ (aux ty)) [] fl - | C.CoFix (_,fl) -> - List.fold_left (fun i (_,ty,bo) -> i @ (aux bo) @ (aux ty)) [] fl - in - let metas = aux term in - let rec elim_duplicates = - function - [] -> [] - | he::tl -> - he::(elim_duplicates (List.filter (function el -> he <> el) tl)) - in - elim_duplicates metas - -(* perforate context term ty *) -(* replaces the term [term] in the proof with a new metavariable whose type *) -(* is [ty]. [context] must be the context of [term] in the whole proof. This *) -(* could be easily computed; so the only reasons to have it as an argument *) -(* are efficiency reasons. *) -let perforate context term ty = - let module C = Cic in - match get_proof () with - None -> assert false - | Some (uri,metasenv,bo,gty as proof') -> - let newmeta = new_meta_of_proof proof' in - (* We push the new meta at the end of the list for pretty-printing *) - (* purposes: in this way metas are ordered. *) - let metasenv' = metasenv@[newmeta,context,ty] in - let irl = - CicMkImplicit.identity_relocation_list_for_metavariable context - in -(*CSC: Bug: se ci sono due term uguali nella prova dovrei bucarne uno solo!!!*) - let bo' = - ProofEngineReduction.replace (==) [term] [C.Meta (newmeta,irl)] bo - in - (* It may be possible that some metavariables occurred only in *) - (* the term we are perforating and they now occurs no more. We *) - (* get rid of them, collecting the really useful metavariables *) - (* in metasenv''. *) -(*CSC: Bug: una meta potrebbe non comparire in bo', ma comparire nel tipo *) -(*CSC: di una metavariabile che compare in bo'!!!!!!! *) - let newmetas = metas_in_term bo' in - let metasenv'' = - List.filter (function (n,_,_) -> List.mem n newmetas) metasenv' - in - set_proof (Some (uri,metasenv'',bo',gty)) ; - goal := Some newmeta - - -(************************************************************) -(* Some easy tactics. *) -(************************************************************) - -(* Reduces [term] using [reduction_function] in the current scratch goal [ty] *) -let reduction_tactic_in_scratch reduction_function terms ty = - let metasenv = - match get_proof () with - None -> [] - | Some (_,metasenv,_,_) -> metasenv - in - let metano,context,_ = - match !goal with - None -> assert false - | Some metano -> List.find (function (m,_,_) -> m=metano) metasenv - in - let terms' = List.map (reduction_function context) terms in - ProofEngineReduction.replace - ~equality:(==) ~what:terms ~with_what:terms' ~where:ty -;; - -let whd_in_scratch = reduction_tactic_in_scratch CicReduction.whd -let reduce_in_scratch = reduction_tactic_in_scratch ProofEngineReduction.reduce -let simpl_in_scratch = reduction_tactic_in_scratch ProofEngineReduction.simpl - -(************************************************************) -(* Tactics defined elsewhere *) -(************************************************************) - - (* primitive tactics *) - -let apply term = apply_tactic (PrimitiveTactics.apply_tac ~term) -let intros ?mk_fresh_name_callback () = - apply_tactic (PrimitiveTactics.intros_tac ?mk_fresh_name_callback ()) -let cut ?mk_fresh_name_callback term = - apply_tactic (PrimitiveTactics.cut_tac ?mk_fresh_name_callback ~term) -let letin ?mk_fresh_name_callback term = - apply_tactic (PrimitiveTactics.letin_tac ?mk_fresh_name_callback ~term) -let exact term = apply_tactic (PrimitiveTactics.exact_tac ~term) -let elim_intros_simpl term = - apply_tactic (PrimitiveTactics.elim_intros_simpl_tac ~term) -let change ~goal_input:what ~input:with_what = - apply_tactic (PrimitiveTactics.change_tac ~what ~with_what) - - (* structural tactics *) - -let clearbody hyp = apply_tactic (ProofEngineStructuralRules.clearbody ~hyp) -let clear hyp = apply_tactic (ProofEngineStructuralRules.clear ~hyp) - - (* reduction tactics *) - -let whd terms = - apply_tactic - (ReductionTactics.whd_tac ~also_in_hypotheses:true ~terms:(Some terms)) -let reduce terms = - apply_tactic - (ReductionTactics.reduce_tac ~also_in_hypotheses:true ~terms:(Some terms)) -let simpl terms = - apply_tactic - (ReductionTactics.simpl_tac ~also_in_hypotheses:true ~terms:(Some terms)) - -let fold_whd term = - apply_tactic - (ReductionTactics.fold_tac ~reduction:CicReduction.whd - ~also_in_hypotheses:true ~term) -let fold_reduce term = - apply_tactic - (ReductionTactics.fold_tac ~reduction:ProofEngineReduction.reduce - ~also_in_hypotheses:true ~term) -let fold_simpl term = - apply_tactic - (ReductionTactics.fold_tac ~reduction:ProofEngineReduction.simpl - ~also_in_hypotheses:true ~term) - - (* other tactics *) - -let elim_type term = apply_tactic (EliminationTactics.elim_type_tac ~term) -let ring () = apply_tactic Ring.ring_tac -let fourier () = apply_tactic FourierR.fourier_tac - -(* let auto ~dbd () = apply_tactic (AutoTactic.auto_tac ~dbd) *) -let auto ~dbd () = apply_tactic (AutoTactic.auto_tac_new ~dbd) - - -let rewrite_simpl term = apply_tactic (EqualityTactics.rewrite_simpl_tac ~term) -let rewrite_back_simpl term = apply_tactic (EqualityTactics.rewrite_back_simpl_tac ~term) -let replace ~goal_input:what ~input:with_what = - apply_tactic (EqualityTactics.replace_tac ~what ~with_what) - -let reflexivity () = apply_tactic EqualityTactics.reflexivity_tac -let symmetry () = apply_tactic EqualityTactics.symmetry_tac -let transitivity term = apply_tactic (EqualityTactics.transitivity_tac ~term) - -let exists () = apply_tactic IntroductionTactics.exists_tac -let split () = apply_tactic IntroductionTactics.split_tac -let left () = apply_tactic IntroductionTactics.left_tac -let right () = apply_tactic IntroductionTactics.right_tac - -let assumption () = apply_tactic VariousTactics.assumption_tac - -let generalize ?mk_fresh_name_callback terms = - apply_tactic (VariousTactics.generalize_tac ?mk_fresh_name_callback terms) - -let absurd term = apply_tactic (NegationTactics.absurd_tac ~term) -let contradiction () = apply_tactic NegationTactics.contradiction_tac - -let decompose ~uris_choice_callback term = - apply_tactic (EliminationTactics.decompose_tac ~uris_choice_callback term) - -let injection term = apply_tactic (DiscriminationTactics.injection_tac ~term) -let discriminate term = apply_tactic (DiscriminationTactics.discriminate_tac ~term) -let decide_equality () = apply_tactic DiscriminationTactics.decide_equality_tac -let compare term = apply_tactic (DiscriminationTactics.compare_tac ~term) - -(* -let prova_tatticali () = apply_tactic Tacticals.prova_tac -*) - diff --git a/helm/gTopLevel/proofEngine.mli b/helm/gTopLevel/proofEngine.mli deleted file mode 100644 index a38a02947..000000000 --- a/helm/gTopLevel/proofEngine.mli +++ /dev/null @@ -1,103 +0,0 @@ -(* Copyright (C) 2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - - (* proof engine status *) -val get_proof : unit -> ProofEngineTypes.proof option -val set_proof : ProofEngineTypes.proof option -> unit -val goal : ProofEngineTypes.goal option ref - - (** return a pair of "xml" (as defined in Xml module) representing the current - proof type and body, respectively *) -val get_current_status_as_xml : unit -> Xml.token Stream.t * Xml.token Stream.t - - (* start a new goal undoing part of the proof *) -val perforate : Cic.context -> Cic.term -> Cic.term -> unit - - (* reduction tactics *) -val whd : Cic.term list -> unit -val reduce : Cic.term list -> unit -val simpl : Cic.term list -> unit -val fold_whd : Cic.term -> unit -val fold_reduce : Cic.term -> unit -val fold_simpl : Cic.term -> unit - - (* scratch area reduction tactics *) -val whd_in_scratch : Cic.term list -> Cic.term -> Cic.term -val reduce_in_scratch : Cic.term list -> Cic.term -> Cic.term -val simpl_in_scratch : Cic.term list -> Cic.term -> Cic.term - - (* "primitive" tactics *) -val apply : Cic.term -> unit -val intros : - ?mk_fresh_name_callback:ProofEngineTypes.mk_fresh_name_type -> unit -> unit -val cut : - ?mk_fresh_name_callback:ProofEngineTypes.mk_fresh_name_type -> Cic.term -> unit -val letin : - ?mk_fresh_name_callback:ProofEngineTypes.mk_fresh_name_type -> Cic.term -> unit -val exact : Cic.term -> unit -val elim_intros_simpl : Cic.term -> unit -val change : goal_input:Cic.term -> input:Cic.term -> unit - - (* structural tactics *) -val clearbody : Cic.hypothesis -> unit -val clear : Cic.hypothesis -> unit - - (* other tactics *) -val elim_type : Cic.term -> unit -val ring : unit -> unit -val fourier : unit -> unit -val rewrite_simpl : Cic.term -> unit -val rewrite_back_simpl : Cic.term -> unit -val replace : goal_input:Cic.term -> input:Cic.term -> unit -val auto : dbd:Mysql.dbd -> unit -> unit - -val reflexivity : unit -> unit -val symmetry : unit -> unit -val transitivity : Cic.term -> unit - -val exists : unit -> unit -val split : unit -> unit -val left : unit -> unit -val right : unit -> unit - -val assumption : unit -> unit - -val generalize : - ?mk_fresh_name_callback:ProofEngineTypes.mk_fresh_name_type -> - Cic.term list -> unit - -val absurd : Cic.term -> unit -val contradiction : unit -> unit - -val decompose : - uris_choice_callback: - ((UriManager.uri * int * (UriManager.uri * Cic.term) list) list -> - (UriManager.uri * int * (UriManager.uri * Cic.term) list) list) -> - Cic.term -> unit - -val injection : Cic.term -> unit -val discriminate : Cic.term -> unit -val decide_equality : unit -> unit -val compare : Cic.term -> unit diff --git a/helm/gTopLevel/regtest.ml b/helm/gTopLevel/regtest.ml deleted file mode 100644 index bee1c2816..000000000 --- a/helm/gTopLevel/regtest.ml +++ /dev/null @@ -1,385 +0,0 @@ -(* Copyright (C) 2004, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -let argc = Array.length Sys.argv - -let rawsep = "###" -let sep = Pcre.regexp (sprintf "^%s" rawsep) -let sep2 = Pcre.regexp (sprintf "^%s%s" rawsep rawsep) -let print s = print_string s; flush stdout -let print_endline s = print_endline s -let print_endline_to_channel ch s = output_string ch (s ^ "\n") - -type state = Term | EEnv | EMetasenv | ETerm | EType | EReduced - -(* regtest file format - * < cic term in concrete syntax > - * separatorseparator INTERPRETATION NUMBER separatorseparator - * separator (* see sep above *) - * < expected disambiguating environment (EnvironmentP3.to_string) > - * separator (* see sep above *) - * < expected metasenv after disambiguation (CicMetaSubst.ppmetasenv) > - * separator (* see sep above *) - * < expected cic term after disambiguation (CicPp.ppterm) > - * separator (* see sep above *) - * < expected cic type as per type_of (CicPp.ppterm) > - * separator (* see sep above *) - * < expected reduced cic term as (CicPp.ppterm) > - * ... (* repeat from ... INTERPRETATION NUMBER ... *) - *) - -type regtest = { - term: string; (* raw cic term *) - eenv : string; (* disambiguating parsing environment *) - emetasenv : string; (* expected metasenv *) - eterm: string; (* expected term *) - etype: string; (* expected type *) - ereduced: string; (* expected reduced term *) -} - -let print_test tests fname = - let oc = open_out fname in - output_string oc (List.hd tests).term; - let i = ref 0 in - List.iter - (function test -> - incr i ; - output_string oc - (String.concat "" - [ sprintf "%s%s INTERPRETATION NUMBER %d %s%s\n" rawsep rawsep !i rawsep rawsep ; - sprintf "%s (* disambiguation environment *)\n" rawsep; - test.eenv; - sprintf "%s (* METASENV after disambiguation *)\n" rawsep; - test.emetasenv; - sprintf "%s (* TERM after disambiguation *)\n" rawsep; - test.eterm; - sprintf "%s (* TYPE_OF the disambiguated term *)\n" rawsep; - test.etype; - sprintf "%s (* REDUCED disambiguated term *)\n" rawsep; - test.ereduced ]) - ) tests; - close_out oc - -let parse_regtest = - let term = Buffer.create 1024 in (* raw term *) - let eenv = Buffer.create 1024 in (* disambiguating parser environment *) - let emetasenv = Buffer.create 1024 in (* expected metasenv *) - let eterm = Buffer.create 1024 in (* raw expected term *) - let etype = Buffer.create 1024 in (* raw expected type *) - let ereduced = Buffer.create 1024 in (* raw expected reducted term *) - let state = ref Term in - let bump_state () = - match !state with - | Term -> state := EEnv - | EEnv -> state := EMetasenv - | EMetasenv -> state := ETerm - | ETerm -> state := EType - | EType -> state := EReduced - | EReduced -> assert false - in - let buffer_of_state = function - | Term -> term | EEnv -> eenv | EMetasenv -> emetasenv | ETerm -> eterm | EType -> etype - | EReduced -> ereduced - in - let clear_buffers () = - List.iter Buffer.clear [ eenv; emetasenv; eterm; etype; ereduced ] - in - fun fname -> - state := Term; - let first = ref true in - let res = ref [] in - let push_res () = - res := - {term = Buffer.contents term; - eenv = Buffer.contents eenv; - emetasenv = Buffer.contents emetasenv; - eterm = Buffer.contents eterm; - etype = Buffer.contents etype; - ereduced = Buffer.contents ereduced } :: !res ; - in - Buffer.clear term; - let ic = open_in fname in - (try - while true do - let line = input_line ic in - match line with - | l when Pcre.pmatch ~rex:sep2 l -> - if !first then first := false else push_res () ; - clear_buffers (); - state := Term - | l when Pcre.pmatch ~rex:sep l -> bump_state () - | l -> Buffer.add_string (buffer_of_state !state) (line ^ "\n") - done - with End_of_file -> ()); - push_res () ; - List.rev !res - -let as_expected_one och expected found = (* ignores "term" field *) - let eterm_ok = expected.eterm = found.eterm in - let eenv_ok = expected.eenv = found.eenv in - let emetasenv_ok = expected.emetasenv = found.emetasenv in - let etype_ok = expected.etype = found.etype in - let ereduced_ok = expected.ereduced = found.ereduced in - let outcome = - eterm_ok && eenv_ok && emetasenv_ok && etype_ok && ereduced_ok - in - begin - let print_endline s = print_endline_to_channel (Lazy.force och) s in - if not eterm_ok then begin - print_endline "### Term mismatch ###"; - print_endline "# expected:"; - print_endline (" " ^ expected.eterm); - print_endline "# found:"; - print_endline (" " ^ found.eterm); - end; - if not eenv_ok then begin - print_endline "### Disambiguation environment mismatch ###"; - print_endline "# expected:"; - print_endline (" " ^ expected.eenv); - print_endline "# found:"; - print_endline (" " ^ found.eenv); - end; - if not emetasenv_ok then begin - print_endline "### Metasenv mismatch ###"; - print_endline "# expected:"; - print_endline (" " ^ expected.emetasenv); - print_endline "# found:"; - print_endline (" " ^ found.emetasenv); - end; - if not etype_ok then begin - print_endline "### Type mismatch ###"; - print_endline "# expected:"; - print_endline (" " ^ expected.etype); - print_endline "# found:"; - print_endline (" " ^ found.etype); - end; - if expected.ereduced <> found.ereduced then begin - print_endline "### Reduced term mismatch ###"; - print_endline "# expected:"; - print_endline (" " ^ expected.ereduced); - print_endline "# found:"; - print_endline (" " ^ found.ereduced); - end; - end; - outcome - -let as_expected report_fname expected found = - (if Sys.file_exists report_fname then Sys.remove report_fname) ; - let och = lazy (open_out report_fname) in - let print_endline s = print_endline_to_channel (Lazy.force och) s in - let print_interpretation test = - print_endline "## Interpretation dump ##"; - print_endline "# Disambiguation environment:"; - print_endline test.eenv; - print_endline "# Metasenv:"; - print_endline test.emetasenv; - print_endline "# Term:"; - print_endline test.eterm; - print_endline "# Type:"; - print_endline test.etype; - print_endline "# Reduced term:"; - print_endline test.ereduced; - in - let rec aux = - function - [],[] -> true - | ex::extl, fo::fotl -> - let outcome1 = as_expected_one och ex fo in - let outcome2 = aux (extl,fotl) in - outcome1 && outcome2 - | [],found -> - print_endline "### Too many interpretations found:" ; - List.iter print_interpretation found; - false - | expected,[] -> - print_endline "### Too few interpretations found:" ; - List.iter print_interpretation expected; - false - in - let outcome = aux (expected,found) in - (if Lazy.lazy_is_val och then close_out (Lazy.force och)) ; - outcome - -let test_this mqi_handle uri_pred raw_term = - let empty_context = [] in - List.map - (function (env, metasenv, cic_term,ugraph ) -> - let etype = - try - let ty, _ = - (CicTypeChecker.type_of_aux' metasenv empty_context cic_term ugraph) - in - CicPp.ppterm ty - with _ -> "MALFORMED" - in - let ereduced = - try - CicPp.ppterm (CicReduction.whd empty_context cic_term) - with _ -> "MALFORMED" - in - { term = raw_term; (* useless *) - eenv = DisambiguatingParser.EnvironmentP3.to_string env ^ "\n"; - emetasenv = CicMetaSubst.ppmetasenv metasenv [] ^ "\n"; - eterm = CicPp.ppterm cic_term ^ "\n"; - etype = etype ^ "\n"; - ereduced = ereduced ^ "\n"; - } - ) (BatchParser.parse mqi_handle ~uri_pred raw_term CicUniv.empty_ugraph) - -let dump_environment filename = - try - let oc = open_out filename in - CicEnvironment.dump_to_channel oc; - close_out oc - with exc -> - prerr_endline - ("DUMP_ENVIRONMENT FAILURE, uncaught excecption " ^ - Printexc.to_string exc) ; - raise exc - -let restore_environment filename = - if Sys.file_exists filename then - begin - try - let ic = open_in filename in - CicEnvironment.restore_from_channel ic; - close_in ic - with exc -> - prerr_endline - ("RESTORE_ENVIRONMENT FAILURE, uncaught excecption " ^ - Printexc.to_string exc) ; - raise exc - end - else - CicEnvironment.empty () - -let main mqi_handle generate dump fnames tryvars prefix varsprefix = - let uri_pred = BatchParser.uri_pred_of_conf tryvars ~prefix ~varsprefix in - if generate then - begin - (* gen mode *) - print_endline "[ Gen mode ]"; - List.iter - (function fname -> - let test_fname = fname ^ ".test" in - let env_fname = fname ^ ".env" in - print_endline (sprintf "Generating regtest %s -> %s\n ..." - fname test_fname); - let raw_term = (List.hd (parse_regtest fname)).term in - let results = test_this mqi_handle uri_pred raw_term in - print_test results test_fname ; - if dump then dump_environment env_fname ; - ) fnames - end else - begin - (* regtest mode *) - print_endline "[ Regtest mode ]"; - let (ok, nok) = (ref 0, ref []) in - List.iter - (function fname -> - let env_fname = fname ^ ".env" in - let test_fname = fname ^ ".test" in - let report_fname = fname ^ ".report" in - restore_environment env_fname ; - let time = Unix.gettimeofday () in - print ("Processing " ^ fname ^":\t") ; - let is_ok = - try - let expected = parse_regtest test_fname in - let actual = test_this mqi_handle uri_pred (List.hd expected).term in - if dump then dump_environment env_fname ; - if as_expected report_fname expected actual then - (incr ok ; true) - else - (nok := fname :: !nok ; false) - with e -> (nok := fname :: !nok ; false) - in - let timediff = Unix.gettimeofday () -. time in - print (sprintf "done in %f seconds\t" timediff) ; - print_endline - (if is_ok then - "[ OK ]" - else - "[ FAILED ]") - ) fnames ; - print_endline "*** Summary ***"; - print_endline (sprintf "Succeeded: %d" !ok); - print_endline (sprintf "Failed: %d" (List.length !nok)); - List.iter (fun fname -> print_endline (sprintf " %s failed :-(" fname)) - (List.rev !nok) - end - -let _ = - - Helm_registry.load_from "gTopLevel.conf.xml"; - HelmLogger.register_log_callback - (fun ?(append_NL = true) msg -> - (if append_NL then prerr_endline else prerr_string) - (HelmLogger.string_of_html_msg msg)); - Helm_registry.load_from "gTopLevel.conf.xml"; - let dbd = - Mysql.quick_connect - ~host:(Helm_registry.get "db.host") - ~user:(Helm_registry.get "db.user") - ~database:(Helm_registry.get "db.database") - () - in - let fnames = ref [] in - let gen = ref false in - let tryvars = ref false in - let dump = ref false in - let nodump = ref false in - let prefix = ref "" in - let varsprefix = ref "###" in - let usage = "regtest [OPTION] ... test1 ..." in - let spec = - ["-gen", Arg.Set gen, - "generate the tests; implies -dump (unless -nodump is specified)" ; - "--gen", Arg.Set gen, - "generate the tests; implies -dump (unless -nodump is specified)" ; - "-dump", Arg.Set dump, "dump the final environment" ; - "--dump", Arg.Set dump, "dump the final environment" ; - "-nodump", Arg.Set nodump, "do not dump the final environment" ; - "--nodump", Arg.Set nodump, "do not dump the final environment" ; - "-vars", Arg.Set tryvars, "try also variables" ; - "-novars", Arg.Clear tryvars, "do not try variables (default)" ; - "-prefix", Arg.Set_string prefix, - "limit object choices to URIs beginning with prefix" ; - "--prefix", Arg.Set_string prefix, - "limit object choices to URIs beginning with prefix" ; - "-varsprefix", Arg.Set_string varsprefix, - "limit variable choices to URIs beginning with prefix; overrides -prefix" ; - "--varsprefix", Arg.Set_string varsprefix, - "limit variable choices to URIs beginning with prefix; overrides -prefix" - ] - in - Arg.parse spec (fun filename -> fnames := filename::!fnames ) usage ; - if !fnames = [] then - Arg.usage spec (Sys.argv.(0) ^ ": missing argument test. You must provide at least one test file.\n" ^ usage) ; - if !varsprefix = "###" then varsprefix := !prefix ; - main dbd !gen ((!gen || !dump) && (not !nodump)) !fnames !tryvars !prefix !varsprefix; - Mysql.disconnect dbd diff --git a/helm/gTopLevel/rootcontent.xsl b/helm/gTopLevel/rootcontent.xsl deleted file mode 100644 index 96c92aeea..000000000 --- a/helm/gTopLevel/rootcontent.xsl +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/gTopLevel/script.sh.sample b/helm/gTopLevel/script.sh.sample deleted file mode 100755 index a95140604..000000000 --- a/helm/gTopLevel/script.sh.sample +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -#/projects/helm/galax/sources/natile-galax-0.1-alpha-installed/lib: -export OCAMLPATH=/home/sacerdot/miohelm/helm/ocaml/METAS diff --git a/helm/gTopLevel/termEditor.ml b/helm/gTopLevel/termEditor.ml deleted file mode 100644 index 1b9986caa..000000000 --- a/helm/gTopLevel/termEditor.ml +++ /dev/null @@ -1,121 +0,0 @@ -(* Copyright (C) 2000-2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(*****************************************************************************) -(* *) -(* PROJECT HELM *) -(* *) -(* Claudio Sacerdoti Coen *) -(* 06/01/2002 *) -(* *) -(* *) -(*****************************************************************************) - -open Printf - -(* A WIDGET TO ENTER CIC TERMS *) - -class type term_editor = - object - method coerce : GObj.widget - (* get_as_string returns the unquoted string *) - method get_as_string : string - method get_metasenv_and_term : - context:Cic.context -> - metasenv:Cic.metasenv -> - Cic.metasenv * Cic.term * CicUniv.universe_graph - method reset : unit - (* The input of set_term is unquoted *) - method set_term : string -> unit - method environment : DisambiguatingParser.EnvironmentP3.t ref - end - -module Make(C:DisambiguateTypes.Callbacks) = - struct - - module Disambiguate' = DisambiguatingParser.Make(C);; - - class term_editor_impl ~(dbd:Mysql.dbd) ?packing ?width ?height - ?isnotempty_callback ?share_environment_with () : term_editor - = - let environment = - match share_environment_with with - None -> ref (*DisambiguateTypes.empty_environment*) - (DisambiguatingParser.EnvironmentP3.of_string - DisambiguatingParser.EnvironmentP3.empty) - | Some obj -> obj#environment - in - let input = GText.view ~editable:true ?width ?height ?packing () in - let _ = - match isnotempty_callback with - None -> () - | Some callback -> - ignore(input#buffer#connect#changed - (function () -> callback (input#buffer#char_count > 0))) - in - object(self) - - method coerce = input#coerce - - method reset = - input#buffer#delete input#buffer#start_iter input#buffer#end_iter - (* CSC: txt is now a string, but should be of type Cic.term *) - - method set_term txt = - self#reset ; - ignore (input#buffer#insert txt) - - (* CSC: this method should disappear *) - (* get_as_string returns the unquoted string *) - method get_as_string = input#buffer#get_text () - - method get_metasenv_and_term ~context ~metasenv = - let name_context = - List.map - (function - Some (n,_) -> Some n - | None -> None - ) context - in - let environment',metasenv,expr,ugraph = - match - Disambiguate'.disambiguate_term ~dbd ~context ~metasenv - (input#buffer#get_text ()) ~initial_ugraph:CicUniv.empty_ugraph - ~aliases:!environment - with - [environment',metasenv,expr,u] -> environment',metasenv,expr,u - | _ -> assert false - in - environment := environment'; - (metasenv, expr,ugraph) - (* TASSI: FIXME ?are we sure we have to keep this? *) - - method environment = environment - end - - let term_editor = new term_editor_impl - -end - diff --git a/helm/gTopLevel/termEditor.mli b/helm/gTopLevel/termEditor.mli deleted file mode 100644 index 2817f812a..000000000 --- a/helm/gTopLevel/termEditor.mli +++ /dev/null @@ -1,50 +0,0 @@ -(* Copyright (C) 2000-2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -class type term_editor = - object - method coerce : GObj.widget - (* get_as_string returns the unquoted string *) - method get_as_string : string - method get_metasenv_and_term : - context:Cic.context -> - metasenv:Cic.metasenv -> - Cic.metasenv * Cic.term * CicUniv.universe_graph - method reset : unit - method set_term : string -> unit - method environment : DisambiguatingParser.EnvironmentP3.t ref - end - -module Make (C : DisambiguateTypes.Callbacks) : - sig - val term_editor : - dbd:Mysql.dbd -> - ?packing:(GObj.widget -> unit) -> - ?width:int -> - ?height:int -> - ?isnotempty_callback:(bool -> unit) -> - ?share_environment_with:term_editor -> - unit -> term_editor - end diff --git a/helm/gTopLevel/termViewer.ml b/helm/gTopLevel/termViewer.ml deleted file mode 100644 index 0f2019ad5..000000000 --- a/helm/gTopLevel/termViewer.ml +++ /dev/null @@ -1,304 +0,0 @@ -(* Copyright (C) 2000-2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(***************************************************************************) -(* *) -(* PROJECT HELM *) -(* *) -(* 29/01/2003 Claudio Sacerdoti Coen *) -(* *) -(* *) -(***************************************************************************) - -let debug = false -let debug_print s = if debug then prerr_endline s - -type mml_of_cic_sequent = - Cic.metasenv -> - int * Cic.context * Cic.term -> - Gdome.document * - (Cic.annconjecture * - ((Cic.id, Cic.term) Hashtbl.t * - (Cic.id, Cic.id option) Hashtbl.t * - (string, Cic.hypothesis) Hashtbl.t * - (Cic.id, string) Hashtbl.t)) - - -type mml_of_cic_object = - Cic.obj -> - Gdome.document * - (Cic.annobj * - ((Cic.id, Cic.term) Hashtbl.t * - (Cic.id, Cic.id option) Hashtbl.t * - (Cic.id, Cic.conjecture) Hashtbl.t * - (Cic.id, Cic.hypothesis) Hashtbl.t * - (Cic.id, string) Hashtbl.t * - (Cic.id, Cic2acic.anntypes) Hashtbl.t)) - -(* List utility functions *) -exception Skip;; - -let list_map_fail f = - let rec aux = - function - [] -> [] - | he::tl -> - try - let he' = f he in - he'::(aux tl) - with Skip -> - (aux tl) - in - aux -;; -(* End of the list utility functions *) - -(** A widget to render sequents **) - -class sequent_viewer ~(mml_of_cic_sequent:mml_of_cic_sequent) obj = - object(self) - - inherit GMathViewAux.multi_selection_math_view obj - - val mutable current_infos = None - - (* returns the list of selected terms *) - (* selections which are not terms are ignored *) - method get_selected_terms = - debug_print (string_of_int (List.length self#get_selections)) ; - let selections = self#get_selections in - list_map_fail - (function node -> - let xpath = - ((node : Gdome.element)#getAttributeNS - ~namespaceURI:Misc.helm_ns - ~localName:(Gdome.domString "xref"))#to_string - in - if xpath = "" then assert false (* "ERROR: No xref found!!!" *) - else - match current_infos with - Some (ids_to_terms,_,_) -> - let id = xpath in - (try - Hashtbl.find ids_to_terms id - with _ -> raise Skip) - | None -> assert false (* "ERROR: No current term!!!" *) - ) selections - - (* returns the list of selected hypotheses *) - (* selections which are not hypotheses are ignored *) - method get_selected_hypotheses = - let selections = self#get_selections in - list_map_fail - (function node -> - let xpath = - ((node : Gdome.element)#getAttributeNS - ~namespaceURI:Misc.helm_ns - ~localName:(Gdome.domString "xref"))#to_string - in - if xpath = "" then assert false (* "ERROR: No xref found!!!" *) - else - match current_infos with - Some (_,_,ids_to_hypotheses) -> - let id = xpath in - (try - Hashtbl.find ids_to_hypotheses id - with _ -> raise Skip) - | None -> assert false (* "ERROR: No current term!!!" *) - ) selections - - method load_sequent metasenv sequent = -(**** SIAM QUI ****) - let sequent_mml,(_,(ids_to_terms,ids_to_father_ids,ids_to_hypotheses,ids_to_inner_sorts)) = - mml_of_cic_sequent metasenv sequent - in - self#load_root ~root:sequent_mml#get_documentElement ; -ignore (Misc.domImpl#saveDocumentToFile ~name:"/tmp/pippo" ~doc:sequent_mml ()); - current_infos <- - Some (ids_to_terms,ids_to_father_ids,ids_to_hypotheses) - end -;; - -let sequent_viewer ~(mml_of_cic_sequent: mml_of_cic_sequent) - ?hadjustment ?vadjustment ?font_size ?log_verbosity -= - GtkBase.Widget.size_params ~cont:( - OgtkMathViewProps.pack_return - (fun p -> - OgtkMathViewProps.set_params - (new sequent_viewer ~mml_of_cic_sequent - (GtkMathViewProps.MathView_GMetaDOM.create p)) - ~font_size ~log_verbosity)) [] -;; - -(* -let sequent_viewer ?adjustmenth ?adjustmentv ?font_size ?font_manager - ?border_width ?width ?height ?packing ?show () = - let w = - GtkMathView.MathView.create - ?adjustmenth:(Gaux.may_map ~f:GData.as_adjustment adjustmenth) - ?adjustmentv:(Gaux.may_map ~f:GData.as_adjustment adjustmentv) - () - in - GtkBase.Container.set w ?border_width ?width ?height; - let mathview = GObj.pack_return (new sequent_viewer w) ~packing ~show in - begin - match font_size with - | Some size -> mathview#set_font_size size - | None -> () - end; - begin - match font_manager with - | Some manager -> mathview#set_font_manager_type ~fm_type:manager - | None -> () - end; - mathview -;; -*) - -(** A widget to render proofs **) - -class proof_viewer ~(mml_of_cic_object:mml_of_cic_object) obj = - object(self) - - inherit GMathViewAux.single_selection_math_view obj - -(* initializer self#set_font_size 10 *) - - val mutable current_infos = None - val mutable current_mml = None - - method make_sequent_of_selected_term = - match self#get_selection with - Some node -> - let xpath = - ((node : Gdome.element)#getAttributeNS - ~namespaceURI:Misc.helm_ns - ~localName:(Gdome.domString "xref"))#to_string - in - if xpath = "" then assert false (* "ERROR: No xref found!!!" *) - else - begin - match current_infos with - Some (ids_to_terms, ids_to_father_ids, _, _) -> - let id = xpath in - LogicalOperations.to_sequent id ids_to_terms ids_to_father_ids - | None -> assert false (* "ERROR: No current term!!!" *) - end - | None -> assert false (* "ERROR: No selection!!!" *) - - method focus_sequent_of_selected_term = - match self#get_selection with - Some node -> - let xpath = - ((node : Gdome.element)#getAttributeNS - ~namespaceURI:Misc.helm_ns - ~localName:(Gdome.domString "xref"))#to_string - in - if xpath = "" then assert false (* "ERROR: No xref found!!!" *) - else - begin - match current_infos with - Some (ids_to_terms, ids_to_father_ids, _, _) -> - let id = xpath in - LogicalOperations.focus id ids_to_terms ids_to_father_ids - | None -> assert false (* "ERROR: No current term!!!" *) - end - | None -> assert false (* "ERROR: No selection!!!" *) - - method load_proof currentproof = - let mml, - (acic, - (ids_to_terms,ids_to_father_ids,ids_to_conjectures, - ids_to_hypotheses,ids_to_inner_sorts,ids_to_inner_types)) = - mml_of_cic_object currentproof - in - current_infos <- - Some - (ids_to_terms,ids_to_father_ids,ids_to_conjectures,ids_to_hypotheses); - (* self#load_doc ~dom:mml ; - current_mml <- Some mml ; *) - ignore(Misc.domImpl#saveDocumentToFile ~name:"/tmp/prova" ~doc:mml ()); - (match current_mml with - None -> - let time1 = Sys.time () in - self#load_root ~root:mml#get_documentElement ; - let time2 = Sys.time () in - debug_print ("Loading and displaying the proof took " ^ - string_of_float (time2 -. time1) ^ "seconds") ; - current_mml <- Some mml - | Some current_mml' -> - self#freeze ; - let time1 = Sys.time () in - XmlDiff.update_dom ~from:current_mml' mml ; - let time2 = Sys.time () in - debug_print ("XMLDIFF took " ^ - string_of_float (time2 -. time1) ^ "seconds") ; - self#thaw ; - let time3 = Sys.time () in - debug_print ("The refresh of the widget took " ^ - string_of_float (time3 -. time2) ^ "seconds")); - (acic, ids_to_inner_types, ids_to_inner_sorts) - end -;; - - -let proof_viewer ~(mml_of_cic_object: mml_of_cic_object) - ?hadjustment ?vadjustment ?font_size ?log_verbosity -= - GtkBase.Widget.size_params ~cont:( - OgtkMathViewProps.pack_return - (fun p -> - OgtkMathViewProps.set_params - (new proof_viewer ~mml_of_cic_object - (GtkMathViewProps.MathView_GMetaDOM.create p)) - ~font_size ~log_verbosity)) [] -;; - -(* -let proof_viewer ?adjustmenth ?adjustmentv ?font_size ?font_manager - ?border_width ?width ?height ?packing ?show () = - let w = - GtkMathView.MathView.create - ?adjustmenth:(Gaux.may_map ~f:GData.as_adjustment adjustmenth) - ?adjustmentv:(Gaux.may_map ~f:GData.as_adjustment adjustmentv) - () - in - GtkBase.Container.set w ?border_width ?width ?height; - let mathview = GObj.pack_return (new proof_viewer w) ~packing ~show in - begin - match font_size with - | Some size -> mathview#set_font_size size - | None -> () - end; - begin - match font_manager with - | Some manager -> mathview#set_font_manager_type ~fm_type:manager - | None -> () - end; - mathview -;; -*) - diff --git a/helm/gTopLevel/termViewer.mli b/helm/gTopLevel/termViewer.mli deleted file mode 100644 index f391363eb..000000000 --- a/helm/gTopLevel/termViewer.mli +++ /dev/null @@ -1,125 +0,0 @@ -(* Copyright (C) 2000-2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(******************************************************************************) -(* *) -(* PROJECT HELM *) -(* *) -(* Claudio Sacerdoti Coen *) -(* 29/01/2003 *) -(* *) -(* *) -(******************************************************************************) - -type mml_of_cic_sequent = - Cic.metasenv -> - int * Cic.context * Cic.term -> - Gdome.document * - (Cic.annconjecture * - ((Cic.id, Cic.term) Hashtbl.t * - (Cic.id, Cic.id option) Hashtbl.t * - (string, Cic.hypothesis) Hashtbl.t * - (Cic.id, string) Hashtbl.t)) - - -type mml_of_cic_object = - Cic.obj -> - Gdome.document * - (Cic.annobj * - ((Cic.id, Cic.term) Hashtbl.t * - (Cic.id, Cic.id option) Hashtbl.t * - (Cic.id, Cic.conjecture) Hashtbl.t * - (Cic.id, Cic.hypothesis) Hashtbl.t * - (Cic.id, string) Hashtbl.t * - (Cic.id, Cic2acic.anntypes) Hashtbl.t)) - -(** A widget to render sequents **) - -class sequent_viewer : - mml_of_cic_sequent:mml_of_cic_sequent -> - Gtk_mathview.math_view Gtk.obj -> - object - inherit GMathViewAux.multi_selection_math_view - - (* returns the list of selected terms *) - (* selections which are not terms are ignored *) - method get_selected_terms : Cic.term list - - (* returns the list of selected hypotheses *) - (* selections which are not hypotheses are ignored *) - method get_selected_hypotheses : Cic.hypothesis list - - method load_sequent : Cic.metasenv -> Cic.conjecture -> unit - end - -val sequent_viewer : - mml_of_cic_sequent:mml_of_cic_sequent -> - ?hadjustment:GData.adjustment -> - ?vadjustment:GData.adjustment -> - ?font_size:int -> - ?log_verbosity:int -> - ?width:int -> - ?height:int -> - ?packing:(GObj.widget -> unit) -> - ?show:bool -> - unit -> sequent_viewer - -(** A widget to render proofs **) - -class proof_viewer : - mml_of_cic_object:mml_of_cic_object -> - Gtk_mathview.math_view Gtk.obj -> - object - inherit GMathViewAux.single_selection_math_view - - (* the new current sequent becomes the one obtained *) - (* perforating the proof where the selection is *) - method make_sequent_of_selected_term : unit - - (* the new current sequent becomes the one obtained *) - (* focusing the proof on the selected metavariable *) - method focus_sequent_of_selected_term : unit - - (* load_proof also returns the annotated cic term and the *) - (* ids_to_inner_types and ids_to_inner_sorts maps. *) - method load_proof : - Cic.obj -> - Cic.annobj * (Cic.id, Cic2acic.anntypes) Hashtbl.t * - (Cic.id, string) Hashtbl.t - - end - -val proof_viewer : - mml_of_cic_object:mml_of_cic_object -> - ?hadjustment:GData.adjustment -> - ?vadjustment:GData.adjustment -> - ?font_size:int -> - ?log_verbosity:int -> - ?width:int -> - ?height:int -> - ?packing:(GObj.widget -> unit) -> - ?show:bool -> - unit -> proof_viewer - diff --git a/helm/gTopLevel/testlibrary.ml b/helm/gTopLevel/testlibrary.ml deleted file mode 100644 index 34f71d412..000000000 --- a/helm/gTopLevel/testlibrary.ml +++ /dev/null @@ -1,226 +0,0 @@ - -open Printf - -let time_out = ref 5;; - -Helm_registry.load_from "gTopLevel.conf.xml";; - -let mqi_debug_fun s = - HelmLogger.log ~append_NL:true (`Msg (`T s)) -let mqi_flags = [] - -let dbd = Mysql.quick_connect - ~host:(Helm_registry.get "db.host") - ~user:(Helm_registry.get "db.user") - ~database:(Helm_registry.get "db.database") - () -(* -let mqi_handle = MQIConn.init ~flags:mqi_flags ~log:mqi_debug_fun () -*) - -let verbose = false - -exception Failure of string -let fail msg = raise (Failure msg) - -let uri_predicate = ref (BatchParser.constants_only ~prefix:"") - -module DisambiguateCallbacks = - struct - let interactive_user_uri_choice - ~selection_mode ?ok ?enable_button_for_non_vars ~title ~msg ~id choices = - List.filter !uri_predicate choices - - let interactive_interpretation_choice = - let rec aux n = - function - [] -> [] - | _::tl -> n::(aux (n+1) tl) - in - aux 0 - - let input_or_locate_uri ~title = fail ("Unknown identifier: " ^ title) - end - -module Disambiguate' = Disambiguate.Make (DisambiguateCallbacks) - -let debug_print s = prerr_endline ("^^^^^^ " ^ s) - -let test_uri typecheck uri = - if typecheck then - try ignore(CicTypeChecker.typecheck uri CicUniv.empty_ugraph);1 - with CicTypeChecker.TypeCheckerFailure s | - CicTypeChecker.AssertFailure s -> 0 - else - let obj,_ = CicEnvironment.get_obj CicUniv.empty_ugraph uri in - let (annobj, _, _, ids_to_inner_sorts, _, _, _) = - Cic2acic.acic_object_of_cic_object ~eta_fix:false obj - in - let ids_to_uris = Hashtbl.create 1023 in - let round_trip annterm = - debug_print "(1) acic -> ast"; - let (ast, _) = - Acic2Ast.ast_of_acic ids_to_inner_sorts (*ids_to_uris*) annterm - in - let new_pp = BoxPp.pp_term ast in - debug_print ("ast:\n" ^ new_pp); - let new_ast = CicTextualParser2.parse_term (Stream.of_string new_pp) in - debug_print ("new_ast:\n" ^ CicAstPp.pp_term ast); - let res = - Disambiguate'.disambiguate_term ~dbd [] [] new_ast - ~aliases:DisambiguateTypes.Environment.empty - ~initial_ugraph:CicUniv.empty_ugraph - in - List.iter - (fun (domain, _, term, _) -> - debug_print - ("domain: " ^ CicTextualParser2.EnvironmentP3.to_string domain) ; - debug_print ("term: " ^ CicPp.ppterm term) - ) res ; - List.length res - in - match annobj with - | Cic.AConstant (_, _, _, None, ty, _) -> - debug_print "Cic.AConstant (ty)"; - round_trip ty - | Cic.AConstant (_, _, _, Some bo, ty, _) -> -(* - debug_print "Cic.AConstant (bo)"; - let n = round_trip bo in -*) - debug_print "Cic.AConstant (ty)"; - round_trip ty (* + n *) - | Cic.AVariable (_, _, None, ty, _) -> - debug_print "Cic.AVariable (ty)"; - round_trip ty - | Cic.AVariable (_, _, Some bo, ty, _) -> -(* - debug_print "Cic.AVariable (bo)"; - let n = round_trip bo in -*) - debug_print "Cic.AVariable (ty)"; - round_trip ty (* + n *) - | Cic.ACurrentProof (_, _, _, _, _, _, _) -> - assert false - | Cic.AInductiveDefinition _ -> - debug_print "AInductiveDefinition: boh ..." ; - assert false - -exception TimeOut;; - -ignore - (Sys.signal Sys.sigalrm - (Sys.Signal_handle - (fun _ -> - (* We do this in case that some "with _" intercepts the first exception *) - ignore (Unix.alarm 1) ; - raise TimeOut))) -;; - - -let test_uri typecheck uri = - try - ignore (Unix.alarm !time_out) ; - if test_uri typecheck uri = 1 then `Ok else `Maybe - with - | TimeOut -> - (* We do this to clear the alarm set by the signal handler *) - ignore (Unix.alarm 0) ; - `TimeOut - (* - | exn -> - prerr_endline (sprintf "Top Level Uncaught Exception: %s" - (Printexc.to_string exn)); - `Nok*) - | exn -> raise exn - -let report (ok,nok,maybe,timeout) = - print_newline (); - print_endline "TestLibrary report"; - print_endline "Succeeded URIs:"; - List.iter (fun s -> print_endline ("\t" ^ s)) (List.rev !ok); - print_endline "Failed URIs:"; - List.iter (fun s -> print_endline ("\t" ^ s)) (List.rev !nok); - print_endline "Multiple answers URIs:"; - List.iter (fun s -> print_endline ("\t" ^ s)) (List.rev !maybe); - print_newline (); - print_endline ("URIs that timeout (" ^ string_of_int !time_out ^ "s):"); - List.iter (fun s -> print_endline ("\t" ^ s)) (List.rev !timeout); - print_newline () - -let do_uri typecheck (ok, nok, maybe, timeout) uri = - let uri_str = UriManager.string_of_uri uri in - printf "Testing URI: %-55s %!" (uri_str ^ " ..."); - (match test_uri typecheck uri with - | `Ok -> - print_endline "[ OK ]"; - ok := uri_str :: !ok - | `Nok -> - print_endline "[ FAILED ]"; - nok := uri_str :: !nok - | `Maybe -> - print_endline "[ MANY ]"; - maybe := uri_str :: !maybe - | `TimeOut -> - print_endline "[TIMEOUT!]"; - timeout := uri_str :: !timeout) - -let do_file typecheck status fname = - try - let ic = open_in fname in - (try - while true do - let line = input_line ic in - try - let uri = UriManager.uri_of_string line in - do_uri typecheck status uri - with UriManager.IllFormedUri _ -> - printf "Error parsing URI '%s', ignoring it" line - done - with End_of_file -> - close_in ic) - with exn -> - printf "Error trying to access '%s' (%s), skipping the file\n%!" - fname (Printexc.to_string exn) - -let _ = - HelmLogger.register_log_callback - (fun ?(append_NL = true) msg -> - (if append_NL then prerr_endline else prerr_string) - (HelmLogger.string_of_html_msg msg)); - let names = ref [] in - let tryvars = ref false in - let typecheck = ref false in - let prefix = ref "" in - let varsprefix = ref "####" in - let usage = "testlibrary [OPTION] ... (uri1 | file1) (uri2 | file2) ..." in - let spec = - [ "-vars", Arg.Set tryvars, "try also variables" ; - "-novars", Arg.Clear tryvars, "do not try variables (default)" ; - "-prefix", Arg.Set_string prefix, - "limit object choices to URIs beginning with prefix" ; - "-varsprefix", Arg.Set_string varsprefix, - "limit variable choices to URIs beginning with prefix; overrides -prefix" ; - "-timeout", Arg.Set_int time_out, - "number of seconds before a timeout; 0 means no timeout"; - "-typecheck", Arg.Set typecheck, "simply typechek the uri" - ] - in - Arg.parse spec (fun name -> names := name :: !names) usage; - let names = List.rev !names in - if !varsprefix = "####" then varsprefix := !prefix ; - uri_predicate := - BatchParser.uri_pred_of_conf !tryvars ~prefix:!prefix ~varsprefix:!varsprefix; - let status = (ref [], ref [], ref [], ref []) in (* URIs *) - List.iter - (fun name -> - try - let uri = UriManager.uri_of_string name in - do_uri !typecheck status uri - with UriManager.IllFormedUri _ -> - if Sys.file_exists name then - do_file !typecheck status name - else - printf "Don't know what to do with '%s', ignoring it\n%!" name) - names ; - report status diff --git a/helm/gTopLevel/tests/.cvsignore b/helm/gTopLevel/tests/.cvsignore deleted file mode 100644 index 8fa95a300..000000000 --- a/helm/gTopLevel/tests/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.env *.report diff --git a/helm/gTopLevel/tests/apply00.cic b/helm/gTopLevel/tests/apply00.cic deleted file mode 100644 index f320002f7..000000000 --- a/helm/gTopLevel/tests/apply00.cic +++ /dev/null @@ -1 +0,0 @@ -\forall x,y,f. x=y \to (f x) = (f y) diff --git a/helm/gTopLevel/tests/fix00.cic b/helm/gTopLevel/tests/fix00.cic deleted file mode 100644 index f7b196c87..000000000 --- a/helm/gTopLevel/tests/fix00.cic +++ /dev/null @@ -1,8 +0,0 @@ -let rec fact = - \lambda x:nat. - [\lambda x:nat. nat] - match x:nat with - [ O \Rightarrow 1 - | (S (x: nat)) \Rightarrow (mult (S x) (fact x)) ] -in -(fact 4) diff --git a/helm/gTopLevel/tests/fix00.cic.test b/helm/gTopLevel/tests/fix00.cic.test deleted file mode 100644 index c3a4cfcd2..000000000 --- a/helm/gTopLevel/tests/fix00.cic.test +++ /dev/null @@ -1,222 +0,0 @@ -let rec fact = - \lambda x:nat. - [\lambda x:nat. nat] - match x:nat with - [ O \Rightarrow 1 - | (S (x: nat)) \Rightarrow (mult (S x) (fact x)) ] -in -(fact 4) -###### INTERPRETATION NUMBER 1 ###### -### (* disambiguation environment *) -alias id S = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2) -alias id mult = cic:/Coq/Init/Peano/mult.con -alias id nat = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1) -alias num (instance 0) = "natural number" -### (* METASENV after disambiguation *) - -### (* TERM after disambiguation *) -[fact:= -Fix fact { -fact / 0 : (nat->nat) := -[x:nat] -<[x:nat]nat>Cases x of - O => (S O) - S => [x:nat](mult (S x) (fact x)) -end} -](fact (S (S (S (S O))))) -### (* TYPE_OF the disambiguated term *) -nat -### (* REDUCED disambiguated term *) -(S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - O (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - O O)) (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - O O)) O)))))) (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - O (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - O O)) (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - O O)) O)))))) (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - O (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - O O)) (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - O O)) O)))))) (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - O (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - O O)) (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - (S ( -Fix plus { -plus / 0 : (nat->(nat->nat)) := -[n:nat][m:nat] -<[n0:nat]nat>Cases n of - O => m - S => [p:nat](S (plus p m)) -end} - O O)) O)))))) O)))))))) diff --git a/helm/gTopLevel/tests/forall00.cic b/helm/gTopLevel/tests/forall00.cic deleted file mode 100644 index e53571c50..000000000 --- a/helm/gTopLevel/tests/forall00.cic +++ /dev/null @@ -1 +0,0 @@ -\forall n:nat. \forall m. n + m = n diff --git a/helm/gTopLevel/tests/forall00.cic.test b/helm/gTopLevel/tests/forall00.cic.test deleted file mode 100644 index fccef764e..000000000 --- a/helm/gTopLevel/tests/forall00.cic.test +++ /dev/null @@ -1,14 +0,0 @@ -\forall n:nat. \forall m. n + m = n -###### INTERPRETATION NUMBER 1 ###### -### (* disambiguation environment *) -alias id nat = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1) -alias symbol "eq" (instance 0) = "leibnitz's equality" -alias symbol "plus" (instance 0) = "natural plus" -### (* METASENV after disambiguation *) - -### (* TERM after disambiguation *) -(n:nat)(m:nat)(eq nat (plus n m) n) -### (* TYPE_OF the disambiguated term *) -Prop -### (* REDUCED disambiguated term *) -(n:nat)(m:nat)(eq nat (plus n m) n) diff --git a/helm/gTopLevel/tests/lambda01.cic b/helm/gTopLevel/tests/lambda01.cic deleted file mode 100644 index 29f7a95dd..000000000 --- a/helm/gTopLevel/tests/lambda01.cic +++ /dev/null @@ -1,2 +0,0 @@ -(\lambda f. (f 0 (le_n 0)) - \lambda n. \lambda H. (refl_equal nat 0)) diff --git a/helm/gTopLevel/tests/lambda01.cic.test b/helm/gTopLevel/tests/lambda01.cic.test deleted file mode 100644 index 6140de0b1..000000000 --- a/helm/gTopLevel/tests/lambda01.cic.test +++ /dev/null @@ -1,16 +0,0 @@ -(\lambda f. (f 0 (le_n 0)) - \lambda n. \lambda H. (refl_equal nat 0)) -###### INTERPRETATION NUMBER 1 ###### -### (* disambiguation environment *) -alias id le_n = cic:/Coq/Init/Peano/le.ind#xpointer(1/1/1) -alias id nat = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1) -alias id refl_equal = cic:/Coq/Init/Logic/eq.ind#xpointer(1/1/1) -alias num (instance 0) = "natural number" -### (* METASENV after disambiguation *) - -### (* TERM after disambiguation *) -([f:(nat->((le O O)->(eq nat O O)))](f O (le_n O)) [n:nat][H:(le O O)](refl_equal nat O)) -### (* TYPE_OF the disambiguated term *) -(eq nat O O) -### (* REDUCED disambiguated term *) -(refl_equal nat O) diff --git a/helm/gTopLevel/tests/lambda02.cic b/helm/gTopLevel/tests/lambda02.cic deleted file mode 100644 index dc6d57916..000000000 --- a/helm/gTopLevel/tests/lambda02.cic +++ /dev/null @@ -1 +0,0 @@ -\lambda f:(\forall n:nat. (\forall H:(le 0 n). (n=n))). (f 0 (le_n 0)) diff --git a/helm/gTopLevel/tests/lambda02.cic.test b/helm/gTopLevel/tests/lambda02.cic.test deleted file mode 100644 index 2d813315c..000000000 --- a/helm/gTopLevel/tests/lambda02.cic.test +++ /dev/null @@ -1,16 +0,0 @@ -\lambda f:(\forall n:nat. (\forall H:(le 0 n). (n=n))). (f 0 (le_n 0)) -###### INTERPRETATION NUMBER 1 ###### -### (* disambiguation environment *) -alias id le = cic:/Coq/Init/Peano/le.ind#xpointer(1/1) -alias id le_n = cic:/Coq/Init/Peano/le.ind#xpointer(1/1/1) -alias id nat = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1) -alias num (instance 0) = "natural number" -alias symbol "eq" (instance 0) = "leibnitz's equality" -### (* METASENV after disambiguation *) - -### (* TERM after disambiguation *) -[f:(n:nat)((le O n)->(eq nat n n))](f O (le_n O)) -### (* TYPE_OF the disambiguated term *) -(f:(n:nat)((le O n)->(eq nat n n)))(eq nat O O) -### (* REDUCED disambiguated term *) -[f:(n:nat)((le O n)->(eq nat n n))](f O (le_n O)) diff --git a/helm/gTopLevel/tests/lambda03.cic b/helm/gTopLevel/tests/lambda03.cic deleted file mode 100644 index 0279eeecc..000000000 --- a/helm/gTopLevel/tests/lambda03.cic +++ /dev/null @@ -1,3 +0,0 @@ -\lambda n:nat. - \lambda H:n=n. - \lambda g:(?\to (le n 0))\to True.(g (\lambda f.(f n H))) diff --git a/helm/gTopLevel/tests/lambda03.cic.test b/helm/gTopLevel/tests/lambda03.cic.test deleted file mode 100644 index 6ae0213b1..000000000 --- a/helm/gTopLevel/tests/lambda03.cic.test +++ /dev/null @@ -1,17 +0,0 @@ -\lambda n:nat. - \lambda H:n=n.\lambda g:(?\to (le n 0))\to True.(g \lambda f.(f n H)) -###### INTERPRETATION NUMBER 1 ###### -### (* disambiguation environment *) -alias id True = cic:/Coq/Init/Logic/True.ind#xpointer(1/1) -alias id le = cic:/Coq/Init/Peano/le.ind#xpointer(1/1) -alias id nat = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1) -alias num (instance 0) = "natural number" -alias symbol "eq" (instance 0) = "leibnitz's equality" -### (* METASENV after disambiguation *) - -### (* TERM after disambiguation *) -[n:nat][H:(eq nat n n)][g:(((x:nat)((eq nat x x)->(le x O))->(le n O))->True)](g [f:(x:nat)((eq nat x x)->(le x O))](f n H)) -### (* TYPE_OF the disambiguated term *) -(n:nat)(H:(eq nat n n))(g:(((x:nat)((eq nat x x)->(le x O))->(le n O))->True))True -### (* REDUCED disambiguated term *) -[n:nat][H:(eq nat n n)][g:(((x:nat)((eq nat x x)->(le x O))->(le n O))->True)](g [f:(x:nat)((eq nat x x)->(le x O))](f n H)) diff --git a/helm/gTopLevel/tests/match00.cic b/helm/gTopLevel/tests/match00.cic deleted file mode 100644 index bcfd70ea7..000000000 --- a/helm/gTopLevel/tests/match00.cic +++ /dev/null @@ -1,6 +0,0 @@ -[\lambda x:nat. - [\lambda y:nat. Set] - match x:nat with [ O \Rightarrow nat | (S x) \Rightarrow bool ]] -match (S O):nat with -[ O \Rightarrow O -| (S x) \Rightarrow false ] diff --git a/helm/gTopLevel/tests/match00.cic.test b/helm/gTopLevel/tests/match00.cic.test deleted file mode 100644 index 28a4a412f..000000000 --- a/helm/gTopLevel/tests/match00.cic.test +++ /dev/null @@ -1,33 +0,0 @@ -[\lambda x:nat. - [\lambda y:nat. Set] - match x:nat with [ O \Rightarrow nat | (S x) \Rightarrow bool ]] -match (S O):nat with -[ O \Rightarrow O -| (S x) \Rightarrow false ] -###### INTERPRETATION NUMBER 1 ###### -### (* disambiguation environment *) -alias id O = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1) -alias id S = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2) -alias id bool = cic:/Coq/Init/Datatypes/bool.ind#xpointer(1/1) -alias id false = cic:/Coq/Init/Datatypes/bool.ind#xpointer(1/1/2) -alias id nat = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1) -### (* METASENV after disambiguation *) - -### (* TERM after disambiguation *) - -<[x:nat] -<[y:nat]Set>Cases x of - O => nat - S => [x:nat]bool -end>Cases (S O) of - O => O - S => [x:nat]false -end -### (* TYPE_OF the disambiguated term *) -([x:nat] -<[y:nat]Set>Cases x of - O => nat - S => [x:nat]bool -end (S O)) -### (* REDUCED disambiguated term *) -false diff --git a/helm/gTopLevel/tests/match01.cic b/helm/gTopLevel/tests/match01.cic deleted file mode 100644 index 04948778a..000000000 --- a/helm/gTopLevel/tests/match01.cic +++ /dev/null @@ -1,4 +0,0 @@ -[\lambda z:nat. \lambda h:(le O z). (eq nat O O)] -match (le_n O): le with -[ le_n \Rightarrow (refl_equal nat O) -| (le_S x y) \Rightarrow (refl_equal nat O) ] diff --git a/helm/gTopLevel/tests/match01.cic.test b/helm/gTopLevel/tests/match01.cic.test deleted file mode 100644 index 13fbce756..000000000 --- a/helm/gTopLevel/tests/match01.cic.test +++ /dev/null @@ -1,24 +0,0 @@ -[\lambda z:nat. \lambda h:(le O z). (eq nat O O)] -match (le_n O): le with -[ le_n \Rightarrow (refl_equal nat O) -| (le_S x y) \Rightarrow (refl_equal nat O) ] -###### INTERPRETATION NUMBER 1 ###### -### (* disambiguation environment *) -alias id O = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1) -alias id eq = cic:/Coq/Init/Logic/eq.ind#xpointer(1/1) -alias id le = cic:/Coq/Init/Peano/le.ind#xpointer(1/1) -alias id le_n = cic:/Coq/Init/Peano/le.ind#xpointer(1/1/1) -alias id nat = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1) -alias id refl_equal = cic:/Coq/Init/Logic/eq.ind#xpointer(1/1/1) -### (* METASENV after disambiguation *) - -### (* TERM after disambiguation *) - -<[z:nat][h:(le O z)](eq nat O O)>Cases (le_n O) of - le_n => (refl_equal nat O) - le_S => [x:nat][y:(le O x)](refl_equal nat O) -end -### (* TYPE_OF the disambiguated term *) -([z:nat][h:(le O z)](eq nat O O) O (le_n O)) -### (* REDUCED disambiguated term *) -(refl_equal nat O) diff --git a/helm/gTopLevel/tests/match02.cic b/helm/gTopLevel/tests/match02.cic deleted file mode 100644 index 4a5c69782..000000000 --- a/helm/gTopLevel/tests/match02.cic +++ /dev/null @@ -1,4 +0,0 @@ -[\lambda z:nat. \lambda h:(le 0 z). (le 0 (S z))] -match (le_S 0 0 (le_n 0)): le with -[ le_n \Rightarrow (le_S 0 0 (le_n 0)) -| (le_S x y) \Rightarrow (le_S 0 (S x) (le_S 0 x y)) ] diff --git a/helm/gTopLevel/tests/match02.cic.test b/helm/gTopLevel/tests/match02.cic.test deleted file mode 100644 index 08a583805..000000000 --- a/helm/gTopLevel/tests/match02.cic.test +++ /dev/null @@ -1,24 +0,0 @@ -[\lambda z:nat. \lambda h:(le 0 z). (le 0 (S z))] -match (le_S 0 0 (le_n 0)): le with -[ le_n \Rightarrow (le_S 0 0 (le_n 0)) -| (le_S x y) \Rightarrow (le_S 0 (S x) (le_S 0 x y)) ] -###### INTERPRETATION NUMBER 1 ###### -### (* disambiguation environment *) -alias id S = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2) -alias id le = cic:/Coq/Init/Peano/le.ind#xpointer(1/1) -alias id le_S = cic:/Coq/Init/Peano/le.ind#xpointer(1/1/2) -alias id le_n = cic:/Coq/Init/Peano/le.ind#xpointer(1/1/1) -alias id nat = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1) -alias num (instance 0) = "natural number" -### (* METASENV after disambiguation *) - -### (* TERM after disambiguation *) - -<[z:nat][h:(le O z)](le O (S z))>Cases (le_S O O (le_n O)) of - le_n => (le_S O O (le_n O)) - le_S => [x:nat][y:(le O x)](le_S O (S x) (le_S O x y)) -end -### (* TYPE_OF the disambiguated term *) -([z:nat][h:(le O z)](le O (S z)) (S O) (le_S O O (le_n O))) -### (* REDUCED disambiguated term *) -(le_S O (S O) (le_S O O (le_n O))) diff --git a/helm/gTopLevel/tests/match03.cic b/helm/gTopLevel/tests/match03.cic deleted file mode 100644 index e4064b378..000000000 --- a/helm/gTopLevel/tests/match03.cic +++ /dev/null @@ -1,4 +0,0 @@ -[\lambda x:bool. nat] -match true:bool with -[ true \Rightarrow O -| false \Rightarrow (S O) ] diff --git a/helm/gTopLevel/tests/match03.cic.test b/helm/gTopLevel/tests/match03.cic.test deleted file mode 100644 index bc5db2d04..000000000 --- a/helm/gTopLevel/tests/match03.cic.test +++ /dev/null @@ -1,23 +0,0 @@ -[\lambda x:bool. nat] -match true:bool with -[ true \Rightarrow O -| false \Rightarrow (S O) ] -###### INTERPRETATION NUMBER 1 ###### -### (* disambiguation environment *) -alias id O = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1) -alias id S = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2) -alias id bool = cic:/Coq/Init/Datatypes/bool.ind#xpointer(1/1) -alias id nat = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1) -alias id true = cic:/Coq/Init/Datatypes/bool.ind#xpointer(1/1/1) -### (* METASENV after disambiguation *) - -### (* TERM after disambiguation *) - -<[x:bool]nat>Cases true of - true => O - false => (S O) -end -### (* TYPE_OF the disambiguated term *) -([x:bool]nat true) -### (* REDUCED disambiguated term *) -O diff --git a/helm/gTopLevel/tests/match04.cic b/helm/gTopLevel/tests/match04.cic deleted file mode 100644 index 6de9a5ba1..000000000 --- a/helm/gTopLevel/tests/match04.cic +++ /dev/null @@ -1,4 +0,0 @@ -[\lambda x:nat. nat] -match O:nat with -[ O \Rightarrow O -| (S x) \Rightarrow (S (S x)) ] diff --git a/helm/gTopLevel/tests/match04.cic.test b/helm/gTopLevel/tests/match04.cic.test deleted file mode 100644 index 8befe4c3d..000000000 --- a/helm/gTopLevel/tests/match04.cic.test +++ /dev/null @@ -1,21 +0,0 @@ -[\lambda x:nat. nat] -match O:nat with -[ O \Rightarrow O -| (S x) \Rightarrow (S (S x)) ] -###### INTERPRETATION NUMBER 1 ###### -### (* disambiguation environment *) -alias id O = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1) -alias id S = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2) -alias id nat = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1) -### (* METASENV after disambiguation *) - -### (* TERM after disambiguation *) - -<[x:nat]nat>Cases O of - O => O - S => [x:nat](S (S x)) -end -### (* TYPE_OF the disambiguated term *) -([x:nat]nat O) -### (* REDUCED disambiguated term *) -O diff --git a/helm/gTopLevel/tests/match05.cic b/helm/gTopLevel/tests/match05.cic deleted file mode 100644 index 10a54db0d..000000000 --- a/helm/gTopLevel/tests/match05.cic +++ /dev/null @@ -1,4 +0,0 @@ -[\lambda x:list. list] -match nil:list with -[ nil \Rightarrow nil -| (cons x y) \Rightarrow (cons x y) ] diff --git a/helm/gTopLevel/tests/match05.cic.test b/helm/gTopLevel/tests/match05.cic.test deleted file mode 100644 index 1e80b5748..000000000 --- a/helm/gTopLevel/tests/match05.cic.test +++ /dev/null @@ -1,72 +0,0 @@ -[\lambda x:list. list] -match nil:list with -[ nil \Rightarrow nil -| (cons x y) \Rightarrow (cons x y) ] -###### INTERPRETATION NUMBER 1 ###### -### (* disambiguation environment *) -alias id cons = cic:/CoRN/algebra/ListType/list.ind#xpointer(1/1/2) -alias id list = cic:/CoRN/algebra/ListType/list.ind#xpointer(1/1) -alias id nil = cic:/CoRN/algebra/ListType/list.ind#xpointer(1/1/1) -### (* METASENV after disambiguation *) -_ :? _; _ :? _ |- ?25: Type -### (* TERM after disambiguation *) - -<[x:list{A:=?25[_ ; _]}]list{A:=?25[_ ; _]}>Cases nil{A:=?25[_ ; _]} of - nil => nil{A:=?25[_ ; _]} - cons => [x:?25[_ ; _]][y:list{A:=?25[_ ; x]}](cons{A:=?25[x ; y]} x y) -end -### (* TYPE_OF the disambiguated term *) -([x:list{A:=?25[_ ; _]}]list{A:=?25[_ ; _]} nil{A:=?25[_ ; _]}) -### (* REDUCED disambiguated term *) -nil{A:=?25[_ ; _]} -###### INTERPRETATION NUMBER 2 ###### -### (* disambiguation environment *) -alias id cons = cic:/Coq/Lists/List/list.ind#xpointer(1/1/2) -alias id list = cic:/Coq/Lists/List/list.ind#xpointer(1/1) -alias id nil = cic:/Coq/Lists/List/list.ind#xpointer(1/1/1) -### (* METASENV after disambiguation *) -_ :? _; _ :? _ |- ?25: Set -### (* TERM after disambiguation *) - -<[x:list{A:=?25[_ ; _]}]list{A:=?25[_ ; _]}>Cases nil{A:=?25[_ ; _]} of - nil => nil{A:=?25[_ ; _]} - cons => [x:?25[_ ; _]][y:list{A:=?25[_ ; x]}](cons{A:=?25[x ; y]} x y) -end -### (* TYPE_OF the disambiguated term *) -([x:list{A:=?25[_ ; _]}]list{A:=?25[_ ; _]} nil{A:=?25[_ ; _]}) -### (* REDUCED disambiguated term *) -nil{A:=?25[_ ; _]} -###### INTERPRETATION NUMBER 3 ###### -### (* disambiguation environment *) -alias id cons = cic:/Coq/Lists/MonoList/list.ind#xpointer(1/1/2) -alias id list = cic:/Coq/Lists/MonoList/list.ind#xpointer(1/1) -alias id nil = cic:/Coq/Lists/MonoList/list.ind#xpointer(1/1/1) -### (* METASENV after disambiguation *) - -### (* TERM after disambiguation *) - -<[x:list]list>Cases nil of - nil => nil - cons => [x:A][y:list](cons x y) -end -### (* TYPE_OF the disambiguated term *) -([x:list]list nil) -### (* REDUCED disambiguated term *) -nil -###### INTERPRETATION NUMBER 4 ###### -### (* disambiguation environment *) -alias id cons = cic:/Lannion/continuations/weight/specif/list.ind#xpointer(1/1/2) -alias id list = cic:/Lannion/continuations/weight/specif/list.ind#xpointer(1/1) -alias id nil = cic:/Lannion/continuations/weight/specif/list.ind#xpointer(1/1/1) -### (* METASENV after disambiguation *) -_ :? _; _ :? _ |- ?25: Set -### (* TERM after disambiguation *) - -<[x:list{A:=?25[_ ; _]}]list{A:=?25[_ ; _]}>Cases nil{A:=?25[_ ; _]} of - nil => nil{A:=?25[_ ; _]} - cons => [x:?25[_ ; _]][y:list{A:=?25[_ ; x]}](cons{A:=?25[x ; y]} x y) -end -### (* TYPE_OF the disambiguated term *) -([x:list{A:=?25[_ ; _]}]list{A:=?25[_ ; _]} nil{A:=?25[_ ; _]}) -### (* REDUCED disambiguated term *) -nil{A:=?25[_ ; _]} diff --git a/helm/gTopLevel/tests/match06.cic b/helm/gTopLevel/tests/match06.cic deleted file mode 100644 index fd9677fc1..000000000 --- a/helm/gTopLevel/tests/match06.cic +++ /dev/null @@ -1,3 +0,0 @@ -\lambda x:False. - [\lambda h:False. True] - match x:False with [] diff --git a/helm/gTopLevel/tests/match06.cic.test b/helm/gTopLevel/tests/match06.cic.test deleted file mode 100644 index eb134e429..000000000 --- a/helm/gTopLevel/tests/match06.cic.test +++ /dev/null @@ -1,19 +0,0 @@ -\lambda x:False. - [\lambda h:False. True] - match x:False with [] -###### INTERPRETATION NUMBER 1 ###### -### (* disambiguation environment *) -alias id False = cic:/Coq/Init/Logic/False.ind#xpointer(1/1) -alias id True = cic:/Coq/Init/Logic/True.ind#xpointer(1/1) -### (* METASENV after disambiguation *) - -### (* TERM after disambiguation *) -[x:False] -<[h:False]True>Cases x of -end -### (* TYPE_OF the disambiguated term *) -(x:False)([h:False]True x) -### (* REDUCED disambiguated term *) -[x:False] -<[h:False]True>Cases x of -end diff --git a/helm/gTopLevel/tests/match07.cic b/helm/gTopLevel/tests/match07.cic deleted file mode 100644 index 15ead0774..000000000 --- a/helm/gTopLevel/tests/match07.cic +++ /dev/null @@ -1,4 +0,0 @@ -[\lambda x:bool. nat] -match true with -[ true \Rightarrow O -| false \Rightarrow (S O) ] diff --git a/helm/gTopLevel/tests/match07.cic.test b/helm/gTopLevel/tests/match07.cic.test deleted file mode 100644 index 690ccd28a..000000000 --- a/helm/gTopLevel/tests/match07.cic.test +++ /dev/null @@ -1,23 +0,0 @@ -[\lambda x:bool. nat] -match true with -[ true \Rightarrow O -| false \Rightarrow (S O) ] -###### INTERPRETATION NUMBER 1 ###### -### (* disambiguation environment *) -alias id O = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1) -alias id S = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2) -alias id bool = cic:/Coq/Init/Datatypes/bool.ind#xpointer(1/1) -alias id nat = cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1) -alias id true = cic:/Coq/Init/Datatypes/bool.ind#xpointer(1/1/1) -### (* METASENV after disambiguation *) - -### (* TERM after disambiguation *) - -<[x:bool]nat>Cases true of - true => O - false => (S O) -end -### (* TYPE_OF the disambiguated term *) -([x:bool]nat true) -### (* REDUCED disambiguated term *) -O diff --git a/helm/gTopLevel/texTermEditor.ml b/helm/gTopLevel/texTermEditor.ml deleted file mode 100644 index 5ea965f2f..000000000 --- a/helm/gTopLevel/texTermEditor.ml +++ /dev/null @@ -1,239 +0,0 @@ -(* Copyright (C) 2000-2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -let debug = true -let debug_print s = if debug then prerr_endline s - -(******************************************************************************) -(* *) -(* PROJECT HELM *) -(* *) -(* Claudio Sacerdoti Coen *) -(* 06/01/2002 *) -(* *) -(* *) -(******************************************************************************) - -(* A WIDGET TO ENTER CIC TERMS *) - -class type term_editor = - object - method coerce : GObj.widget - (* get_as_string returns the unquoted string *) - method get_as_string : string - method get_metasenv_and_term : - context:Cic.context -> - metasenv:Cic.metasenv -> - Cic.metasenv * Cic.term * CicUniv.universe_graph - method reset : unit - (* The input of set_term is unquoted *) - method set_term : string -> unit - method environment : DisambiguatingParser.EnvironmentP3.t ref - end -;; - -module Make(C:DisambiguateTypes.Callbacks) = - struct - - module Disambiguate' = DisambiguatingParser.Make(C);; - - class term_editor_impl - ~dbd - ?packing ?width ?height - ?isnotempty_callback ?share_environment_with () : term_editor - = - let mmlwidget = - GMathViewAux.single_selection_math_view - ?packing ?width ?height () in -(* - let drawing_area = mmlwidget#get_drawing_area in - let _ = drawing_area#misc#set_can_focus true in - let _ = drawing_area#misc#grab_focus () in -*) - let logger = - fun l s -> prerr_endline ("TERM_EDITOR (" ^ string_of_int l ^ "): " ^ s) in - let tex_editor = - Mathml_editor.create - ~alt_lexer:true - ~dictionary_uri:"dictionary-cic.xml" - ~mml_uri:Mathml_editor.default_mathml_stylesheet_path -(*CSC: togliere il path assoluto - ~tml_uri:Mathml_editor.default_tex_stylesheet_path -*) - ~tml_uri:"/usr/share/editex/tml-litex.xsl" - ~log:logger - in -(* - let _ = - (new GObj.event_ops mmlwidget#coerce#as_widget)#connect#button_press - ~callback:(fun _ -> drawing_area#misc#grab_focus () ; true) in -*) - let _ = -(* (new GObj.event_ops drawing_area#coerce#as_widget)#connect#focus_in *) - (new GObj.event_ops mmlwidget#coerce#as_widget)#connect#focus_in - ~callback: - (fun _ -> - mmlwidget#freeze ; - Mathml_editor.cursor_show ~editor:tex_editor ; - mmlwidget#thaw ; - true) in - let _ = -(* (new GObj.event_ops drawing_area#coerce#as_widget)#connect#focus_out *) - (new GObj.event_ops mmlwidget#coerce#as_widget)#connect#focus_out - ~callback: - (fun _ -> - mmlwidget#freeze ; - Mathml_editor.cursor_hide ~editor:tex_editor ; - mmlwidget#thaw ; - true) in - let _ = Mathml_editor.push tex_editor '$' in - let dom_tree = Mathml_editor.get_mml tex_editor in - let _ = mmlwidget#load_root dom_tree#get_documentElement in - let _ = -(* drawing_area#event#connect#key_press *) - (new GObj.event_ops mmlwidget#coerce#as_widget)#connect#key_press - (function e -> - let key = GdkEvent.Key.keyval e in - mmlwidget#freeze ; - if - key >= 32 && key < 256 && - (GdkEvent.Key.state e = [] || GdkEvent.Key.state e = [`SHIFT]) - then - Mathml_editor.push tex_editor (Char.chr key) - else if key = GdkKeysyms._u then - begin - mmlwidget#freeze ; - ignore (Mathml_editor.freeze tex_editor) ; - Mathml_editor.reset tex_editor ; - Mathml_editor.push tex_editor '$' ; - ignore (Mathml_editor.thaw tex_editor) ; - mmlwidget#thaw - end - else if key = GdkKeysyms._BackSpace then - Mathml_editor.drop tex_editor - (List.mem `CONTROL (GdkEvent.Key.state e)) - else if key = GdkKeysyms._v then - ignore (mmlwidget#misc#convert_selection "STRING" Gdk.Atom.primary); - let hadj, _ = mmlwidget#get_adjustments in - mmlwidget#thaw ; - hadj#set_value hadj#upper ; - false) in - let environment = - match share_environment_with with - None -> - ref - (DisambiguatingParser.EnvironmentP3.of_string - DisambiguatingParser.EnvironmentP3.empty) - | Some obj -> obj#environment - in - let _ = - match isnotempty_callback with - None -> () - | Some callback -> - (* This approximation of the test that checks if the tree is empty *) - (* is utterly unprecise. We assume a tree to look as an empty tree *) - (* iff it is made of just one node m:mtext (which should be the *) - (* cursor). *) - let is_empty_tree () = - let root = dom_tree#get_documentElement in - match root#get_firstChild with - None -> true - | Some n -> n#get_nodeName#to_string = "m:mtext" - in - dom_tree#addEventListener - ~typ:(Gdome.domString "DOMSubtreeModified") - ~listener: - (Gdome.eventListener - (function _ -> callback (not (is_empty_tree ())))) - ~useCapture:false - in - object(self) - - initializer - ignore (mmlwidget#misc#connect#selection_received - ~callback: (fun selection_data ~time -> - let input = try selection_data#data with Gpointer.Null -> "" in - mmlwidget#freeze ; - ignore (Mathml_editor.freeze tex_editor) ; - for i = 0 to String.length input - 1 do - Mathml_editor.push tex_editor input.[i] - done; - ignore (Mathml_editor.thaw tex_editor) ; - mmlwidget#thaw)) - - method coerce = mmlwidget#coerce - method reset = - mmlwidget#freeze ; - ignore (Mathml_editor.freeze tex_editor) ; - Mathml_editor.reset tex_editor ; - Mathml_editor.push tex_editor '$' ; - ignore (Mathml_editor.thaw tex_editor) ; - mmlwidget#thaw - - (* The input of set_term is unquoted *) - method set_term txt = - mmlwidget#freeze ; - ignore (Mathml_editor.freeze tex_editor) ; - self#reset ; - let txt' = Str.global_replace (Str.regexp "_") "\\_" txt in - String.iter (fun ch -> Mathml_editor.push tex_editor ch) txt' ; - ignore (Mathml_editor.thaw tex_editor) ; - mmlwidget#thaw - - (* get_as_string returns the unquoted string *) - method get_as_string = - let term = Mathml_editor.get_tex tex_editor in - Str.global_replace (Str.regexp "^\\$\\$?") "" - (Str.global_replace (Str.regexp "\\$\\$?$") "" - (Str.global_replace (Str.regexp "\\\\_") "_" term)) - - method get_metasenv_and_term ~context ~metasenv = - let name_context = - List.map - (function - Some (n,_) -> Some n - | None -> None - ) context - in - debug_print ("TexTermEditor: Raw Tex: " ^ (Mathml_editor.get_tex tex_editor)) ; - let environment',metasenv,expr,ugraph = - match - Disambiguate'.disambiguate_term ~dbd - ~context ~metasenv (Mathml_editor.get_tex tex_editor) - ~initial_ugraph:CicUniv.empty_ugraph ~aliases:!environment - with - [environment',metasenv,expr,u] -> environment',metasenv,expr,u - | _ -> assert false - in - environment := environment' ; - metasenv,expr,ugraph - - method environment = environment - end - - let term_editor = new term_editor_impl - -end -;; diff --git a/helm/gTopLevel/texTermEditor.mli b/helm/gTopLevel/texTermEditor.mli deleted file mode 100644 index ece0bd8d9..000000000 --- a/helm/gTopLevel/texTermEditor.mli +++ /dev/null @@ -1,51 +0,0 @@ -(* Copyright (C) 2000-2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -class type term_editor = - object - method coerce : GObj.widget - (* get_as_string returns the unquoted string *) - method get_as_string : string - method get_metasenv_and_term : - context:Cic.context -> - metasenv:Cic.metasenv -> - Cic.metasenv * Cic.term * CicUniv.universe_graph - method reset : unit - (* The input of set_term is unquoted *) - method set_term : string -> unit - method environment : DisambiguatingParser.EnvironmentP3.t ref - end - -module Make (C : DisambiguateTypes.Callbacks) : - sig - val term_editor : - dbd:Mysql.dbd -> - ?packing:(GObj.widget -> unit) -> - ?width:int -> - ?height:int -> - ?isnotempty_callback:(bool -> unit) -> - ?share_environment_with:term_editor -> - unit -> term_editor - end diff --git a/helm/gTopLevel/typecheck_uri.ml b/helm/gTopLevel/typecheck_uri.ml deleted file mode 100644 index e6df5cd61..000000000 --- a/helm/gTopLevel/typecheck_uri.ml +++ /dev/null @@ -1,23 +0,0 @@ - - -open Printf - -let _ = Helm_registry.load_from "gTopLevel.conf.xml" - -let test_uri uri = - (try - Printf.printf "%s ... " uri; - let uri = UriManager.uri_of_string uri in - flush stdout; - ignore (CicTypeChecker.typecheck uri); - print_endline "ok"; - with _ -> print_endline "failure"); - flush stdout - -let _ = - try - while true do - test_uri (input_line stdin) - done - with End_of_file -> () - diff --git a/helm/graphs/jsmenu/HM_Arrays.js b/helm/graphs/jsmenu/HM_Arrays.js deleted file mode 100644 index 467506c3d..000000000 --- a/helm/graphs/jsmenu/HM_Arrays.js +++ /dev/null @@ -1,250 +0,0 @@ - -HM_Array1 = [ -[150,,, -,,,,,,,,,,,,,,,, -1,true], -["Experts","http://www.webreference.com/experts/",1,0,1], -["Contents","http://www.webreference.com/index2.html",1,0,0], -["Services","http://www.webreference.com/index2.html",1,0,1], -["About","http://www.webreference.com/about.html",1,0,0], -["Hot Sites","http://www.webreference.com/hot/",1,0,1] -] - -HM_Array1_1 = [ -[], -["3-D Animation","http://www.webreference.com/3d/",1,0,0], -["Design","http://www.webreference.com/dlab/",1,0,0], -["HTML","http://www.webreference.com/html/",1,0,0], -["JavaScript","http://www.webreference.com/js/",1,0,0], -["Graphics","http://www.webreference.com/graphics/",1,0,0], -["DHTML","http://www.webreference.com/dhtml/",1,0,1], -["Perl","http://www.webreference.com/perl/",1,0,0], -["XML","http://www.webreference.com/xml/",1,0,0] -] - -HM_Array1_3 = [ -[], -["Features","http://www.webreference.com/articles.html",1,0,0], -["Forum","http://www.webreference.com/cgi-bin/Ultimate.cgi?action=intro",1,0,0], -["How-to","http://www.webreference.com/dev/",1,0,0], -["New","http://www.webreference.com/headlines/",1,0,0], -["Hot Sites","http://www.webreference.com/hot/",1,0,0] -] - -HM_Array1_5 = [ -[], -["3-D Animation","http://www.webreference.com/3d/",1,0,0], -["Design","http://www.webreference.com/dlab/",1,0,0], -["HTML","http://www.webreference.com/html/",1,0,0], -["JavaScript","http://www.webreference.com/js/",1,0,0], -["Graphics","http://www.webreference.com/graphics/",1,0,0], -["DHTML","http://www.webreference.com/dhtml/",1,0,1], -["Perl","http://www.webreference.com/perl/",1,0,0], -["XML","http://www.webreference.com/xml/",1,0,0] -] - -HM_Array1_1_6 = [ -[], -["Diner","http://www.webreference.com/dhtml/diner/",1,0,0], -["Dynomat","http://www.webreference.com/dhtml/dynomat/",1,0,0], -["Links","http://www.webreference.com/dhtml/links/",1,0,0] -] - -HM_Array2 = [ -[100, // menu width -"HM_f_CenterMenu('HM_Menu2')", // left_position -90, // top_position -"red", // font_color -"yellow", // mouseover_font_color -"yellow", // background_color -"black", // mouseover_background_color -"blue", // border_color -"green", // separator_color -1, // top_is_permanent -1, // top_is_horizontal -0, // tree_is_horizontal -1, // position_under -1, // top_more_images_visible -1, // tree_more_images_visible -"null", // evaluate_upon_tree_show -"null", // evaluate_upon_tree_hide -, // right_to_left -1], // display_on_click -["Experts","http://www.webreference.com/experts/",1,0,1], -["Contents","http://www.webreference.com/index2.html",1,0,0], -["Services","http://www.webreference.com/index2.html",1,0,1], -["About","http://www.webreference.com/about.html",1,0,1] -] - -HM_Array2_1 = [ -[], -["3-D Animation","http://www.webreference.com/3d/",1,0,0], -["Design","http://www.webreference.com/dlab/",1,0,0], -["HTML","http://www.webreference.com/html/",1,0,0], -["JavaScript","http://www.webreference.com/js/",1,0,0], -["Graphics","http://www.webreference.com/graphics/",1,0,0], -["DHTML","http://www.webreference.com/dhtml/",1,0,0], -["Perl","http://www.webreference.com/perl/",1,0,0], -["XML","http://www.webreference.com/xml/",1,0,0] -] - -HM_Array2_3 = [ -[], -["Features","http://www.webreference.com/articles.html",1,0,0], -["Forum","http://www.webreference.com/cgi-bin/Ultimate.cgi?action=intro",1,0,0], -["How-to","http://www.webreference.com/dev/",1,0,0], -["New","http://www.webreference.com/headlines/",1,0,0], -["Hot Sites","http://www.webreference.com/hot/",1,0,0] -] - -HM_Array2_4 = [ -[], -["Features","http://www.webreference.com/articles.html",1,0,0], -["Forum","http://www.webreference.com/cgi-bin/Ultimate.cgi?action=intro",1,0,0], -["How-to","http://www.webreference.com/dev/",1,0,0], -["New","http://www.webreference.com/headlines/",1,0,0], -["Hot Sites","http://www.webreference.com/hot/",1,0,0] -] - -HM_Array2_1_6 = [ -[], -["Diner","http://www.webreference.com/dhtml/diner/",1,0,0], -["Dynomat","http://www.webreference.com/dhtml/dynomat/",1,0,0], -["Links","http://www.webreference.com/dhtml/links/",1,0,0] -] - -HM_Array3 = [ -[120, // menu width -200, // left_position -300, // top_position -"black", // font_color -"white", // mouseover_font_color -"white", // background_color -"black", // mouseover_background_color -"black", // border_color -"gray", // separator_color -0, // top_is_permanent -0, // top_is_horizontal -0, // tree_is_horizontal -1, // position_under -1, // top_more_images_visible -1, // tree_more_images_visible -"null", // evaluate_upon_tree_show -"null", // evaluate_upon_tree_hide -, // right_to_left -], // display_on_click -["Experts","http://www.webreference.com/experts/",1,0,1], -["Contents","http://www.webreference.com/index2.html",1,0,0], -["Services","http://www.webreference.com/index2.html",1,0,1], -["About","http://www.webreference.com/about.html",1,0,0] -] - -HM_Array3_1 = [ -[], -["3-D Animation","http://www.webreference.com/3d/",1,0,0], -["Design","http://www.webreference.com/dlab/",1,0,0], -["HTML","http://www.webreference.com/html/",1,0,0], -["JavaScript","http://www.webreference.com/js/",1,0,0], -["Graphics","http://www.webreference.com/graphics/",1,0,0], -["DHTML","http://www.webreference.com/dhtml/",1,0,1], -["Perl","http://www.webreference.com/perl/",1,0,0], -["XML","http://www.webreference.com/xml/",1,0,0] -] - -HM_Array3_3 = [ -[], -["Features","http://www.webreference.com/articles.html",1,0,0], -["Forum","http://www.webreference.com/cgi-bin/Ultimate.cgi?action=intro",1,0,0], -["How-to","http://www.webreference.com/dev/",1,0,0], -["New","http://www.webreference.com/headlines/",1,0,0], -["Hot Sites","http://www.webreference.com/hot/",1,0,0] -] - -HM_Array3_1_6 = [ -[], -["Diner","http://www.webreference.com/dhtml/diner/",1,0,0], -["Dynomat","http://www.webreference.com/dhtml/dynomat/",1,0,0], -["Links","http://www.webreference.com/dhtml/links/",1,0,0] -] - -HM_Array4 = [ -[120, -"mouse_x_position + 20", -"mouse_y_position + 20", -,,,,,,,,,,,,,,, -true], -["Experts","http://www.webreference.com/experts/",1,0,1], -["Contents","http://www.webreference.com/index2.html",1,0,0], -["Services","http://www.webreference.com/index2.html",1,0,0], -["About","http://www.webreference.com/about.html",1,0,0] -] - -HM_Array4_1 = [ -[], -["3-D Animation","http://www.webreference.com/3d/",1,0,0], -["Design","http://www.webreference.com/dlab/",1,0,0], -["HTML","http://www.webreference.com/html/",1,0,0], -["JavaScript","http://www.webreference.com/js/",1,0,0], -["Graphics","http://www.webreference.com/graphics/",1,0,0], -["DHTML","http://www.webreference.com/dhtml/",1,0,0], -["Perl","http://www.webreference.com/perl/",1,0,0], -["XML","http://www.webreference.com/xml/",1,0,0] -] - -HM_Array5 = [ -[100, // menu_width -70, // left_position -170, // top_position -"red", // font_color -"yellow", // mouseover_font_color -"yellow", // background_color -"black", // mouseover_background_color -"blue", // border_color -"green", // separator_color -1, // top_is_permanent -1, // top_is_horizontal -0, // tree_is_horizontal -1, // position_under -0, // top_more_images_visible -1, // tree_more_images_visible -"null", // evaluate_upon_tree_show -"null", // evaluate_upon_tree_hide -, // right_to_left -, // display_on_click -true, // top_is_variable_width -, // tree_is_variable_width -], -["Experts","http://www.webreference.com/experts/",1,0,1], -["Contents","http://www.webreference.com/index2.html",1,0,0], -["Services","http://www.webreference.com/index2.html",1,0,1], -["About","http://www.webreference.com/about.html",1,0,0] -] - -HM_Array5_1 = [ -[], -["3-D Animation","http://www.webreference.com/3d/",1,0,0], -["Design","http://www.webreference.com/dlab/",1,0,0], -["HTML","http://www.webreference.com/html/",1,0,0], -["JavaScript","http://www.webreference.com/js/",1,0,0], -["Graphics","http://www.webreference.com/graphics/",1,0,0], -["DHTML","http://www.webreference.com/dhtml/",1,0,1], -["Perl","http://www.webreference.com/perl/",1,0,0], -["XML","http://www.webreference.com/xml/",1,0,0] -] - -HM_Array5_3 = [ -[], -["Features","http://www.webreference.com/articles.html",1,0,0], -["Forum","http://www.webreference.com/cgi-bin/Ultimate.cgi?action=intro",1,0,0], -["How-to","http://www.webreference.com/dev/",1,0,0], -["New","http://www.webreference.com/headlines/",1,0,0], -["Hot Sites","http://www.webreference.com/hot/",1,0,0] -] - -HM_Array5_1_6 = [ -[], -["Diner","http://www.webreference.com/dhtml/diner/",1,0,0], -["Dynomat","http://www.webreference.com/dhtml/dynomat/",1,0,0], -["Links","http://www.webreference.com/dhtml/links/",1,0,0] -] - diff --git a/helm/graphs/jsmenu/HM_Arrays_prova.js b/helm/graphs/jsmenu/HM_Arrays_prova.js deleted file mode 100644 index 93143accd..000000000 --- a/helm/graphs/jsmenu/HM_Arrays_prova.js +++ /dev/null @@ -1,60 +0,0 @@ - -HM_Array1 = [ -[150,,, -,,,,,,,,,,,,,,,, -1,true], -["Experts","http://www.webreference.com/experts/",1,0,1], -["Contents","http://www.webreference.com/index2.html",1,0,0], -["Services","http://www.webreference.com/index2.html",1,0,1], -["About","http://www.webreference.com/about.html",1,0,0], -["Hot Sites","http://www.webreference.com/hot/",1,0,1] -] - -HM_Array1_1 = [ -[], -["3-D Animation","http://www.webreference.com/3d/",1,0,0], -["Design","http://www.webreference.com/dlab/",1,0,0], -["HTML","http://www.webreference.com/html/",1,0,0], -["JavaScript","http://www.webreference.com/js/",1,0,0], -["Graphics","http://www.webreference.com/graphics/",1,0,0], -["DHTML","http://www.webreference.com/dhtml/",1,0,1], -["Perl","http://www.webreference.com/perl/",1,0,0], -["XML","http://www.webreference.com/xml/",1,0,0] -] - -HM_Array1_3 = [ -[], -["Features","http://www.webreference.com/articles.html",1,0,0], -["Forum","http://www.webreference.com/cgi-bin/Ultimate.cgi?action=intro",1,0,0], -["How-to","http://www.webreference.com/dev/",1,0,0], -["New","http://www.webreference.com/headlines/",1,0,0], -["Hot Sites","http://www.webreference.com/hot/",1,0,0] -] - -HM_Array1_5 = [ -[], -["3-D Animation","http://www.webreference.com/3d/",1,0,0], -["Design","http://www.webreference.com/dlab/",1,0,0], -["HTML","http://www.webreference.com/html/",1,0,0], -["JavaScript","http://www.webreference.com/js/",1,0,0], -["Graphics","http://www.webreference.com/graphics/",1,0,0], -["DHTML","http://www.webreference.com/dhtml/",1,0,1], -["Perl","http://www.webreference.com/perl/",1,0,0], -["XML","http://www.webreference.com/xml/",1,0,0] -] - -HM_Array1_1_6 = [ -[], -["Diner","http://www.webreference.com/dhtml/diner/",1,0,0], -["Dynomat","http://www.webreference.com/dhtml/dynomat/",1,0,0], -["Links","http://www.webreference.com/dhtml/links/",1,0,0] -] - -HM_Array2 = [ -[150,,, -,,,,,,,,,,,,,,,, -1,true], -["Pippo","http://www.inria.fr",1,0,1], -["Pluto","http://www.cs.unibo.it",1,0,0], -["Paperino","http://www.larepubblica.it",1,0,1], -] diff --git a/helm/graphs/jsmenu/HM_Loader.js b/helm/graphs/jsmenu/HM_Loader.js deleted file mode 100644 index 2c7e31f68..000000000 --- a/helm/graphs/jsmenu/HM_Loader.js +++ /dev/null @@ -1,89 +0,0 @@ -/*HM_Loader.js -* by Peter Belesis. v4.1.1 011002 -* Copyright (c) 2001 Peter Belesis. All Rights Reserved. -*/ - - HM_DOM = (document.getElementById) ? true : false; - HM_NS4 = (document.layers) ? true : false; - HM_IE = (document.all) ? true : false; - HM_IE4 = HM_IE && !HM_DOM; - HM_Mac = (navigator.appVersion.indexOf("Mac") != -1); - HM_IE4M = HM_IE4 && HM_Mac; - HM_Opera = (navigator.userAgent.indexOf("Opera")!=-1); - HM_Konqueror = (navigator.userAgent.indexOf("Konqueror")!=-1); - -HM_IsMenu = !HM_Opera && !HM_Konqueror && !HM_IE4M && (HM_DOM || HM_NS4 || HM_IE4); - -HM_BrowserString = HM_NS4 ? "NS4" : HM_DOM ? "DOM" : "IE4"; - - -if(window.event + "" == "undefined") event = null; -function HM_f_PopUp(){return false}; -function HM_f_PopDown(){return false}; -popUp = HM_f_PopUp; -popDown = HM_f_PopDown; - - -HM_GL_MenuWidth = 150; -HM_GL_FontFamily = "Arial,sans-serif"; -HM_GL_FontSize = 10; -HM_GL_FontBold = true; -HM_GL_FontItalic = false; -HM_GL_FontColor = "black"; -HM_GL_FontColorOver = "white"; -HM_GL_BGColor = "transparent"; -HM_GL_BGColorOver = "transparent"; -HM_GL_ItemPadding = 3; - -HM_GL_BorderWidth = 2; -HM_GL_BorderColor = "red"; -HM_GL_BorderStyle = "solid"; -HM_GL_SeparatorSize = 2; -HM_GL_SeparatorColor = "yellow"; - -HM_GL_ImageSrc = "HM_More_black_right.gif"; -HM_GL_ImageSrcLeft = "HM_More_black_left.gif"; - -HM_GL_ImageSrcOver = "HM_More_white_right.gif"; -HM_GL_ImageSrcLeftOver = "HM_More_white_left.gif"; - -HM_GL_ImageSize = 5; -HM_GL_ImageHorizSpace = 5; -HM_GL_ImageVertSpace = 5; - -HM_GL_KeepHilite = false; -HM_GL_ClickStart = false; -HM_GL_ClickKill = 0; -HM_GL_ChildOverlap = 40; -HM_GL_ChildOffset = 10; -HM_GL_ChildPerCentOver = null; -HM_GL_TopSecondsVisible = .5; -HM_GL_ChildSecondsVisible = .3; -HM_GL_StatusDisplayBuild = 0; -HM_GL_StatusDisplayLink = 1; -HM_GL_UponDisplay = null; -HM_GL_UponHide = null; - -HM_GL_RightToLeft = false; -HM_GL_CreateTopOnly = HM_NS4 ? true : false; -HM_GL_ShowLinkCursor = true; - -// the following function is included to illustrate the improved JS expression handling of -// the left_position and top_position parameters -// you may delete if you have no use for it - -function HM_f_CenterMenu(topmenuid) { - var MinimumPixelLeft = 0; - var TheMenu = HM_DOM ? document.getElementById(topmenuid) : HM_IE4 ? document.all(topmenuid) : eval("window." + topmenuid); - var TheMenuWidth = HM_DOM ? parseInt(TheMenu.style.width) : HM_IE4 ? TheMenu.style.pixelWidth : TheMenu.clip.width; - var TheWindowWidth = HM_IE ? document.body.clientWidth : window.innerWidth; - return Math.max(parseInt((TheWindowWidth-TheMenuWidth) / 2),MinimumPixelLeft); -} - -if(HM_IsMenu) { - document.write("<\/SCR" + "IPT>"); - document.write("<\/SCR" + "IPT>"); -} - - -//end \ No newline at end of file diff --git a/helm/graphs/jsmenu/HM_Loader_prova.js b/helm/graphs/jsmenu/HM_Loader_prova.js deleted file mode 100644 index ed8f95752..000000000 --- a/helm/graphs/jsmenu/HM_Loader_prova.js +++ /dev/null @@ -1,89 +0,0 @@ -/*HM_Loader.js -* by Peter Belesis. v4.1.1 011002 -* Copyright (c) 2001 Peter Belesis. All Rights Reserved. -*/ - - HM_DOM = (document.getElementById) ? true : false; - HM_NS4 = (document.layers) ? true : false; - HM_IE = (document.all) ? true : false; - HM_IE4 = HM_IE && !HM_DOM; - HM_Mac = (navigator.appVersion.indexOf("Mac") != -1); - HM_IE4M = HM_IE4 && HM_Mac; - HM_Opera = (navigator.userAgent.indexOf("Opera")!=-1); - HM_Konqueror = (navigator.userAgent.indexOf("Konqueror")!=-1); - -HM_IsMenu = !HM_Opera && !HM_Konqueror && !HM_IE4M && (HM_DOM || HM_NS4 || HM_IE4); - -HM_BrowserString = HM_NS4 ? "NS4" : HM_DOM ? "DOM" : "IE4"; - - -if(window.event + "" == "undefined") event = null; -function HM_f_PopUp(){return false}; -function HM_f_PopDown(){return false}; -popUp = HM_f_PopUp; -popDown = HM_f_PopDown; - - -HM_GL_MenuWidth = 150; -HM_GL_FontFamily = "Arial,sans-serif"; -HM_GL_FontSize = 10; -HM_GL_FontBold = true; -HM_GL_FontItalic = false; -HM_GL_FontColor = "black"; -HM_GL_FontColorOver = "white"; -HM_GL_BGColor = "transparent"; -HM_GL_BGColorOver = "transparent"; -HM_GL_ItemPadding = 3; - -HM_GL_BorderWidth = 2; -HM_GL_BorderColor = "red"; -HM_GL_BorderStyle = "solid"; -HM_GL_SeparatorSize = 2; -HM_GL_SeparatorColor = "yellow"; - -HM_GL_ImageSrc = "HM_More_black_right.gif"; -HM_GL_ImageSrcLeft = "HM_More_black_left.gif"; - -HM_GL_ImageSrcOver = "HM_More_white_right.gif"; -HM_GL_ImageSrcLeftOver = "HM_More_white_left.gif"; - -HM_GL_ImageSize = 5; -HM_GL_ImageHorizSpace = 5; -HM_GL_ImageVertSpace = 5; - -HM_GL_KeepHilite = false; -HM_GL_ClickStart = false; -HM_GL_ClickKill = 0; -HM_GL_ChildOverlap = 40; -HM_GL_ChildOffset = 10; -HM_GL_ChildPerCentOver = null; -HM_GL_TopSecondsVisible = .5; -HM_GL_ChildSecondsVisible = .3; -HM_GL_StatusDisplayBuild = 0; -HM_GL_StatusDisplayLink = 1; -HM_GL_UponDisplay = null; -HM_GL_UponHide = null; - -HM_GL_RightToLeft = false; -HM_GL_CreateTopOnly = HM_NS4 ? true : false; -HM_GL_ShowLinkCursor = true; - -// the following function is included to illustrate the improved JS expression handling of -// the left_position and top_position parameters -// you may delete if you have no use for it - -function HM_f_CenterMenu(topmenuid) { - var MinimumPixelLeft = 0; - var TheMenu = HM_DOM ? document.getElementById(topmenuid) : HM_IE4 ? document.all(topmenuid) : eval("window." + topmenuid); - var TheMenuWidth = HM_DOM ? parseInt(TheMenu.style.width) : HM_IE4 ? TheMenu.style.pixelWidth : TheMenu.clip.width; - var TheWindowWidth = HM_IE ? document.body.clientWidth : window.innerWidth; - return Math.max(parseInt((TheWindowWidth-TheMenuWidth) / 2),MinimumPixelLeft); -} - -if(HM_IsMenu) { - document.write("<\/SCR" + "IPT>"); - document.write("<\/SCR" + "IPT>"); -} - - -//end diff --git a/helm/graphs/jsmenu/HM_More_black_left.gif b/helm/graphs/jsmenu/HM_More_black_left.gif deleted file mode 100644 index ae9b1dd0f..000000000 Binary files a/helm/graphs/jsmenu/HM_More_black_left.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_black_right.gif b/helm/graphs/jsmenu/HM_More_black_right.gif deleted file mode 100644 index ca628ba69..000000000 Binary files a/helm/graphs/jsmenu/HM_More_black_right.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_blue_left.gif b/helm/graphs/jsmenu/HM_More_blue_left.gif deleted file mode 100644 index 1637826ab..000000000 Binary files a/helm/graphs/jsmenu/HM_More_blue_left.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_blue_right.gif b/helm/graphs/jsmenu/HM_More_blue_right.gif deleted file mode 100644 index ebc8f9bca..000000000 Binary files a/helm/graphs/jsmenu/HM_More_blue_right.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_cyan_left.gif b/helm/graphs/jsmenu/HM_More_cyan_left.gif deleted file mode 100644 index 48e832532..000000000 Binary files a/helm/graphs/jsmenu/HM_More_cyan_left.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_cyan_right.gif b/helm/graphs/jsmenu/HM_More_cyan_right.gif deleted file mode 100644 index 788d9d2be..000000000 Binary files a/helm/graphs/jsmenu/HM_More_cyan_right.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_green_left.gif b/helm/graphs/jsmenu/HM_More_green_left.gif deleted file mode 100644 index 132e1d2dd..000000000 Binary files a/helm/graphs/jsmenu/HM_More_green_left.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_green_right.gif b/helm/graphs/jsmenu/HM_More_green_right.gif deleted file mode 100644 index dfaaf00d0..000000000 Binary files a/helm/graphs/jsmenu/HM_More_green_right.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_magenta_left.gif b/helm/graphs/jsmenu/HM_More_magenta_left.gif deleted file mode 100644 index e6369cf7c..000000000 Binary files a/helm/graphs/jsmenu/HM_More_magenta_left.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_magenta_right.gif b/helm/graphs/jsmenu/HM_More_magenta_right.gif deleted file mode 100644 index 56179da04..000000000 Binary files a/helm/graphs/jsmenu/HM_More_magenta_right.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_red_left.gif b/helm/graphs/jsmenu/HM_More_red_left.gif deleted file mode 100644 index b36de2008..000000000 Binary files a/helm/graphs/jsmenu/HM_More_red_left.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_red_right.gif b/helm/graphs/jsmenu/HM_More_red_right.gif deleted file mode 100644 index 035f5e600..000000000 Binary files a/helm/graphs/jsmenu/HM_More_red_right.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_white_left.gif b/helm/graphs/jsmenu/HM_More_white_left.gif deleted file mode 100644 index 935308d99..000000000 Binary files a/helm/graphs/jsmenu/HM_More_white_left.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_white_right.gif b/helm/graphs/jsmenu/HM_More_white_right.gif deleted file mode 100644 index 969fc4972..000000000 Binary files a/helm/graphs/jsmenu/HM_More_white_right.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_yellow_left.gif b/helm/graphs/jsmenu/HM_More_yellow_left.gif deleted file mode 100644 index 8e10145ff..000000000 Binary files a/helm/graphs/jsmenu/HM_More_yellow_left.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_More_yellow_right.gif b/helm/graphs/jsmenu/HM_More_yellow_right.gif deleted file mode 100644 index 8a438b938..000000000 Binary files a/helm/graphs/jsmenu/HM_More_yellow_right.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/HM_ScriptDOM.js b/helm/graphs/jsmenu/HM_ScriptDOM.js deleted file mode 100644 index 498a5912b..000000000 --- a/helm/graphs/jsmenu/HM_ScriptDOM.js +++ /dev/null @@ -1,962 +0,0 @@ -/*HM_ScriptDOM.js -* by Peter Belesis. v4.1.1 011002 -* Copyright (c) 2001 Peter Belesis. All Rights Reserved. -* Originally published and documented at http://www.dhtmlab.com/ -* Available solely from INT Media Group. Incorporated under exclusive license. -* Contact licensing@internet.com for more information. -*/ - -HM_IE5M = HM_IE && HM_Mac; -HM_IE5W = HM_IE && !HM_Mac; -HM_NS6 = (navigator.vendor == ("Netscape6") || navigator.product == ("Gecko")); -HM_IEpos = HM_IE || (HM_NS6 && parseInt(navigator.productSub)>=20010710); -HM_IEDTD = (HM_IE && document.doctype) ? document.doctype.name.indexOf(".dtd")!=-1 : false; -HM_IEnoDTD = HM_IE && !HM_IEDTD; - -HM_a_Parameters = [ - ["MenuWidth", 150, "number"], - ["FontFamily", "Arial,sans-serif"], - ["FontSize", 10, "number"], - ["FontBold", false, "boolean"], - ["FontItalic", false, "boolean"], - ["FontColor", "black"], - ["FontColorOver", "white"], - ["BGColor", "white"], - ["BGColorOver", "black"], - ["ItemPadding", 3, "number"], - ["BorderWidth", 2, "number"], - ["BorderColor", "red"], - ["BorderStyle", "solid"], - ["SeparatorSize", 1, "number"], - ["SeparatorColor", "yellow"], - ["ImageSrc", "HM_More_black_right.gif"], - ["ImageSrcOver", null], - ["ImageSrcLeft", "HM_More_black_left.gif"], - ["ImageSrcLeftOver", null], - ["ImageSize", 5, "number"], - ["ImageHorizSpace", 0, "number"], - ["ImageVertSpace", 0, "number"], - ["KeepHilite", false, "boolean"], - ["ClickStart", false, "boolean"], - ["ClickKill", true, "boolean"], - ["ChildOverlap", 20, "number"], - ["ChildOffset", 10, "number"], - ["ChildPerCentOver", null, "number"], - ["TopSecondsVisible", .5, "number"], - ["ChildSecondsVisible",.3, "number"], - ["StatusDisplayBuild", 1, "boolean"], - ["StatusDisplayLink", 1, "boolean"], - ["UponDisplay", null, "delayed"], - ["UponHide", null, "delayed"], - ["RightToLeft", false, "boolean"], - ["CreateTopOnly", 0, "boolean"], - ["ShowLinkCursor", false, "boolean"] -] - -HM_MenuIDPrefix = "HM_Menu"; -HM_ItemIDPrefix = "HM_Item"; -HM_ArrayIDPrefix = "HM_Array"; - -Function.prototype.isFunction = true; -Function.prototype.isString = false; -String.prototype.isFunction = false; -String.prototype.isString = true; -String.prototype.isBoolean = false; -String.prototype.isNumber = false; -Number.prototype.isString = false; -Number.prototype.isFunction = false; -Number.prototype.isBoolean = false; -Number.prototype.isNumber = true; -Boolean.prototype.isString = false; -Boolean.prototype.isFunction = false; -Boolean.prototype.isBoolean = true; -Boolean.prototype.isNumber = false; -Array.prototype.itemValidation = false; -Array.prototype.isArray = true; - -if(HM_IE) { - HM_a_ElementsCreated = []; - - function HM_f_StoreElement(el){ - HM_a_ElementsCreated[HM_a_ElementsCreated.length] = el; - } -} - -function HM_f_AssignParameters(paramarray){ - var ParamName = paramarray[0]; - var DefaultValue = paramarray[1]; - var FullParamName = "HM_" + ParamName; - - if (typeof eval("window.HM_PG_" + ParamName) == "undefined") { - if (typeof eval("window.HM_GL_" + ParamName) == "undefined") { - eval(FullParamName + "= DefaultValue"); - } - else { - eval(FullParamName + "= HM_GL_" + ParamName); - } - } - else { - eval(FullParamName + "= HM_PG_" + ParamName); - } - - paramarray[0] = FullParamName; - paramarray[1] = eval(FullParamName); -} - -function HM_f_EvalParameters(valuenew,valueold,valuetype){ - var TestString, ParPosition; - - if(typeof valuenew == "undefined" || valuenew == null || (valuenew.isString && valuenew.length == 0)){ - return valueold; - } - - if(valuetype != "delayed"){ - while(valuenew.isString) { - ParPosition = valuenew.indexOf("("); - if(ParPosition !=-1) { - TestString = "window." + valuenew.substr(0,ParPosition); - if (typeof eval(TestString) != "undefined" && eval(TestString).isFunction) { - valuenew = eval(valuenew); - } - } - else break - } - } - - while(valuenew.isFunction) {valuenew = valuenew()} - - switch(valuetype){ - case "number": - while (valuenew.isString) {valuenew = eval(valuenew)} - break; - case "boolean": - while (!valuenew.isBoolean) { - valuenew = (valuenew.isNumber) ? valuenew ? true : false : eval(valuenew); - } - break; - } - - return valuenew; -} - -for (i=0;i 1) { - MenuArrayIsValid = true; - if(!TheMenuArray.itemValidation) { - while((typeof TheMenuArray[TheMenuArray.length-1] != "object") || (!TheMenuArray[TheMenuArray.length-1].isArray)) { - TheMenuArray.length--; - } - TheMenuArray.itemValidation = true; - } - } - } - return MenuArrayIsValid; -} - -if(!window.HM_a_TreesToBuild) { - HM_a_TreesToBuild = []; - for(i=1; i<100; i++){ - if(HM_f_ValidateArray(HM_ArrayIDPrefix + i)) HM_a_TreesToBuild[HM_a_TreesToBuild.length] = i; - } -} - -HM_CurrentArray = null; -HM_CurrentTree = null; -HM_CurrentMenu = null; -HM_CurrentItem = null; -HM_a_TopMenus = []; -HM_AreLoaded = false; -HM_AreCreated = false; -HM_BeingCreated = false; -HM_UserOverMenu = false; -HM_HideAllTimer = null; -HM_TotalTrees = 0; -HM_ZIndex = 5000; - -function HM_f_StartIt() { - if(HM_AreCreated) return; - if((typeof(document.body) == "undefined") || (document.body == null)) return; - HM_AreLoaded = true; - if (HM_ClickKill) { - HM_f_OtherMouseDown = (document.onmousedown) ? document.onmousedown : new Function; - document.onmousedown = function(){HM_f_PageClick();HM_f_OtherMouseDown()} - } - else { - HM_TopMilliSecondsVisible = HM_TopSecondsVisible * 1000; - } - HM_f_MakeTrees(); - HM_f_OtherOnLoad(); -} - -function HM_f_MakeTrees(){ - HM_BeingCreated = true; - var TreeParams = null; - var TreeHasChildren = false; - var ItemArray = null; - - for(var t=0; t WindowRightEdge) { - if (this.hasParent) { - this.xPos = ((ParentLeftEdge - this.parentItem.DistanceToLeftEdge) + this.parentItem.ChildOverlap) - this.offsetWidth; - } - else { - dif = MenuRightEdge - WindowRightEdge; - this.xPos -= dif; - } - this.xPos = Math.max(5,this.xPos); - } - - if (MenuBottomEdge > WindowBottomEdge) { - dif = MenuBottomEdge - WindowBottomEdge; - this.yPos -= dif; - } - - if (MenuLeftEdge < WindowLeftEdge) { - if (this.hasParent) { - this.xPos = (ParentLeftEdge + this.parentItem.DistanceToRightEdge) - this.parentItem.ChildOverlap; - MenuRightEdge = this.xPos + this.offsetWidth; - if(MenuRightEdge > WindowRightEdge) this.xPos -= (MenuRightEdge - WindowRightEdge); - } - else {this.xPos = 5} - } -} - -function HM_f_LinkIt() { - if (this.linkText.indexOf("javascript:")!=-1) eval(this.linkText) - else { - HM_f_HideAll(); - location.href = this.linkText; - } -} - -function HM_f_PopDown(menuname){ - if (!HM_AreLoaded || !HM_AreCreated) return; - menuname = menuname.replace("elMenu",HM_MenuIDPrefix); - var MenuToHide = document.getElementById(menuname); - if(!MenuToHide)return; - MenuToHide.isOn = false; - if (!HM_ClickKill) MenuToHide.hideTop(); -} - -function HM_f_HideAll(callingmenu) { - for(var i=0; i=0; i--){ - TempElement = HM_a_ElementsCreated[i]; - TempElement.parentMenu = null; - TempElement.parentItem = null; - TempElement.itemElement = null; - TempElement.currentItem = null; - TempElement.child = null; - TempElement.siblingBelow = null; - TempElement.imgLyr = null; - } - TempElement = null; - - for(var i=0; i 1) { - MenuArrayIsValid = true; - if(!TheMenuArray.itemValidation) { - while((typeof TheMenuArray[TheMenuArray.length-1] != "object") || (!TheMenuArray[TheMenuArray.length-1].isArray)) { - TheMenuArray.length--; - } - TheMenuArray.itemValidation = true; - } - } - } - return MenuArrayIsValid; -} - -if(!window.HM_a_TreesToBuild) { - HM_a_TreesToBuild = []; - for(i=1; i<100; i++){ - if(HM_f_ValidateArray(HM_ArrayIDPrefix + i)) HM_a_TreesToBuild[HM_a_TreesToBuild.length] = i; - } -} - -HM_CurrentArray = null; -HM_CurrentTree = null; -HM_CurrentMenu = null; -HM_CurrentItem = null; -HM_a_TopMenus = []; -HM_AreLoaded = false; -HM_AreCreated = false; -HM_BeingCreated = false; -HM_UserOverMenu = false; -HM_HideAllTimer = null; -HM_TotalTrees = 0; -HM_ZIndex = 5000; - -function propertyTransfer(){ - this.obj = eval(this.id + "Obj"); - for (temp in this.obj) {this[temp] = this.obj[temp]} -} - -function HM_f_StartIt() { - if((typeof(document.body) == "undefined") || (document.body == null)) return; - if(HM_AreCreated) return; - HM_AreLoaded = true; - if (HM_ClickKill) { - HM_f_OtherMouseDown = (document.onmousedown) ? document.onmousedown : new Function; - document.onmousedown = function(){HM_f_PageClick();HM_f_OtherMouseDown()} - } - else { - HM_TopMilliSecondsVisible = HM_TopSecondsVisible * 1000; - } - HM_f_MakeTrees(); - HM_f_OtherOnLoad(); -} - -function HM_f_MakeTrees(){ - HM_BeingCreated = true; - var TreeParams = null; - var TreeHasChildren = false; - var ItemArray = null; - - for(var t=0; t"; - if(HM_CurrentMenu.showImage) { - var FullPadding = (HM_ItemPadding*2) + HM_ImageSize + HM_ImageHorizSpace; - } - if(hasmore && HM_CurrentMenu.showImage) { - var ImgSrc = HM_CurrentTree.RightToLeft ? HM_ImageSrcLeft : HM_ImageSrc; - var ImgStyle = "top:"+ (HM_ItemPadding + HM_ImageVertSpace) + "px;width:"+ HM_ImageSize + "px;"; - var ImgString = ""; - TempString += ImgString; - } - TempString += disptext + ""; - return TempString; -} - -function HM_f_SetItemProperties(itemid,itemidsuffix) { - this.tree = HM_CurrentTree; - this.itemsetup = HM_f_ItemSetup; - this.index = HM_CurrentMenu.itemCount - 1; - this.isLastItem = (HM_CurrentMenu.itemCount == HM_CurrentMenu.maxItems); - this.array = HM_CurrentMenu.array[HM_CurrentMenu.itemCount]; - this.dispText = this.array[0]; - this.linkText = this.array[1]; - this.permHilite = HM_f_EvalParameters(this.array[3],false,"boolean"); - this.hasRollover = (!this.permHilite && HM_f_EvalParameters(this.array[2],true,"boolean")); - this.hasMore = HM_f_EvalParameters(this.array[4],false,"boolean") && HM_f_ValidateArray(HM_ArrayIDPrefix + itemidsuffix); - this.childID = this.hasMore ? (HM_MenuIDPrefix + itemidsuffix) : null; - this.child = null; - this.onmouseover = HM_f_ItemOver; - this.onmouseout = HM_f_ItemOut; - this.setItemStyle = HM_f_SetItemStyle; - this.itemStr = HM_f_GetItemDivStr(itemid,this.dispText,this.hasMore); - this.showChild = HM_f_ShowChild; - this.ChildOverlap = null; -} - -function HM_f_Make4ItemElement(menucount) { - var ItemIDSuffix = menucount + "_" + HM_CurrentMenu.itemCount; - var LayerID = HM_ItemIDPrefix + ItemIDSuffix; - var ObjectID = LayerID + "Obj"; - eval(ObjectID + " = new Object()"); - ItemElement = eval(ObjectID); - ItemElement.setItemProperties = HM_f_SetItemProperties; - ItemElement.setItemProperties(LayerID,ItemIDSuffix); - return ItemElement; -} - -function HM_f_MakeElement(menuid) { - var MenuObject; - var LayerID = menuid; - var ObjectID = LayerID + "Obj"; - eval(ObjectID + " = new Object()"); - MenuObject = eval(ObjectID); - return MenuObject; -} - -function HM_f_MakeMenu(menucount) { - if(!HM_f_ValidateArray(HM_ArrayIDPrefix + menucount)) return false; - HM_CurrentArray = eval(HM_ArrayIDPrefix + menucount); - NewMenu = document.all(HM_MenuIDPrefix + menucount); - if(!NewMenu) { - NewMenu = HM_f_MakeElement(HM_MenuIDPrefix + menucount); - NewMenu.array = HM_CurrentArray; - NewMenu.tree = HM_CurrentTree; - - if(HM_CurrentMenu) { - NewMenu.parentMenu = HM_CurrentMenu; - NewMenu.parentItem = HM_CurrentMenu.itemElement; - NewMenu.parentItem.child = NewMenu; - NewMenu.hasParent = true; - NewMenu.isHorizontal = HM_CurrentTree.TreeIsHorizontal; - NewMenu.showImage = HM_CurrentTree.TreeImageShow; - } - else { - NewMenu.isHorizontal = HM_CurrentTree.TopIsHorizontal; - NewMenu.showImage = HM_CurrentTree.TopImageShow; - } - - HM_CurrentMenu = NewMenu; - HM_CurrentMenu.itemCount = 0; - HM_CurrentMenu.maxItems = HM_CurrentMenu.array.length - 1; - HM_CurrentMenu.showIt = HM_f_ShowIt; - HM_CurrentMenu.keepInWindow = HM_f_KeepInWindow; - HM_CurrentMenu.onmouseover = HM_f_MenuOver; - HM_CurrentMenu.onmouseout = HM_f_MenuOut; - HM_CurrentMenu.hideTree = HM_f_HideTree - HM_CurrentMenu.hideParents = HM_f_HideParents; - HM_CurrentMenu.hideChildren = HM_f_HideChildren; - HM_CurrentMenu.hideTop = HM_f_HideTop; - HM_CurrentMenu.hideSelf = HM_f_HideSelf; - HM_CurrentMenu.count = menucount; - HM_CurrentMenu.hasChildVisible = false; - HM_CurrentMenu.isOn = false; - HM_CurrentMenu.hideTimer = null; - HM_CurrentMenu.currentItem = null; - HM_CurrentMenu.setMenuStyle = HM_f_SetMenuStyle; - HM_CurrentMenu.sizeFixed = false; - HM_CurrentMenu.fixSize = HM_f_FixSize; - HM_CurrentMenu.onselectstart = HM_f_CancelSelect; - HM_CurrentMenu.moveTo = HM_f_MoveTo; - HM_CurrentMenu.IsVariableWidth = ((HM_CurrentMenu.hasParent && HM_CurrentTree.TreeIsVariableWidth) || (!HM_CurrentMenu.hasParent && HM_CurrentTree.TopIsVariableWidth)); - HM_CurrentMenu.htmlString = ""); - menuLyr = document.all(HM_MenuIDPrefix + menucount); - menuLyr.propertyTransfer = propertyTransfer; - menuLyr.propertyTransfer(); - HM_CurrentMenu = menuLyr; - if(!HM_CurrentMenu.hasParent)HM_CurrentTree.treeParent = HM_CurrentTree.startChild = HM_CurrentMenu; - HM_CurrentMenu.setMenuStyle(); - HM_CurrentMenu.items = HM_CurrentMenu.children; - HM_CurrentMenu.lastItem = HM_CurrentMenu.items[HM_CurrentMenu.items.length-1]; - for(var i=0; i0 ? HM_CurrentMenu.items[i-1] : null; - it.propertyTransfer = propertyTransfer; - it.propertyTransfer(); - it.itemsetup(i+1); - } - HM_CurrentMenu.moveTo(0,0); - return HM_CurrentMenu; -} - -function HM_f_SetMenuStyle(){ - with(this.style) { - borderWidth = HM_BorderWidth + "px"; - borderColor = HM_CurrentTree.BorderColor; - borderStyle = HM_BorderStyle; - overflow = "hidden"; - cursor = "default"; - } -} - -function HM_f_SetItemStyle() { - with(this.style){ - backgroundColor = (this.permHilite) ? HM_CurrentTree.BGColorOver : HM_CurrentTree.BGColor; - color = (this.permHilite) ? HM_CurrentTree.FontColorOver : HM_CurrentTree.FontColor; - font = ((HM_FontBold) ? "bold " : "normal ") + HM_FontSize + "pt " + HM_FontFamily; - padding = HM_ItemPadding + "px"; - fontStyle = (HM_FontItalic) ? "italic" : "normal"; - overflow = "hidden"; - pixelWidth = HM_CurrentTree.ItemWidth; - - if((this.menu.showImage && (!this.menu.IsVariableWidth || (this.menu.IsVariableWidth && this.tree.RightToLeft && !this.menu.isHorizontal))) || (this.menu.IsVariableWidth && this.imgLyr)) { - - var FullPadding = (HM_ItemPadding*2) + HM_ImageSize + HM_ImageHorizSpace; - if (this.tree.RightToLeft) paddingLeft = FullPadding + "px"; - else paddingRight = FullPadding + "px"; - } - if(!this.isLastItem) { - var SeparatorString = HM_SeparatorSize + "px solid " + this.tree.SeparatorColor; - if (this.menu.isHorizontal) borderRight = SeparatorString; - else borderBottom = SeparatorString; - } - - if(this.menu.isHorizontal){ - pixelTop = 0; - if(this.menu.IsVariableWidth) { - this.realWidth = this.scrollWidth; - if(this.isLastItem) pixelWidth = this.realWidth; - else pixelWidth = (this.realWidth + HM_SeparatorSize); - pixelLeft = this.index ? (this.siblingBelow.style.pixelLeft + this.siblingBelow.style.pixelWidth) : 0; - if(this.isLastItem) { - LeftAndWidth = pixelLeft + pixelWidth; - this.menu.style.pixelWidth = LeftAndWidth + (HM_BorderWidth * 2); - } - - } - else { - if(this.isLastItem) pixelWidth = (HM_CurrentTree.MenuWidth - HM_BorderWidth - HM_SeparatorSize); - else pixelWidth = (HM_CurrentTree.MenuWidth - HM_BorderWidth); - pixelLeft = (this.index * (HM_CurrentTree.MenuWidth - HM_BorderWidth)); - var LeftAndWidth = pixelLeft + pixelWidth; - this.menu.style.pixelWidth = LeftAndWidth + (HM_BorderWidth * 2); - } - } - else { - pixelLeft = 0; - } - } -} - -function HM_f_FixSize(makevis){ - if(this.isHorizontal) { - var MaxItemHeight = 0; - for(i=0; i WindowRightEdge) { - if (this.hasParent) { - this.xPos = ((ParentLeftEdge - this.parentItem.DistanceToLeftEdge) + this.parentItem.ChildOverlap) - this.offsetWidth; - } - else { - dif = MenuRightEdge - WindowRightEdge; - this.xPos -= dif; - } - this.xPos = Math.max(5,this.xPos); - } - - if (MenuBottomEdge > WindowBottomEdge) { - dif = MenuBottomEdge - WindowBottomEdge; - this.yPos -= dif; - } - - if (MenuLeftEdge < WindowLeftEdge) { - if (this.hasParent) { - this.xPos = (ParentLeftEdge + this.parentItem.DistanceToRightEdge) - this.parentItem.ChildOverlap; - MenuRightEdge = this.xPos + this.style.pixelWidth; - if(MenuRightEdge > WindowRightEdge) this.xPos -= (MenuRightEdge - WindowRightEdge); - } - else {this.xPos = 5} - } -} - -function HM_f_LinkIt() { - if (this.linkText.indexOf("javascript:")!=-1) eval(this.linkText) - else { - HM_f_HideAll(); - location.href = this.linkText; - } -} - -function HM_f_PopDown(menuname){ - if (!HM_AreLoaded || !HM_AreCreated) return; - menuname = menuname.replace("elMenu",HM_MenuIDPrefix); - var MenuToHide = document.all(menuname); - if(!MenuToHide)return; - MenuToHide.isOn = false; - if (!HM_ClickKill) MenuToHide.hideTop(); -} - -function HM_f_HideAll(callingmenu) { - for(var i=0; i 1) { - MenuArrayIsValid = true; - if(!TheMenuArray.itemValidation) { - while((typeof TheMenuArray[TheMenuArray.length-1] != "object") || (!TheMenuArray[TheMenuArray.length-1].isArray)) { - TheMenuArray.length--; - } - TheMenuArray.itemValidation = true; - } - } - } - return MenuArrayIsValid; -} - -if(!window.HM_a_TreesToBuild) { - HM_a_TreesToBuild = []; - for(i=1; i<100; i++){ - if(HM_f_ValidateArray(HM_ArrayIDPrefix + i)) HM_a_TreesToBuild[HM_a_TreesToBuild.length] = i; - } -} - -HM_CurrentArray = null; -HM_CurrentTree = null; -HM_CurrentMenu = null; -HM_CurrentItem = null; -HM_a_TopMenus = []; -HM_AreLoaded = false; -HM_AreCreated = false; -HM_BeingCreated = false; -HM_UserOverMenu = false; -HM_HideAllTimer = null; -HM_TotalTrees = 0; -HM_ZIndex = 5000; - -function HM_f_Initialize() { - if(HM_AreCreated) { - for(var i=0; i" + TempString + "
"; - var TempStringOver = TempString.fontcolor(HM_CurrentTree.FontColorOver); - TempString = TempString.fontcolor(HM_CurrentTree.FontColor); - return [TempString,TempStringOver]; -} - -function HM_f_MakeMenu(menucount) { - if(!HM_f_ValidateArray(HM_ArrayIDPrefix + menucount)) return false; - HM_CurrentArray = eval(HM_ArrayIDPrefix + menucount); - - NewMenu = eval("window." + HM_MenuIDPrefix + menucount); - if(!NewMenu) { - eval(HM_MenuIDPrefix + menucount + " = new Layer(HM_CurrentTree.MenuWidth,window)"); - NewMenu = eval(HM_MenuIDPrefix + menucount); - - if(HM_CurrentMenu) { - NewMenu.parentMenu = HM_CurrentMenu; - NewMenu.parentItem = HM_CurrentItem; - NewMenu.parentItem.child = NewMenu; - NewMenu.hasParent = true; - NewMenu.isHorizontal = HM_CurrentTree.TreeIsHorizontal; - NewMenu.showImage = HM_CurrentTree.TreeImageShow; - } - else { - NewMenu.isHorizontal = HM_CurrentTree.TopIsHorizontal; - NewMenu.showImage = HM_CurrentTree.TopImageShow; - } - - HM_CurrentMenu = NewMenu; - HM_CurrentMenu.count = menucount; - HM_CurrentMenu.tree = HM_CurrentTree; - HM_CurrentMenu.array = HM_CurrentArray; - HM_CurrentMenu.maxItems = HM_CurrentArray.length - 1; - HM_CurrentMenu.bgColor = HM_CurrentTree.BorderColor; - HM_CurrentMenu.IsVariableWidth = ((HM_CurrentMenu.hasParent && HM_CurrentTree.TreeIsVariableWidth) || (!HM_CurrentMenu.hasParent && HM_CurrentTree.TopIsVariableWidth)); - HM_CurrentMenu.onmouseover = HM_f_MenuOver; - HM_CurrentMenu.onmouseout = HM_f_MenuOut; - HM_CurrentMenu.moveTo(0,0); - } - - if(!HM_CurrentTree.treeParent) HM_CurrentTree.treeParent = HM_CurrentTree.startChild = HM_CurrentMenu; - - while (HM_CurrentMenu.itemCount < HM_CurrentMenu.maxItems) { - HM_CurrentMenu.itemCount++; - HM_CurrentItem = eval("window." + HM_ItemIDPrefix + menucount + "_" + HM_CurrentMenu.itemCount); - if(!HM_CurrentItem) { - eval(HM_ItemIDPrefix + menucount + "_" + HM_CurrentMenu.itemCount + " = new Layer(HM_CurrentTree.ItemWidth - (HM_ItemPadding*2),HM_CurrentMenu)") - if(HM_StatusDisplayBuild) status = "Creating Hierarchical Menus: " + menucount + " / " + HM_CurrentMenu.itemCount; - HM_CurrentItem = eval(HM_ItemIDPrefix + menucount + "_" + HM_CurrentMenu.itemCount); - HM_CurrentItem.itemSetup(menucount + "_" + HM_CurrentMenu.itemCount); - } - if(HM_CurrentItem.hasMore && (!HM_CreateTopOnly || HM_AreCreated && HM_CreateTopOnly)) { - MenuCreated = HM_f_MakeMenu(menucount + "_" + HM_CurrentMenu.itemCount); - if(MenuCreated) { - HM_CurrentMenu = HM_CurrentMenu.parentMenu; - HM_CurrentArray = HM_CurrentMenu.array; - } - } - } - HM_CurrentMenu.itemCount = 0; - if (HM_CurrentMenu.isHorizontal) { - HM_CurrentMenu.clip.right = HM_CurrentMenu.lastItem.left + HM_CurrentMenu.lastItem.clip.right + HM_BorderWidth; - } - else { - HM_CurrentMenu.clip.right = HM_CurrentMenu.lastItem.clip.width + (HM_BorderWidth*2); - } - HM_CurrentMenu.clip.bottom = HM_CurrentMenu.lastItem.top + HM_CurrentMenu.lastItem.clip.bottom + HM_BorderWidth; - return HM_CurrentMenu; -} - -function HM_f_ItemSetup(itemidsuffix) { - this.menu = HM_CurrentMenu; - this.tree = HM_CurrentTree; - this.index = HM_CurrentMenu.itemCount - 1; - this.array = HM_CurrentArray[HM_CurrentMenu.itemCount]; - this.dispText = this.array[0]; - this.linkText = this.array[1]; - this.permHilite = HM_f_EvalParameters(this.array[3],false,"boolean"); - this.hasRollover = (!this.permHilite && HM_f_EvalParameters(this.array[2],true,"boolean")); - this.hasMore = HM_f_EvalParameters(this.array[4],false,"boolean") && HM_f_ValidateArray(HM_ArrayIDPrefix + itemidsuffix); - var HtmlStrings = HM_f_GetItemHtmlStr(this.dispText); - this.htmStr = HtmlStrings[0]; - this.htmStrOver = HtmlStrings[1]; - this.visibility = "inherit"; - this.onmouseover = HM_f_ItemOver; - this.onmouseout = HM_f_ItemOut; - this.menu.lastItem = this; - this.showChild = HM_f_ShowChild; - - this.ClickStart = this.hasMore && this.tree.ClickStart && (this.tree.TopIsPermanent && (this.tree.treeParent==this.menu)); - if(this.ClickStart) { - this.captureEvents(Event.MOUSEUP); - this.onmouseup = this.showChild; - this.linkText = ""; - } - else { - if (this.linkText) { - this.captureEvents(Event.MOUSEUP); - this.onmouseup = HM_f_LinkIt; - } - } - - this.txtLyrOff = new Layer(HM_CurrentTree.ItemTextWidth - (HM_ItemPadding*2),this); - with(this.txtLyrOff) { - document.write(this.permHilite ? this.htmStrOver : this.htmStr); - document.close(); - if (HM_CurrentTree.RightToLeft && this.menu.showImage && (!this.menu.isHorizontal || (this.menu.isHorizontal && (!this.menu.IsVariableWidth || (this.menu.IsVariableWidth && this.hasMore))) )) left = HM_ItemPadding + HM_ImageSize + HM_ImageHorizSpace; - visibility = "inherit"; - } - - if(this.menu.IsVariableWidth){ - this.ItemTextWidth = this.txtLyrOff.document.width; - this.ItemWidth = this.ItemTextWidth + (HM_ItemPadding*2); - if(HM_CurrentMenu.showImage) { - if(!this.menu.isHorizontal || this.hasMore) { - this.ItemWidth += (HM_ItemPadding + HM_ImageSize + HM_ImageHorizSpace); - } - } - } - else { - this.ItemWidth = this.tree.ItemWidth; - this.ItemTextWidth = this.tree.ItemTextWidth; - } - if (this.menu.isHorizontal) { - if (this.index) this.left = this.siblingBelow.left + this.siblingBelow.clip.width + HM_SeparatorSize; - else this.left = (HM_BorderWidth + HM_ItemPadding); - this.top = (HM_BorderWidth + HM_ItemPadding); - } - else { - this.left = (HM_BorderWidth + HM_ItemPadding); - if (this.index) this.top = this.siblingBelow.top + this.siblingBelow.clip.height + HM_SeparatorSize; - else this.top = (HM_BorderWidth + HM_ItemPadding) - } - this.clip.top = this.clip.left = -HM_ItemPadding; - this.clip.right = this.ItemWidth - HM_ItemPadding; - this.bgColor = this.permHilite ? this.tree.BGColorOver : this.tree.BGColor; - - if(this.tree.NSFontOver) { - if(!this.permHilite){ - this.txtLyrOn = new Layer(this.ItemTextWidth,this); - with(this.txtLyrOn) { - if (HM_CurrentTree.RightToLeft && this.menu.showImage && (!this.menu.isHorizontal || (this.menu.isHorizontal && (!this.menu.IsVariableWidth || (this.menu.IsVariableWidth && this.hasMore))) )) left = HM_ItemPadding + HM_ImageSize + HM_ImageHorizSpace; - visibility = "hide"; - } - } - } - - this.fullClip = this.txtLyrOff.document.height + (HM_ItemPadding * 2); - if(this.menu.isHorizontal) { - if(this.index) { - var SiblingHeight = this.siblingBelow.clip.height; - this.fullClip = Math.max(SiblingHeight,this.fullClip); - if(this.fullClip > SiblingHeight) { - var SiblingPrevious = this.siblingBelow; - while(SiblingPrevious != null) { - SiblingPrevious.clip.height = this.fullClip; - SiblingPrevious = SiblingPrevious.siblingBelow; - } - } - } - } - this.clip.height = this.fullClip; - - if(!this.menu.isHorizontal && this.menu.IsVariableWidth) { - this.fullWidth = this.clip.width; - if(this.index) { - var SiblingWidth = this.siblingBelow.clip.width; - this.fullWidth = Math.max(SiblingWidth,this.fullWidth); - SiblingPrevious = this.siblingBelow; - while(SiblingPrevious != null) { - SiblingPrevious.clip.width = this.fullWidth; - SiblingPrevious.dummyLyr.clip.width = this.fullWidth; - if(SiblingPrevious.hasMore) { - SiblingPrevious.DistanceToRightEdge = SiblingPrevious.clip.right + SiblingPrevious.WhatsOnRight; - SiblingPrevious.DistanceToLeftEdge = HM_ItemPadding + SiblingPrevious.WhatsOnLeft; - SiblingPrevious.CompleteWidth = SiblingPrevious.ItemWidth + SiblingPrevious.WhatsOnLeft + SiblingPrevious.WhatsOnRight; - SiblingPrevious.ChildOverlap = (parseInt((HM_ChildPerCentOver != null) ? (HM_ChildPerCentOver * SiblingPrevious.CompleteWidth) : HM_ChildOverlap)); - } - if(SiblingPrevious.imgLyr && !HM_CurrentTree.RightToLeft) { - SiblingPrevious.imgLyr.left = this.fullWidth - (HM_ItemPadding * 2) - HM_ImageSize - HM_ImageHorizSpace; - } - SiblingPrevious = SiblingPrevious.siblingBelow; - } - } - this.clip.width = this.fullWidth; - } - - this.dummyLyr = new Layer(100,this); - with(this.dummyLyr) { - left = top = -HM_ItemPadding; - clip.width = this.clip.width; - clip.height = this.clip.height; - visibility = "inherit"; - } - - if(this.hasMore && HM_CurrentMenu.showImage) { - this.imageSrc = this.tree.RightToLeft ? HM_ImageSrcLeft : HM_ImageSrc; - this.hasImageRollover = ((!this.tree.RightToLeft && HM_ImageSrcOver) || (this.tree.RightToLeft && HM_ImageSrcLeftOver)); - if(this.hasImageRollover) { - this.imageSrcOver = this.tree.RightToLeft ? HM_ImageSrcLeftOver : HM_ImageSrcOver; - if(this.permHilite) this.imageSrc = this.imageSrcOver; - } - this.imgLyr = new Layer(HM_ImageSize,this); - - with(this.imgLyr) { - document.write(""); - document.close(); - moveBelow(this.txtLyrOff); - left = (HM_CurrentTree.RightToLeft) ? HM_ImageHorizSpace : this.ItemWidth - (HM_ItemPadding * 2) - HM_ImageSize - HM_ImageHorizSpace; - top = HM_ImageVertSpace; - visibility = "inherit"; - } - this.imageElement = this.imgLyr.document.images[0]; - } - - if(this.hasMore) { - this.WhatsOnRight = (!this.menu.isHorizontal || (this.menu.isHorizontal && this.isLastItem)) ? HM_BorderWidth : HM_SeparatorSize; - this.DistanceToRightEdge = this.clip.right + this.WhatsOnRight; - this.WhatsOnLeft = (!this.menu.isHorizontal || (this.menu.isHorizontal && this.index==0)) ? HM_BorderWidth : HM_SeparatorSize; - this.DistanceToLeftEdge = HM_ItemPadding + this.WhatsOnLeft; - this.CompleteWidth = this.ItemWidth + this.WhatsOnLeft + this.WhatsOnRight; - this.ChildOverlap = (parseInt((HM_ChildPerCentOver != null) ? (HM_ChildPerCentOver * this.CompleteWidth) : HM_ChildOverlap)); - } -} - -function HM_f_PopUp(menuname,e){ - if (!HM_AreLoaded) return; - menuname = menuname.replace("elMenu",HM_MenuIDPrefix); - var TempMenu = eval("window."+menuname); - if(!TempMenu)return; - HM_CurrentMenu = TempMenu; - if (HM_CurrentMenu.tree.ClickStart) { - var ClickElement = e.target; - ClickElement.onclick = HM_f_PopMenu; - } - else HM_f_PopMenu(e); -} - -function HM_f_PopMenu(e){ - if (!HM_AreLoaded || !HM_AreCreated) return true; - if (HM_CurrentMenu.tree.ClickStart && e.type != "click") return true; - HM_f_HideAll(); - HM_CurrentMenu.hasParent = false; - HM_CurrentMenu.tree.startChild = HM_CurrentMenu; - var mouse_x_position = e.pageX; - var mouse_y_position = e.pageY; - HM_CurrentMenu.xPos = (HM_CurrentMenu.tree.MenuLeft!=null) ? eval(HM_CurrentMenu.tree.MenuLeft) : mouse_x_position; - HM_CurrentMenu.yPos = (HM_CurrentMenu.tree.MenuTop!=null) ? eval(HM_CurrentMenu.tree.MenuTop) : mouse_y_position; - - HM_CurrentMenu.keepInWindow(); - HM_CurrentMenu.moveTo(HM_CurrentMenu.xPos,HM_CurrentMenu.yPos); - HM_CurrentMenu.isOn = true; - HM_CurrentMenu.showIt(true); - return false; -} - -function HM_f_MenuOver() { - if(!this.tree.startChild){this.tree.startChild = this} - if(this.tree.startChild == this) HM_f_HideAll(this) - this.isOn = true; - HM_UserOverMenu = true; - HM_CurrentMenu = this; - if (this.hideTimer) clearTimeout(this.hideTimer); -} - -function HM_f_MenuOut() { - this.isOn = false; - HM_UserOverMenu = false; - if(HM_StatusDisplayLink) status = ""; - if(!HM_ClickKill) { - clearTimeout(HM_HideAllTimer); - HM_HideAllTimer = null; - HM_HideAllTimer = setTimeout("HM_CurrentMenu.hideTree()",HM_ChildMilliSecondsVisible); - } -} - -function HM_f_ShowChild(){ - if(!this.child) { - HM_CurrentTree = this.tree; - HM_CurrentMenu = this.menu; - HM_CurrentItem = this; - this.child = HM_f_MakeMenu(this.menu.count + "_"+(this.index+1)); - this.tree.treeParent = this.menu; - this.tree.startChild = this.menu; - } - if (this.tree.PositionUnder && (this.menu == this.tree.treeParent)) { - this.child.xPos = this.pageX + this.clip.left - HM_BorderWidth; - this.child.yPos = this.menu.top + this.menu.clip.height - HM_BorderWidth; - } - else { - this.oL = this.pageX; - this.child.offsetWidth = this.child.clip.width; - this.oT = this.pageY + this.clip.top - HM_BorderWidth; - if(this.tree.RightToLeft) { - this.child.xPos = ((this.oL - this.DistanceToLeftEdge) + this.ChildOverlap) - this.child.offsetWidth; - } - else { - this.child.xPos = (this.oL + this.DistanceToRightEdge) - this.ChildOverlap; - } - this.child.yPos = this.oT + HM_ChildOffset + HM_BorderWidth; - } - if(!this.tree.PositionUnder || this.menu!=this.tree.treeParent) this.child.keepInWindow(); - this.child.moveTo(this.child.xPos,this.child.yPos); - this.menu.hasChildVisible = true; - this.menu.visibleChild = this.child; - this.child.showIt(true); -} - -function HM_f_ItemOver(){ - if (HM_KeepHilite) { - if (this.menu.currentItem && this.menu.currentItem != this && this.menu.currentItem.hasRollover) { - with(this.menu.currentItem){ - bgColor = this.tree.BGColor; - if(this.tree.NSFontOver) { - txtLyrOff.visibility = "inherit"; - txtLyrOn.visibility = "hide"; - } - } - if(this.menu.currentItem.hasImageRollover)this.menu.currentItem.imageElement.src = this.menu.currentItem.imageSrc; - } - } - if(this.hasRollover) { - this.bgColor = this.tree.BGColorOver; - if(this.tree.NSFontOver) { - if(!this.txtLyrOn.isWritten){ - this.txtLyrOn.document.write(this.htmStrOver); - this.txtLyrOn.document.close(); - this.txtLyrOn.isWritten = true; - } - this.txtLyrOff.visibility = "hide"; - this.txtLyrOn.visibility = "inherit"; - } - if(this.hasImageRollover)this.imageElement.src = this.imageSrcOver; - } - - if(HM_StatusDisplayLink) status = this.linkText; - this.menu.currentItem = this; - if (this.menu.hasChildVisible) { - if(this.menu.visibleChild == this.child && this.menu.visibleChild.hasChildVisible) this.menu.visibleChild.hideChildren(this); - else this.menu.hideChildren(this); - } - - if (this.hasMore && !this.ClickStart) this.showChild(); -} - -function HM_f_ItemOut() { - if ( (!HM_KeepHilite || ((this.tree.TopIsPermanent && (this.tree.treeParent==this)) && !this.menu.hasChildVisible)) && this.hasRollover) { - with(this){ - bgColor = this.tree.BGColor; - if(this.tree.NSFontOver) { - txtLyrOff.visibility = "inherit"; - txtLyrOn.visibility = "hide"; - } - if(this.hasImageRollover)this.imageElement.src = this.imageSrc; - } - } - if(!HM_ClickKill && !HM_UserOverMenu) { - clearTimeout(HM_HideAllTimer); - HM_HideAllTimer = null; - HM_HideAllTimer = setTimeout("HM_CurrentMenu.hideTree()",HM_ChildMilliSecondsVisible); - } -} - -function HM_f_ShowIt(on) { - if (!(this.tree.TopIsPermanent && (this.tree.treeParent==this))) { - if(!this.hasParent || (this.hasParent && this.tree.TopIsPermanent && (this.tree.treeParent==this.parentMenu) )) { - if (on == this.hidden) - eval(on ? this.tree.UponDisplay : this.tree.UponHide) - } - if (on) this.zIndex = ++HM_ZIndex; - this.visibility = on ? "show" : "hide"; - } - if (HM_KeepHilite && this.currentItem && this.currentItem.hasRollover) { - with(this.currentItem){ - bgColor = this.tree.BGColor; - if(this.tree.NSFontOver) { - txtLyrOff.visibility = "inherit"; - txtLyrOn.visibility = "hide"; - } - } - if(this.currentItem.hasImageRollover)this.currentItem.imageElement.src = this.currentItem.imageSrc; - } - this.currentItem = null; -} - -function HM_f_KeepInWindow() { - var ExtraSpace = 10; - var WindowLeftEdge = window.pageXOffset; - var WindowTopEdge = window.pageYOffset; - var WindowWidth = window.innerWidth; - var WindowHeight = window.innerHeight; - var WindowRightEdge = (WindowLeftEdge + WindowWidth) - ExtraSpace; - var WindowBottomEdge = (WindowTopEdge + WindowHeight) - ExtraSpace; - - var MenuLeftEdge = this.xPos; - var MenuRightEdge = MenuLeftEdge + this.clip.width; - var MenuBottomEdge = this.yPos + this.clip.height; - - if (this.hasParent) { - var ParentLeftEdge = this.parentItem.pageX; - this.offsetWidth = this.clip.width; - } - if (MenuRightEdge > WindowRightEdge) { - if (this.hasParent) { - this.xPos = ((ParentLeftEdge - this.parentItem.DistanceToLeftEdge) + this.parentItem.ChildOverlap) - this.offsetWidth; - } - else { - dif = MenuRightEdge - WindowRightEdge; - this.xPos -= dif; - } - this.xPos = Math.max(5,this.xPos); - } - - if (MenuBottomEdge > WindowBottomEdge) { - dif = MenuBottomEdge - WindowBottomEdge; - this.yPos -= dif; - } - - if (MenuLeftEdge < WindowLeftEdge) { - if (this.hasParent) { - this.xPos = (ParentLeftEdge + this.parentItem.DistanceToRightEdge) - this.parentItem.ChildOverlap; - MenuRightEdge = this.xPos + this.offsetWidth; - if(MenuRightEdge > WindowRightEdge) this.xPos -= (MenuRightEdge - WindowRightEdge); - } - else {this.xPos = 5} - } -} - -function HM_f_LinkIt() { - if (this.linkText.indexOf("javascript:")!=-1) eval(this.linkText) - else { - HM_f_HideAll(); - location.href = this.linkText; - } -} - -function HM_f_PopDown(menuname){ - if (!HM_AreLoaded || !HM_AreCreated) return; - menuname = menuname.replace("elMenu",HM_MenuIDPrefix); - var MenuToHide = eval("window."+menuname); - if(!MenuToHide)return; - MenuToHide.isOn = false; - if (!HM_ClickKill) MenuToHide.hideTop(); -} - -function HM_f_HideAll(callingmenu) { - for(var i=0; i - -HM Version 4.1.1 Examples - - - - - - - - -
-

Sample HTML page with 5 Hierarchical Menus

-

Permanent Centered Horizontal Menu (Cascades on click):

-

-

Permanent Horizontal Variable-Width Menu (Cascades on mouseover):

-

-

- Relative-to-Mouse-Position Vertical Variable-Width Popup Menu (Displays on mouseover)

-
- -

- Relative-to-Mouse-Position Using Keywords Popup Menu (Displays on click)

-
-

- Absolute Position Popup Menu (Displays on mouseover)

-
- - - - diff --git a/helm/graphs/jsmenu/prova.gif b/helm/graphs/jsmenu/prova.gif deleted file mode 100644 index 7f53e61db..000000000 Binary files a/helm/graphs/jsmenu/prova.gif and /dev/null differ diff --git a/helm/graphs/jsmenu/prova.html b/helm/graphs/jsmenu/prova.html deleted file mode 100644 index 7f242943a..000000000 --- a/helm/graphs/jsmenu/prova.html +++ /dev/null @@ -1,87 +0,0 @@ - - -HM Version 4.1.1 Examples - - - - - - - - - - - - - - - - - - diff --git a/helm/graphs/tools/.cvsignore b/helm/graphs/tools/.cvsignore deleted file mode 100644 index a9c3ad4a1..000000000 --- a/helm/graphs/tools/.cvsignore +++ /dev/null @@ -1,7 +0,0 @@ -*.cm[iaox] -*.[ao] -*.cmxa -drawGraph -uriSetQueue -drawGraph.opt -uriSetQueue.opt diff --git a/helm/graphs/tools/Makefile b/helm/graphs/tools/Makefile deleted file mode 100644 index 072667031..000000000 --- a/helm/graphs/tools/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -PID= -DOT=dot -#SED=sed "s/font-family:Times;//g" -SED=cat - -REQUIRES = http helm-registry -PREDICATES = mt -OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)" -thread -OCAMLC = ocamlfind ocamlc $(OCAMLOPTIONS) -OCAMLOPT = ocamlfind ocamlopt $(OCAMLOPTIONS) -EXECUTABLES = uriSetQueue drawGraph -EXECUTABLES_OPT = $(patsubst %,%.opt,$(EXECUTABLES)) - -#OBJS=prova.$(PID).svg prova.$(PID).ps prova.$(PID).gif prova.$(PID).ismap prova.$(PID).imap prova.$(PID).html -OBJS=prova.$(PID).gif prova.$(PID).ismap prova.$(PID).html - -all: $(EXECUTABLES) -opt: $(EXECUTABLES_OPT) -world: all opt -clean: - rm -f *.cm[aiox] *.cmxa *.[ao] $(EXECUTABLES) $(EXECUTABLES_OPT) - -tmp: $(OBJS) -clean_tmp: - rm -f $(OBJS) prova.$(PID).dot xx.$(PID)00 xx.$(PID)01 xx.$(PID)02 \ - xx.$(PID)02n xx.$(PID)03 log.$(PID) - -uriSetQueue: uriSetQueue.ml - $(OCAMLC) -linkpkg -o $@ $< -uriSetQueue.opt: uriSetQueue.ml - $(OCAMLOPT) -linkpkg -o $@ $< - -drawGraph: drawGraph.ml - $(OCAMLC) -linkpkg -o $@ $< -drawGraph.opt: drawGraph.ml - $(OCAMLOPT) -linkpkg -o $@ $< - -prova.$(PID).dot: prova0.$(PID).dot - csplit --prefix=xx.$(PID) prova0.$(PID).dot 1 2 `expr \`wc -l prova0.$(PID).dot | sed 's/\([0123456789]\+\) prova0.$(PID).dot/\1/'\` + 1` - ./simplify_deps/simplify_deps.opt < xx.$(PID)02 > xx.$(PID)02n - cat xx.$(PID)01 xx.$(PID)02n xx.$(PID)03 > prova.$(PID).dot - -prova.$(PID).svg: prova.$(PID).dot - $(DOT) -Tsvg prova.$(PID).dot | $(SED) > prova.$(PID).svg - -prova.$(PID).ps: prova.$(PID).dot - $(DOT) -Tps prova.$(PID).dot > prova.$(PID).ps - -prova.$(PID).imap: prova.$(PID).dot - $(DOT) -Timap prova.$(PID).dot > prova.$(PID).imap - -prova.$(PID).gif: prova.$(PID).dot - $(DOT) -Tgif prova.$(PID).dot > prova.$(PID).gif - -prova.$(PID).ismap: prova.$(PID).dot - $(DOT) -Tismap prova.$(PID).dot > prova.$(PID).ismap - -prova.$(PID).html: prova.$(PID).ismap - cat xx.$(PID)00 prova.$(PID).ismap | ./mk_html.pl $(PID) > prova.$(PID).html - diff --git a/helm/graphs/tools/drawGraph.conf.xml.sample b/helm/graphs/tools/drawGraph.conf.xml.sample deleted file mode 100644 index a26b4b990..000000000 --- a/helm/graphs/tools/drawGraph.conf.xml.sample +++ /dev/null @@ -1,7 +0,0 @@ - - -
- 58083 - /projects/helm/daemons/graphs/tools -
-
diff --git a/helm/graphs/tools/drawGraph.ml b/helm/graphs/tools/drawGraph.ml deleted file mode 100644 index c17902fbc..000000000 --- a/helm/graphs/tools/drawGraph.ml +++ /dev/null @@ -1,101 +0,0 @@ -(* Copyright (C) 2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -open Printf;; - -let debug = true;; -let debug_print s = if debug then prerr_endline s;; - -let configuration_file = "/projects/helm/etc/drawGraph.conf.xml";; - -let daemon_name = "Draw Graph";; - -let wget url fname = - prerr_endline (sprintf "DEBUG: wgetting url '%s'" url); - let oc = open_out fname in - Http_user_agent.get_iter (output_string oc) url; - close_out oc -;; - -let errmsg = - sprintf -" - - Graph: error - - -

Error occurred while drawing graph!
Please report the occured problem

-

%s

- -" -in -let string_of_exit_status = function - | Unix.WEXITED n -> sprintf "Process exited with code %d" n - | Unix.WSIGNALED n -> sprintf "Process killed by signal %d" n - | Unix.WSTOPPED n -> sprintf "Process stopped by signal %d" n -in -let callback (req: Http_types.request) outchan = - try - (match req#path with - | "/draw" -> - let url = req#param "url" in - let pid = Unix.getpid () in - wget (sprintf "%s¶m.PID=%d" url pid) (sprintf "prova0.%d.dot" pid); - (match Unix.system (sprintf "make tmp PID=%d > log.%d" pid pid) with - | Unix.WEXITED 0 -> - debug_print "HTML successfully generated"; - Http_daemon.respond_file (sprintf "prova.%d.html" pid) outchan - | status -> - debug_print "Failure, sending error message"; - let res = - new Http_response.response - ~body: - (errmsg ("Exit status: " ^ (string_of_exit_status status))) - () - in - Http_daemon.respond_with res outchan) - | "/get_gif" -> - let pid = req#param "pid" in - Http_daemon.respond_file (sprintf "prova.%s.gif" pid) outchan; - ignore (Unix.system ( - sprintf "make PID=%s clean_tmp; rm -f prova0.%s.dot" pid pid)) - | invalid_request -> - Http_daemon.respond_error ~code:(`Status (`Client_error `Bad_request)) - outchan) - with - | Http_types.Param_not_found attr_name -> - Http_daemon.respond_error ~code:(`Status (`Client_error `Bad_request)) - ~body:(sprintf "Parameter '%s' is missing" attr_name) - outchan -in -Helm_registry.load_from configuration_file; -let port = Helm_registry.get_int "draw_graph.port" in -Sys.chdir (Helm_registry.get "draw_graph.dir"); -printf "%s started and listening on port %d\n" daemon_name port; -printf "current directory is %s\n" (Sys.getcwd ()); -flush stdout; -Http_daemon.start' ~port callback; -printf "%s is terminating, bye!\n" daemon_name - diff --git a/helm/graphs/tools/mk_html.pl b/helm/graphs/tools/mk_html.pl deleted file mode 100755 index a928cd5ad..000000000 --- a/helm/graphs/tools/mk_html.pl +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/perl - -use URI::Escape; - -print < - - - Graph - - - - -EOT - -my $count = 0; - -while () { - $count++; - my (undef,$point1,$point2,$uri) = split; - my ($point1x,$point1y) = split /,/,$point1; - my ($point2x,$point2y) = split /,/,$point2; - $point1y = substr($point1y,0,-1); - $point2y = substr($point2y,0,-1); - $point1x = substr($point1x,1); - $point2x = substr($point2x,1); - - print < -EOT -} - -print < - - - -EOT diff --git a/helm/graphs/tools/simplify_deps/.cvsignore b/helm/graphs/tools/simplify_deps/.cvsignore deleted file mode 100644 index 51af83437..000000000 --- a/helm/graphs/tools/simplify_deps/.cvsignore +++ /dev/null @@ -1,5 +0,0 @@ -simplify_deps.cmi -simplify_deps.cmo -simplify_deps.cmx -simplify_deps -simplify_deps.opt diff --git a/helm/graphs/tools/simplify_deps/Makefile b/helm/graphs/tools/simplify_deps/Makefile deleted file mode 100644 index 7395c8c9b..000000000 --- a/helm/graphs/tools/simplify_deps/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -OBJS = simplify_deps simplify_deps.opt - -all: $(OBJS) - -simplify_deps: simplify_deps.ml - ocamlfind ocamlc -package str -linkpkg simplify_deps.ml -o simplify_deps - -simplify_deps.opt: simplify_deps.ml - ocamlfind ocamlopt -package str -linkpkg simplify_deps.ml -o simplify_deps.opt - -clean: - rm -f $(OBJS) simplify_deps.cm[iox] simplify_deps.o diff --git a/helm/graphs/tools/simplify_deps/simplify_deps.ml b/helm/graphs/tools/simplify_deps/simplify_deps.ml deleted file mode 100644 index 9b0fb0042..000000000 --- a/helm/graphs/tools/simplify_deps/simplify_deps.ml +++ /dev/null @@ -1,102 +0,0 @@ -type node = - Node of string * node list ref (* label, children *) - -let debug = false;; - -(************************************************) -(* SIMPLIFICATION AND PRETTY-PRINTING *) -(************************************************) - -let reachable target source_arcs = - let rec find s = - if s = target then true - else - let Node (_,arcs) = s in - List.fold_left (fun i n -> i or find n) false !arcs - in - List.fold_left - (fun i n -> - i or - (if n = target then - (* this is the arc we would like to get rid of *) - false - else - find n - ) - ) false source_arcs -;; - -let consider_arc (source,target,rest) = - let Node (source_name,source_arcs) = source in - let Node (target_name,_) = target in - if not (reachable target !source_arcs) then - print_endline (source_name ^ " -> " ^ target_name ^ rest ^ ";") - else - if debug then - print_endline (source_name ^ " -> " ^ target_name ^ " [color=green];") -;; - -let simplify_deps_and_output_them = - List.iter consider_arc -;; - -(************************************************) -(* PARSING *) -(************************************************) - -let nodes = ref [];; -let arcs = ref [];; (* (source,target) *) - -let search_node s = - List.find (function Node (s',_) -> s' = s) !nodes -;; - -let parse () = - try - while true do - let line = read_line () in - if Str.string_match (Str.regexp " \\([^ ]*\\) -> \\([^ ;]*\\)\\(\\( \\[.*\\]\\)?\\);") line 0 then - let source = Str.matched_group 1 line in - let target = Str.matched_group 2 line in - begin - if source <> target then - (* not a self loop *) - let rest = Str.matched_group 3 line in - let tar = - try - search_node target - with - Not_found -> - let tar = Node (target,ref []) in - nodes := tar :: !nodes ; - tar - in - let sou = - try - let sou = search_node source in - let Node (_,ts) = sou in - ts := tar::!ts ; - sou - with - Not_found -> - let sou = Node (source,ref [tar]) in - nodes := sou :: !nodes ; - sou - in - arcs := (sou,tar,rest)::!arcs - end - else - print_endline line - done - with - End_of_file -> () -;; - -(************************************************) -(* MAIN *) -(************************************************) - -let _ = - parse () ; - simplify_deps_and_output_them !arcs -;; diff --git a/helm/graphs/tools/uriSetQueue.conf.xml.sample b/helm/graphs/tools/uriSetQueue.conf.xml.sample deleted file mode 100644 index 9bfc3d859..000000000 --- a/helm/graphs/tools/uriSetQueue.conf.xml.sample +++ /dev/null @@ -1,6 +0,0 @@ - - -
- 58082 -
-
diff --git a/helm/graphs/tools/uriSetQueue.ml b/helm/graphs/tools/uriSetQueue.ml deleted file mode 100644 index 430275800..000000000 --- a/helm/graphs/tools/uriSetQueue.ml +++ /dev/null @@ -1,190 +0,0 @@ -(* Copyright (C) 2002, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -let debug = true;; -let debug_print s = if debug then prerr_endline s;; -Http_common.debug := debug;; - -open Printf;; - -let configuration_file = "/projects/helm/etc/uriSetQueue.conf.xml";; -let daemon_name = "Uri Set Queue";; - -module OrderedUri: Set.OrderedType with type t = string = - struct - type t = string - let compare = compare - end -module UriSet = Set.Make (OrderedUri) -type uri_queue = { - mutable size: int; - mutable overflowed: bool; - uris: string Queue.t; - mutable olduris: UriSet.t; -} - (** raised when a queue is accessed before being defined *) -exception Queue_not_found of int;; - (** global uri_queue, used by all children *) -let uri_queue = { - size = 0; overflowed = false; uris = Queue.create (); olduris = UriSet.empty -};; -let (get_queue, add_queue, remove_queue) = - let uri_queues = Hashtbl.create 17 in - ((fun pid -> (* get_queue *) - try - Hashtbl.find uri_queues pid - with Not_found -> raise (Queue_not_found pid)), - (fun pid size -> (* add_queue *) - Hashtbl.replace - uri_queues - pid - { size = size; overflowed = false; - uris = Queue.create (); olduris = UriSet.empty }), - (fun pid -> (* remove_queue *) - try - Hashtbl.remove uri_queues pid - with Not_found -> raise (Queue_not_found pid))) -;; - -exception Found;; -let queue_mem item queue = (* mem function over queues *) - try - Queue.iter (fun e -> if item = e then raise Found) queue; - false - with Found -> true -;; - -let callback (req: Http_types.request) outchan = - try - let res = new Http_response.response () in - res#addBasicHeaders; - res#setContentType "text/xml"; - (match req#path with - - | "/add_if_not_in" -> - let (uri, pid) = (req#param "uri", int_of_string (req#param "PID")) in - debug_print (sprintf "Adding uri '%s' to queue '%d'" uri pid); - let queue = get_queue pid in - let result = - if (Queue.length queue.uris) + (UriSet.cardinal queue.olduris) >= - queue.size - then - begin (* overflow! *) - queue.overflowed <- true; - debug_print "Answer: not_added_because_already_too_many"; - "not_added_because_already_too_many" - end else begin (* there's room for another uri *) - if (queue_mem uri queue.uris) || (UriSet.mem uri queue.olduris) - then - begin (* url already in *) - debug_print "Answer: already_in"; - "already_in" - end else begin (* uri not in *) - Queue.add uri queue.uris; - debug_print "Answer: added"; - "added" - end - end - in - res#setBody (sprintf "\n<%s/>\n" result); - if debug then res#serialize stderr; - Http_daemon.respond_with res outchan - - | "/is_overflowed" -> - let pid = int_of_string (req#param "PID") in - let queue = get_queue pid in - let result = string_of_bool (queue.overflowed) in - debug_print (sprintf "%d queue is_overflowed = %s" pid result); - res#setBody (sprintf "\n<%s/>\n" result); - if debug then res#serialize stderr; - Http_daemon.respond_with res outchan - - | "/set_uri_set_size" -> - let (pid, size) = - (int_of_string (req#param "PID"), int_of_string (req#param "size")) - in - debug_print (sprintf "Setting size '%d' for queue '%d'" size pid); - (try - let queue = get_queue pid in - queue.size <- size; - with Queue_not_found p -> - assert (p = pid); - add_queue pid size); - res#setBody "\n\n"; - if debug then res#serialize stderr; - Http_daemon.respond_with res outchan - - | "/get_next" -> - let pid = int_of_string (req#param "PID") in - debug_print (sprintf "Getting next uri from queue '%d'" pid); - let queue = get_queue pid in - let element = (* xml response's root element *) - try - let uri = Queue.take queue.uris in - queue.olduris <- UriSet.add uri queue.olduris; - sprintf - "<%suri value=\"%s\"/>" - (if queue.overflowed then "marked_" else "") - uri - with Queue.Empty -> "" - in - res#setBody ("\n" ^ element ^ "\n"); - if debug then res#serialize stderr; - Http_daemon.respond_with res outchan - - | "/reset_to_empty" -> - let pid = int_of_string (req#param "PID") in - remove_queue pid; - debug_print (sprintf "Resetting queue '%d'" pid); - res#setBody "\n\n"; - if debug then res#serialize stderr; - Http_daemon.respond_with res outchan - - | invalid_request -> - debug_print ("Invalid request received"); - Http_daemon.respond_error - ~code:(`Status (`Client_error `Bad_request)) outchan); - prerr_endline "Request done!\n" - with - | Http_types.Param_not_found attr_name -> - Http_daemon.respond_error ~code:(`Status (`Client_error `Bad_request)) - ~body:(sprintf "Parameter '%s' is missing" attr_name) - outchan - | Failure "int_of_string" -> (* error in converting some paramters *) - Http_daemon.respond_error - ~code:(`Status (`Client_error `Bad_request)) outchan - | Queue_not_found queue_name -> - Http_daemon.respond_error ~code:(`Status (`Client_error `Bad_request)) - ~body:(sprintf "Queue '%d' is not defined" queue_name) - outchan -in - -Helm_registry.load_from configuration_file; -let port = Helm_registry.get_int "uri_set_queue.port" in -printf "%s started and listening on port %d\n" daemon_name port; -flush stdout; -Http_daemon.start' ~port ~mode:`Thread callback; -printf "%s is terminating, bye!\n" daemon_name - diff --git a/helm/gtkmathview-bonobo/.cvsignore b/helm/gtkmathview-bonobo/.cvsignore deleted file mode 100644 index d4b698b3a..000000000 --- a/helm/gtkmathview-bonobo/.cvsignore +++ /dev/null @@ -1,18 +0,0 @@ -aclocal.m4 -config.h.in -Makefile.in -autom4te.cache -config.guess -config.sub -install-sh -mkinstalldirs -ltmain.sh -configure -depcomp -Makefile -config.h -config.log -config.status -libtool -stamp-h1 -gtkmathview-bonobo.pc diff --git a/helm/gtkmathview-bonobo/AUTHORS b/helm/gtkmathview-bonobo/AUTHORS deleted file mode 100644 index c4b11a9bd..000000000 --- a/helm/gtkmathview-bonobo/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -Luca Padovani -Pouria Masoudi diff --git a/helm/gtkmathview-bonobo/ChangeLog b/helm/gtkmathview-bonobo/ChangeLog deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/gtkmathview-bonobo/LICENSE b/helm/gtkmathview-bonobo/LICENSE deleted file mode 100644 index d9bf0fad0..000000000 --- a/helm/gtkmathview-bonobo/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - diff --git a/helm/gtkmathview-bonobo/Makefile.am b/helm/gtkmathview-bonobo/Makefile.am deleted file mode 100644 index afa1ecdc2..000000000 --- a/helm/gtkmathview-bonobo/Makefile.am +++ /dev/null @@ -1,20 +0,0 @@ -EXTRA_DIST = config.h.in -SUBDIRS = idl src test -CLEANFILES = core *.log *.eps - -pkgconfigdir = $(libdir)/pkgconfig -#pkgconfig_DATA=gtkmathview-bonobo.pc - -backup: - tar cvfz ../@PACKAGE@-@VERSION@-`date|tr ' ' '_'|tr ':' '_'`.tar.gz . - -cleanbak: - -rm -f `find . -name "*~"` - -lc: - @( \ - CFILES=`find . -name "*.c"`; \ - HFILES=`find . -name "*.h"`; \ - wc -l $$CFILES $$HFILES | tail -n 1 \ - ) - diff --git a/helm/gtkmathview-bonobo/NEWS b/helm/gtkmathview-bonobo/NEWS deleted file mode 100644 index bbb294549..000000000 --- a/helm/gtkmathview-bonobo/NEWS +++ /dev/null @@ -1,5 +0,0 @@ - -Tue, 15 Jul 2003 15:56:54 +0200 - - o The project formally starts - diff --git a/helm/gtkmathview-bonobo/README b/helm/gtkmathview-bonobo/README deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/gtkmathview-bonobo/TODO b/helm/gtkmathview-bonobo/TODO deleted file mode 100644 index 8f1032a0c..000000000 --- a/helm/gtkmathview-bonobo/TODO +++ /dev/null @@ -1,21 +0,0 @@ - -* remove shadow from plugin. This causes the plugin window to be dirty, - find out why - -* disable double buffering for the plugin with GTK+ API? - -* remove black border in upper and left corners of the plugin window - -* try to implement size negotiations with the plugin that sends javascript - to the browser. - -* access object's attribute and children. Jean claims he does - this already, but the code seems to access GLib properties only, - no external params - -* implement a size negotiation mechanism from the plugin using - javascript. The plugin understands its ID from the object element, - calculates the size and sends a URL with a javascript call to a function - that sets width, height attributes of the object element - - diff --git a/helm/gtkmathview-bonobo/configure.ac b/helm/gtkmathview-bonobo/configure.ac deleted file mode 100644 index e30b55212..000000000 --- a/helm/gtkmathview-bonobo/configure.ac +++ /dev/null @@ -1,112 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT(gtkmathview-bonobo, [0.0.3]) -AC_CONFIG_SRCDIR(src/GNOME_GtkMathView.server.in.in) -AM_INIT_AUTOMAKE($AC_PACKAGE_NAME, $AC_PACKAGE_VERSION) - -PACKAGE=$PACKAGE_NAME -VERSION=$PACKAGE_VERSION -AC_SUBST(PACKAGE) -AC_SUBST(VERSION) - -GTKMATHVIEW_CONTROL_VERSION_INFO=`echo $VERSION | awk -F. '{ printf "%d:%d:%d", $1+$2, $3, $2 }'` -AC_SUBST(GTKMATHVIEW_CONTROL_VERSION_INFO) - -GTKMATHVIEW_API_VERSION="1.0" -AC_SUBST(GTKMATHVIEW_API_VERSION) -AC_DEFINE_UNQUOTED(MATH_VIEW_API_VERSION, "$GTKMATHVIEW_API_VERSION", [Version number of the API implemented]) - -AC_ARG_ENABLE( - profile, - [ --enable-profile[=ARG] include profiling information [default=no]], - profile=$enableval, - profile=no -) - -AC_ARG_ENABLE( - debug, - [ --enable-debug[=ARG] include debugging debug [default=yes]], - enable_debug=$enableval, - enable_debug=yes -) - -if test "x$enable_debug" = "xyes"; then - AC_DEFINE(ENABLE_DEBUG,,[Define to 1 if you want to enable validity checks while running]) -fi - -dnl AC_CONFIG_HEADERS([config.h]) -AM_CONFIG_HEADER(config.h) - -AH_TOP([ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#ifndef config_h -#define config_h -]) - -AH_BOTTOM([ -#endif /* config_h */ -]) - -AC_PROG_CC -AC_PROG_CXX -AC_PROG_INSTALL -AC_HEADER_STDC([]) - -AC_SUBST(CFLAGS) -AC_SUBST(CPPFLAGS) -AC_SUBST(LDFLAGS) - -AM_PROG_LIBTOOL - -PKG_CHECK_MODULES(GTKMATHVIEW, gtkmathview >= 0.5.1) -AC_SUBST(GTKMATHVIEW_CFLAGS) -AC_SUBST(GTKMATHVIEW_LIBS) - -PKG_CHECK_MODULES(BONOBO, libbonobo-2.0) -AC_SUBST(BONOBO_CFLAGS) -AC_SUBST(BONOBO_LIBS) - -PKG_CHECK_MODULES(BONOBOUI, libbonoboui-2.0) -AC_SUBST(BONOBOUI_CFLAGS) -AC_SUBST(BONOBOUI_LIBS) - -PKG_CHECK_MODULES(GNOMEUI, libgnomeui-2.0) -AC_SUBST(GNOMEUI_CFLAGS) -AC_SUBST(GNOMEUI_LIBS) - -ORBIT_IDL="`$PKG_CONFIG --variable=orbit_idl ORBit-2.0`" -AC_SUBST(ORBIT_IDL) - -BONOBO_IDL_INCLUDES="-I`$PKG_CONFIG --variable=idldir libbonobo-2.0` -I`$PKG_CONFIG --variable=idldir bonobo-activation-2.0`" -AC_SUBST(BONOBO_IDL_INCLUDES) - -AC_CONFIG_FILES([ - Makefile - gtkmathview-bonobo.pc - idl/Makefile - src/Makefile - src/GNOME_GtkMathView.server.in - test/Makefile -]) -AC_OUTPUT diff --git a/helm/gtkmathview-bonobo/gtkmathview-bonobo.pc.in b/helm/gtkmathview-bonobo/gtkmathview-bonobo.pc.in deleted file mode 100644 index aa9499612..000000000 --- a/helm/gtkmathview-bonobo/gtkmathview-bonobo.pc.in +++ /dev/null @@ -1,14 +0,0 @@ -# This is a comment -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ -datadir=@datadir@ - -Name: GtkMathView-Bonobo -Description: Bonobo interfaces for GtkMathView -Version: @VERSION@ -Requires: gtkmathview libbonoboui-2.0 -Libs: @DOM_LIBS@ -L${libdir} -lgtkmathview-bonobo -Cflags: @DOM_CFLAGS@ -I${includedir}/@PACKAGE@ - diff --git a/helm/gtkmathview-bonobo/idl/.cvsignore b/helm/gtkmathview-bonobo/idl/.cvsignore deleted file mode 100644 index 282522db0..000000000 --- a/helm/gtkmathview-bonobo/idl/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/helm/gtkmathview-bonobo/idl/GtkMathView.idl b/helm/gtkmathview-bonobo/idl/GtkMathView.idl deleted file mode 100644 index 307c166c1..000000000 --- a/helm/gtkmathview-bonobo/idl/GtkMathView.idl +++ /dev/null @@ -1,105 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#include - -module GNOME { - - module GtkMathView { - - typedef string element_id; - - interface View : Bonobo::Unknown { - - /** - * load: - * @uri: URI of a MathML document - * - * Loads the document at the specified URI in the component - * and displays it. If the load is successful returns @TRUE, - * @FALSE otherwise. - */ - boolean load (in string uri); - - /** - * unload: - * - * Unload any loaded document from the component - */ - void unload (); - - /** - * freeze: - * - * Freezes the component. Any modification to the document is - * not reflected by the view. - */ - void freeze (); - - /** - * thaw: - * - * Thaws the component. If the document was changed while the - * component was frozen, the view is updated. - */ - void thaw (); - - void setIdAttribute (in string ns, in string name); - void getIdAttribute (out string ns, out string name); - - void select (in element_id elem); - void unselect (in element_id elem); - boolean isSelected (in element_id elem); - - boolean elementCoords (in element_id elem, - out short x, out short y); - /** - * elementRectangle: - * @elem: ID of the element - * @x: x coordinate of the element - * @y: y coordinate of the element - * @width: width of the element - * @height: height of the element - * - * Returns the position and the size of the rectangle includes @elem - */ - boolean elementBoundingBox (in element_id elem, - out short width, out short height, out short depth); - - void getSize (out short width, out short height); - - void getTop (out short x, out short y); - void setTop (in short x, in short y); - - void setDefaultFontSize (in short size); - short getDefaultFontSize (); - - void setVerbosity (in short level); - short getVerbosity (); - - }; - - }; - -}; - diff --git a/helm/gtkmathview-bonobo/idl/Makefile.am b/helm/gtkmathview-bonobo/idl/Makefile.am deleted file mode 100644 index 14555d1e3..000000000 --- a/helm/gtkmathview-bonobo/idl/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ - -idldir = $(datadir)/idl/bonobo-2.0 -idl_DATA = GtkMathView.idl - -EXTRA_DIST = $(idl_DATA) diff --git a/helm/gtkmathview-bonobo/src/.cvsignore b/helm/gtkmathview-bonobo/src/.cvsignore deleted file mode 100644 index 7bac46e25..000000000 --- a/helm/gtkmathview-bonobo/src/.cvsignore +++ /dev/null @@ -1,21 +0,0 @@ -.deps -.libs -GNOME_GtkMathView.server -GNOME_GtkMathView.server.in -Makefile -Makefile.in -libgtkmathview-bonobo.la -control-factory.lo -control-data.lo -view.lo -aux.lo -handlers.lo -persist-file.lo -persist-stream.lo -GtkMathView-common.c -GtkMathView-common.lo -GtkMathView-skels.c -GtkMathView-skels.lo -GtkMathView-stubs.c -GtkMathView-stubs.lo -GtkMathView.h diff --git a/helm/gtkmathview-bonobo/src/GNOME_GtkMathView.server.in.in b/helm/gtkmathview-bonobo/src/GNOME_GtkMathView.server.in.in deleted file mode 100644 index 957c40004..000000000 --- a/helm/gtkmathview-bonobo/src/GNOME_GtkMathView.server.in.in +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/gtkmathview-bonobo/src/Makefile.am b/helm/gtkmathview-bonobo/src/Makefile.am deleted file mode 100644 index 92e6a9690..000000000 --- a/helm/gtkmathview-bonobo/src/Makefile.am +++ /dev/null @@ -1,68 +0,0 @@ - -location = $(libdir)/libgtkmathview-bonobo.so -serverdir = $(libdir)/bonobo/servers -server_in_files = GNOME_GtkMathView.server.in.in - -IDL = $(top_srcdir)/idl/GtkMathView.idl - -IDL_GENERATED_C = \ - GtkMathView-common.c \ - GtkMathView-skels.c \ - GtkMathView-stubs.c - -IDL_GENERATED_H = \ - GtkMathView.h - -IDL_GENERATED = $(IDL_GENERATED_C) $(IDL_GENERATED_H) - -CLEANFILES = \ - $(server_in_files:.server.in.in=.server) \ - $(IDL_GENERATED) - -lib_LTLIBRARIES = libgtkmathview-bonobo.la - -libgtkmathview_bonobo_la_LIBADD = \ - $(GTKMATHVIEW_LIBS) \ - $(BONOBOUI_LIBS) \ - $(BONOBO_LIBS) - -libgtkmathview_bonobo_la_LDFLAGS = -version-info @GTKMATHVIEW_CONTROL_VERSION_INFO@ - -libgtkmathview_bonobo_la_SOURCES = \ - $(IDL_GENERATED_C) \ - control-data.c \ - control-factory.c \ - persist-file.c \ - persist-stream.c \ - aux.cc \ - handlers.c \ - view.c - -noinst_HEADERS = \ - control-data.h \ - control-factory.h \ - persist-file.h \ - persist-stream.h \ - handlers.h \ - view.h \ - aux.h - -pkginclude_HEADERS = \ - $(IDL_GENERATED_H) - -server_DATA = $(server_in_files:.server.in.in=.server) -$(server_in_files:.server.in.in=.server): $(server_in_files:.server.in.in=.server.in) Makefile - sed -e "s|\@GTKMATHVIEW_FACTORY_LOCATION\@|$(location)|g" $< >$@ - -view.c : $(VIEW_CORBA_GENERATED) - -$(IDL_GENERATED): $(IDL) - $(ORBIT_IDL) $(BONOBO_IDL_INCLUDES) $< - -EXTRA_DIST = $(server_DATA) - -INCLUDES = \ - $(BONOBOUI_CFLAGS) \ - $(BONOBO_CFLAGS) \ - $(GTKMATHVIEW_CFLAGS) - diff --git a/helm/gtkmathview-bonobo/src/aux.cc b/helm/gtkmathview-bonobo/src/aux.cc deleted file mode 100644 index 4ef531239..000000000 --- a/helm/gtkmathview-bonobo/src/aux.cc +++ /dev/null @@ -1,302 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#include - -#include - -#include - -#include -#include - -#include - -#include "aux.h" - -#define MATHML_NS_URI "http://www.w3.org/1998/Math/MathML" - -namespace DOM = GdomeSmartDOM; - -static DOM::Element -findElementById(const DOM::Element& el, - const DOM::GdomeString& ns, const DOM::GdomeString& name, - const DOM::GdomeString& id) -{ - assert(el); - if (el.getAttributeNS(ns, name) == id) - return el; - else - for (DOM::Node p = el.get_firstChild(); p; p = p.get_nextSibling()) - if (p.get_nodeType() == DOM::Node::ELEMENT_NODE) - if (DOM::Element res = findElementById(p, ns, name, id)) - return res; - return DOM::Element(); -} - -static unsigned -getDepth(const DOM::Element& elem) -{ - unsigned length = 0; - DOM::Element p = elem; - - while (p) - { - p = p.get_parentNode(); - length++; - } - - return length; -} - -static DOM::Element -findCommonAncestor(const DOM::Element& first, const DOM::Element& last) -{ - if (!first || !last) return DOM::Element(0); - - DOM::Element p(first); - DOM::Element q(last); - - if (p != q) - { - unsigned pDepth = getDepth(p); - unsigned qDepth = getDepth(q); - - while (p && pDepth > qDepth) - { - p = p.get_parentNode(); - pDepth--; - } - - while (q && qDepth > pDepth) - { - q = q.get_parentNode(); - qDepth--; - } - - assert(pDepth == qDepth); - - while (p && q && p != q) - { - p = p.get_parentNode(); - q = q.get_parentNode(); - } - } - - return p; -} - -static void -findCommonSiblings(const DOM::Element& first, const DOM::Element& last, - DOM::Element& firstS, DOM::Element& lastS) -{ - DOM::Element p(first); - DOM::Element q(last); - - if (p != q) - { - unsigned pDepth = getDepth(p); - unsigned qDepth = getDepth(q); - - while (p && pDepth > qDepth) - { - p = p.get_parentNode(); - pDepth--; - } - - while (q && qDepth > pDepth) - { - q = q.get_parentNode(); - qDepth--; - } - - assert(pDepth == qDepth); - - while (p && q && p.get_parentNode() != q.get_parentNode()) - { - p = p.get_parentNode(); - q = q.get_parentNode(); - } - } - - firstS = p; - lastS = q; -} - -static DOM::Node -leftmostChild(const DOM::Node& node) -{ - if (!node) return node; - - DOM::Node firstChild = node.get_firstChild(); - if (!firstChild) return node; - - return leftmostChild(firstChild); -} - -static DOM::Node -rightmostChild(const DOM::Node& node) -{ - if (!node) return node; - - DOM::Node lastChild = node.get_lastChild(); - if (!lastChild) return node; - - return rightmostChild(lastChild); -} - -static DOM::Node -leftSibling(const DOM::Node& node) -{ - DOM::Node p = node; - - if (!p) return p; - - while (p.get_parentNode() && p.get_parentNode().get_firstChild() == p) - p = p.get_parentNode(); - - if (!p.get_parentNode()) return DOM::Node(0); - - DOM::Node prevSibling = p.get_previousSibling(); - assert(prevSibling); - - return rightmostChild(prevSibling); -} - -static DOM::Node -rightSibling(const DOM::Node& node) -{ - DOM::Node p = node; - - if (!p) return p; - - DOM::Node firstChild = p.get_firstChild(); - if (firstChild) return firstChild; - - while (p.get_parentNode() && p.get_parentNode().get_lastChild() == p) - p = p.get_parentNode(); - - if (!p.get_parentNode()) return DOM::Node(0); - - DOM::Node nextSibling = p.get_nextSibling(); - assert(nextSibling); - - return leftmostChild(nextSibling); -} - -extern "C" GdomeElement* -find_common_ancestor(GdomeElement* first, GdomeElement* last) -{ - DOM::Element p(first); - DOM::Element q(last); - return gdome_cast_el(findCommonAncestor(p, q).gdome_object()); -} - -extern "C" GdomeElement* -find_self_or_ancestor(GdomeElement* elem, const gchar* uri, const gchar* name) -{ - DOM::Element el(elem); - - while (el && (el.get_namespaceURI() != uri || el.get_localName() != name)) - el = el.get_parentNode(); - - return gdome_cast_el(el.gdome_object()); -} - -extern "C" void -action_toggle(GdomeElement* elem) -{ - DOM::Element el(elem); - if (el.get_namespaceURI() != MATHML_NS_URI || el.get_localName() != "maction") return; - - guint idx; - if (el.hasAttribute("selection")) - idx = atoi(std::string(el.getAttribute("selection")).c_str()); - else idx = 1; - - idx++; - - std::ostringstream os; - os << idx; - el.setAttribute("selection", os.str()); -} - -extern "C" void -find_common_siblings(GdomeElement* first, GdomeElement* last, - GdomeElement** firstS, GdomeElement** lastS) -{ - DOM::Element fs(0); - DOM::Element ls(0); - - findCommonSiblings(DOM::Element(first), DOM::Element(last), fs, ls); - - if (firstS != NULL) *firstS = gdome_cast_el(fs.gdome_object()); - if (lastS != NULL) *lastS = gdome_cast_el(ls.gdome_object()); -} - -static DOM::Element -findElementWithAttribute(const DOM::Element& elem, const std::string& name) -{ - DOM::Element el(elem); - while (el && !el.hasAttribute(name)) el = el.get_parentNode(); - return el; -} - -static DOM::Element -findElementWithAttributeNS(const DOM::Element& elem, const std::string& ns_uri, const std::string& name) -{ - DOM::Element el(elem); - while (el && !el.hasAttributeNS(ns_uri, name)) el = el.get_parentNode(); - return el; -} - -extern "C" GdomeElement* -find_element_with_id(GdomeElement* elem, GdomeDOMString* ns_uri, GdomeDOMString* name) -{ - assert(name != NULL); - DOM::Element el; - if (ns_uri != NULL) - el = findElementWithAttributeNS(DOM::Element(elem), DOM::GdomeString(ns_uri), DOM::GdomeString(name)); - else - el = findElementWithAttribute(DOM::Element(elem), DOM::GdomeString(name)); - return gdome_cast_el(el.gdome_object()); -} - -extern "C" GdomeDOMString* -find_hyperlink(GdomeElement* elem) -{ - DOM::Element el = findElementWithAttribute(DOM::Element(elem),"href"); - if (el) return el.getAttribute("href").gdome_str(); - else return NULL; -} - -extern "C" GdomeElement* -find_element_by_id(GdomeElement* root, GdomeDOMString* ns_uri, GdomeDOMString* name, - const gchar* id) -{ - DOM::Element el = findElementById(DOM::Element(root), - DOM::GdomeString(ns_uri), DOM::GdomeString(name), - DOM::GdomeString(id)); - return gdome_cast_el(el.gdome_object()); -} - diff --git a/helm/gtkmathview-bonobo/src/aux.h b/helm/gtkmathview-bonobo/src/aux.h deleted file mode 100644 index e7cedd2cd..000000000 --- a/helm/gtkmathview-bonobo/src/aux.h +++ /dev/null @@ -1,46 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#ifndef __aux_h__ -#define __aux_h__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - void action_toggle(GdomeElement*); - GdomeElement* find_common_ancestor(GdomeElement*, GdomeElement*); - GdomeElement* find_self_or_ancestor(GdomeElement*, const gchar*, const gchar*); - GdomeElement* find_element_with_id(GdomeElement*, GdomeDOMString*, GdomeDOMString*); - GdomeDOMString* find_hyperlink(GdomeElement*); - GdomeElement* find_element_by_id(GdomeElement*, GdomeDOMString*, GdomeDOMString*, - const gchar*); - -#ifdef __cplusplus -} -#endif - -#endif // __aux_h__ - diff --git a/helm/gtkmathview-bonobo/src/control-data.c b/helm/gtkmathview-bonobo/src/control-data.c deleted file mode 100644 index d97d0fd2f..000000000 --- a/helm/gtkmathview-bonobo/src/control-data.c +++ /dev/null @@ -1,138 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#include - -#include - -#include "control-data.h" - -GtkMathViewControlData* -gtk_math_view_control_data_new(BonoboControl* control, GtkMathView *math_view) -{ - GtkMathViewControlData *cd = g_new(GtkMathViewControlData,1); - cd->control = control; /* we don't ref the control this is a weak pointer */ - cd->math_view = math_view; - gtk_widget_ref(GTK_WIDGET(math_view)); - cd->item_factory = NULL; - cd->semantic_selection = FALSE; - cd->first_selected = NULL; - cd->root_selected = NULL; - cd->id_ns_uri = gdome_str_mkref("http://www.cs.unibo.it/helm"); - cd->id_name = gdome_str_mkref("xref"); - cd->x = cd->y = 0; - return cd; -} - -void -gtk_math_view_control_data_destroy(GtkMathViewControlData* cd) -{ - GdomeException exc = 0; - cd->control = NULL; /* don't unref the control, see above */ - gtk_widget_unref(GTK_WIDGET(cd->math_view)); - cd->math_view = NULL; - if (cd->item_factory != NULL) - { - gtk_object_unref(cd->item_factory); - cd->item_factory = NULL; - } - if (cd->first_selected != NULL) - { - gdome_el_unref(cd->first_selected, &exc); - g_assert(exc == 0); - cd->first_selected = NULL; - } - if (cd->root_selected != NULL) - { - gdome_el_unref(cd->root_selected, &exc); - g_assert(exc == 0); - cd->root_selected = NULL; - } - if (cd->id_ns_uri != NULL) - { - gdome_str_unref(cd->id_ns_uri); - cd->id_ns_uri = NULL; - } - if (cd->id_name != NULL) - { - gdome_str_unref(cd->id_name); - cd->id_name = NULL; - } - g_free(cd); -} - -gchar* -gtk_math_view_control_data_get_id_ns_uri(GtkMathViewControlData* cd) -{ - g_return_val_if_fail(cd != NULL, NULL); - return (cd->id_ns_uri != NULL) ? g_strdup(cd->id_ns_uri->str) : NULL; -} - -void -gtk_math_view_control_data_set_id_ns_uri(GtkMathViewControlData* cd, const gchar* ns_uri) -{ - g_return_if_fail(cd != NULL); - if (cd->id_ns_uri != NULL) gdome_str_unref(cd->id_ns_uri); - cd->id_ns_uri = (ns_uri != NULL) ? gdome_str_mkref_dup(ns_uri) : NULL; -} - -gchar* -gtk_math_view_control_data_get_id_name(GtkMathViewControlData* cd) -{ - g_return_val_if_fail(cd != NULL, NULL); - return (cd->id_name != NULL) ? g_strdup(cd->id_name->str) : NULL; -} - -void -gtk_math_view_control_data_set_id_name(GtkMathViewControlData* cd, const gchar* name) -{ - g_return_if_fail(cd != NULL); - if (cd->id_name != NULL) gdome_str_unref(cd->id_name); - cd->id_name = (name != NULL) ? gdome_str_mkref_dup(name) : NULL; -} - -void -gtk_math_view_control_data_set_root_selected(GtkMathViewControlData* cd, GdomeElement* elem) -{ - g_return_if_fail(cd != NULL); - GdomeException exc = 0; - - gtk_math_view_freeze(cd->math_view); - - if (cd->root_selected != NULL) - { - gtk_math_view_unselect(cd->math_view, cd->root_selected); - gdome_el_unref(cd->root_selected, &exc); - g_assert(exc == 0); - } - - cd->root_selected = elem; - if (cd->root_selected != NULL) - { - gdome_el_ref(cd->root_selected, &exc); - g_assert(exc == 0); - gtk_math_view_select(cd->math_view, cd->root_selected); - } - - gtk_math_view_thaw(cd->math_view); -} diff --git a/helm/gtkmathview-bonobo/src/control-data.h b/helm/gtkmathview-bonobo/src/control-data.h deleted file mode 100644 index 46bc6cef7..000000000 --- a/helm/gtkmathview-bonobo/src/control-data.h +++ /dev/null @@ -1,53 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#ifndef __control_data_h__ -#define __control_data_h__ - -#include -#include -#include - -typedef struct _GtkMathViewControlData -{ - BonoboControl* control; /* the control this data belongs to */ - GtkMathView* math_view; - GtkWidget* item_factory; - gboolean semantic_selection; - GdomeElement* first_selected; - GdomeElement* root_selected; - GdomeDOMString* id_ns_uri; - GdomeDOMString* id_name; - gint x; - gint y; -} GtkMathViewControlData; - -GtkMathViewControlData* gtk_math_view_control_data_new(BonoboControl*, GtkMathView*); -void gtk_math_view_control_data_destroy(GtkMathViewControlData*); -gchar* gtk_math_view_control_data_get_id_ns_uri(GtkMathViewControlData*); -void gtk_math_view_control_data_set_id_ns_uri(GtkMathViewControlData*, const gchar*); -gchar* gtk_math_view_control_data_get_id_name(GtkMathViewControlData*); -void gtk_math_view_control_data_set_id_name(GtkMathViewControlData*, const gchar*); -void gtk_math_view_control_data_set_root_selected(GtkMathViewControlData*, GdomeElement*); - -#endif // __control_data_h__ diff --git a/helm/gtkmathview-bonobo/src/control-factory.c b/helm/gtkmathview-bonobo/src/control-factory.c deleted file mode 100644 index 6d90bef3d..000000000 --- a/helm/gtkmathview-bonobo/src/control-factory.c +++ /dev/null @@ -1,431 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#include - -#include -#include -#include - -#include "control-factory.h" -#include "control-data.h" -#include "persist-file.h" -#include "persist-stream.h" -#include "handlers.h" -#include "view.h" - -enum - { - MATH_VIEW_WIDTH, - MATH_VIEW_HEIGHT, - MATH_VIEW_TOP_X, - MATH_VIEW_TOP_Y, - MATH_VIEW_FONT_SIZE, - MATH_VIEW_VERBOSITY, - MATH_VIEW_ID_NS_URI, - MATH_VIEW_ID_NAME - } math_args; - -static void -activate_maction(GtkMathViewControlData* control_data, guint action, GtkWidget* widget) -{ - GdomeElement* elem; - - g_return_if_fail(control_data != NULL); - - elem = gtk_math_view_get_element_at(control_data->math_view, control_data->x, control_data->y); - if (elem != NULL) - { - GdomeException exc = 0; - GdomeElement* action = find_self_or_ancestor(elem, MATHML_NS_URI, "maction"); - if (action != NULL) - { - gtk_math_view_freeze(control_data->math_view); - action_toggle(action); - gtk_math_view_thaw(control_data->math_view); - gdome_el_unref(action, &exc); - g_assert(exc == 0); - } - gdome_el_unref(elem, &exc); - g_assert(exc == 0); - } -} - -static void -copy_link_address(GtkMathViewControlData* control_data, guint action, GtkWidget* widget) -{ -} - -static void -zoom_in(GtkMathViewControlData* control_data, guint action, GtkWidget* widget) -{ - g_return_if_fail(control_data != NULL); - guint old_font_size = gtk_math_view_get_font_size(control_data->math_view); - gtk_math_view_set_font_size(control_data->math_view, old_font_size + 1); -} - -static void -zoom_out(GtkMathViewControlData* control_data, guint action, GtkWidget* widget) -{ - g_return_if_fail(control_data != NULL); - guint old_font_size = gtk_math_view_get_font_size(control_data->math_view); - gtk_math_view_set_font_size(control_data->math_view, old_font_size - 1); -} - -static void -switch_semantic_selection(GtkMathViewControlData* control_data, guint action, GtkWidget* widget) -{ - g_return_if_fail(control_data != NULL); - control_data->semantic_selection = !control_data->semantic_selection; - if (control_data->semantic_selection) - { - GdomeElement* elem = find_element_with_id(control_data->root_selected, - control_data->id_ns_uri, - control_data->id_name); - } -} - -/* -static void -copy_selected_markup(GtkMathViewControlData* control_data, guint action, GtkWidget* widget) -{ - gchar* res = copy_markup(control_data->root_selected); - if (res != NULL) - { - set_clipboard(res); - g_free(res); - } -} -*/ - -static void -copy_selected_id(GtkMathViewControlData* control_data, guint action, GtkWidget* widget) -{ -} - -static void -select_parent(GtkMathViewControlData* control_data, guint action, GtkWidget* widget) -{ - g_return_if_fail(control_data != NULL); - if (control_data->root_selected != NULL) - { - GdomeException exc = 0; - GdomeNode* parent_node = gdome_el_parentNode(control_data->root_selected, &exc); - g_assert(parent_node != NULL); - g_assert(exc == 0); - GdomeElement* parent = gdome_cast_el(parent_node); - gtk_math_view_control_data_set_root_selected(control_data, parent); - gdome_n_unref(parent_node, &exc); - g_assert(exc == 0); - } -} - -static void -deselect(GtkMathViewControlData* control_data, guint action, GtkWidget* widget) -{ - g_return_if_fail(control_data != NULL); - - if (control_data->root_selected != NULL) - { - gtk_math_view_unselect(control_data->math_view, control_data->root_selected); - control_data->root_selected = NULL; - } -} - -/* Our menu, an array of GtkItemFactoryEntry structures that defines each menu item */ -static GtkItemFactoryEntry menu_items[] = { - { "/Activate ", NULL, activate_maction, 0, "", GTK_STOCK_EXECUTE }, - { "/Copy Link Address", NULL, copy_link_address, 0, "", GTK_STOCK_COPY }, - /* { "/Jump To", NULL, NULL, 0, "", GTK_STOCK_JUMP_TO }, */ - { "/sep1", NULL, NULL, 0, "" }, - /* { "/Semantic Selection", NULL, switch_semantic_selection, 0, "" }, */ - /* { "/Copy Selected Markup", NULL, copy_selected_markup, 0, "" }, */ - /* { "/Copy Id", NULL, copy_selected_id, 0, "" }, */ - /* { "/Show Selected", NULL, NULL, 0, "" }, */ - { "/Select Parent", NULL, select_parent, 0, "" }, - { "/De-Select", NULL, deselect, 0, "", GTK_STOCK_CLEAR }, - { "/sep2", NULL, NULL, 0, "" }, - { "/Smaller", NULL, zoom_out, 0, "", GTK_STOCK_ZOOM_OUT }, - { "/Bigger", NULL, zoom_in, 0, "", GTK_STOCK_ZOOM_IN }, - /* { "/Properties...", NULL, NULL, 0, "", GTK_STOCK_PROPERTIES }, */ -}; - -static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); - -void -button_pressed_cb(GtkMathView* math_view, GdkEventButton* event, GtkMathViewControlData* control_data) -{ - g_return_if_fail(math_view != NULL); - g_return_if_fail(event != NULL); - g_return_if_fail(control_data != NULL); - - if (event->button == 3) - { -#if 0 - gtk_menu_popup (GTK_MENU(control_data->popup_menu), NULL, NULL, - NULL, event, event->button, event->time); -#endif - control_data->x = (gint) event->x; - control_data->y = (gint) event->y; - printf("data %d %d\n", control_data->x, control_data->y); - - gtk_item_factory_popup_with_data(control_data->item_factory, - NULL, NULL, event->x_root, event->y_root, - event->button, gtk_get_current_event_time()); - } -} - - -static void -get_prop(BonoboPropertyBag* bag, - BonoboArg* arg, - guint arg_id, - CORBA_Environment *ev, - gpointer user_data) -{ - GtkMathViewControlData* control_data = user_data; - g_assert(control_data != NULL); - - switch (arg_id) - { - case MATH_VIEW_WIDTH: - BONOBO_ARG_SET_INT(arg, gtk_math_view_get_width(control_data->math_view)); - break; - case MATH_VIEW_HEIGHT: - BONOBO_ARG_SET_INT(arg, gtk_math_view_get_height(control_data->math_view)); - break; - case MATH_VIEW_TOP_X: - { - guint top_x; - gtk_math_view_get_top(control_data->math_view, &top_x, NULL); - BONOBO_ARG_SET_INT(arg, top_x); - } - break; - case MATH_VIEW_TOP_Y: - { - guint top_y; - gtk_math_view_get_top(control_data->math_view, NULL, &top_y); - BONOBO_ARG_SET_INT(arg, top_y); - } - break; - case MATH_VIEW_FONT_SIZE: - BONOBO_ARG_SET_INT(arg, gtk_math_view_get_font_size(control_data->math_view)); - break; - case MATH_VIEW_VERBOSITY: - BONOBO_ARG_SET_INT(arg, gtk_math_view_get_log_verbosity(control_data->math_view)); - break; - case MATH_VIEW_ID_NS_URI: - { - gchar* id_ns_uri = gtk_math_view_control_data_get_id_ns_uri(control_data); - BONOBO_ARG_SET_STRING(arg, id_ns_uri); - g_free(id_ns_uri); - } - break; - case MATH_VIEW_ID_NAME: - { - gchar* id_name = gtk_math_view_control_data_get_id_name(control_data); - BONOBO_ARG_SET_STRING(arg, id_name); - g_free(id_name); - } - break; - default: - bonobo_exception_set (ev, ex_Bonobo_PropertyBag_NotFound); - break; - } -} - -static void -set_prop(BonoboPropertyBag* bag, - const BonoboArg* arg, - guint arg_id, - CORBA_Environment* ev, - gpointer user_data) -{ - GtkMathViewControlData *control_data = user_data; - g_assert(control_data != NULL); - - switch (arg_id) - { - case MATH_VIEW_TOP_X: - { - guint old_top_y; - gtk_math_view_get_top(control_data->math_view, NULL, &old_top_y); - gtk_math_view_set_top(control_data->math_view, BONOBO_ARG_GET_INT(arg), old_top_y); - } - break; - case MATH_VIEW_TOP_Y: - { - guint old_top_x; - gtk_math_view_get_top(control_data->math_view, &old_top_x, NULL); - gtk_math_view_set_top(control_data->math_view, BONOBO_ARG_GET_INT(arg), old_top_x); - } - break; - case MATH_VIEW_FONT_SIZE: - gtk_math_view_set_font_size(control_data->math_view, BONOBO_ARG_GET_INT(arg)); - break; - case MATH_VIEW_VERBOSITY: - gtk_math_view_set_log_verbosity(control_data->math_view, BONOBO_ARG_GET_INT(arg)); - break; - case MATH_VIEW_ID_NS_URI: - gtk_math_view_control_data_set_id_ns_uri(control_data, BONOBO_ARG_GET_STRING(arg)); - break; - case MATH_VIEW_ID_NAME: - gtk_math_view_control_data_set_id_name(control_data, BONOBO_ARG_GET_STRING(arg)); - break; - default: - bonobo_exception_set (ev, ex_Bonobo_PropertyBag_NotFound); - break; - } -} - -static void -control_destroy(BonoboObject *object, GtkMathViewControlData *cd) -{ - gtk_math_view_control_data_destroy(cd); -} - -static void -gtk_math_view_control_init(BonoboControl *control, GtkWidget *scrolled_window) -{ - GtkMathViewControlData *control_data; - GtkWidget *math_view; - GtkItemFactory *item_factory; - - Bonobo_UIContainer remote_ui_container; - BonoboUIComponent *ui_component; - - BonoboPropertyBag *prop_bag; - BonoboObject *persist_file; - BonoboObject *persist_stream; - BonoboEventSource *evs; - View* view; - - math_view = gtk_math_view_new(NULL,NULL); - gtk_widget_show(math_view); - - control_data = gtk_math_view_control_data_new(control, (GtkMathView*)math_view); - - g_signal_connect (control, "destroy", G_CALLBACK (control_destroy), control_data); - - /* Same as before but don't bother with the accelerators */ - control_data->item_factory = gtk_item_factory_new (GTK_TYPE_MENU, "
", NULL); - gtk_item_factory_create_items (control_data->item_factory, nmenu_items, menu_items, control_data); - /* control_data->popup_menu = gtk_item_factory_get_widget (control_data->item_factory, "
"); */ - /* gtk_widget_ref(control_data->popup_menu); */ - - evs = bonobo_event_source_new(); - bonobo_object_add_interface(BONOBO_OBJECT(control), BONOBO_OBJECT(evs)); - - gtk_container_add(GTK_CONTAINER (scrolled_window), GTK_WIDGET (control_data->math_view)); - - view = view_new(control_data); - bonobo_object_add_interface(BONOBO_OBJECT(control), BONOBO_OBJECT(view)); - - persist_file = gtk_math_view_persist_file_new(GTK_MATH_VIEW(math_view)); - bonobo_object_add_interface(BONOBO_OBJECT(control), persist_file); - - persist_stream = gtk_math_view_persist_stream_new(GTK_MATH_VIEW(math_view)); - bonobo_object_add_interface(BONOBO_OBJECT(control), persist_stream); - - prop_bag = bonobo_property_bag_new(get_prop, set_prop, control_data); - bonobo_control_set_properties(control, BONOBO_OBJREF(prop_bag), NULL); - - bonobo_property_bag_add(prop_bag, "width", - MATH_VIEW_WIDTH, BONOBO_ARG_INT, - NULL, - "Width of the view", 0); - bonobo_property_bag_add(prop_bag, "height", - MATH_VIEW_HEIGHT, BONOBO_ARG_INT, - NULL, - "Height of the view", 0); - bonobo_property_bag_add(prop_bag, "top-x", - MATH_VIEW_TOP_X, BONOBO_ARG_INT, - NULL, - "X coordinate of the top-left corner", 0); - bonobo_property_bag_add(prop_bag, "top-y", - MATH_VIEW_TOP_Y, BONOBO_ARG_INT, - NULL, - "Y coordinate of the top-left corner", 0); - bonobo_property_bag_add(prop_bag, "font-size", - MATH_VIEW_FONT_SIZE, BONOBO_ARG_INT, - NULL, - "Default font size", 0); - bonobo_property_bag_add(prop_bag,"verbosity", - MATH_VIEW_VERBOSITY, BONOBO_ARG_INT, - NULL, - "Verbosity level", 0); - bonobo_property_bag_add(prop_bag, "id-ns-uri", - MATH_VIEW_ID_NS_URI, BONOBO_ARG_STRING, - NULL, - "Namespace URI of ID attribute", 0); - bonobo_property_bag_add(prop_bag, "id-name", - MATH_VIEW_ID_NAME, BONOBO_ARG_STRING, - NULL, - "Name of ID attribute", 0); - - bonobo_object_unref(BONOBO_OBJECT(prop_bag)); - - g_signal_connect(control,"set_frame", G_CALLBACK(set_frame), control_data); - g_signal_connect(control_data->math_view, "button_press_event", G_CALLBACK (button_pressed_cb), - control_data); - g_signal_connect(control_data->math_view, "click", G_CALLBACK (click_cb), - control_data); - g_signal_connect(control_data->math_view, "select_begin", G_CALLBACK(select_begin_cb), - control_data); - g_signal_connect(control_data->math_view, "select_over", G_CALLBACK(select_over_cb), - control_data); - g_signal_connect(control_data->math_view, "select_end", G_CALLBACK(select_end_cb), - control_data); - g_signal_connect(control_data->math_view, "select_abort", G_CALLBACK(select_abort_cb), - control_data); -} - -static BonoboObject* -gtk_math_view_control_factory(BonoboGenericFactory* factory, const gchar* component_id, - gpointer closure) -{ - BonoboControl *control; - GtkWidget *scrolled_window; - - scrolled_window = gtk_scrolled_window_new (NULL, NULL); - /* putting SHADOW_NONE screws the plugin window, how's that??? */ - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN); - gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 0); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrolled_window), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_widget_show_all (scrolled_window); - - control = bonobo_control_new(scrolled_window); - - if(control) - { - gtk_math_view_control_init(control,scrolled_window); - return BONOBO_OBJECT(control); - } - else - return NULL; -} - -BONOBO_ACTIVATION_SHLIB_FACTORY (CONTROL_FACTORY_ID, "GtkMathView Factory", - gtk_math_view_control_factory, NULL); - diff --git a/helm/gtkmathview-bonobo/src/control-factory.h b/helm/gtkmathview-bonobo/src/control-factory.h deleted file mode 100644 index 0d2e5a24d..000000000 --- a/helm/gtkmathview-bonobo/src/control-factory.h +++ /dev/null @@ -1,34 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#ifndef __control_factory_h__ -#define __control_factory_h__ - -#include -#include -#include - -#define CONTROL_FACTORY_ID "OAFIID:GNOME_GtkMathView_Factory:" MATH_VIEW_API_VERSION -#define CONTROL_ID "OAFIID:GNOME_GtkMathView:" MATH_VIEW_API_VERSION - -#endif /* __control_factory_h__ */ diff --git a/helm/gtkmathview-bonobo/src/handlers.c b/helm/gtkmathview-bonobo/src/handlers.c deleted file mode 100644 index 4861b2f0b..000000000 --- a/helm/gtkmathview-bonobo/src/handlers.c +++ /dev/null @@ -1,245 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#include - -#include "aux.h" -#include "handlers.h" - -static void -set_clipboard(GdomeDOMString* data) -{ - GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY); - gtk_clipboard_set_text(clipboard, data->str, gdome_str_length(data)); -} - -void -set_frame(BonoboControl *control, gpointer data) -{ -} - -static void -notify_browser(GtkMathViewControlData* control_data, const char* url) -{ - BonoboObject* evs = bonobo_object_query_local_interface(BONOBO_OBJECT(control_data->control), - "IDL:Bonobo/EventSource:1.0"); - if (evs != NULL) - { - BonoboArg* arg = bonobo_arg_new(BONOBO_ARG_STRING); - BONOBO_ARG_SET_STRING(arg, url); - bonobo_event_source_notify_listeners (evs, "URL", arg, NULL); - /* bonobo_arg_release(arg); */ - bonobo_object_unref(BONOBO_OBJECT(evs)); - } -} - -void -click_cb(GtkMathView* math_view, GdomeElement* elem, gint state, - GtkMathViewControlData* control_data) -{ - GdomeException exc = 0; - - g_return_if_fail(math_view != NULL); - g_return_if_fail(control_data != NULL); - - if (elem != NULL) - { - GdomeElement* action; - GdomeDOMString* href = find_hyperlink(elem); - - if (href != NULL) - { - /*gtk_math_view_load_uri(math_view,href->str);*/ - - notify_browser(control_data, href->str); - - //set_clipboard(href); - gdome_str_unref(href); - return; - } - - action = find_self_or_ancestor(elem, MATHML_NS_URI, "maction"); - if (action != NULL) - { - gtk_math_view_freeze(math_view); - action_toggle(action); - gtk_math_view_thaw(math_view); - gdome_el_unref(action, &exc); - g_assert(exc == 0); - return; - } - } - - if (control_data->root_selected != NULL) - { - gtk_math_view_freeze(math_view); - gtk_math_view_unselect(math_view, control_data->root_selected); - gtk_math_view_thaw(math_view); - gdome_el_unref(control_data->root_selected, &exc); - g_assert(exc == 0); - control_data->root_selected = NULL; - } -} - -void -select_begin_cb(GtkMathView* math_view, GdomeElement* elem, gint state, - GtkMathViewControlData* control_data) -{ - g_return_if_fail(math_view != NULL); - g_return_if_fail(control_data != NULL); - - if (elem != NULL) - { - GdomeException exc = 0; - gtk_math_view_freeze(math_view); - if (control_data->root_selected != NULL) - { - gtk_math_view_unselect(math_view, control_data->root_selected); - gdome_el_unref(control_data->root_selected, &exc); - g_assert(exc == 0); - control_data->root_selected = NULL; - } - - if (control_data->semantic_selection) - { - GdomeElement* new_elem = find_element_with_id(elem, control_data->id_ns_uri, control_data->id_name); - if (new_elem != NULL) - { - gdome_el_ref(new_elem, &exc); - g_assert(exc == 0); - } - control_data->first_selected = control_data->root_selected = new_elem; - } - else - { - gdome_el_ref(elem, &exc); - g_assert(exc == 0); - gdome_el_ref(elem, &exc); - g_assert(exc == 0); - control_data->first_selected = control_data->root_selected = elem; - } - - if (control_data->root_selected != NULL) - gtk_math_view_select(math_view, control_data->root_selected); - - gtk_math_view_thaw(math_view); - } -} - -void -select_over_cb(GtkMathView* math_view, GdomeElement* elem, gint state, - GtkMathViewControlData* control_data) -{ - g_return_if_fail(math_view != NULL); - g_return_if_fail(control_data != NULL); - - if (control_data->first_selected != NULL && elem != NULL) - { - GdomeException exc = 0; - - gtk_math_view_freeze(math_view); - - if (control_data->root_selected != NULL) - { - gtk_math_view_unselect(math_view, control_data->root_selected); - gdome_el_unref(control_data->root_selected, &exc); - g_assert(exc == 0); - control_data->root_selected = NULL; - } - - if (control_data->semantic_selection) - { - GdomeElement* new_root = find_common_ancestor(control_data->first_selected, elem); - if (new_root != NULL) - { - control_data->root_selected = find_element_with_id(new_root, control_data->id_ns_uri, control_data->id_name); - gdome_el_unref(new_root, &exc); - g_assert(exc == 0); - } - else - control_data->root_selected = NULL; - } - else - control_data->root_selected = find_common_ancestor(control_data->first_selected, elem); - - if (control_data->root_selected != NULL) - gtk_math_view_select(math_view, control_data->root_selected); - - gtk_math_view_thaw(math_view); - } -} - -void -select_end_cb(GtkMathView* math_view, GdomeElement* elem, gint state, - GtkMathViewControlData* control_data) -{ - g_return_if_fail(math_view != NULL); - g_return_if_fail(control_data != NULL); - - if (control_data->first_selected != NULL) - { - GdomeException exc = 0; - gdome_el_unref(control_data->first_selected, &exc); - g_assert(exc == 0); - control_data->first_selected = NULL; - - if (control_data->root_selected != NULL && control_data->semantic_selection) - { - GdomeException exc = 0; - GdomeDOMString* id = gdome_el_getAttributeNS(control_data->root_selected, - control_data->id_ns_uri, - control_data->id_name, &exc); - g_assert(exc == 0); - g_assert(id != NULL); - set_clipboard(id); - gdome_str_unref(id); - } - } -} - -void -select_abort_cb(GtkMathView* math_view, GtkMathViewControlData* control_data) -{ - GdomeException exc = 0; - - g_return_if_fail(math_view != NULL); - g_return_if_fail(control_data != NULL); - - if (control_data->first_selected != NULL) - { - gdome_el_unref(control_data->first_selected, &exc); - g_assert(exc == 0); - control_data->first_selected = NULL; - } - - if (control_data->root_selected != NULL) - { - gtk_math_view_freeze(math_view); - gtk_math_view_unselect(math_view, control_data->root_selected); - gtk_math_view_thaw(math_view); - gdome_el_unref(control_data->root_selected, &exc); - g_assert(exc == 0); - control_data->root_selected = NULL; - } -} - diff --git a/helm/gtkmathview-bonobo/src/handlers.h b/helm/gtkmathview-bonobo/src/handlers.h deleted file mode 100644 index 47eda64b3..000000000 --- a/helm/gtkmathview-bonobo/src/handlers.h +++ /dev/null @@ -1,41 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#ifndef __handlers_h__ -#define __handlers_h__ - -#include -#include -#include - -#include "control-data.h" - -void set_frame(BonoboControl*, gpointer); -void button_pressed_cb(GtkMathView*, GdkEventButton*, GtkMathViewControlData*); -void click_cb(GtkMathView*, GdomeElement*, gint, GtkMathViewControlData*); -void select_begin_cb(GtkMathView*,GdomeElement*, gint, GtkMathViewControlData*); -void select_over_cb(GtkMathView*,GdomeElement*,gint, GtkMathViewControlData*); -void select_end_cb(GtkMathView*,GdomeElement*,gint, GtkMathViewControlData*); -void select_abort_cb(GtkMathView*, GtkMathViewControlData*); - -#endif // __handlers_h__ diff --git a/helm/gtkmathview-bonobo/src/persist-file.c b/helm/gtkmathview-bonobo/src/persist-file.c deleted file mode 100644 index 1d3fd36c6..000000000 --- a/helm/gtkmathview-bonobo/src/persist-file.c +++ /dev/null @@ -1,141 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#include - -#include -#include -#include - -#include "persist-file.h" -#include "control-factory.h" - -static BonoboObjectClass *gtk_math_view_persist_file_parent_class; - -static void load_implementation(PortableServer_Servant servant,const gchar *path, - CORBA_Environment *ev); - -static void save_implementation(PortableServer_Servant servant,const gchar *path, - CORBA_Environment *ev); - -static void finalize(GObject *object) -{ - GtkMathViewPersistFile *file = GTK_MATH_VIEW_PERSIST_FILE(object); - - if (file->math_view) - { - g_object_unref(file->math_view); - file->math_view = NULL; - } - - G_OBJECT_CLASS(gtk_math_view_persist_file_parent_class)->finalize (object); -} - -static Bonobo_Persist_ContentTypeList * -get_content_types(BonoboPersist *persist,CORBA_Environment *ev) -{ - return bonobo_persist_generate_content_types(3, "application/mathml+xml", "text/mathml", "text/plain"); -} - -static void -gtk_math_view_persist_file_class_init(GtkMathViewPersistFileClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS(klass); - BonoboPersistClass *persist_class = BONOBO_PERSIST_CLASS(klass); - POA_Bonobo_PersistFile__epv *epv = &klass->epv; - - gtk_math_view_persist_file_parent_class = g_type_class_peek_parent(klass); - - epv->load = load_implementation; - epv->save = save_implementation; - - object_class->finalize = finalize; - persist_class->get_content_types = get_content_types; -} - -GType -gtk_math_view_persist_file_get_type(void) -{ - static GType type = 0; - - if (!type) - { - GTypeInfo info = - { - sizeof(GtkMathViewPersistFileClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) gtk_math_view_persist_file_class_init, - NULL, /* class finalize */ - NULL, /* class_data */ - sizeof(GtkMathViewPersistFile), - 0, /* n_preallocs */ - (GInstanceInitFunc) NULL - }; - - type = bonobo_type_unique(BONOBO_TYPE_PERSIST, - POA_Bonobo_PersistFile__init,POA_Bonobo_PersistFile__fini, - G_STRUCT_OFFSET(GtkMathViewPersistFileClass, epv), - &info,"GtkMathViewPresistFile"); - } - - return type; -} - -BonoboObject * -gtk_math_view_persist_file_new(GtkMathView *math_view) -{ - BonoboObject *file; - - file = g_object_new(gtk_math_view_persist_file_get_type(),NULL); - bonobo_persist_construct(BONOBO_PERSIST(file),CONTROL_FACTORY_ID); - - g_object_ref(math_view); - GTK_MATH_VIEW_PERSIST_FILE(file)->math_view = math_view; - - return file; -} - -static void -load_implementation(PortableServer_Servant servant,const gchar *path,CORBA_Environment *ev) -{ - gboolean result; - GtkMathViewPersistFile* file = GTK_MATH_VIEW_PERSIST_FILE(bonobo_object_from_servant(servant)); - //fd = open(path, O_RDONLY); - - result = gtk_math_view_load_uri(file->math_view,path); - if(!result) - CORBA_exception_set(ev,CORBA_USER_EXCEPTION,ex_Bonobo_Persist_WrongDataType,NULL); - - bonobo_object_unref(BONOBO_OBJECT(file)); -} - -static void -save_implementation(PortableServer_Servant servant, - const gchar *path, - CORBA_Environment *ev) -{ - bonobo_exception_set(ev,"save_exception"); - bonobo_exception_add_handler_str("save_exception", - "Save option is not valid"); -} diff --git a/helm/gtkmathview-bonobo/src/persist-file.h b/helm/gtkmathview-bonobo/src/persist-file.h deleted file mode 100644 index 6f70e76ef..000000000 --- a/helm/gtkmathview-bonobo/src/persist-file.h +++ /dev/null @@ -1,61 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#ifndef __GTK_MATH_VIEW_PERSIST_FILE_H__ -#define __GTK_MATH_VIEW_PERSIST_FILE_H__ - -#include -#include - -G_BEGIN_DECLS - -struct _GtkMathViewPersistFile; -typedef struct _GtkMathViewPersistFile GtkMathViewPersistFile; -typedef struct _GtkMathViewPersistFilePrivate GtkMathViewPersistFilePrivate; - -#define GTK_MATH_VIEW_TYPE_PERSIST_FILE (gtk_math_view_persist_file_get_type()) -#define GTK_MATH_VIEW_PERSIST_FILE(object) (G_TYPE_CHECK_INSTANCE_CAST((object), GTK_MATH_VIEW_TYPE_PERSIST_FILE, \ - GtkMathViewPersistFile)) -#define GTK_MATH_VIEW_IS_PERSIST_FILE(object) (G_TYPE_CHECK_INSTANCE_TYPE((object),\ - GTK_MATH_VIEW_TYPE_PERSIST_FILE)) -#define GTK_MATH_VIEW_IS_PERSIST_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),\ - GTK_MATH_VIEW_TYPE_PERSIST_FILE)) - -struct _GtkMathViewPersistFile -{ - BonoboPersist parent; - GtkMathView *math_view; -}; - -typedef struct -{ - BonoboPersistClass parent_class; - POA_Bonobo_PersistFile__epv epv; -} GtkMathViewPersistFileClass; - -GType gtk_math_view_persist_file_get_type(void); -BonoboObject *gtk_math_view_persist_file_new(GtkMathView *); - -G_END_DECLS - -#endif diff --git a/helm/gtkmathview-bonobo/src/persist-stream.c b/helm/gtkmathview-bonobo/src/persist-stream.c deleted file mode 100644 index bef7d90cb..000000000 --- a/helm/gtkmathview-bonobo/src/persist-stream.c +++ /dev/null @@ -1,221 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#include - -#include -#include - -#include "persist-stream.h" -#include "control-factory.h" - -#define DEBUG0 - -static BonoboObjectClass *gtk_math_view_persist_stream_parent_class; - -static void load_implementation(PortableServer_Servant servant, - const Bonobo_Stream stream, - const CORBA_char *type, - CORBA_Environment *ev); - -static void save_implementation(PortableServer_Servant servant, - const Bonobo_Stream stream, - const CORBA_char *type, - CORBA_Environment *ev); - -static void finalize(GObject *object) -{ - GtkMathViewPersistStream *stream = GTK_MATH_VIEW_PERSIST_STREAM(object); - - if (stream->math_view != NULL) - { - g_object_unref(stream->math_view); - stream->math_view = NULL; - } - - G_OBJECT_CLASS(gtk_math_view_persist_stream_parent_class)->finalize(object); -} - -static Bonobo_Persist_ContentTypeList * -get_content_types(BonoboPersist *persist,CORBA_Environment *ev) -{ - return bonobo_persist_generate_content_types(2, "application/mathml+xml", "text/mathml"); -} - -static void -gtk_math_view_persist_stream_class_init(GtkMathViewPersistStreamClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS(klass); - BonoboPersistClass *persist_class = BONOBO_PERSIST_CLASS(klass); - POA_Bonobo_PersistStream__epv *epv = &klass->epv; - -#ifdef DEBUG - printf("persist stream class init\n"); -#endif - gtk_math_view_persist_stream_parent_class = g_type_class_peek_parent(klass); - - epv->load = load_implementation; - epv->save = save_implementation; - - object_class->finalize = finalize; - persist_class->get_content_types = get_content_types; -} - -GType -gtk_math_view_persist_stream_get_type(void) -{ - static GType type = 0; -#ifdef DEBUG - printf("persist stream get type\n"); -#endif - if (!type) - { - GTypeInfo info = - { - sizeof(GtkMathViewPersistStreamClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) gtk_math_view_persist_stream_class_init, - NULL, /*class finalize */ - NULL, /*class data */ - sizeof(GtkMathViewPersistStream), - 0, /* n_preallocs */ - (GInstanceInitFunc) NULL - }; - - type = bonobo_type_unique(BONOBO_TYPE_PERSIST, - POA_Bonobo_PersistStream__init,POA_Bonobo_PersistStream__fini, - G_STRUCT_OFFSET(GtkMathViewPersistStreamClass,epv), - &info,"GtkMathViewPersistStream"); - } - - return type; -} - -BonoboObject * -gtk_math_view_persist_stream_new(GtkMathView *math_view) -{ - BonoboObject *stream; - -#ifdef DEBUG - printf("persist stream new\n"); -#endif - stream = g_object_new(gtk_math_view_persist_stream_get_type(),NULL); - bonobo_persist_construct(BONOBO_PERSIST(stream),CONTROL_FACTORY_ID); - - g_object_ref(math_view); - GTK_MATH_VIEW_PERSIST_STREAM(stream)->math_view = math_view; - - return stream; -} - -static FILE* -create_tmp_file(GtkMathViewPersistStream *persist) -{ - FILE *tmpfile; - int fd; - - persist->tmp_path_name = g_strconcat(g_get_tmp_dir(), "/gmvXXXXXX", NULL); - if ((fd = mkstemp(persist->tmp_path_name)) < 0) - { - g_free(persist->tmp_path_name), - persist->tmp_path_name = NULL; - return NULL; - } - - tmpfile = fdopen(fd, "w"); - if(!tmpfile) - { - close(fd); - return NULL; - } - - return tmpfile; -} - - -static void -load_implementation(PortableServer_Servant servant, - Bonobo_PersistStream stream, - const CORBA_char *type, - CORBA_Environment *ev) -{ - GtkMathViewPersistStream *persist = GTK_MATH_VIEW_PERSIST_STREAM (bonobo_object_from_servant (servant)); - Bonobo_Stream_iobuf *buffer; - GtkMathViewPersistStream *handle; - CORBA_long len_read; - gboolean result; - FILE *tmpfile; - -#ifdef DEBUG - printf("persist stream loading\n"); -#endif - - if (strcmp (type, "application/mathml+xml") != 0) - { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Bonobo_Persist_WrongDataType, NULL); - return; - } - - tmpfile = create_tmp_file(persist); - do - { - Bonobo_Stream_read (stream, 4096, &buffer, ev); - if (ev->_major != CORBA_NO_EXCEPTION) - goto clean; - - len_read = buffer->_length; - - if (buffer->_buffer && len_read) - if (fwrite(buffer->_buffer, 1, len_read, tmpfile) != len_read) - { - CORBA_free (buffer); - goto clean; - } - - CORBA_free (buffer); - } while (len_read > 0); - - fclose(tmpfile); - - result = gtk_math_view_load_uri(persist->math_view,persist->tmp_path_name); - if(!result) - { - CORBA_exception_set(ev,CORBA_USER_EXCEPTION,ex_Bonobo_Persist_WrongDataType,NULL); - } - return ; - - clean: - fclose (tmpfile); - return; -} - -static void -save_implementation(PortableServer_Servant servant,const Bonobo_Stream stream,const CORBA_char *type,CORBA_Environment *ev) -{ - bonobo_exception_set(ev,"save_exception"); - bonobo_exception_add_handler_str("save_exception", - "Save option is not valid"); - return; -} diff --git a/helm/gtkmathview-bonobo/src/persist-stream.h b/helm/gtkmathview-bonobo/src/persist-stream.h deleted file mode 100644 index 848121436..000000000 --- a/helm/gtkmathview-bonobo/src/persist-stream.h +++ /dev/null @@ -1,59 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#ifndef __GTK_MATH_VIEW_PERSIST_STREAM_H__ -#define __GTK_MATH_VIEW_PERSIST_STREAM_H__ - -#include -#include - -G_BEGIN_DECLS - -struct _GtkMathViewPersistStream; -typedef struct _GtkMathViewPersistStream GtkMathViewPersistStream; -typedef struct _GtkMathViewPersistStreamPrivate GtkMathViewPersistStreamPrivate; - -#define GTK_MATH_VIEW_TYPE_PERSIST_STREAM (gtk_math_view_persist_stream_get_type()) -#define GTK_MATH_VIEW_PERSIST_STREAM(object) (G_TYPE_CHECK_INSTANCE_CAST((object), GTK_MATH_VIEW_TYPE_PERSIST_STREAM,GtkMathViewPersistStream)) -#define GTK_MATH_VIEW_IS_PERSIST_STREAM(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), GTK_MATH_VIEW_TYPE_PERSIST_STREAM)) -#define GTK_MATH_VIEW_IS_PERSIST_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_MATH_VIEW_TYPE_PERSIST_STREAM)) - -struct _GtkMathViewPersistStream -{ - BonoboPersist parent; - GtkMathView *math_view; - gchar* tmp_path_name; -}; - -typedef struct -{ - BonoboPersistClass parent_class; - POA_Bonobo_PersistStream__epv epv; -} GtkMathViewPersistStreamClass; - -GType gtk_math_view_persist_stream_get_type(void); -BonoboObject *gtk_math_view_persist_stream_new(GtkMathView *); - -G_END_DECLS - -#endif diff --git a/helm/gtkmathview-bonobo/src/view.c b/helm/gtkmathview-bonobo/src/view.c deleted file mode 100644 index 068558d25..000000000 --- a/helm/gtkmathview-bonobo/src/view.c +++ /dev/null @@ -1,361 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#include - -#define HAVE_GMETADOM -#include - -#include "aux.h" -#include "view.h" - -static GObjectClass* view_parent_class; - -static void -view_object_finalize(GObject* object) -{ - View* view = VIEW(object); - /* free resources */ - view_parent_class->finalize(object); - return; -} - -static void -impl_view_freeze(PortableServer_Servant servant, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - gtk_math_view_freeze(view->control_data->math_view); - return; -} - -static void -impl_view_thaw(PortableServer_Servant servant, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - gtk_math_view_thaw(view->control_data->math_view); - return; -} - -static CORBA_boolean -impl_view_load(PortableServer_Servant servant, - const CORBA_char *uri, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - return gtk_math_view_load_uri(view->control_data->math_view, uri); -} - -static void -impl_view_unload(PortableServer_Servant servant, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - gtk_math_view_unload(view->control_data->math_view); -} - -static void -impl_view_setIdAttribute (PortableServer_Servant servant, - const CORBA_char *ns, - const CORBA_char *name, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - gtk_math_view_control_data_set_id_attribute(view->control_data, ns, name); -} - -static void -impl_view_getIdAttribute (PortableServer_Servant servant, - CORBA_string *ns, - CORBA_string *name, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - if (view->control_data->id_ns_uri != NULL) - *ns = CORBA_string_dup(view->control_data->id_ns_uri->str); - else - *ns = NULL; - - if (view->control_data->id_name != NULL) - *name = CORBA_string_dup(view->control_data->id_name); - else - *name = NULL; -} - -static void -impl_view_select(PortableServer_Servant servant, - const CORBA_char *id, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - GdomeElement* root = gtk_math_view_get_root_element(view->control_data->math_view); - if (root != NULL) - { - GdomeException exc = 0; - GdomeElement* el = find_element_by_id(root, - view->control_data->id_ns_uri, - view->control_data->id_name, - id); - if (el != NULL) - { - gtk_math_view_select(view->control_data->math_view, el); - gdome_el_unref(el, &exc); - g_assert(exc == 0); - } - gdome_el_unref(root, &exc); - g_assert(exc == 0); - } -} - -static void -impl_view_unselect(PortableServer_Servant servant, - const CORBA_char *id, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - GdomeElement* root = gtk_math_view_get_root_element(view->control_data->math_view); - if (root != NULL) - { - GdomeException exc = 0; - GdomeElement* el = find_element_by_id(root, - view->control_data->id_ns_uri, - view->control_data->id_name, - id); - if (el != NULL) - { - gtk_math_view_unselect(view->control_data->math_view, el); - gdome_el_unref(el, &exc); - g_assert(exc == 0); - } - gdome_el_unref(root, &exc); - g_assert(exc == 0); - } -} - -static CORBA_boolean -impl_view_isSelected(PortableServer_Servant servant, - const CORBA_char *id, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - GdomeElement* root = gtk_math_view_get_root_element(view->control_data->math_view); - CORBA_boolean res = CORBA_FALSE; - if (root != NULL) - { - GdomeException exc = 0; - GdomeElement* el = find_element_by_id(root, - view->control_data->id_ns_uri, - view->control_data->id_name, - id); - if (el != NULL) - { - res = gtk_math_view_is_selected(view->control_data->math_view, el) ? CORBA_TRUE : CORBA_FALSE; - gdome_el_unref(el, &exc); - g_assert(exc == 0); - } - gdome_el_unref(root, &exc); - g_assert(exc == 0); - } - return res; -} - -static CORBA_boolean -impl_view_elementCoords(PortableServer_Servant servant, - const CORBA_char *id, - CORBA_short *x, CORBA_short *y, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - GdomeElement* root = gtk_math_view_get_root_element(view->control_data->math_view); - CORBA_boolean res = CORBA_FALSE; - if (root != NULL) - { - GdomeException exc = 0; - GdomeElement* el = find_element_by_id(root, - view->control_data->id_ns_uri, - view->control_data->id_name, - id); - if (el != NULL) - { - gint xx; - gint yy; - res = gtk_math_view_get_element_coords(view->control_data->math_view, el, &xx, &yy) ? CORBA_TRUE : CORBA_FALSE; - gdome_el_unref(el, &exc); - g_assert(exc == 0); - *x = xx; - *y = yy; - } - gdome_el_unref(root, &exc); - g_assert(exc == 0); - } - return res; -} - -static CORBA_boolean -impl_view_elementBoundingBox(PortableServer_Servant servant, - const CORBA_char *id, - CORBA_short *width, CORBA_short *height, CORBA_short *depth, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - GdomeElement* root = gtk_math_view_get_root_element(view->control_data->math_view); - CORBA_boolean res = CORBA_FALSE; - if (root != NULL) - { - GdomeException exc = 0; - GdomeElement* el = find_element_by_id(root, - view->control_data->id_ns_uri, - view->control_data->id_name, - id); - if (el != NULL) - { - gint w; - gint h; - gint d; - res = gtk_math_view_get_element_bounding_box(view->control_data->math_view, el, &w, &h, &d) ? CORBA_TRUE : CORBA_FALSE; - gdome_el_unref(el, &exc); - g_assert(exc == 0); - *width = w; - *height = h; - *depth = d; - } - gdome_el_unref(root, &exc); - g_assert(exc == 0); - } - return res; -} - -static void -impl_view_getSize(PortableServer_Servant servant, - CORBA_short *width, CORBA_short *height, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - *width = gtk_math_view_get_width(view->control_data->math_view); - *height = gtk_math_view_get_height(view->control_data->math_view); -} - -static void -impl_view_getTop(PortableServer_Servant servant, - CORBA_short *x, CORBA_short *y, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - gint xx; - gint yy; - gtk_math_view_get_top(view->control_data->math_view, &xx, &yy); - *x = xx; - *y = yy; -} - -static void -impl_view_setTop (PortableServer_Servant servant, - CORBA_short x, CORBA_short y, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - gtk_math_view_set_top(view->control_data->math_view, x, y); -} - -static void -impl_view_setDefaultFontSize(PortableServer_Servant servant, - CORBA_short size, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - gtk_math_view_set_font_size(view->control_data->math_view, size); -} - -static short -impl_view_getDefaultFontSize(PortableServer_Servant servant, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - return gtk_math_view_get_font_size(view->control_data->math_view); -} - -static void -impl_view_setVerbosity(PortableServer_Servant servant, - const CORBA_short level, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - gtk_math_view_set_log_verbosity(view->control_data->math_view, level); -} - -static short -impl_view_getVerbosity(PortableServer_Servant servant, - CORBA_Environment *ev) -{ - View* view = VIEW (bonobo_object (servant)); - return gtk_math_view_get_log_verbosity(view->control_data->math_view); -} - -static void -view_class_init(ViewClass* klass) -{ - GObjectClass* object_class = (GObjectClass *) klass; - POA_GNOME_GtkMathView_View__epv* epv = &klass->epv; - - view_parent_class = g_type_class_peek_parent (klass); - object_class->finalize = view_object_finalize; - - epv->freeze = impl_view_freeze; - epv->thaw = impl_view_thaw; - epv->load = impl_view_load; - epv->unload = impl_view_unload; - epv->setIdAttribute = impl_view_setIdAttribute; - epv->getIdAttribute = impl_view_getIdAttribute; - epv->select = impl_view_select; - epv->unselect = impl_view_unselect; - epv->isSelected = impl_view_isSelected; - epv->elementCoords = impl_view_elementCoords; - epv->elementBoundingBox = impl_view_elementBoundingBox; - epv->getSize = impl_view_getSize; - epv->getTop = impl_view_getTop; - epv->setTop = impl_view_setTop; - epv->setDefaultFontSize = impl_view_setDefaultFontSize; - epv->getDefaultFontSize = impl_view_getDefaultFontSize; - epv->setVerbosity = impl_view_setVerbosity; - epv->getVerbosity = impl_view_getVerbosity; -} - -static void -view_init(View* view) -{ - /* do some initialization */ -} - -View* -view_new(GtkMathViewControlData* control_data) -{ - View* view; - g_return_val_if_fail(control_data != NULL, NULL); - view = g_object_new(VIEW_TYPE, NULL); - view->control_data = control_data; - return view; -} - -BONOBO_TYPE_FUNC_FULL (View, GNOME_GtkMathView_View, BONOBO_TYPE_OBJECT, view) - diff --git a/helm/gtkmathview-bonobo/src/view.h b/helm/gtkmathview-bonobo/src/view.h deleted file mode 100644 index 86394bec5..000000000 --- a/helm/gtkmathview-bonobo/src/view.h +++ /dev/null @@ -1,53 +0,0 @@ -/* This file is part of GtkMathView-Bonobo, a Bonobo wrapper for GtkMathView. - * Copyright (C) 2003 Luca Padovani - * Pouria Masoudi - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * For more information, please visit the project's home page - * http://helm.cs.unibo.it/gtkmathview-bonobo - * or send an email to - */ - -#ifndef __view_h__ -#define __view_h__ - -#include - -#include "GtkMathView.h" -#include "control-data.h" - -#define VIEW_TYPE (view_get_type()) -#define VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), VIEW_TYPE, View)) -#define VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), VIEW_TYPE, ViewClass)) -#define VIEW_IS_OBJECT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), VIEW_TYPE)) -#define VIEW_IS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), VIEW_TYPE)) -#define VIEW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), VIEW_TYPE, ViewClass)) - -typedef struct { - BonoboObject parent; - GtkMathViewControlData* control_data; -} View; - -typedef struct { - BonoboObjectClass parent_class; - POA_GNOME_GtkMathView_View__epv epv; -} ViewClass; - -GType view_get_type(void); -View* view_new(GtkMathViewControlData*); - -#endif /* __view_h__ */ - diff --git a/helm/gtkmathview-bonobo/test/.cvsignore b/helm/gtkmathview-bonobo/test/.cvsignore deleted file mode 100644 index 46490baa4..000000000 --- a/helm/gtkmathview-bonobo/test/.cvsignore +++ /dev/null @@ -1,5 +0,0 @@ -.deps -.libs -viewer -Makefile -Makefile.in diff --git a/helm/gtkmathview-bonobo/test/Makefile.am b/helm/gtkmathview-bonobo/test/Makefile.am deleted file mode 100644 index 204ae3dfc..000000000 --- a/helm/gtkmathview-bonobo/test/Makefile.am +++ /dev/null @@ -1,25 +0,0 @@ - -noinst_PROGRAMS = viewer - -viewer_SOURCES = \ - main.c \ - $(top_srcdir)/src/GtkMathView-common.c \ - $(top_srcdir)/src/GtkMathView-stubs.c - -viewer_LDADD = \ - $(BONOBOUI_LIBS) \ - $(BONOBO_LIBS) \ - $(GNOMEUI_LIBS) - -AM_CFLAGS = \ - -DPREFIX=\""$(prefix)"\" \ - -DSYSCONFDIR=\""$(sysconfdir)"\" \ - -DDATADIR=\""$(datadir)"\" \ - -DLIBDIR=\""$(datadir)"\" - -INCLUDES = \ - $(BONOBOUI_CFLAGS) \ - $(BONOBO_CFLAGS) \ - $(GNOMEUI_CFLAGS) \ - -I$(top_srcdir)/src - diff --git a/helm/gtkmathview-bonobo/test/embedding.html b/helm/gtkmathview-bonobo/test/embedding.html deleted file mode 100644 index 674012ff4..000000000 --- a/helm/gtkmathview-bonobo/test/embedding.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - -

GtkMathView-Bonobo test page

- - The embedded object should display a mathematical formula. -
- - - - - x - 2 - - = - click for the answer - - - -
- -
- - - - - diff --git a/helm/gtkmathview-bonobo/test/embedding.xml b/helm/gtkmathview-bonobo/test/embedding.xml deleted file mode 100644 index 57fe49a87..000000000 --- a/helm/gtkmathview-bonobo/test/embedding.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - -

GtkMathView-Bonobo test page

- - The embedded object should display a mathematical formula. -
- - - - - x - 2 - - = - click for the answer - - - -
- Size -
- - - - - diff --git a/helm/gtkmathview-bonobo/test/main.c b/helm/gtkmathview-bonobo/test/main.c deleted file mode 100644 index e737329ec..000000000 --- a/helm/gtkmathview-bonobo/test/main.c +++ /dev/null @@ -1,476 +0,0 @@ -#include -#include -#include -#include - -#include "control-factory.h" -#include "GtkMathView.h" - -static GtkWidget *control; - -typedef enum{LOAD_STREAM,LOAD_FILE,NONE}FileSelectionOp; - -struct FileSelectionInfo { - BonoboWidget* control; - GtkWidget* widget; - - FileSelectionOp Operations; -}; - - -static struct FileSelectionInfo file_selection_info = { NULL, NULL,NONE}; - -static void -file_selection_destroy_cb (GtkWidget *widget,gpointer data) -{ - file_selection_info.widget = NULL; -} - - -static void -load_through_persist_file (const gchar *filename, - Bonobo_PersistFile pfile) -{ - CORBA_Environment ev; - CORBA_exception_init (&ev); - Bonobo_PersistFile_load (pfile, filename, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - g_warning ("Cannot load."); - CORBA_exception_free (&ev); -} - -static void -load_through_persist_stream(const gchar *filename, - Bonobo_PersistStream pstream) -{ - BonoboObject *stream = NULL; - CORBA_Environment ev; - CORBA_exception_init (&ev); - -#if 0 - stream = bonobo_stream_open ("fs", filename, - Bonobo_Storage_READ, 0); -#endif - - /*if (stream == NULL) - { - g_warning ("Couldn't load `%s'\n", filename); - } else*/ { - Bonobo_Stream corba_stream; - corba_stream = bonobo_object_corba_objref (stream); - Bonobo_Stream_truncate (corba_stream, 0, &ev); - Bonobo_PersistStream_load (pstream, corba_stream, "application/mathml+xml", &ev); - } - Bonobo_Unknown_unref (pstream, &ev); - CORBA_Object_release (pstream, &ev); - CORBA_exception_free (&ev); -} - -static void -file_selection_ok_cb (GtkWidget *widget, - gpointer data) -{ - CORBA_Object interface; - const gchar *interface_name; - CORBA_Environment ev; - - if (file_selection_info.Operations == LOAD_FILE) - interface_name = "IDL:Bonobo/PersistFile:1.0"; - else if(file_selection_info.Operations == LOAD_STREAM) - interface_name = "IDL:Bonobo/PersistStream:1.0"; - else printf("failed to get operation type\n"); - - CORBA_exception_init (&ev); - interface = Bonobo_Unknown_queryInterface (bonobo_widget_get_objref (file_selection_info.control), - interface_name, &ev); - CORBA_exception_free (&ev); - - if (interface == CORBA_OBJECT_NIL) - { - g_warning ("The Control does not seem to support `%s'.", interface_name); - } - else - { - const gchar *fname; - fname = gtk_file_selection_get_filename (GTK_FILE_SELECTION (file_selection_info.widget)); - switch (file_selection_info.Operations) { - case LOAD_STREAM: - load_through_persist_stream (fname, interface); - break; - case LOAD_FILE: - load_through_persist_file (fname, interface); - break; - } - } - - gtk_widget_destroy (file_selection_info.widget); -} - -static void -open_dialog (BonoboWindow *app, - FileSelectionOp operation) -{ - GtkWidget *widget; - BonoboWidget *control; - - control = BONOBO_WIDGET (bonobo_window_get_contents (app)); - - if (file_selection_info.widget != NULL) { - gdk_window_show (GTK_WIDGET (file_selection_info.widget)->window); - return; - } - - if(operation == LOAD_STREAM) - widget = gtk_file_selection_new(_("Open Stream....")); - if(operation == LOAD_FILE) - widget = gtk_file_selection_new (_("Open file...")); - - gtk_window_set_transient_for (GTK_WINDOW (widget), - GTK_WINDOW (app)); - - file_selection_info.widget = widget; - file_selection_info.control = control; - file_selection_info.Operations = operation; - - g_signal_connect_object (GTK_FILE_SELECTION (widget)->cancel_button, - "clicked", G_CALLBACK (gtk_widget_destroy), widget, G_CONNECT_AFTER); - - g_signal_connect (GTK_FILE_SELECTION (widget)->ok_button, "clicked", G_CALLBACK (file_selection_ok_cb), NULL); - - g_signal_connect (file_selection_info.widget, "destroy", G_CALLBACK (file_selection_destroy_cb), NULL); - - gtk_widget_show (file_selection_info.widget); -} - -/* "Open through persist file" dialog. */ -static void -open_through_persist_file_cb (GtkWidget *widget, - gpointer data) -{ - open_dialog (BONOBO_WINDOW (data), LOAD_FILE); -} - -static void -open_through_persist_stream_cb(GtkWidget *widget, - gpointer data) -{ - open_dialog(BONOBO_WINDOW(data), LOAD_STREAM); -} - -static void -test_view(GtkWidget* widget, gpointer data) -{ - CORBA_Object interface; - CORBA_Environment ev; - - CORBA_exception_init (&ev); - interface = Bonobo_Unknown_queryInterface (bonobo_widget_get_objref (BONOBO_WIDGET (bonobo_window_get_contents (BONOBO_WINDOW(data)))), - "IDL:GNOME/GtkMathView/View:1.0", &ev); - CORBA_exception_free (&ev); - - if (interface == CORBA_OBJECT_NIL) - { - g_warning ("The Control does not seem to support `View'."); - } - - CORBA_exception_init (&ev); - GNOME_GtkMathView_View_freeze(interface, &ev); - CORBA_exception_free (&ev); - - CORBA_exception_init (&ev); - GNOME_GtkMathView_View_thaw(interface, &ev); - CORBA_exception_free (&ev); - - CORBA_exception_init (&ev); - Bonobo_Unknown_unref (interface, &ev); - CORBA_Object_release (interface, &ev); - CORBA_exception_free (&ev); -} - -static void -exit_cb (GtkWidget *widget, - gpointer data) -{ - gtk_widget_destroy (GTK_WIDGET (data)); - bonobo_main_quit (); -} - -static void -get_size(GtkWidget *widget, - gpointer data) -{ - gint width,height; - BonoboWidget* control; - BonoboControlFrame* control_frame; - - Bonobo_PropertyBag prop_bag; - - control = BONOBO_WIDGET (bonobo_window_get_contents (BONOBO_WINDOW (data))); - control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control)); - prop_bag = bonobo_control_frame_get_control_property_bag(control_frame, NULL); - - width = bonobo_pbclient_get_long(prop_bag,"width",NULL); - height = bonobo_pbclient_get_long(prop_bag,"height",NULL); - - printf("Width: %d Height: %d\n",width,height); - - bonobo_object_release_unref (prop_bag,NULL); - -}; - -static void -get_top(GtkWidget *widget, - gpointer data) -{ - gint top_x,top_y; - BonoboWidget* control; - BonoboControlFrame* control_frame; - Bonobo_PropertyBag prop_bag; - - control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data))); - control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control)); - prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL); - - top_x = bonobo_pbclient_get_long(prop_bag,"top-x",NULL); - top_y = bonobo_pbclient_get_long(prop_bag,"top-y",NULL); - - printf("Top X: %d ,Top Y: %d\n",top_x,top_y); - - bonobo_object_release_unref(prop_bag,NULL); -} - -static void -get_font_size(GtkWidget *widget, - gpointer data) -{ - gint font_size; - BonoboWidget* control; - BonoboControlFrame* control_frame; - Bonobo_PropertyBag prop_bag; - - control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data))); - control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control)); - prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL); - - font_size = bonobo_pbclient_get_long(prop_bag,"font-size",NULL); - - printf("FontSize : %d\n",font_size); - - bonobo_object_release_unref(prop_bag,NULL); -} - -static void -get_verbosity(GtkWidget *widget, - gpointer data) -{ - gint verbosity; - BonoboWidget* control; - BonoboControlFrame* control_frame; - Bonobo_PropertyBag prop_bag; - - control = BONOBO_WIDGET(bonobo_window_get_contents(BONOBO_WINDOW(data))); - control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control)); - prop_bag = bonobo_control_frame_get_control_property_bag(control_frame,NULL); - - verbosity = bonobo_pbclient_get_long(prop_bag,"verbosity",NULL); - - printf("Verbosity: %d\n",verbosity); - - bonobo_object_release_unref(prop_bag,NULL); -} - -static BonoboUIVerb verbs [] = { - BONOBO_UI_UNSAFE_VERB ("OpenFile", open_through_persist_file_cb), - BONOBO_UI_UNSAFE_VERB ("OpenStream", open_through_persist_stream_cb), - BONOBO_UI_UNSAFE_VERB ("TestView", test_view), - BONOBO_UI_UNSAFE_VERB ("Size", get_size), - BONOBO_UI_UNSAFE_VERB ("Top", get_top), - BONOBO_UI_UNSAFE_VERB ("Font Size", get_font_size), - BONOBO_UI_UNSAFE_VERB ("Verbosity", get_verbosity), - BONOBO_UI_UNSAFE_VERB ("FileExit", exit_cb), - BONOBO_UI_VERB_END -}; - -/* A dirty, non-translatable hack */ -static char ui [] = -"" -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " - -" " - -" " - -" " -" " -" " -" " -" " -""; - -static int -app_delete_cb (GtkWidget *widget, GdkEvent *event, gpointer dummy) -{ - gtk_widget_destroy (GTK_WIDGET (widget)); - bonobo_main_quit (); - - return FALSE; -} - -static guint -container_create (void) -{ - GtkWidget *win; - GtkWindow *window; - BonoboUIComponent *component; - BonoboUIContainer *container; - CORBA_Environment ev; - - - win = bonobo_window_new ("test-editor", - "GtkMathView Control Test"); - window = GTK_WINDOW (win); - - container = bonobo_window_get_ui_container (BONOBO_WINDOW (win)); - - g_signal_connect (window, "delete_event", G_CALLBACK (app_delete_cb), NULL); - - gtk_window_set_default_size (window, 600, 440); - gtk_window_set_resizable (window, TRUE); - - component = bonobo_ui_component_new ("test"); - bonobo_running_context_auto_exit_unref (BONOBO_OBJECT (component)); - - bonobo_ui_component_set_container (component, BONOBO_OBJREF (container), NULL); - bonobo_ui_component_add_verb_list_with_data (component, verbs, win); - bonobo_ui_component_set_translate (component, "/", ui, NULL); - - control = bonobo_widget_new_control (CONTROL_ID, BONOBO_OBJREF (container)); - - if (control == NULL) - g_error ("Cannot get `%s'.", CONTROL_ID); - - bonobo_window_set_contents (BONOBO_WINDOW (win), control); - - gtk_widget_show_all (GTK_WIDGET (window)); - - CORBA_exception_init (&ev); - - return FALSE; -} - -static gint -load_file (const gchar *fname) -{ - CORBA_Object interface; - CORBA_Environment ev; - - printf ("loading: %s\n", fname); - CORBA_exception_init (&ev); - interface = Bonobo_Unknown_queryInterface (bonobo_widget_get_objref (BONOBO_WIDGET (control)), - "IDL:Bonobo/PersistFile:1.0", &ev); - CORBA_exception_free (&ev); - load_through_persist_file (fname, interface); - - return FALSE; -} - -static gint -load_file_stream(const gchar *fname) -{ - CORBA_Object interface; - CORBA_Environment ev; - - printf("loading with stream %s\n",fname); - CORBA_exception_init(&ev); - interface = Bonobo_Unknown_queryInterface(bonobo_widget_get_objref(BONOBO_WIDGET(control)), - "IDL:Bonobo/PersistStream:1.0",&ev); - - CORBA_exception_free(&ev); - load_through_persist_stream(fname,interface); - - return FALSE; -} - -/* -static void -install_property_bag_listener (BonoboWidget *control, BonoboWindow *bonobo_win) -{ - Bonobo_Listener corba_listener; - BonoboListener *listener; - BonoboControlFrame *control_frame; - CORBA_Environment ev; - Bonobo_PropertyBag prop_bag; - - CORBA_exception_init(&ev); - - control_frame = bonobo_widget_get_control_frame(BONOBO_WIDGET(control)); - if(!control_frame) - g_error("can't find control frame\n"); - - prop_bag = bonobo_control_frame_get_control_property_bag(control_frame, NULL); - if(prop_bag == CORBA_OBJECT_NIL) - g_error("can't connect to property bag\n"); - - //connect a listener to the property bag - bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn) width_changed, - "Bonobo/Property:change:width",NULL,bonobo_win); - - bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)height_changed, - "Bonobo/Property:change:height",NULL,bonobo_win); - bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)top_x_changed, - "Bonobo/Property:change:top-x",NULL,bonobo_win); - bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)top_y_changed, - "Bonobo/Property:change:top-y",NULL,bonobo_win); - bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)font_size_changed, - "Bonobo/Property:change:font-size",NULL,bonobo_win); - bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)anti_aliasing_changed, - "Bonobo/Property:change:verbosity",NULL,bonobo_win); - bonobo_event_source_client_add_listener(prop_bag, (BonoboListenerCallbackFn)font_manager_changed, - "Bonobo/Property:change:font_manager",NULL,bonobo_win); - CORBA_exception_free(&ev); -}*/ - - -int -main (int argc, char **argv) -{ - gnome_program_init("test-editor", VERSION, LIBGNOMEUI_MODULE, argc, argv, - GNOME_PROGRAM_STANDARD_PROPERTIES, - GNOME_PARAM_HUMAN_READABLE_NAME, _("GtkMathView Test Container"), - NULL); - - bonobo_activate (); - - /* We can't make any CORBA calls unless we're in the main loop. So we - delay creating the container here. */ - gtk_idle_add ((GtkFunction) container_create, NULL); - if (argc > 1 && *argv [argc - 1] != '-') - gtk_idle_add ((GtkFunction) load_file, argv [argc - 1]); - - bonobo_activate (); - bonobo_main (); - - return bonobo_ui_debug_shutdown (); -} diff --git a/helm/gtkmathview-bonobo/test/test.mml b/helm/gtkmathview-bonobo/test/test.mml deleted file mode 100644 index 2436838bf..000000000 --- a/helm/gtkmathview-bonobo/test/test.mml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - a - - x - - + - b - - - - x - 2 - - + - - p - - x - - + - q - - - - ... - - d - x - = - - - a2 - - - ln - - - ( - - x2 - + - - p - - x - - + - q - - ) - - - - + - - - - - 2 - - b - - - - - a - - p - - - - - - 4 - - q - - - - - p - 2 - - - - - - - arctg - - - - - 2 - - x - - + - p - - - - - 4 - - q - - - - - p - 2 - - - - - - - + - c - - - go to Luca's home page - diff --git a/helm/gtkmathview-bonobo/test/testembedding.html b/helm/gtkmathview-bonobo/test/testembedding.html deleted file mode 100644 index e894388d6..000000000 --- a/helm/gtkmathview-bonobo/test/testembedding.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - -

GtkMathView-Bonobo test page

- -The embedded object should display a mathematical formula. -
-
- -No viewer capable of displaying the test document installed. - - - - diff --git a/helm/header/getheader.xml b/helm/header/getheader.xml deleted file mode 100644 index a0f903f87..000000000 --- a/helm/header/getheader.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - String baseURL = request.getParameter("baseurl"); - String styleURL1 = request.getParameter("stylesheet1"); - String styleURL2 = request.getParameter("stylesheet2"); - String xmlURI = request.getParameter("xmluri"); - String annURI = request.getParameter("annuri"); - - baseURL - styleURL1 - styleURL2 - xmlURI - annURI - - diff --git a/helm/header/provaurl b/helm/header/provaurl deleted file mode 100644 index 86344dc78..000000000 --- a/helm/header/provaurl +++ /dev/null @@ -1 +0,0 @@ -http://phd.cs.unibo.it/helm/PARSER/examples/header/getheader.xml?baseurl=http://cartoonia.cs.unibo.it/helm/PARSER/examples/style/&stylesheet1=content.xsl&stylesheet2=mmlextension.xsl&xmlfile=file:///really_very_local/helm/PARSER/examples/prove/provaIota/bool_ind.con.xml diff --git a/helm/header/provaurl1 b/helm/header/provaurl1 deleted file mode 100644 index d95769884..000000000 --- a/helm/header/provaurl1 +++ /dev/null @@ -1,2 +0,0 @@ -http://cartoonia.cs.unibo.it/helm/PARSER/examples/header/getheader.xml?baseurl=http://cartoonia.cs.unibo.it/helm/PARSER/examples/style/&stylesheet1=content.xsl&stylesheet2=content_to_html.xsl&xmlfile=/really_very_local/helm/PARSER/examples/prove/prova/forest_rec.con.xml:wq - diff --git a/helm/header/setheader.xsl b/helm/header/setheader.xsl deleted file mode 100644 index dd6ecad34..000000000 --- a/helm/header/setheader.xsl +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - -http://localhost:8081/getciconly?uri= - - - - - - - type="text/xml" - href="" type="text/xsl" - type="xslt" - - - - - - - - - - - - - diff --git a/helm/helm_data/.cvsignore b/helm/helm_data/.cvsignore deleted file mode 100644 index cbb473e0b..000000000 --- a/helm/helm_data/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -Makefile configure config.log config.cache config.status diff --git a/helm/helm_data/AUTHORS b/helm/helm_data/AUTHORS deleted file mode 100644 index 963977a6f..000000000 --- a/helm/helm_data/AUTHORS +++ /dev/null @@ -1,4 +0,0 @@ -Andrea Asperti -Luca Padovani -Claudio Sacerdoti Coen -Irene Schena diff --git a/helm/helm_data/COPYING b/helm/helm_data/COPYING deleted file mode 100644 index d60c31a97..000000000 --- a/helm/helm_data/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/helm/helm_data/ChangeLog b/helm/helm_data/ChangeLog deleted file mode 100644 index 20c36b475..000000000 --- a/helm/helm_data/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -28/12/2000: First alpha release diff --git a/helm/helm_data/LICENSE b/helm/helm_data/LICENSE deleted file mode 100644 index 72f9426c8..000000000 --- a/helm/helm_data/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (C) 2000, HELM Team. - -This file is part of HELM, an Hypertextual, Electronic -Library of Mathematics, developed at the Computer Science -Department, University of Bologna, Italy. - -HELM is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -HELM is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with HELM; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -For details, see the HELM World-Wide-Web page, -http://cs.unibo.it/helm/. diff --git a/helm/helm_data/LICENSE.ml b/helm/helm_data/LICENSE.ml deleted file mode 100644 index 2f1b31e35..000000000 --- a/helm/helm_data/LICENSE.ml +++ /dev/null @@ -1,25 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - diff --git a/helm/helm_data/LICENSE.script b/helm/helm_data/LICENSE.script deleted file mode 100644 index bad51618d..000000000 --- a/helm/helm_data/LICENSE.script +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (C) 2000, HELM Team. -# -# This file is part of HELM, an Hypertextual, Electronic -# Library of Mathematics, developed at the Computer Science -# Department, University of Bologna, Italy. -# -# HELM is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# HELM is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with HELM; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# For details, see the HELM World-Wide-Web page, -# http://cs.unibo.it/helm/. diff --git a/helm/helm_data/LICENSE.xml b/helm/helm_data/LICENSE.xml deleted file mode 100644 index 6077c5215..000000000 --- a/helm/helm_data/LICENSE.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/helm_data/Makefile.in b/helm/helm_data/Makefile.in deleted file mode 100644 index 498577fa0..000000000 --- a/helm/helm_data/Makefile.in +++ /dev/null @@ -1,23 +0,0 @@ - -HELM_DTD_DIR=@HELM_DTD_DIR@ -HELM_STYLE_DIR=@HELM_STYLE_DIR@ - -all: - -install: - cp dtd/* $(HELM_DTD_DIR) - cp style/*.xsl $(HELM_STYLE_DIR) - -clean: - -distclean: clean - rm -f Makefile configure config.log config.cache config.status *.spec - rm -rf dtd style - -dist: clean - rm -rf ../@PACKAGE@-@VERSION@ - mkdir ../@PACKAGE@-@VERSION@ - cp -r * ../@PACKAGE@-@VERSION@ - (cd .. ; tar cvfz @PACKAGE@-@VERSION@.tar.gz @PACKAGE@-@VERSION@ ; rm -rf @PACKAGE@-@VERSION@) - -.PHONY: all install distclean diff --git a/helm/helm_data/NEWS b/helm/helm_data/NEWS deleted file mode 100644 index 20c36b475..000000000 --- a/helm/helm_data/NEWS +++ /dev/null @@ -1 +0,0 @@ -28/12/2000: First alpha release diff --git a/helm/helm_data/README b/helm/helm_data/README deleted file mode 100644 index cc0522b13..000000000 --- a/helm/helm_data/README +++ /dev/null @@ -1,9 +0,0 @@ -NOTE: This is the first alpha release of project HELM. - -HELM (Hypertextual Electronic Library of Mathematics) is a project aimed -at the creation of tools for the development and exploitation of a huge -distributed library of formal mathematical knowledge. This package holds -the base DTDs and XSLT stylesheets developed by the members of project -HELM. - -For more information see http://www.cs.unibo.it/helm diff --git a/helm/helm_data/config.cache.pkg b/helm/helm_data/config.cache.pkg deleted file mode 100644 index 5d80ae922..000000000 --- a/helm/helm_data/config.cache.pkg +++ /dev/null @@ -1,4 +0,0 @@ -# This is the config.cache that holds the ``standard'' path for the -# HELM library. It is supposed to be used when creating packages - -helm_cv_HELM_DTDS_DIR=${helm_cv_HELM_DTDS_DIR='$RESOLVED_PREFIX/share/helm/dtd'} diff --git a/helm/helm_data/configure.in b/helm/helm_data/configure.in deleted file mode 100644 index 635258995..000000000 --- a/helm/helm_data/configure.in +++ /dev/null @@ -1,61 +0,0 @@ -AC_INIT(dtd/cic.dtd) - -PACKAGE=helm_data -MAJOR_VERSION=0 -MINOR_VERSION=0 -MICRO_VERSION=2 -VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION - -DEFAULT_HELM_DTD_DIR=/usr/local/share/helm/dtd -DEFAULT_HELM_STYLE_DIR=/usr/local/share/helm/style - -AC_ARG_ENABLE( - defaults, - [ --enable-defaults[=ARG] if yes then use defaults (don't ask user) [default=auto]], - USE_DEFAULTS=$enableval, - USE_DEFAULTS=auto -) - -if test $USE_DEFAULTS = auto; then - AC_CHECK_PROG(HAVE_HELM_CONFIG, helm-config, yes, no) - if test $HAVE_HELM_CONFIG = yes; then - HELM_DTD_DIR=`helm-config --dtd-dir` - HELM_STYLE_DIR=`helm-config --style-dir` - else - USE_DEFAULTS=no - fi -fi - -if test $USE_DEFAULTS = no; then - echo - echo "\`helm-config' is not installed (or I can't find it in your path)." - echo "Please, insert the directory where I can find the DTDs for HELM..." - echo - echo -n "[[$DEFAULT_HELM_DTD_DIR]] ? " - read HELM_DTD_DIR - if test "x$HELM_DTD_DIR" = "x"; then - HELM_DTD_DIR=$DEFAULT_HELM_DTD_DIR - fi - echo - echo "Please, insert the directory where I can find the stylesheets for HELM..." - echo - echo -n "[[$DEFAULT_HELM_STYLE_DIR]] ? " - read HELM_STYLE_DIR - if test "x$HELM_STYLE_DIR" = "x"; then - HELM_STYLE_DIR=$DEFAULT_HELM_STYLE_DIR - fi -elif test $USE_DEFAULTS = yes; then - HELM_DTD_DIR=$DEFAULT_HELM_DTD_DIR - HELM_STYLE_DIR=$DEFAULT_HELM_STYLE_DIR -fi - -AC_SUBST(PACKAGE) -AC_SUBST(VERSION) -AC_SUBST(HELM_DTD_DIR) -AC_SUBST(HELM_STYLE_DIR) - -AC_OUTPUT([ - Makefile - helm_data.spec -]) - diff --git a/helm/helm_data/helm_data.spec.in b/helm/helm_data/helm_data.spec.in deleted file mode 100644 index 387a06f4b..000000000 --- a/helm/helm_data/helm_data.spec.in +++ /dev/null @@ -1,34 +0,0 @@ -Summary: The base DTDs and XSLT stylesheets of project HELM -Name: @PACKAGE@ -Version: @VERSION@ -Release: 1 -Copyright: GPL -URL: http://www.cs.unibo.it/helm -Packager: Claudio Sacerdoti Coen -Requires: helm_configuration >= 0.0.2 -Group: Applications/Publishing -Source: www.cs.unibo.it:/helm/@PACKAGE@-@VERSION@.tar.gz -%description -HELM (Hypertextual Electronic Library of Mathematics) is a project aimed -at the creation of tools for the development and exploitation of a huge -distributed library of formal mathematical knowledge. This package holds -the base DTDs and XSLT stylesheets developed by the members of project -HELM. -For more information see http://www.cs.unibo.it/helm - -%prep -%setup - -%build -cp config.cache.pkg config.cache -./configure --enable-defaults -make - -%install -make install - -%files -%doc AUTHORS COPYING ChangeLog NEWS README - -/usr/local/share/helm/dtd -/usr/local/share/helm/style diff --git a/helm/helmpot/.cvsignore b/helm/helmpot/.cvsignore deleted file mode 100644 index d6cea24b1..000000000 --- a/helm/helmpot/.cvsignore +++ /dev/null @@ -1,18 +0,0 @@ -.emacs.desktop -config.h -config.h.in -config.cache -config.log -config.status -configure -configure.scan -t1lib.log -stamp-h -stamp-h.in -Makefile -Makefile.in -*.gz -aclocal.m4 -*.spec -.deps -helmpot diff --git a/helm/helmpot/AUTHORS b/helm/helmpot/AUTHORS deleted file mode 100644 index fe59f14d6..000000000 --- a/helm/helmpot/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Luca Padovani diff --git a/helm/helmpot/ChangeLog b/helm/helmpot/ChangeLog deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/helmpot/LICENSE b/helm/helmpot/LICENSE deleted file mode 100644 index eef8774f4..000000000 --- a/helm/helmpot/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2000, Luca Padovani . - * - * This file is part of HelmPot, a minimal browser for HELM. - * - * HelmPot is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HelmPot is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HelmPot; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * For details, see the HelmPot World-Wide-Web page, - * http://cs.unibo.it/helm/helmview, or send a mail to - * - */ diff --git a/helm/helmpot/Makefile.am b/helm/helmpot/Makefile.am deleted file mode 100644 index d730de386..000000000 --- a/helm/helmpot/Makefile.am +++ /dev/null @@ -1,26 +0,0 @@ - -CLEANFILES = core t1lib.log helmpot.spec - -bin_PROGRAMS = helmpot - -noinst_HEADERS = guiGTK.h - -helmpot_SOURCES = \ - main.c \ - guiGTK.c - -backup: - tar cvfz ../@PACKAGE@-@VERSION@-`date|tr ' ' '_'|tr ':' '_'`.tar.gz . - -cleanbak: - -rm -f `find . -name "*~"` - -lc: - @( \ - CFILES=`find . -name "*.c"`; \ - HFILES=`find . -name "*.h"`; \ - wc -l $$CFILES $$HFILES | tail -n 1 \ - ) - -INCLUDES = $(GTK_CFLAGS) - diff --git a/helm/helmpot/NEWS b/helm/helmpot/NEWS deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/helmpot/README b/helm/helmpot/README deleted file mode 100644 index 2e7cb0da0..000000000 --- a/helm/helmpot/README +++ /dev/null @@ -1,18 +0,0 @@ - -HELMPoT -------- - -HELMPoT is a small plug-out for Netscape Navigator in order to -browse the HELM library. After installing the binary somewhere -in your hard disk, just configure a new helper application in -Netscape associated to the text/xml MIME type. The command -to be executed should something of the kind: - - helmpot '%s' - -assuming that helmpot is visible in your path. - -Enjoy, - - luca.padovani@cs.unibo.it - diff --git a/helm/helmpot/acconfig.h b/helm/helmpot/acconfig.h deleted file mode 100644 index b65cd2c64..000000000 --- a/helm/helmpot/acconfig.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2000, Luca Padovani . - * - * This file is part of HelmPot, a minimal browser for HELM. - * - * HelmPot is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HelmPot is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HelmPot; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * For details, see the HelmPot World-Wide-Web page, - * http://cs.unibo.it/helm/helmview, or send a mail to - * - */ - -#ifndef __config_h__ -#define __config_h__ - -#define PRIVATE static - -@TOP@ - -/* If defined the widget will perform a huge amount - * of validity checks while running - */ -#undef ENABLE_CHECKS - -#ifdef ENABLE_CHECKS -#define DEBUG -#else -#define NDEBUG -#define G_DISABLE_ASSERT -#define G_DISABLE_CHECKS -#endif - -@BOTTOM@ - -#endif /* __config_h__ */ diff --git a/helm/helmpot/configure.in b/helm/helmpot/configure.in deleted file mode 100644 index 3d31a0d54..000000000 --- a/helm/helmpot/configure.in +++ /dev/null @@ -1,70 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT(main.c) - -HELMPOT_MAJOR_VERSION=0 -HELMPOT_MINOR_VERSION=1 -HELMPOT_MICRO_VERSION=0 -HELMPOT_VERSION=$HELMPOT_MAJOR_VERSION.$HELMPOT_MINOR_VERSION.$HELMPOT_MICRO_VERSION -VERSION=$HELMPOT_VERSION - -AC_SUBST(HELMPOT_VERSION) - -AC_ARG_ENABLE( - checks, - [ --enable-checks[=ARG] include debugging checks [default=yes]], - [ - if test $enableval = yes; then - AC_DEFINE(ENABLE_CHECKS) - fi - ], - AC_DEFINE(ENABLE_CHECKS) -) - -dnl Automake configuration -AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(helmpot, $HELMPOT_VERSION) - -dnl Checks for programs. -AC_LANG_C -AC_PROG_CC -AC_ISC_POSIX -AC_CHECK_PROG(HAVE_COLORGCC, colorgcc, yes, no) - -dnl Checks for header files. -AC_HEADER_STDC -AC_CHECK_HEADERS(unistd.h) -AC_FUNC_VFORK - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST - -dnl Check for iconv with const pointer as second argument -AC_LANG_C - -dnl Checks for libraries -AM_PATH_GTK(1.2.0, gtklib="yes", gtklib="no") - -if test $gtklib = "no"; then - AC_MSG_ERROR(GTK is needed in order to use helmpot) -fi - -CFLAGS="$CFLAGS @GTKMATHVIEW_CFLAGS@" -CXXFLAGS="$CXXFLAGS @GTKMATHVIEW_CFLAGS@" -LIBS="$LIBS @GTKMATHVIEW_LIBS@" - -PKG_CHECK_MODULES(GTKMATHVIEW, gtkmathview >= 0.3.0,, AC_MSG_ERROR(could not find gtkmathview)) -AC_SUBST(GTKMATHVIEW_CFLAGS) -AC_SUBST(GTKMATHVIEW_LIBS) - -if test $HAVE_COLORGCC = "yes"; then - CC=colorgcc - CXX=colorgcc -fi - -CFLAGS="$CFLAGS -W -Wall" -CXXFLAGS="$CXXFLAGS -W -Wall" - -AC_OUTPUT([ -Makefile -helmpot.spec -]) diff --git a/helm/helmpot/debian/changelog b/helm/helmpot/debian/changelog deleted file mode 100644 index 32467c728..000000000 --- a/helm/helmpot/debian/changelog +++ /dev/null @@ -1,42 +0,0 @@ -helmpot (0.1.0-2) unstable; urgency=low - - * debian/control - - bumped standards-version to 3.5.10 - - bumped dependency on debhelper to 4.0.0 - - added ${misc:Depends} - - added build dep on pkg-config - - -- Stefano Zacchiroli Wed, 25 Jun 2003 18:20:33 +0200 - -helmpot (0.1.0-1) unstable; urgency=low - - * New release. - - -- Stefano Zacchiroli Sat, 11 May 2002 11:52:35 +0200 - -helmpot (0.0.4-1) unstable; urgency=low - - * New release. - - -- Stefano Zacchiroli Wed, 14 Nov 2001 14:48:17 +0100 - -helmpot (0.0.3-1) unstable; urgency=low - - * Bug fix related to selection - -- Claudio Sacerdoti Coen Fri, 05 Oct 2001 19:40:06 +0200 - -helmpot (0.0.2-1) unstable; urgency=low - - * Small bug fix related to maction - - -- Claudio Sacerdoti Coen Mon, 27 Aug 2001 19:00:00 +0200 - -helmpot (0.0.1-1) unstable; urgency=low - - * Initial Release. - - -- Luca Padovani Thu, 12 Apr 2001 17:18:05 +0200 - -Local variables: -mode: debian-changelog -End: diff --git a/helm/helmpot/debian/control b/helm/helmpot/debian/control deleted file mode 100644 index 5deb9e0b4..000000000 --- a/helm/helmpot/debian/control +++ /dev/null @@ -1,14 +0,0 @@ -Source: helmpot -Section: misc -Priority: optional -Maintainer: Stefano Zacchiroli -Build-Depends: debhelper (>> 4.0.0), libgtkmathview-dev, pkg-config -Standards-Version: 3.5.10 - -Package: helmpot -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: A minimal browser for the HELM library. - 'helmpot' is a minimal browser, in the form of a plug-out, for - browsing the HELM library (MathML presentation). - diff --git a/helm/helmpot/debian/copyright b/helm/helmpot/debian/copyright deleted file mode 100644 index e2472b069..000000000 --- a/helm/helmpot/debian/copyright +++ /dev/null @@ -1,30 +0,0 @@ -This package was debianized by Luca Padovani on -Thu, 12 Apr 2001 17:18:05 +0200. - -It was packed from source obtained via cvs, with this CVSROOT: - :pserver:anonymous@phd.cs.unibo.it:/home/lpadovan/PHELM/ - -Author: Luca Padovani - -Copyright: - Copyright (C) 2000, Luca Padovani . - - This file is part of HelmPot, a minimal browser for HELM. - - HelmPot is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - HelmPot is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with HelmPot; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - For details, see the HelmPot World-Wide-Web page, - http://cs.unibo.it/helm/helmpot, or send a mail to - diff --git a/helm/helmpot/debian/docs b/helm/helmpot/debian/docs deleted file mode 100644 index 6f12db508..000000000 --- a/helm/helmpot/debian/docs +++ /dev/null @@ -1,2 +0,0 @@ -AUTHORS -README diff --git a/helm/helmpot/debian/rules b/helm/helmpot/debian/rules deleted file mode 100755 index 75b3d8af5..000000000 --- a/helm/helmpot/debian/rules +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/make -f -# Sample debian/rules that uses debhelper. -# GNU copyright 1997 to 1999 by Joey Hess. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -# This is the debhelper compatability version to use. -export DH_COMPAT=2 - -build: build-stamp -build-stamp: - dh_testdir - - ./configure --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info - # Add here commands to compile the package. - $(MAKE) - - touch build-stamp - -clean: - dh_testdir - dh_testroot - rm -f build-stamp - - # Add here commands to clean up after the build process. - -$(MAKE) distclean - - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - # Add here commands to install the package into debian/tmp. - $(MAKE) install prefix=$(CURDIR)/debian/helmpot/usr - - -# Build architecture-independent files here. -binary-indep: build install -# We have nothing to do by default. - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir - dh_testroot -# dh_installdebconf - dh_installdocs -# dh_installexamples -# dh_installmenu -# dh_installemacsen -# dh_installpam -# dh_installinit -# dh_installcron -# dh_installmanpages - dh_installinfo - dh_undocumented - dh_installchangelogs ChangeLog - dh_link - dh_strip - dh_compress - dh_fixperms - # You may want to make some executables suid here. -# dh_makeshlibs - dh_installdeb -# dh_perl - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install diff --git a/helm/helmpot/guiGTK.c b/helm/helmpot/guiGTK.c deleted file mode 100644 index 906daf2b6..000000000 --- a/helm/helmpot/guiGTK.c +++ /dev/null @@ -1,684 +0,0 @@ -/* - * Copyright (C) 2000-2002, Luca Padovani . - * - * This file is part of HelmPot, a minimal browser for HELM. - * - * HelmPot is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HelmPot is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HelmPot; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * For details, see the HelmPot World-Wide-Web page, - * http://cs.unibo.it/helm/helmview, or send a mail to - * - */ - -#include - -#include -#include -#include -#include -#if HAVE_UNISTD_H -# include -# include -# include -# include -#endif -#include -#include - -#include "gtkmathview.h" -#include "guiGTK.h" - -#define XLINK_NS_URI "http://www.w3.org/1999/xlink" - -#define pot_width 16 -#define pot_height 16 -PRIVATE unsigned char pot_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x07, - 0x00, 0x00, 0xe6, 0x2f, 0x34, 0x5f, 0xdc, 0x5f, 0xf8, 0x3f, 0xf8, 0x3f, - 0xf0, 0x1f, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00}; - -#define pot_mask_width 16 -#define pot_mask_height 16 -static unsigned char pot_mask_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xe0, 0x0f, 0xe0, 0x0f, - 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, - 0xfc, 0x7f, 0xf8, 0x3f, 0xf0, 0x1f, 0x00, 0x00}; - -PRIVATE GtkWidget* window; -PRIVATE GtkWidget* main_area; -PRIVATE GtkWidget* scrolled_area; -PRIVATE GtkWidget* status_bar; -PRIVATE GtkMenuItem* kerning_item; -PRIVATE GtkMenuItem* anti_aliasing_item; -PRIVATE GtkMenuItem* font_size_item; -PRIVATE gchar* file_name = NULL; - -PRIVATE GdkCursor* normal_cursor; -PRIVATE GdkCursor* link_cursor; -PRIVATE GdkCursor* pot_cursor; - -PRIVATE gboolean loading = FALSE; -PRIVATE guint statusbar_context; - -PRIVATE void create_widget_set(void); -PRIVATE GtkWidget* get_main_menu(void); -PRIVATE void options_font_size(GtkWidget*, guint); -PRIVATE void options_font_manager(GtkWidget*, guint); -PRIVATE void options_verbosity(GtkWidget*, guint); -PRIVATE void options_kerning(GtkWidget*, gpointer); -PRIVATE void options_anti_aliasing(GtkWidget*, gpointer); -PRIVATE void help_about(GtkWidget*, gpointer); -PRIVATE void save_as(GtkWidget*); -PRIVATE void export_to_ps(GtkWidget*); - -PRIVATE GtkItemFactoryEntry menu_items[] = { - { "/_File", NULL, NULL, 0, "" }, - { "/File/Save _As...", NULL, save_as, 0, NULL }, - { "/File/_Export to PostScript...", NULL, export_to_ps, 0, NULL }, - { "/File/sep1", NULL, NULL, 0, "" }, - { "/File/_Quit", "Q", gtk_main_quit, 0, NULL }, - - { "/_Options", NULL, NULL, 0, "" }, - { "/Options/Default _Font Size", NULL, NULL, 0, "" }, - { "/Options/Default Font Size/8pt", NULL, options_font_size, 8, "" }, - { "/Options/Default Font Size/10pt", NULL, options_font_size, 10, "/Options/Default Font Size/8pt" }, - { "/Options/Default Font Size/12pt", NULL, options_font_size, 12, "/Options/Default Font Size/8pt" }, - { "/Options/Default Font Size/14pt", NULL, options_font_size, 14, "/Options/Default Font Size/8pt" }, - { "/Options/Default Font Size/18pt", NULL, options_font_size, 18, "/Options/Default Font Size/8pt" }, - { "/Options/Default Font Size/24pt", NULL, options_font_size, 24, "/Options/Default Font Size/8pt" }, - { "/Options/Font Manager", NULL, NULL, 0, "" }, - { "/Options/Font Manager/_GTK", NULL, options_font_manager, 0, "" }, - { "/Options/Font Manager/_Type 1", NULL, options_font_manager, 1, "/Options/Font Manager/GTK" }, - { "/Options/Verbosity", NULL, NULL, 0, "" }, - { "/Options/Verbosity/_Errors", NULL, options_verbosity, 0, "" }, - { "/Options/Verbosity/_Warnings", NULL, options_verbosity, 1, "/Options/Verbosity/Errors" }, - { "/Options/Verbosity/_Info", NULL, options_verbosity, 2, "/Options/Verbosity/Errors" }, - { "/Options/Verbosity/_Debug", NULL, options_verbosity, 3, "/Options/Verbosity/Errors" }, - { "/Options/sep1", NULL, NULL, 0, "" }, - { "/Options/_Kerning", NULL, options_kerning, 0, "" }, - { "/Options/_Anti Aliasing", NULL, options_anti_aliasing, 0, "" }, - - { "/_Help" , NULL, NULL, 0, "" }, - { "/Help/About...", NULL, help_about, 0, NULL } -}; - -PRIVATE void -quick_message(const gchar* msg) -{ - GtkWidget* dialog; - GtkWidget* label; - GtkWidget* okay_button; - - /* Create the widgets */ - - dialog = gtk_dialog_new(); - label = gtk_label_new (msg); - okay_button = gtk_button_new_with_label("OK"); - - gtk_widget_set_usize(dialog, 300, 100); - - /* Ensure that the dialog box is destroyed when the user clicks ok. */ - - gtk_signal_connect_object (GTK_OBJECT (okay_button), "clicked", - GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT(dialog)); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), - okay_button); - - /* Add the label, and show everything we've added to the dialog. */ - - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); - gtk_widget_show_all (dialog); -} - -PRIVATE void -load_error_msg(const gchar* name) -{ - gchar* msg = g_strdup_printf("Could not load\n`%s'", name); - quick_message(msg); - g_free(msg); -} - -PRIVATE void -save_error_msg(const gchar* name) -{ - gchar* msg = g_strdup_printf("Could not save\n`%s'", name); - quick_message(msg); - g_free(msg); -} - -void -GUI_init(gint* argc, gchar*** argv, gchar* title, guint width, guint height, GtkFunction f, guint32 timeout) -{ - GdkPixmap* source; - GdkPixmap* mask; - - GdkColor fg = { 0, 65535, 65535, 65535 }; - GdkColor bg = { 0, 0, 0, 0 }; - - gtk_init(argc, argv); - - window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(window), title); - gtk_window_set_default_size(GTK_WINDOW(window), width, height); - gtk_signal_connect(GTK_OBJECT(window), "delete_event", (GtkSignalFunc) gtk_main_quit, NULL); - create_widget_set(); - - gtk_widget_show(window); - - gtk_timeout_add(timeout, f, NULL); - - normal_cursor = gdk_cursor_new(GDK_TOP_LEFT_ARROW); - link_cursor = gdk_cursor_new(GDK_HAND2); - - source = gdk_bitmap_create_from_data (NULL, pot_bits, - pot_width, pot_height); - mask = gdk_bitmap_create_from_data (NULL, pot_mask_bits, - pot_mask_width, pot_mask_height); - pot_cursor = gdk_cursor_new_from_pixmap (source, mask, &fg, &bg, 8, 8); - gdk_pixmap_unref (source); - gdk_pixmap_unref (mask); -} - -void -GUI_uninit() -{ -} - -int -GUI_load_document(const gchar* name) -{ - GtkMathView* math_view; - GtkMathViewClass* klass; - gboolean res; - - g_return_val_if_fail(name != NULL, -1); - g_return_val_if_fail(main_area != NULL, -1); - g_return_val_if_fail(GTK_IS_MATH_VIEW(main_area), -1); - - math_view = GTK_MATH_VIEW(main_area); - g_return_val_if_fail(math_view != NULL, -1); - - klass = (GtkMathViewClass*) gtk_type_class(gtk_math_view_get_type()); - g_return_val_if_fail(klass != NULL, -1); - - res = gtk_math_view_load(math_view, name); - gdk_window_set_cursor(main_area->window, normal_cursor); - loading = FALSE; - - if (!res) { - load_error_msg(name); - return -1; - } - - gtk_statusbar_pop(GTK_STATUSBAR(status_bar), statusbar_context); - if (strlen(name) > 40) name += strlen(name) - 40; - gtk_statusbar_push(GTK_STATUSBAR(status_bar), statusbar_context, name); - - if (file_name != NULL) g_free(file_name); - file_name = g_strdup(name); - - return 0; -} - -void -GUI_unload_document() -{ - GtkMathView* math_view; - - g_return_if_fail(main_area != NULL); - g_return_if_fail(GTK_IS_MATH_VIEW(main_area)); - - math_view = GTK_MATH_VIEW(main_area); - - gtk_math_view_unload(math_view); -} - -void -GUI_run() -{ - gtk_main(); -} - -PRIVATE void -options_font_size(GtkWidget* widget, guint size) -{ - GtkMathView* math_view; - - g_return_if_fail(main_area != NULL); - g_return_if_fail(GTK_IS_MATH_VIEW(main_area)); - - math_view = GTK_MATH_VIEW(main_area); - - gtk_math_view_set_font_size(math_view, size); -} - -PRIVATE void -options_font_manager(GtkWidget* widget, guint id) -{ - GtkMathView* math_view; - - g_return_if_fail(main_area != NULL); - g_return_if_fail(GTK_IS_MATH_VIEW(main_area)); - - math_view = GTK_MATH_VIEW(main_area); - - gtk_math_view_set_font_manager_type(math_view, id); -} - -PRIVATE void -options_anti_aliasing(GtkWidget* widget, gpointer data) -{ - gboolean aa = gtk_math_view_get_anti_aliasing(GTK_MATH_VIEW(main_area)); - gtk_math_view_set_anti_aliasing(GTK_MATH_VIEW(main_area), !aa); -} - -PRIVATE void -options_kerning(GtkWidget* widget, gpointer data) -{ - gboolean k = gtk_math_view_get_kerning(GTK_MATH_VIEW(main_area)); - gtk_math_view_set_kerning(GTK_MATH_VIEW(main_area), !k); -} - -PRIVATE void -options_verbosity(GtkWidget* widget, guint level) -{ - gtk_math_view_set_log_verbosity(GTK_MATH_VIEW(main_area), level); -} - -PRIVATE void -help_about(GtkWidget* widget, gpointer data) -{ - GtkWidget* dialog; - GtkWidget* label; - GtkWidget* ok; - - dialog = gtk_dialog_new(); - label = gtk_label_new("\n HELM PoT \n Copyright (C) 2001-2002 Luca Padovani \n"); - ok = gtk_button_new_with_label("Close"); - - gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", - GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), - ok); - - gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); - - gtk_widget_show_all (dialog); -} - -PRIVATE void -export_filename(GtkFileSelection* selector, gpointer user_data) -{ - FILE* f; - GtkMathView* math_view; - gchar* selected_filename; - - selected_filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION(user_data)); - - math_view = GTK_MATH_VIEW(main_area); - - f = fopen(selected_filename, "wt"); - if (f == NULL) { - save_error_msg(selected_filename); - /*g_free(selected_filename);*/ - return; - } - - gtk_math_view_export_to_postscript(math_view, - (21 * SCALED_POINTS_PER_CM) / SCALED_POINTS_PER_PX, - (29 * SCALED_POINTS_PER_CM) / SCALED_POINTS_PER_PX, - SCALED_POINTS_PER_IN / SCALED_POINTS_PER_PX, - SCALED_POINTS_PER_IN / SCALED_POINTS_PER_PX, - FALSE, - f); - - fclose(f); - /*g_free(selected_filename);*/ -} - -PRIVATE void -save_filename(GtkFileSelection* selector, gpointer user_data) -{ - FILE* source; - FILE* dest; - gchar* buffer; - gchar* selected_filename; - - if (file_name == NULL) return; - - source = fopen(file_name, "rt"); - if (source == NULL) { - load_error_msg(file_name); - return; - } - - selected_filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION(user_data)); - if (selected_filename == NULL) return; - - dest = fopen(selected_filename, "wt"); - if (dest == NULL) { - save_error_msg(selected_filename); - /*g_free(selected_filename);*/ - return; - } - - /*g_free(selected_filename);*/ - - buffer = g_new(gchar, 2048); - while (!feof(source)) { - size_t n = fread(buffer, sizeof(gchar), 2048, source); - fwrite(buffer, sizeof(gchar), n, dest); - } - - g_free(buffer); - fclose(source); - fclose(dest); -} - -PRIVATE void -file_dialog(const gchar* title, GtkSignalFunc f) -{ - GtkWidget* fs; - - g_return_if_fail(title != NULL); - g_return_if_fail(f != NULL); - - fs = gtk_file_selection_new(title); - - gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(fs)->ok_button), - "clicked", f, fs); - - /* Ensure that the dialog box is destroyed when the user clicks a button. */ - - gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(fs)->ok_button), - "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), - (gpointer) fs); - - gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(fs)->cancel_button), - "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), - (gpointer) fs); - - /* Display that dialog */ - - gtk_widget_show (fs); -} - -PRIVATE void -export_to_ps(GtkWidget* widget) -{ - file_dialog("Export to PostScript", export_filename); -#if 0 - static GList* items = NULL; - - GtkWidget* dialog; - GtkWidget* tmp; - - if (items == NULL) { - items = g_list_append(items, "A4"); - items = g_list_append(items, "A5"); - } - - dialog = gtk_dialog_new(); - tmp = gtk_label_new("Paper size"); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), tmp); - tmp = gtk_combo_new(); - gtk_combo_set_popdown_strings(GTK_COMBO(tmp), items); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), tmp); -#if 0 - tmp = gtk_check_button_new_with_label("Disable Colors"); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), tmp); -#endif - - tmp = gtk_button_new_with_label("OK"); - gtk_signal_connect_object(GTK_OBJECT(tmp), "clicked", GTK_SIGNAL_FUNC(export_to_ps_get_file_name), dialog); - gtk_signal_connect_object(GTK_OBJECT(tmp), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), dialog); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), tmp); - tmp = gtk_button_new_with_label("Cancel"); - gtk_signal_connect_object(GTK_OBJECT(tmp), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), dialog); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), tmp); - - gtk_widget_show_all(dialog); -#endif -} - -PRIVATE void -save_as(GtkWidget* widget) -{ - file_dialog("Save As...", save_filename); -} - -PRIVATE void -element_changed(GtkMathView* math_view, GdomeElement* elem) -{ - g_return_if_fail(math_view != NULL); - g_return_if_fail(main_area != NULL); - g_return_if_fail(GTK_IS_MATH_VIEW(math_view)); - /* fprintf(stderr, "node changed: %p %s\n", node, (node != NULL) ? mdom_node_get_name(node) : "-"); */ - - if (!loading) { - GdomeException exc = 0; - GdomeDOMString* namespaceURI = gdome_str_mkref(XLINK_NS_URI); - GdomeDOMString* localName = gdome_str_mkref("href"); - - if (elem != NULL) { - gdome_el_ref(elem, &exc); - g_assert(exc == 0); - } - - while (elem != NULL && !gdome_el_hasAttributeNS(elem, namespaceURI, localName, &exc)) { - GdomeElement* parent = gdome_cast_el(gdome_el_parentNode(elem, &exc)); - g_assert(exc == 0); - gdome_el_unref(elem, &exc); - g_assert(exc == 0); - elem = parent; - } - g_assert(exc == 0); - - gdome_str_unref(namespaceURI); - gdome_str_unref(localName); - - if (elem != NULL) { - gdome_el_unref(elem, &exc); - g_assert(exc == 0); - gdk_window_set_cursor(main_area->window, link_cursor); - } else - gdk_window_set_cursor(main_area->window, normal_cursor); - } -} - -PRIVATE void -selection_changed(GtkMathView* math_view, GdomeElement* elem) -{ - GdomeException exc = 0; - GdomeDOMString* localName = gdome_str_mkref("xref"); - - g_return_if_fail(math_view != NULL); - g_return_if_fail(GTK_IS_MATH_VIEW(math_view)); - - if (elem != NULL) { - gdome_el_ref(elem, &exc); - g_assert(exc == 0); - } - - while (elem != NULL && !gdome_el_hasAttribute(elem, localName, &exc)) { - GdomeElement* parent = gdome_cast_el(gdome_el_parentNode(elem, &exc)); - g_assert(exc == 0); - gdome_el_unref(elem, &exc); - g_assert(exc == 0); - elem = parent; - } - - gdome_str_unref(localName); - - gtk_math_view_set_selection(math_view, elem); - if (elem != NULL) { - gdome_el_unref(elem, &exc); - g_assert(exc == 0); - } -} - -PRIVATE void -jump(GdomeDOMString* href) -{ - pid_t pid; - g_return_if_fail(href != NULL); - - gdk_window_set_cursor(main_area->window, pot_cursor); - loading = TRUE; - pid = fork(); - if (pid == -1) exit(-1); - if (pid == 0) { - gchar* open_url = g_strdup_printf("openURL(%s,cic)", href->str); - gint fd; - - close(0); - close(1); - close(2); - - fd = open("/dev/null", O_RDWR); - dup(fd); - dup(fd); - - execlp("netscape", "netscape", "-noraise", "-remote", open_url, NULL); - perror("exec failed:"); - exit(-1); - } -} - -PRIVATE void -clicked(GtkMathView* math_view, gpointer user_data) -{ - GdomeException exc = 0; - GdomeDOMString* namespaceURI = gdome_str_mkref(XLINK_NS_URI); - GdomeDOMString* localName = gdome_str_mkref("href"); - - GdomeElement* p = gtk_math_view_get_element(math_view); - while (p != NULL && !gdome_el_hasAttributeNS(p, namespaceURI, localName, &exc)) { - GdomeElement* parent = gdome_cast_el(gdome_el_parentNode(p, &exc)); - g_assert(exc == 0); - gdome_el_unref(p, &exc); - g_assert(exc == 0); - p = parent; - } - g_assert(exc == 0); - - if (p != NULL) { - GdomeDOMString* href = gdome_el_getAttributeNS(p, namespaceURI, localName, &exc); - g_assert(exc == 0); - g_assert(href != NULL); - - jump(href); - gdome_str_unref(href); - gdome_el_unref(p, &exc); - g_assert(exc == 0); - } else { - p = gtk_math_view_get_action(math_view); - if (p != NULL) { - gtk_math_view_action_toggle(math_view); - gdome_el_unref(p, &exc); - g_assert(exc == 0); - } - } - - gdome_str_unref(namespaceURI); - gdome_str_unref(localName); -} - -PRIVATE void -create_widget_set() -{ - GtkWidget* main_vbox; - GtkWidget* menu_bar; - - main_vbox = gtk_vbox_new(FALSE, 1); - gtk_container_border_width(GTK_CONTAINER(main_vbox), 1); - gtk_container_add(GTK_CONTAINER(window), main_vbox); - gtk_widget_show(main_vbox); - - menu_bar = get_main_menu(); - gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, FALSE, TRUE, 0); - gtk_widget_show(menu_bar); - - main_area = gtk_math_view_new(NULL, NULL); - gtk_widget_show(main_area); - - gtk_signal_connect_object (GTK_OBJECT (main_area), - "element_changed", GTK_SIGNAL_FUNC (element_changed), - (gpointer) main_area); - - gtk_signal_connect_object (GTK_OBJECT (main_area), - "selection_changed", GTK_SIGNAL_FUNC (selection_changed), - (gpointer) main_area); - - gtk_signal_connect_object (GTK_OBJECT (main_area), - "clicked", GTK_SIGNAL_FUNC(clicked), - (gpointer) main_area); - - scrolled_area = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_area), - GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - gtk_widget_show(scrolled_area); - gtk_container_add(GTK_CONTAINER(scrolled_area), main_area); - gtk_box_pack_start(GTK_BOX(main_vbox), scrolled_area, TRUE, TRUE, 0); - - status_bar = gtk_statusbar_new(); - gtk_widget_show(status_bar); - gtk_box_pack_start(GTK_BOX(main_vbox), status_bar, FALSE, TRUE, 0); - statusbar_context = gtk_statusbar_get_context_id(GTK_STATUSBAR(status_bar), "filename"); - - gtk_widget_show(main_vbox); - - if (gtk_math_view_get_anti_aliasing(GTK_MATH_VIEW(main_area))) - gtk_menu_item_activate(anti_aliasing_item); - - if (gtk_math_view_get_kerning(GTK_MATH_VIEW(main_area))) - gtk_menu_item_activate(kerning_item); - - gtk_math_view_set_font_size(GTK_MATH_VIEW(main_area), DEFAULT_FONT_SIZE); - gtk_menu_item_activate(font_size_item); -} - -GtkWidget* -get_main_menu() -{ - GtkItemFactory* item_factory; - GtkAccelGroup* accel_group; - GtkWidget* menu_item; - - gint nmenu_items = sizeof(menu_items) / sizeof(menu_items[0]); - - accel_group = gtk_accel_group_new(); - - item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "
", accel_group); - - gtk_item_factory_create_items(item_factory, nmenu_items, menu_items, NULL); - - gtk_window_add_accel_group(GTK_WINDOW(window), accel_group); - - menu_item = gtk_item_factory_get_widget(item_factory, "/Options/Kerning"); - kerning_item = GTK_MENU_ITEM(menu_item); - - menu_item = gtk_item_factory_get_widget(item_factory, "/Options/Anti Aliasing"); - anti_aliasing_item = GTK_MENU_ITEM(menu_item); - - /* !!!BEWARE!!! the default font size must be kept aligned with the definition - * in defs.h - */ - menu_item = gtk_item_factory_get_widget(item_factory, "/Options/Default Font Size/14pt"); - font_size_item = GTK_MENU_ITEM(menu_item); - - return gtk_item_factory_get_widget(item_factory, "
"); -} - diff --git a/helm/helmpot/guiGTK.h b/helm/helmpot/guiGTK.h deleted file mode 100644 index 83f5f866a..000000000 --- a/helm/helmpot/guiGTK.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2000, Luca Padovani . - * - * This file is part of HelmPot, a minimal browser for HELM. - * - * HelmPot is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HelmPot is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HelmPot; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * For details, see the HelmPot World-Wide-Web page, - * http://cs.unibo.it/helm/helmview, or send a mail to - * - */ - -#ifndef __guiGTK_h__ -#define __guiGTK_h__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - /* initGUI: some initialization stuff, creates the main window, sets it with a title */ - void GUI_init(gint *, gchar ***, gchar *, guint, guint, GtkFunction, guint32); - void GUI_uninit(void); - - int GUI_load_document(const gchar*); - void GUI_unload_document(void); - void GUI_dump_entities(void); - - /* main: this is the main event loop, to be called when the program is ready to run */ - void GUI_run(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __guiGTK_h__ */ diff --git a/helm/helmpot/helmpot.spec.in b/helm/helmpot/helmpot.spec.in deleted file mode 100644 index 641f1849f..000000000 --- a/helm/helmpot/helmpot.spec.in +++ /dev/null @@ -1,24 +0,0 @@ -Summary: A minimal browser for the HELM library -Name: @PACKAGE@ -Version: @VERSION@ -Release: 1 -Copyright: GPL -Group: Development/Libraries -Source: www.cs.unibo.it:/helm/helmpot/@PACKAGE@-@VERSION@.tar.gz -%description -HelmView is a minimal browser for the HELM library. - -%prep -%setup - -%build -./configure -make - -%install -make install - -%files -%doc AUTHORS COPYING ChangeLog INSTALL LICENSE NEWS README TODO - -/usr/local/bin/@PACKAGE@ diff --git a/helm/helmpot/main.c b/helm/helmpot/main.c deleted file mode 100644 index c2abc2d7e..000000000 --- a/helm/helmpot/main.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2000-2002, Luca Padovani . - * - * This file is part of HelmPot, a minimal browser for HELM. - * - * HelmPot is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HelmPot is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HelmPot; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * For details, see the HelmPot World-Wide-Web page, - * http://cs.unibo.it/helm/helmpot, or send a mail to - * - */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "defs.h" -#include "guiGTK.h" - -#define BUFFER_SIZE 2048 - -PRIVATE gchar app_name[64]; -PRIVATE gint sockfd; -PRIVATE struct sockaddr_in address; - -PRIVATE void -error(const gchar* msg) -{ - g_assert(msg != NULL); - fprintf(stderr, "%s: fatal error: %s\n", app_name, msg); -} - -#if 0 -PRIVATE void -print_version() -{ - printf("%s - written by Luca Padovani (C) 2000.\n", app_name); -#ifdef DEBUG - printf("Compiled %s %s\n", __DATE__, __TIME__); -#endif - exit(0); -} -#endif - -PRIVATE gboolean -timeout(gpointer user_data) -{ - static gchar file_name[BUFFER_SIZE]; - - if (recv(sockfd, file_name, BUFFER_SIZE, 0) < 0) { - if (errno != EAGAIN && errno != EWOULDBLOCK) - error("error receving message"); - } else - GUI_load_document(file_name); - - return TRUE; -} - -int -main(int argc, char *argv[]) -{ - sprintf(app_name, "HELM Pot (Plug-OuT) v%s", VERSION); - - if (argc != 2) { - fprintf(stderr, "%s\n\n", app_name); - fprintf(stderr, "Usage: helmpot URL\n"); - exit(-1); - } - - sockfd = socket(PF_INET, SOCK_DGRAM, 0); - if (sockfd < 0) error("could not create socket"); - - if (inet_aton("127.0.0.1", &address.sin_addr) < 0) - error("could not create address"); - address.sin_port = 8778; - address.sin_family = PF_INET; - - if (bind(sockfd, &address, sizeof(address)) < 0) { - if (sendto(sockfd, argv[1], strlen(argv[1]), 0, &address, sizeof(address)) < 0) - error("could not send message"); - sleep(1); - exit(0); - } - - if (fcntl(sockfd, F_SETFL, O_NONBLOCK) < 0) - error("could not set the socket to non-block mode"); - - GUI_init(&argc, &argv, app_name, 500, 600, timeout, 500); - - GUI_load_document(argv[1]); - - GUI_run(); - GUI_uninit(); - GUI_unload_document(); - - return 0; -} diff --git a/helm/helmpot/pot_mask b/helm/helmpot/pot_mask deleted file mode 100644 index 09f71a6a9..000000000 --- a/helm/helmpot/pot_mask +++ /dev/null @@ -1,6 +0,0 @@ -#define pot_mask_width 16 -#define pot_mask_height 16 -static unsigned char pot_mask_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xe0, 0x0f, 0xe0, 0x0f, - 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, - 0xfc, 0x7f, 0xf8, 0x3f, 0xf0, 0x1f, 0x00, 0x00}; diff --git a/helm/http_getter/.cvsignore b/helm/http_getter/.cvsignore deleted file mode 100644 index 111b760aa..000000000 --- a/helm/http_getter/.cvsignore +++ /dev/null @@ -1,14 +0,0 @@ -*.cmi -*.cmo -*.cma -*.cmx -*.cmxa -*.a -*.o -http_getter -http_getter.opt -autom4te.cache -buildTimeOpts.ml -config.log -config.status -configure diff --git a/helm/http_getter/AUTHORS b/helm/http_getter/AUTHORS deleted file mode 100644 index 5eab6c071..000000000 --- a/helm/http_getter/AUTHORS +++ /dev/null @@ -1,11 +0,0 @@ - -- current version (the OCaml one!): - - Stefano Zacchiroli - -- for the old Perl version: - - Claudio Sacerdoti Coen - Stefano Zacchiroli - Luca Padovani - diff --git a/helm/http_getter/BUGS b/helm/http_getter/BUGS deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/http_getter/COPYING b/helm/http_getter/COPYING deleted file mode 100644 index d60c31a97..000000000 --- a/helm/http_getter/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/helm/http_getter/ChangeLog b/helm/http_getter/ChangeLog deleted file mode 100644 index cd6f55bbd..000000000 --- a/helm/http_getter/ChangeLog +++ /dev/null @@ -1,6 +0,0 @@ -- ignore comments and blank lines in servers file -- added "list_servers", "add_server", "remove_server" methods -- bugfix: multiple definition of URI by different servers are now permitted - -08/01/2003: OCaml reimplementation available! (version 0.2.1) -28/12/2000: First alpha release diff --git a/helm/http_getter/Makefile b/helm/http_getter/Makefile deleted file mode 100644 index d7b1089af..000000000 --- a/helm/http_getter/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -VERSION = 0.3.0 -NAME = http_getter - -REQUIRES = helm-getter helm-logger helm-registry netstring -COMMONOPTS = -package "$(REQUIRES)" -pp camlp4o -thread -OCAMLFIND = OCAMLPATH=../ocaml/METAS ocamlfind -OCAMLC = $(OCAMLFIND) ocamlc -g $(COMMONOPTS) -OCAMLOPT = $(OCAMLFIND) opt $(COMMONOPTS) - -all: byte -byte: $(NAME) -opt: $(NAME).opt -world: byte opt - -$(NAME): buildTimeOpts.cmo main.ml - $(OCAMLC) -linkpkg -o $@ $^ -$(NAME).opt: buildTimeOpts.cmx main.ml - $(OCAMLOPT) -linkpkg -o $@ $^ - -%.cmo: %.ml - $(OCAMLC) -c $< -%.cmx: %.ml - $(OCAMLOPT) -c $< - -distclean: clean - rm -f buildTimeOpts.ml -clean: - rm -f *.cm[aiox] *.o $(NAME){,.opt} *.dot - -.PHONY: all byte opt world clean distclean - diff --git a/helm/http_getter/Makefile.overrides b/helm/http_getter/Makefile.overrides deleted file mode 100644 index 4b669eb49..000000000 --- a/helm/http_getter/Makefile.overrides +++ /dev/null @@ -1,2 +0,0 @@ -http_getter_types.cmi http_getter_types.cmo: http_getter_types.ml - $(OCAMLC) -c $< diff --git a/helm/http_getter/NEWS b/helm/http_getter/NEWS deleted file mode 100644 index aaf0047a2..000000000 --- a/helm/http_getter/NEWS +++ /dev/null @@ -1,13 +0,0 @@ - -09/02/2004 - - Split getter in backend and frontend. Frontend is the only remaining file here - (namely main.ml). Backend is shipped in the helm-http_getter library (look in - the HELM cvs, dir ocaml/getter/). - -- Zack - -08/01/2003 - - Fully OCaml HTTP Getter is now available: go and burn the Perl implementation! - -- Zack - diff --git a/helm/http_getter/README b/helm/http_getter/README deleted file mode 100644 index 1074b3bf5..000000000 --- a/helm/http_getter/README +++ /dev/null @@ -1,7 +0,0 @@ -HELM (Hypertextual Electronic Library of Mathematics) is a project aimed -at the creation of tools for the development and exploitation of a huge -distributed library of formal mathematical knowledge. This package holds -the getter used to map logical names into phisical names and download -the required files. - -For more information see http://helm.cs.unibo.it diff --git a/helm/http_getter/buildTimeOpts.ml.in b/helm/http_getter/buildTimeOpts.ml.in deleted file mode 100644 index b4865ac3e..000000000 --- a/helm/http_getter/buildTimeOpts.ml.in +++ /dev/null @@ -1,3 +0,0 @@ - -let conffile = "@GETTER_CONF_FILE@";; - diff --git a/helm/http_getter/configure.ac b/helm/http_getter/configure.ac deleted file mode 100644 index 36efda576..000000000 --- a/helm/http_getter/configure.ac +++ /dev/null @@ -1,13 +0,0 @@ -AC_INIT(main.ml) - -AC_ARG_WITH(conffile, - AS_HELP_STRING([--with-conffile=fname], - [set default run time configuration file (default is /etc/http_getter.conf.xml]), - [GETTER_CONF_FILE=$withval], [GETTER_CONF_FILE=/etc/http_getter.conf.xml]) - -AC_SUBST(GETTER_CONF_FILE) - -AC_OUTPUT([ - buildTimeOpts.ml -]) - diff --git a/helm/http_getter/http_getter.conf.xml.sample b/helm/http_getter/http_getter.conf.xml.sample deleted file mode 100644 index b98763cc6..000000000 --- a/helm/http_getter/http_getter.conf.xml.sample +++ /dev/null @@ -1,11 +0,0 @@ - - -
- /projects/helm/var/servers.txt - /tmp/helm/cache - /projects/helm/var - /projects/helm/xml/dtd - 58081 - http_getter.log -
-
diff --git a/helm/http_getter/main.ml b/helm/http_getter/main.ml deleted file mode 100644 index 3117a85c9..000000000 --- a/helm/http_getter/main.ml +++ /dev/null @@ -1,352 +0,0 @@ -(* Copyright (C) 2003-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -open Http_getter_common -open Http_getter_const -open Http_getter_misc -open Http_getter_types - - (* constants *) - -let configuration_file = BuildTimeOpts.conffile - -let common_headers = [ - "Cache-Control", "no-cache"; - "Pragma", "no-cache"; - "Expires", "0" -] - - (* HTTP queries argument parsing *) - - (* parse encoding ("format" parameter), default is `Normal *) -let parse_enc (req: Http_types.request) = - try - (match req#param "format" with - | "normal" -> `Normal - | "gz" -> `Gzipped - | s -> raise (Bad_request ("Invalid format: " ^ s))) - with Http_types.Param_not_found _ -> `Normal - - (* parse "patch_dtd" parameter, default is true *) -let parse_patch (req: Http_types.request) = - try - (match req#param "patch_dtd" with - | s when String.lowercase s = "yes" -> true - | s when String.lowercase s = "no" -> false - | s -> raise (Bad_request ("Invalid patch_dtd value: " ^ s))) - with Http_types.Param_not_found _ -> true - - (* parse output format ("format" parameter), no default value *) -let parse_output_format meth (req: Http_types.request) = - match req#param "format" with - | s when String.lowercase s = "txt" -> `Text - | s when String.lowercase s = "xml" -> `Xml - | s -> raise (Bad_request ("Invalid /" ^ meth ^ " format: " ^ s)) - -let xml_escape = Netencoding.Html.encode ~in_enc:`Enc_utf8 () - -let html_tag ?exn () = - let xml_decl = "\n" in - match exn with - | Some (exn, arg) -> - let (exn, arg) = (xml_escape exn, xml_escape arg) in - sprintf - ("%s\n") - xml_decl xhtml_ns helm_ns exn arg - | None -> - sprintf "%s\n" - xml_decl xhtml_ns helm_ns - -let mk_return_fun pp_fun contype msg outchan = - Http_daemon.respond - ~body:(pp_fun msg) ~headers:["Content-Type", contype] outchan - -let pp_msg s = sprintf "%s%s" (html_tag ()) s -let null_pp s = s - -let return_html_error exn = - let pp_error s = - sprintf - ("%s\nHttp Getter error: %s" - ^^ "") - (html_tag ~exn ()) s - in - mk_return_fun pp_error "text/xml" - -let return_html_internal_error exn = - let pp_internal_error s = - sprintf - ("%s\nHttp Getter Internal error: %s" - ^^ "") - (html_tag ~exn ()) s - in - mk_return_fun pp_internal_error "text/xml" - -let return_html_msg = mk_return_fun pp_msg "text/xml" -let return_html_raw = mk_return_fun null_pp "text/xml" -let return_xml_raw = mk_return_fun null_pp "text/xml" -let return_400 exn body = return_html_error exn body - -let return_all_uris doctype uris outchan = - Http_daemon.send_basic_headers ~code:(`Code 200) outchan; - Http_daemon.send_header "Content-Type" "text/xml" outchan; - Http_daemon.send_headers common_headers outchan; - Http_daemon.send_CRLF outchan; - output_string - outchan - (sprintf -" - - -<%s> -" - doctype - (Lazy.force Http_getter_env.my_own_url) - doctype - doctype); - List.iter - (fun uri -> output_string outchan (sprintf "\t\n" uri)) - uris; - output_string outchan (sprintf "\n" doctype) - -let return_all_xml_uris fmt outchan = - let uris = Http_getter.getalluris () in - match fmt with - | `Text -> - let buf = Buffer.create 10240 in - List.iter (bprintf buf "%s\n") uris ; - let body = Buffer.contents buf in - Http_daemon.respond - ~headers:(("Content-Type", "text/plain") :: common_headers) - ~body outchan - | `Xml -> return_all_uris "alluris" uris outchan - -let return_ls regexp fmt outchan = - let ls_items = Http_getter.ls regexp in - let buf = Buffer.create 10240 in - (match fmt with - | `Text -> - List.iter - (function - | Ls_section dir -> bprintf buf "dir, %s\n" dir - | Ls_object obj -> - bprintf buf "object, %s, <%s,%s,%s,%s>\n" - obj.uri (if obj.ann then "YES" else "NO") - (string_of_ls_flag obj.types) - (string_of_ls_flag obj.body) - (string_of_ls_flag obj.proof_tree)) - ls_items - | `Xml -> - Buffer.add_string buf "\n"; - bprintf buf "\n" - (Lazy.force Http_getter_env.my_own_url); - Buffer.add_string buf "\n"; - List.iter - (function - | Ls_section dir -> bprintf buf "
%s
\n" dir - | Ls_object obj -> - bprintf buf -" -\t -\t -\t -\t - -" - obj.uri (if obj.ann then "YES" else "NO") - (string_of_ls_flag obj.types) - (string_of_ls_flag obj.body) - (string_of_ls_flag obj.proof_tree)) - ls_items; - Buffer.add_string buf "
\n"); - let body = Buffer.contents buf in - Http_daemon.respond - ~headers:(("Content-Type", "text/plain") :: common_headers) - ~body outchan - -let return_help outchan = return_html_raw (Http_getter.help ()) outchan - -let return_resolve uri outchan = - try - return_xml_raw - (sprintf "\n" (Http_getter.resolve uri)) - outchan - with - | Unresolvable_URI _ -> return_xml_raw "\n" outchan - | Key_not_found _ -> return_xml_raw "\n" outchan - -let log_failure msg = Http_getter_logger.log ("Request not fulfilled: " ^ msg) - -let convert_file ~from_enc ~to_enc fname = - let remove f = fun () -> if Sys.file_exists f then Sys.remove f in - match from_enc, to_enc with - | `Normal, `Normal - | `Gzipped, `Gzipped -> fname, (fun () -> ()) - | `Normal, `Gzipped -> - let tmp = Http_getter_misc.tempfile () in - Http_getter_misc.gzip ~keep:true ~output:tmp fname; - tmp, remove tmp - | `Gzipped, `Normal -> - let tmp = Http_getter_misc.tempfile () in - Http_getter_misc.gunzip ~keep:true ~output:tmp fname; - tmp, remove tmp - -let is_gzip fname = Http_getter_misc.extension fname = ".gz" - -let patch_fun_for uri url = - let xmlbases = - if Http_getter_common.is_theory_uri uri then - Some (Filename.dirname uri, Filename.dirname url) - else - None - in - Http_getter_common.patch_xml ?xmlbases ~via_http:true () - -let respond_dtd patch_dtd fname outchan = - let via_http = false in - let patch_fun = - if patch_dtd then Some (Http_getter_common.patch_dtd ~via_http ()) - else None - in - Http_getter_common.return_file ~via_http:true ~fname ~contype:"text/plain" - ~gunzip:false ?patch_fun ~enc:`Normal outchan - -(* let respond_xsl - ?(via_http = true) ?(enc = `Normal) ?(patch = true) ~url outchan - = - let patch_fun = - if patch then Http_getter_common.patch_xsl ~via_http () else (fun x -> x) - in - let fname = tempfile () in - finally (fun () -> Sys.remove fname) (lazy ( - wget ~output:fname url; - return_file ~via_http ~fname ~contype:"text/xml" ~patch_fun ~enc outchan - )) *) -(* | "/getxslt" -> - Http_getter_cache.respond_xsl - ~url:(Http_getter.resolve (req#param "uri")) - ~patch:(parse_patch req) outchan *) - -let respond_xslt patch_xslt xslt_name outchan = - let fname = Http_getter.getxslt xslt_name in - let patch_fun = - if patch_xslt then Some (Http_getter_common.patch_xsl ~via_http:true ()) - else None - in - Http_getter_common.return_file ~fname ~contype:"text/xml" ?patch_fun - ~gunzip:false ~via_http:true ~enc:`Normal outchan - - (* thread action *) - -let callback (req: Http_types.request) outchan = - try - Http_getter_logger.log ("Connection from " ^ req#clientAddr); - Http_getter_logger.log ("Received request: " ^ req#uri); - (match req#path with - | "/help" -> return_help outchan - | "/getxml" -> - let uri = req#param "uri" in - let fname = Http_getter.getxml uri in (* local name, in cache *) - let remote_name = Http_getter.resolve uri in (* remote name *) - let src_enc = if is_gzip fname then `Gzipped else `Normal in - let enc = parse_enc req in - let fname, cleanup = convert_file ~from_enc:src_enc ~to_enc:enc fname in - let contenc = if enc = `Gzipped then Some "x-gzip" else None in - let patch_fun = - if parse_patch req - then Some (patch_fun_for uri remote_name) - else None - in - let gunzip = (enc = `Gzipped) in - (try - Http_getter_common.return_file - ~fname ~contype:"text/xml" ?contenc ?patch_fun ~gunzip - ~via_http:true ~enc outchan; - with exn -> cleanup (); raise exn); - cleanup () - | "/getxslt" -> respond_xslt (parse_patch req) (req#param "uri") outchan - | "/getdtd" -> - let fname = Http_getter.getdtd (req#param "uri") in - respond_dtd (parse_patch req) fname outchan - | "/resolve" -> return_resolve (req#param "uri") outchan - | "/clean_cache" -> - Http_getter.clean_cache (); - return_html_msg "Done." outchan - | "/getalluris" -> - return_all_xml_uris (parse_output_format "getalluris" req) outchan - | "/ls" -> - return_ls (req#param "baseuri") (parse_output_format "ls" req) outchan - | "/getempty" -> - Http_daemon.respond ~body:Http_getter_const.empty_xml outchan - | invalid_request -> - Http_daemon.respond_error ~code:(`Status (`Client_error `Bad_request)) - outchan); - Http_getter_logger.log "Done!\n" - with - | Http_types.Param_not_found attr_name -> - let msg = sprintf "Parameter '%s' is missing" attr_name in - log_failure msg; - return_400 ("bad_request", msg) msg outchan - | Bad_request msg -> - log_failure msg; - return_html_error ("bad_request", msg) msg outchan - | Internal_error msg -> - log_failure msg; - return_html_internal_error ("internal_error", msg) msg outchan - | exn -> - let msg = "uncaught exception: " ^ (Printexc.to_string exn) in - (match exn with - | Http_getter_types.Key_not_found uri -> - return_html_error ("key_not_found", uri) msg outchan - | _ -> - log_failure msg; - return_html_error ("uncaught_exception", msg) msg outchan) - -let batch_update = ref false - -let args = [ ] - - (* Main *) -let main () = - Arg.parse args (fun _-> ()) "http_getter honors the following options:\n"; - Helm_registry.load_from configuration_file; - Http_getter.init (); - print_string (Http_getter_env.env_to_string ()); - flush stdout; - Sys.catch_break true; - let d_spec = Http_daemon.daemon_spec - ~mode:`Thread ~timeout:(Some 600) - ~port:(Lazy.force Http_getter_env.port) - ~callback:callback () - in - try - Http_daemon.main d_spec - with Sys.Break -> () - -let _ = main () - diff --git a/helm/http_getter/panel/.cvsignore b/helm/http_getter/panel/.cvsignore deleted file mode 100644 index 5c9fd1612..000000000 --- a/helm/http_getter/panel/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -getter-panel.tar.gz diff --git a/helm/http_getter/panel/Makefile b/helm/http_getter/panel/Makefile deleted file mode 100644 index 2663e20a1..000000000 --- a/helm/http_getter/panel/Makefile +++ /dev/null @@ -1,12 +0,0 @@ - -all: - -clean: - rm -f getter-panel.tar.gz - -cleanbak: - rm -rf *~ - -dist: clean cleanbak - cd ..; tar cvfz getter-panel.tar.gz panel ; mv getter-panel.tar.gz panel - diff --git a/helm/http_getter/panel/control.html b/helm/http_getter/panel/control.html deleted file mode 100644 index 495c420e7..000000000 --- a/helm/http_getter/panel/control.html +++ /dev/null @@ -1,129 +0,0 @@ - - - -Getter Control Panel - - - - - - - - - - - -
Getter Control Panel
- -
- -
- -
-
- - - - - - - - - - - - - - - - - - - - - - -
-
- Getter URL - - -
-
-
- Check if Getter is running and request Help:
- -
-
-
- Update Getter's maps:
- -
-
-
- Clean cache (must be done every time a file is modified)
- -
-
-
- List servers:
- -
-
-
- Add a server to the servers list:
- Server URL:
- Server position:
- -
-
-
- Remove a server from the servers list:
- Server number:
- -
-
-
- -
- - -
- -
- -
-
- In case you want to customize the panel for your own needs, you can download - the source archive (HTML + JavaScript): - -
- - - - - diff --git a/helm/http_getter/panel/control.js b/helm/http_getter/panel/control.js deleted file mode 100644 index 45736aaa4..000000000 --- a/helm/http_getter/panel/control.js +++ /dev/null @@ -1,35 +0,0 @@ - -function getParam(name, def) -{ - var search = top.location.search; - search = search.slice(1); - var args = search.split("&"); - var value = "-1"; - for (var i = 0 ; i < args.length ; i++) { - var couple = args[i].split("="); - if (couple[0] == name) value = couple[1]; - } - if (value == "-1") value = def; - return value; -} - -function getInitialGetterURL() -{ - return getParam("getterURL", "http://mowgli.cs.unibo.it:58081/"); -} - -function getGetterURL() -{ - return document.getterURL.elements[0].value; -} - -function selectGetterURL(ss) -{ - if (ss.selectedIndex == 0) { - document.getterURL.elements[0].value = ""; - } else { - //document.getterURL.elements[0].value = "http://" + ss.options[ss.selectedIndex].value + ":8081/"; - document.getterURL.elements[0].value = "http://" + ss.options[ss.selectedIndex].value; - } -} - diff --git a/helm/http_getter/panel/index.html b/helm/http_getter/panel/index.html deleted file mode 100644 index caeebcf24..000000000 --- a/helm/http_getter/panel/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/helm/http_getter/panel/welcome.html b/helm/http_getter/panel/welcome.html deleted file mode 100644 index f6fbed438..000000000 --- a/helm/http_getter/panel/welcome.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/helm/http_getter/tools/dump_db.ml b/helm/http_getter/tools/dump_db.ml deleted file mode 100755 index 3a64f1dd6..000000000 --- a/helm/http_getter/tools/dump_db.ml +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/ocamlrun /usr/bin/ocaml -#use "topfind";; -#require "dbm";; -let db = Dbm.opendbm Sys.argv.(1) [ Dbm.Dbm_rdonly ] 0 in -Dbm.iter (Printf.printf "%s: %s\n") db; -Dbm.close db diff --git a/helm/http_getter/tools/dump_db.pl b/helm/http_getter/tools/dump_db.pl deleted file mode 100755 index 95d3f4ab5..000000000 --- a/helm/http_getter/tools/dump_db.pl +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/perl -w - -# dump on stdout the data contained in a db file. -# Print one line for each record in this format -# = -# -# Stefano "Zack" Zacchiroli -# - -use strict qw(O_RDONLY); -use DB_File; - -my $dbfile = shift || die "which db file ?"; -my %map; -tie(%map, 'DB_File', $dbfile, O_RDONLY, 0664); -while(($key,$value) = each %map) { - print "$key = $value\n"; -} - diff --git a/helm/http_getter/tools/uri_escape.pl b/helm/http_getter/tools/uri_escape.pl deleted file mode 100755 index 0303e3f73..000000000 --- a/helm/http_getter/tools/uri_escape.pl +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/perl -w -use strict; - -# escape a URI with uri escaping -# -# Stefano "Zack" Zacchiroli -# - - -use URI::Escape; - -while(<>) { - chomp; - print uri_escape($_); - print "\n"; -} diff --git a/helm/http_getter/tools/uri_unescape.pl b/helm/http_getter/tools/uri_unescape.pl deleted file mode 100755 index 7f77d3768..000000000 --- a/helm/http_getter/tools/uri_unescape.pl +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/perl -w -use strict; - -# unescape a URI escaped with uri escaping -# -# Stefano "Zack" Zacchiroli -# - -use URI::Escape; - -while(<>) { - chomp; - print uri_unescape($_); - print "\n"; -} diff --git a/helm/hxp/.cvsignore b/helm/hxp/.cvsignore deleted file mode 100644 index bc0401ddc..000000000 --- a/helm/hxp/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -*.cm[aiox] *.cmxa *.output *.opt hxp -hxpParser.ml hxpParser.mli hxpLexer.ml diff --git a/helm/hxp/.depend b/helm/hxp/.depend deleted file mode 100644 index 7f855a44b..000000000 --- a/helm/hxp/.depend +++ /dev/null @@ -1,9 +0,0 @@ -hxpTop.cmo: hxpTypes.cmo hxpXML.cmo -hxpTop.cmx: hxpTypes.cmx hxpXML.cmx -hxpParser.cmo: hxpTypes.cmo hxpParser.cmi -hxpParser.cmx: hxpTypes.cmx hxpParser.cmi -hxpParser.cmi: hxpTypes.cmo -hxpLexer.cmo: hxpParser.cmi -hxpLexer.cmx: hxpParser.cmx -hxpXML.cmo: hxpLexer.cmo hxpParser.cmi hxpTypes.cmo -hxpXML.cmx: hxpLexer.cmx hxpParser.cmx hxpTypes.cmx diff --git a/helm/hxp/EXAMPLE.txt b/helm/hxp/EXAMPLE.txt deleted file mode 100644 index 83e02a5cb..000000000 --- a/helm/hxp/EXAMPLE.txt +++ /dev/null @@ -1,5 +0,0 @@ -On mowgli.cs.unibo.it this line outputs the names' list in a format suitable for -Postgres. Each line of this list contains a uri and its short name separated by -a tab character (as produced by pg_dump). see hxp --help for details. - -hxp.opt -l /projects/helm/EXPORT/examples_mowgli/objects -r pg-names diff --git a/helm/hxp/Makefile b/helm/hxp/Makefile deleted file mode 100644 index 4c41e6598..000000000 --- a/helm/hxp/Makefile +++ /dev/null @@ -1,66 +0,0 @@ -BIN_DIR = /usr/local/bin -REQUIRES = zip -# unix helm-cic_textual_parser \ -# helm-mathql helm-mathql_interpreter helm-mathql_generator -PREDICATES = -OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)" -OCAMLC = ocamlfind ocamlc $(OCAMLOPTIONS) -OCAMLOPT = ocamlfind ocamlopt $(OCAMLOPTIONS) -OCAMLDEP = ocamldep -OCAMLYACC = ocamlyacc -OCAMLLEX = ocamllex - -LIBRARIES = $(shell ocamlfind query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES)) -LIBRARIES_OPT = $(shell ocamlfind query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES)) - -HXPTOP = hxpTop.ml - -DEPOBJS = $(HXPTOP) -AUXOBJS = hxpTypes.ml hxpParser.ml hxpParser.mli hxpLexer.ml hxpXML.ml - -all: hxp -opt: hxp.opt - -depend: $(AUXOBJS) - $(OCAMLDEP) $(DEPOBJS) $(AUXOBJS) > .depend - -hxp: hxpParser.cmi $(AUXOBJS:.ml=.cmo) $(HXPTOP:.ml=.cmo) $(LIBRARIES) - $(OCAMLC) -linkpkg -o hxp $(AUXOBJS:.ml=.cmo) $(HXPTOP:.ml=.cmo) - -hxp.opt: $(AUXOBJS:.ml=.cmx) $(HXPTOP:.ml=.cmx) $(LIBRARIES_OPT) - $(OCAMLOPT) -linkpkg -o hxp.opt $(AUXOBJS:.ml=.cmx) $(HXPTOP:.ml=.cmx) - -.SUFFIXES: .ml .mli .cmo .cmi .cmx .mly .mll -.ml.cmo: $(LIBRARIES) - $(OCAMLC) -c $< -.mli.cmi: $(LIBRARIES) - $(OCAMLC) -c $< -.ml.cmx: $(LIBRARIES_OPT) - $(OCAMLOPT) -c $< -.mly.ml: - $(OCAMLYACC) $< -.mly.mli: - $(OCAMLYACC) $< -.mll.ml: - $(OCAMLLEX) $< - -$(DEPOBJS:%.ml=%.cmo): $(LIBRARIES) -$(DEPOBJS:%.ml=%.cmx): $(LIBRARIES_OPT) - -clean: - rm -f *.cm[iox] *.o hxp hxp.opt \ - hxpParser.ml hxpParser.mli hxpLexer.ml - -install: - cp hxp hxp.opt $(BIN_DIR) - -uninstall: - cd $(BIN_DIR) - rm -f hxp hxp.opt - -.PHONY: install uninstall clean - -ifneq ($(MAKECMDGOALS), depend) - include .depend -endif - diff --git a/helm/hxp/hxpLexer.mll b/helm/hxp/hxpLexer.mll deleted file mode 100644 index fbec4aca7..000000000 --- a/helm/hxp/hxpLexer.mll +++ /dev/null @@ -1,56 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://www.cs.unibo.it/helm/. - *) - -(* AUTOR: Ferruccio Guidi - *) - -{ - open HxpParser -} - -let SPC = [' ' '\t' '\n' '\r' '?' '!']+ -let ALPHA = ['A'-'Z' 'a'-'z']+ -let STR = '"'[^'"']*'"' -let NUM = ['0'-'9' '.']+ -let BEF = [^ '=' '0'-'9' '.' ':' '*']* - -rule xml_token = parse - | SPC { xml_token lexbuf } - | '<' { OPEN } - | '>' { CLOSE } - | '=' { EQ } - | '/' { SL } - | ALPHA { NAME (Lexing.lexeme lexbuf) } - | STR { VAL (Lexing.lexeme lexbuf) } - | eof { DONE } - -and time_token = parse - | BEF { time_token lexbuf } - | NUM { DATA (float_of_string (Lexing.lexeme lexbuf)) } - | '=' { EQ } - | ':' { CLN } - | _ { DONE } - | eof { DONE } - diff --git a/helm/hxp/hxpParser.mly b/helm/hxp/hxpParser.mly deleted file mode 100644 index aed627abf..000000000 --- a/helm/hxp/hxpParser.mly +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - */ - -/* AUTOR: Ferruccio Guidi - */ - -%{ - module T = HxpTypes -%} - %token DONE - %token NAME VAL - %token OPEN CLOSE EQ SL /* < > = / */ - %start xml - %type xml - - %token DATA - %token CLN - %start time - %type time -%% - xml : - OPEN NAME { T.XML_Open $2 } - | NAME EQ VAL { T.XML_Attribute ($1, $3) } - | CLOSE { T.XML_End } - | OPEN SL NAME CLOSE { T.XML_Close $3 } - | SL CLOSE { T.XML_Close "" } - | NAME NAME VAL { T.XML_Attribute ($1 ^ " " ^ $2, $3) } - | DONE { T.XML_Done } - ; - time : - EQ DATA CLN DATA { ($2, $4) } - | DATA EQ DATA CLN DATA { ($3, $5) } - | DONE { (-1., -1.) } - ; diff --git a/helm/hxp/hxpTop.ml b/helm/hxp/hxpTop.ml deleted file mode 100644 index 1030c6447..000000000 --- a/helm/hxp/hxpTop.ml +++ /dev/null @@ -1,345 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://www.cs.unibo.it/helm/. - *) - -(* AUTOR: Ferruccio Guidi - *) - -module T = HxpTypes - -module X = HxpXML.Make - -let build = ref "EXPORT" - -let lib = ref Filename.current_dir_name - -let uq s = String.sub s 1 (String.length s - 2) - -let rec esc s = - try - let i = String.index s '\'' in - let l = String.length s in - String.sub s 0 i ^ "\\\'" ^ esc (String.sub s (succ i) (l - succ i)) - with Not_found -> s - -let split_filename f = - let len = String.length f in - let dot = String.rindex f '.' in - let slash = String.rindex f '/' in - let path = String.sub f 0 slash in - let name = String.sub f (succ slash) (dot - succ slash) in - let ext = String.sub f (succ dot) (len - succ dot) in - (path, (name, ext)) - -let ins0 name filter = - let sort = ref "\"\"" in - let relative = ref 0 in - let count = ref 0 in - let max = ref 0 in - let flags = String.create 3 in - let set_flags_for = function - | T.XML_Open "LAMBDA" -> flags.[0] <- 'L' - | T.XML_Open "MUTCASE" -> flags.[1] <- 'C' - | T.XML_Open "FIX" -> flags.[2] <- 'F' - | T.XML_Open "COFIX" -> flags.[2] <- 'F' - | _ -> () - in - let rec skip_premises h = - match X.xnext h with - | h, (T.XML_Attribute _, _) -> skip_premises h - | h, (T.XML_End, _) -> skip_premises h - | h, (T.XML_Open "PROD", i) -> - let h = - if ! sort = "\"\"" then - match X.xnext h with - | h, (T.XML_Attribute ("type", str), _) -> sort := str; h - | h, _ -> sort := ""; h - else h - in - let h = X.scan_for h (T.XML_Close "source", succ i) in - let h, (obj, i) = X.xnext h in - relative := i + 2; (* XML_Open "target" *) - skip_premises h - | h, (obj, _) -> - print_string (! sort ^ " " ^ T.string_of_object obj); - set_flags_for obj; h - in - let rec ins_aux h = - match X.xnext h with - | h, (T.XML_Done, _) -> h - | h, (T.XML_Attribute ("uri", v), i) -> - incr count; - if i > ! max then max := i; - ins_aux h - | h, (obj, _) -> - set_flags_for obj; ins_aux h - in - if snd (snd (split_filename name)) = "con" then begin - flags.[0] <- '-'; flags.[1] <- '-'; flags.[2] <- '-'; - let h = X.start (Filename.concat ! lib (name ^ ".xml")) filter in - let h = X.scan_for h (T.XML_Open "type", 3) in - X.stop (ins_aux (skip_premises h)); - print_endline (" \"cic:" ^ name ^ "\" " ^ flags ^ - " count " ^ string_of_int ! count ^ - " max_depth " ^ string_of_int (! max - ! relative) ^ - "

"); - flush stdout - end - -type style_t = HTML | PG | RDF - -let ins1 style name filter = - let maior = ref 0 in - let minor = ref (-1) in - let make_uris () = - let make_ref pre sep post = - if ! maior > 0 then - name ^ pre ^ string_of_int ! maior ^ - (if ! minor > 0 then sep ^ string_of_int ! minor else "") ^ post - else name - in - incr minor; - (make_ref "#xpointer(1/" "/" ")", make_ref "," "," "") - in - let out_alias n = - match style with - | HTML -> - print_endline ("\"" ^ n ^ "\" alias of \"cic:" ^ - fst (make_uris ()) ^ "\"

") - | PG -> - print_endline ("cic:/" ^ fst (make_uris ()) ^ "\t" ^ n) - | RDF -> - let uris = make_uris () in - let dir = ! build ^ fst (split_filename name) in - let rc = Sys.command ("mkdir -p " ^ esc dir) in - let och = open_out (! build ^ snd uris ^ ".xml") in - output_string och "\n\n"; - output_string och "\n"; - output_string och (" \n"); - output_string och (" " ^ n ^ "\n"); - output_string och " \n"; - output_string och "\n"; - close_out och; -(* print_endline ("\"" ^ fst uris ^ "\" alias \"" ^ n ^ "\"") -*) in - let rec ins_aux h = - match X.xnext h with - | h, (T.XML_Done, _) -> h - | h, (T.XML_Attribute ("name", n), i) -> - if i = 4 then begin incr maior; minor := -1; out_alias (uq n) end else - if i = 5 then out_alias (uq n); - ins_aux h - | h, _ -> ins_aux h - in - let split = snd (split_filename name) in - if snd split <> "ind" then out_alias (fst split) else - let h = X.start (Filename.concat ! lib (name ^ ".xml")) filter in - X.stop (ins_aux h); - flush stdout - -let test s name filter = - if s = "con-info" then ins0 name filter else - if s = "html-names" then ins1 HTML name filter else - if s = "pg-names" then ins1 PG name filter else - if s = "rdf-names" then ins1 RDF name filter else () - -let read_index_txt () = - let uris = ref [] in - let ich = open_in (Filename.concat ! lib "index.txt") in - let rec aux () = - let line = input_line ich in - let p0 = succ (String.index line '/') in - let p1 = succ (String.rindex line '.') in - let uri = String.sub line p0 (p1 - p0) in - let ext = String.sub line p1 (String.length line - p1) in - match ext with - | "con gz" -> uris := (uri ^ "con", true) :: ! uris; aux () - | "ind gz" -> uris := (uri ^ "ind", true) :: ! uris; aux () - | "var gz" -> uris := (uri ^ "var", true) :: ! uris; aux () - | "con" -> uris := (uri ^ "con", false) :: ! uris; aux () - | "ind" -> uris := (uri ^ "ind", false) :: ! uris; aux () - | "var" -> uris := (uri ^ "var", false) :: ! uris; aux () - | _ -> aux () - in - begin try aux () with End_of_file -> close_in ich end; ! uris - -let read_xml s = - let l = read_index_txt () in - let rec loop_on = function - | [] -> () - | (uri, filter) :: tail -> test s uri filter; loop_on tail - in loop_on l; - prerr_endline ("total time: " ^ string_of_float (Sys.time ()) ^ " seconds") -(* -let get_timing () = - let lexbuf = Lexing.from_channel stdin in - let tm = ref [] in - let cont = ref true in - while ! cont do - let data = Parser.tm Lexer.tmt lexbuf in - if fst data > 0. then begin - let d = (fst data, snd data, snd data /. fst data) in - tm := d :: ! tm end else - if fst data < 0. then cont := false else - print_endline ("[" ^ string_of_int (1 + List.length ! tm) ^ "] "); - done; print_newline (); ! tm - -let compare1 (r1, t1, p1) (r2, t2, p2) = - if r1 > r2 then 1 else - if r1 < r2 then -1 else - if p1 > p2 then 1 else - if p1 < p2 then -1 else 0 - -let rec count min max = function - | [] -> 0 - | (r, _, _) :: tail -> - let p = count min max tail in - if r >= min && r <= max then succ p else p - -let mean min max l = - let num = ref 0. in - let sum = ref 0. in - let rec mean_aux = function - | [] -> ! sum /. ! num - | (r, _, p) :: tail -> - if r >= min && r <= max then begin - num := ! num +. 1.; sum := ! sum +. p; mean_aux tail end - else mean_aux tail - in mean_aux l - -let variance min max m l = - let num = ref 0. in - let sum = ref 0. in - let rec variance_aux = function - | [] -> ! sum /. ! num - | (r, _, p) :: tail -> - if r >= min && r <= max then begin - num := ! num +. 1.; sum := ! sum +. (p -. m) *. (p -. m); - variance_aux tail end - else variance_aux tail - in sqrt (variance_aux l) - -let read_timing min max = - let l = List.sort compare1 (get_timing ()) in - let c = count min max l in - let m = mean min max l in - let v = variance min max m l in - print_timing l; - print_endline (string_of_int c ^ " " ^ string_of_float m ^ " " ^ - string_of_float v); - flush stdout - -let diff_timing () = - let rec diff_aux = function - | ((r1, q1, p1) :: t1, (r2, q2, p2) :: t2) when r1 = r2 -> - (r1, q1 -. q2, p1 -. p2) :: diff_aux (t1, t2) - | ([], []) -> print_newline (); [] - | (_ :: t1, _ :: t2) -> - print_string ("[" ^ string_of_int (1 + List.length t1) ^ "] "); - diff_aux (t1, t2) - | _ -> assert false - in - let l1 = get_timing () in - let l2 = get_timing () in - print_string (string_of_int (List.length l1) ^ " "); - print_string (string_of_int (List.length l2) ^ "\n"); - diff_aux (l1, l2) - -let comp_timing min max = - let l = List.sort compare1 (diff_timing ()) in - let c = count min max l in - let m = mean min max l in - let v = variance min max m l in - print_timing l; - print_endline (string_of_int c ^ " " ^ string_of_float m ^ " " ^ - string_of_float v); - flush stdout - -let print file = - let rec print_aux () = - let xobj = Xml.xnext() in - if fst xobj = XML_Done then () else - begin print_endline (string_of_xobject xobj); print_aux () end - in Xml.start file false; print_aux (); Xml.stop () - -let count_bytes s = - let mbytes = ref 0.0 in - let num = ref 0 in - let k = 1024.0 ** float (int_of_string s) in - let rec count_bytes_aux () = - try - let s = read_line () in - (* prerr_endline ("*" ^ s ^ "*"); *) - let j = String.rindex s ' ' in - let i = - try succ (String.rindex_from s (pred j) ' ') - with Not_found -> 0 in - (* prerr_endline ("*" ^ String.sub s i (j - i) ^ "*"); *) - let b = int_of_string (String.sub s i (j - i)) in - mbytes := ! mbytes +. float b /. k; incr num; - count_bytes_aux () - with End_of_file -> () - in - count_bytes_aux (); - prerr_endline (string_of_int ! num ^ " " ^ string_of_float ! mbytes) -*) - -let _ = - let usage = "Usage: hxp [-lx

] [-p ]" in - - let _l = " set the path to the index.txt file (default is .)" in - let _x = " set the path to the RDF export directory (default is EXPORT)" in - let _r = " read the XML files extracting the specified information - : con-info produce information about .con files in HTML format - html-names produce short names' list in HTML format - pg-names produce short names' list in Postgres input format - rdf-names produce RDF files with short names' metadata" - in - - Arg.parse [ - ("-l", Arg.String (fun dir -> lib := dir), _l); - ("-x", Arg.String (fun dir -> build := dir), _x); - ("-r", Arg.String read_xml, _r) - ] ignore usage - -(* -let parse_args () = - let rec parse = function - | [] -> () - | ("-l"|"-library") :: dir :: rem -> lib := dir; parse rem - | ("-x"|"-export") :: dir :: rem -> build := dir; parse rem - | ("-s"|"-stat") :: min :: max :: rem -> - read_timing (float_of_string min) (float_of_string max); parse rem - | ("-c"|"-comp") :: min :: max :: rem -> - comp_timing (float_of_string min) (float_of_string max); parse rem - | ("-i"|"-ins") :: s :: file :: rem -> test s file false; parse rem - | ("-t"|"-text") :: s :: rem -> read_xml s false; parse rem - | ("-z"|"-gzip") :: s :: rem -> read_xml s true; parse rem - | ("-b"|"-bytes") :: s :: rem -> count_bytes s; parse rem - | _ :: rem -> parse rem - in - parse (List.tl (Array.to_list Sys.argv)) -*) diff --git a/helm/hxp/hxpTypes.ml b/helm/hxp/hxpTypes.ml deleted file mode 100644 index fb8cfeceb..000000000 --- a/helm/hxp/hxpTypes.ml +++ /dev/null @@ -1,57 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://www.cs.unibo.it/helm/. - *) - -(* AUTOR: Ferruccio Guidi - *) - -type xml_object = - | XML_Open of string - | XML_Attribute of string * string - | XML_Close of string - | XML_End - | XML_Done - -type xml_xobject = xml_object * int - -type timing = float * float * float - -let string_of_object = function - | XML_Open t -> "OPEN " ^ t - | XML_Close t -> "CLOSE " ^ t - | XML_Attribute (n, v) -> "ATTRIBUTE " ^ n ^ "=" ^ v - | XML_End -> "END" - | XML_Done -> "" - -let string_of_xobject (o, i) = - string_of_object o ^ " [" ^ string_of_int i ^ "]" - -let string_of_timing (r, t, p) = - string_of_float r ^ "," ^ string_of_float t ^ "s, " ^ string_of_float p - -let rec print_timing = function - | [] -> () - | head :: tail -> - print_endline (string_of_timing head); flush stdout; - print_timing tail diff --git a/helm/hxp/hxpXML.ml b/helm/hxp/hxpXML.ml deleted file mode 100644 index 7c4dc4cb4..000000000 --- a/helm/hxp/hxpXML.ml +++ /dev/null @@ -1,91 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://www.cs.unibo.it/helm/. - *) - -(* AUTOR: Ferruccio Guidi - *) - -module T = HxpTypes - -module type Type = sig - - type handle - - val start : string -> bool -> handle - - val stop : handle -> unit - - val next : handle -> T.xml_object - - val xnext : handle -> handle * T.xml_xobject - - val scan_for : handle -> T.xml_xobject -> handle - -end - -module Make : Type = struct - - module L = HxpLexer - - module P = HxpParser - - type mode_t = Text of in_channel * Lexing.lexbuf - | GZip of Gzip.in_channel * Lexing.lexbuf - - type handle = {mode : mode_t; level : int} - - let start s filter = - let gread gch s n = Gzip.input gch s 0 n in - if filter then - let gch = Gzip.open_in (s ^ ".gz") in - let glb = Lexing.from_function (gread gch) in - {mode = GZip (gch, glb); level = 0} - else - let ch = open_in s in - let lb = Lexing.from_channel ch in - {mode = Text (ch, lb); level = 0} - - let stop = function - | {mode = GZip (gch, _)} -> Gzip.close_in gch - | {mode = Text (ch, _)} -> close_in ch - - let next h = - let lexbuf = match h.mode with - | GZip (_, glb) -> glb - | Text (_, lb) -> lb - in - P.xml L.xml_token lexbuf - - let xnext h = - let obj = next h in - match obj with - | T.XML_Open _ -> {h with level = succ h.level}, (obj, h.level) - | T.XML_Close _ -> {h with level = pred h.level}, (obj, pred h.level) - | _ -> h, (obj, h.level) - - let rec scan_for h xobj = - let h, curr_xobj = xnext h in - if curr_xobj = xobj then h else scan_for h xobj - -end diff --git a/helm/hxsp/config b/helm/hxsp/config deleted file mode 100644 index 87cd74d8a..000000000 --- a/helm/hxsp/config +++ /dev/null @@ -1,47 +0,0 @@ -######################################################################## -######################################################################## -# -# Main config file for hxsp -# Author: Alessandro Barzanti (barzu@libero.it) -# -######################################################################## -######################################################################## - -######################################################################## -# Working path of hxsp -######################################################################## -#working_path = helm/puwobo -working_path = helm/uwobo -#working_path = helm/hxsp - -######################################################################## -# Port to use for hxsp -######################################################################## -port = 8080 - -######################################################################## -# Interface language -######################################################################## -language = IT -#language = EN - -######################################################################## -# Use complete command description on syntax error if ON -######################################################################## -all_usage_synerr = OFF -#all_usage_synerr = ON - -######################################################################## -# Include XIncludes on the fly if ON -######################################################################## -expand_xinc = OFF -#expand_xinc = ON - -######################################################################## -# Max Depth of the DOM tree while parsing -######################################################################## -max_depth = 1000 - -######################################################################## -######################################################################## -######################################################################## diff --git a/helm/hxsp/hxsp.pl b/helm/hxsp/hxsp.pl deleted file mode 100644 index 14fd24361..000000000 --- a/helm/hxsp/hxsp.pl +++ /dev/null @@ -1,1250 +0,0 @@ -#!/usr/bin/perl - -################################################################################################# -################################################################################################# -################################################################################################# -# -# H.X.S.P. V 1.0 -# T S T R -# T L Y O -# P T E C -# S E -# H S -# E S -# E O -# T R -# -################################################################################################# -################################################################################################# -################################################################################################# - -use HTTP::Daemon; -use HTTP::Status; -use HTTP::Request; -use LWP::UserAgent; -use URI::Escape; -use CGI; -use FindBin; -use XML::LibXML; -use XML::LibXSLT; -use IO; - -################################################################################################# -################################################################################################# -################################################################################################# -# Global Variables -################################################################################################# -################################################################################################# -################################################################################################# - -# Version number -my $ver ="1.0"; - -# Working path of hxsp (loaded from config) -my $working_path; - -# Interface language (loaded from config) -my $language; - -# Port to use for hxsp (loaded from config) -my $port; - -# Use complete command description on syntax error if ON (loaded from config) -my $all_usage_synerr; - -# Include XIncludes on the fly if ON (loaded from config) -my $expand_xinc; - -# Max Depth of the DOM tree while parsing -my $max_depth; - -# Message sent when hxsp was called without commands (loaded from message.##) -my $home_message; - -# Message sent when hxsp was called with the help command (loaded from message.##) -my $help_message; - -# Message sent when a stylesheet is added (loaded from message.##) -my $s_add; - -# Message sent when a stylesheet is reloaded (loaded from message.##) -my $s_reload; - -# Message sent when a stylesheet is removed (loaded from message.##) -my $s_remove; - -# Message to print the stylesheet status for list command (loaded from message.##) -my $list; - -# Message sent when the list command was called -# and there is no stylesheet loaded (loaded from message.##) -my $empty; - -# Message sent after "home_message" when hxsp was called without commands -# and sent after "help_message" when hxsp was called with the help command -# and after all syntax errors if "all_usage_synerr" is set ON (loaded from message.##) -my $all_usage; - -# All the following syntax errors messages are used #only# if "all_usage_synerr" is set OFF - -# Message sent on help syntax errors (loaded from message.##) -my $help_usage; - -# Message sent on add syntax errors (loaded from message.##) -my $add_usage; - -# Message sent on remove syntax errors (loaded from message.##) -my $remove_usage; - -# Message sent on list syntax errors (loaded from message.##) -my $list_usage; - -# Message sent on reload syntax errors (loaded from message.##) -my $reload_usage; - -# Message sent on apply syntax errors (loaded from message.##) -my $apply_usage; - -# The error hash contains the error messages to call in case of syntax -# or operative errors, the keys are defined by the left value of each line in error## -my %error; - -# load ok template -my $ok_tpl; - -# load operror template -my $operror_tpl; - -# load synerror template -my $synerror_tpl; - -# This is the data structure to store the loaded stylesheets (hash of array) -# [0] :Styleseet URI , [1] : Loaded styleseet -my %stylesheet_hash; - -# This is a hash for fast duplicate uri detection -my %by_name; - -################################################################################################# -################################################################################################# -################################################################################################# -# Starting Operations -################################################################################################# -################################################################################################# -################################################################################################# - -# chdir to the directory of this perl script -chdir $FindBin::Bin; - -# load CONFIG -load_conf(); - -# initialize the objects to use LibXML and LibXSLT -my $parser = XML::LibXML->new(); -my $xslt = XML::LibXSLT->new(); - -# initialize the LibXML callbacks to load uri's -XML::LibXML->callbacks(\&match_uri,\&open_uri,\&read_uri,\&close_uri); - -# include XIncludes on the fly if required -if ($expand_xinc eq "ON") { $parser->expand_xinclude( 1 ); } - -# initialize the hxsp as HTTP::Daemon -my $d = new HTTP::Daemon LocalPort => $port; - -# get the complete working url of hxsp -my $puwobo_url = $d->url().$working_path; - -# set the working path to be comparable with url->path -$working_path = "/". $working_path; - -# load messages -load_messages(); - -# load error -load_err(); - -# load templates -load_templates(); - -# print starting information on console -print qq{ -hxsp v$ver active at: - Language is $language - On syntax error usage of every command is $all_usage_synerr - Include XIncludes on the fly is $expand_xinc; -}; - -################################################################################################# -################################################################################################# -# HTTP::Daemon Operations -################################################################################################# -################################################################################################# - -# do not accumulate defunct processes -$SIG{CHLD} = "IGNORE"; -$SIG{USR1} = \&listen; # sent by the child to make the parent read the pipe - -pipe LIST_CHILD, TELL_PARENT; -pipe LIST_PARENT, TELL_CHILD; -TELL_PARENT->autoflush(1); -TELL_CHILD->autoflush(1); - - -sub listen { - my $res; - my $query = ; - if ($query =~ /^add /) { - $query =~ s/^add //; - chomp($query); - $res = add($query); - } - elsif ($query =~ /^reload /) { - $query =~ s/^reload //; - chomp($query); - $res = reload($query); - } - elsif ($query =~ /^remove /) { - $query =~ s/^remove //; - chomp($query); - $res = remove($query); - } - print TELL_CHILD "$res\n"; - print TELL_CHILD "____\n"; # end of response -} - -while (my $c = $d->accept) #connect -{ - if (fork() == 0) #start new concurrent process - { - while (my $r = $c->get_request) #get http request - { - if ($r->method eq 'GET' && - ($r->url->path eq $working_path or $r->url->path eq $working_path."/"))#start dir - { - my $response = new HTTP::Response; - $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - $response->content(home($r->url->query)); - $c->send_response($response); - } - elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/help")#usage - { - my $response = new HTTP::Response; - $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - $response->content(help($r->url->query)); - $c->send_response($response); - } - elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/add")#add - { - my $response = new HTTP::Response; - kill(USR1,getppid()); # ask the parent to read the pipe - my $qs = $r->url->query; - print TELL_PARENT "add $qs\n"; - my $in; - while (($in = ) ne "____\n") { - $res .= $in; - } - chomp($res); - $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - $response->content($res); - $c->send_response($response); - } - elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/remove")#remove - { - my $response = new HTTP::Response; - kill(USR1,getppid()); # ask the parent to read the pipe - my $qs = $r->url->query; - print TELL_PARENT "remove $qs\n"; - my $in; - my $res=""; - while (($in = ) ne "____\n") { - $res .= $in; - } - chomp($res); - $response->content($res); - $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - $c->send_response($response); - } - elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/reload")#reload - { - my $response = new HTTP::Response; - kill(USR1,getppid()); # ask the parent to read the pipe - my $qs = $r->url->query; - print TELL_PARENT "reload $qs\n"; - my $in; - my $res=""; - while (($in = ) ne "____\n") { - $res .= $in; - } - chomp($res); - $response->content($res); - $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - $c->send_response($response); - } - elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/list")#list - { - my $response = new HTTP::Response; - $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - $response->content(list($r->url->query)); - $c->send_response($response); - } - elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/apply")#apply - { - my %headers; - my $response = new HTTP::Response; - $response->content(apply($r->url->query,\%headers)); - $response->header(%headers); - $c->send_response($response); - } - else #wrong command or not working_path - { - $c->send_error(RC_FORBIDDEN) - } - } - $c->close; - undef($c); - exit; - } # fork -} - -################################################################################################# -################################################################################################# -################################################################################################# -# Stylesheet hash check subrutines -################################################################################################# -################################################################################################# -################################################################################################# - -################################################################################################# -# sub addcheckvalues -# Usage: addcheckvalues($key,$uri); -# Returns: error message or 0 if no errors found -# Do: check if key and uri are already loaded -# Used by: addvalues -# Uses : err_replace -################################################################################################# -sub addcheckvalues -{ - my $ac_key = shift(@_); - my $ac_uri = shift(@_); - if (exists $stylesheet_hash{$ac_key}) - { - return err_replace($error{"add_dup_key"},$ac_key,$ac_uri,""); - } - elsif (exists $by_name{$ac_uri}) - { - return err_replace($error{"add_dup_value"},$ac_key,$ac_uri,$by_name{$ac_key}); - } - else { return 0; } -} -################################################################################################# - -################################################################################################# -# sub recheckvalues -# Usage: recheckvalues($key); -# Returns: error message or 0 if no errors found -# Do: check if key are loaded -# Used by: remove, reloadvalues -# Uses : err_replace -################################################################################################# -sub recheckvalues -{ - my $re_key = shift(@_); - if (not exists $stylesheet_hash{$re_key}) - { - return err_replace($error{"re_inv_key"},$re_key,"",""); - } - else { return 0; } -} -################################################################################################# - -################################################################################################# -# sub applycheckvalues -# Usage: applycheckvalues(\@keys); -# Returns: error message or 0 if no errors found -# Do: check if keys in @keys are loaded -# Used by: remove, reloadvalues -# Uses : err_replace -################################################################################################# -sub applycheckvalues -{ - my $applykeys_ptr = shift(@_); - foreach $applykey (@$applykeys_ptr) - { - if (not exists $stylesheet_hash{$applykey}) - { - return err_replace($error{"apply_inv_key"},$applykey,"",""); - } - } - return 0; -} -################################################################################################# - -################################################################################################# -################################################################################################# -################################################################################################# -# Stylesheet hash modify subrutines -################################################################################################# -################################################################################################# -################################################################################################# - -################################################################################################# -# sub addvalues -# Usage: if add_halt_on_errors is ON addvalues($key,$uri,@added); -# else addvalues($key,$uri) -# Returns: error message or 0 on success, -# if add_halt_on_errors is ON return all the added keys on @added -# Do: add the values to the stylesheet hash -# Used by: add -# Uses : addcheckvalues, loadstyle -################################################################################################# -sub addvalues -{ - my $av_key = shift(@_); - my $av_uri = shift(@_); - my $av_stylesheet; #parsed stylesheet to be placed in hash - if (my $err = addcheckvalues($av_key,$av_uri)) { return $err; } - elsif (my $err = loadstyle($av_key, $av_uri, $av_stylesheet)) { return $err; } - else - { - $stylesheet_hash{$av_key}[0]=$av_uri; - $stylesheet_hash{$av_key}[1]=$av_stylesheet; - $by_name{$av_uri}=$av_key; - return 0; - } -} -################################################################################################# - -################################################################################################# -# sub removevalues -# Usage: removevalues($key); -# Returns: message -# Do: remove the key specified and relative values from the stylesheet hash -# Used by: remove, do_remove -# Uses : ok_replace -################################################################################################# -sub removevalues -{ - my $cr_key = shift(@_); - my $cr_uri = $stylesheet_hash{$cr_key}[0]; - delete $stylesheet_hash{$cr_key}; - delete $by_name{$cr_uri}; - return ok_replace("$s_remove\n",$cr_key,$cr_uri); -} -################################################################################################# - -################################################################################################# -# sub reloadvalues -# Usage: if add_halt_on_errors is ON reloadvalues($key.\%reloaded); -# else reloadvalues($key); -# Returns: error message or 0 on success, -# if add_halt_on_errors is ON return the old stylesheets in %reloaded -# Do: reload the stlylesheet with the key specified -# Used by: do_reload -# Uses : recheckvalues, loadstyle -################################################################################################# -sub reloadvalues -{ - my $rv_key = shift(@_); - my $rv_uri = $stylesheet_hash{$rv_key}[0]; - my $rv_stylesheet; #parsed stylesheet to be placed in hash - if (my $err = recheckvalues($rv_key)) { return $err; } - elsif (my $err = loadstyle($rv_key, $rv_uri, $rv_stylesheet)) { return $err; } - else - { - $stylesheet_hash{$rv_key}[1] = $rv_stylesheet; - return 0; - } -} -################################################################################################# - -################################################################################################# -################################################################################################# -################################################################################################# -# LibXML LIBXSLT access subrutines -################################################################################################# -################################################################################################# -################################################################################################# - -################################################################################################# -# sub loadstyle -# Usage: loadstyle($key,$uri,$stylesheet); -# Returns: error message or 0 on success, -# parsed stylesheet in $stylesheet -# Do: parse the stylesheet at the given uri -# Used by: addvalues , reloadvalues -# Uses : err_replace, parser_error_replace -################################################################################################# -sub loadstyle -{ - my $ls_key= shift(@_); - my $ls_uri= shift(@_); - my $uncatched = ""; - my $line = ""; - my $style_doc; - pipe P, STDERR; - STDERR->autoflush(1); - eval { $style_doc = $parser->parse_file($ls_uri); }; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - - if ($@ or $uncatched ne "") - { - return err_replace($error{"add_xml_error"},$ls_key,$ls_uri,parser_error_replace($@.$uncatched)); - } - else - { - pipe P, STDERR; - STDERR->autoflush(1); - $uncatched = ""; - $line = ""; - eval { $_[0] = $xslt->parse_stylesheet($style_doc); }; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - return err_replace($error{"add_xslt_error"},$ls_key,$ls_uri,parser_error_replace($@.$uncatched)); - } - else {return 0} - } -} - -sub load_xml_doc -{ - my $xmluri = shift(@_); - my $uncatched = ""; - my $line = ""; - pipe P, STDERR; - STDERR->autoflush(1); - eval { $_[0] = $parser->parse_file($xmluri); }; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - return err_replace($error{"apply_xml_error"},"",$xmluri,parser_error_replace($@.$uncatched)); - } - else {return 0} -} - -sub apply_style -{ - my $k = shift(@_); - my $params_ptr = shift(@_); - my %params = XML::LibXSLT::xpath_to_string(%$params_ptr); - my $pippo; - my $uncatched = ""; - my $line = ""; - pipe P, STDERR; - STDERR->autoflush(1); - XML::LibXSLT->max_depth($max_depth); - eval { $_[0] = $stylesheet_hash{$k}[1]->transform($_[0],%params); }; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - my $e_r = parser_error_replace($@.$uncatched); - return err_replace($error{"apply_xslt_error"},$k,$stylesheet_hash{$k}[0],$e_r); - } - else {return 0} -} -sub get_results -{ - my $k = shift(@_); - my $results = shift(@_); - my $retval; - my $uncatched = ""; - my $line = ""; - pipe P, STDERR; - STDERR->autoflush(1); - eval { $retval = $stylesheet_hash{$k}[1]->output_string($results); }; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - my $e_r = parser_error_replace($@.$uncatched); - return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r)); - } - else { return $retval; } -} -sub get_results_prop -{ - my $result = shift(@_); - my $retval; - my $uncatched = ""; - my $line = ""; - pipe P, STDERR; - STDERR->autoflush(1); - eval { $retval = $result->toString; }; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - my $e_r = parser_error_replace($@.$uncatched); - return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r)); - } - else { return $retval; } -} - -sub get_results_html -{ - my $result = shift(@_); - my $retval; - my $uncatched = ""; - my $line = ""; - pipe P, STDERR; - STDERR->autoflush(1); - eval { $retval = $result->toStringHTML();}; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - my $e_r = parser_error_replace($@.$uncatched); - return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r)); - } - else { return $retval; } -} - -sub decode -{ - my $result = shift(@_); - my $enc = shift(@_); - my $retval; - my $uncatched = ""; - my $line = ""; - pipe P, STDERR; - STDERR->autoflush(1); - eval { $retval = decodeFromUTF8($enc, $result);}; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - my $e_r = parser_error_replace($@.$uncatched); - return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r)); - } - else { return $retval; } -} -################################################################################################# - -################################################################################################# -################################################################################################# -################################################################################################# -# Commands subrutines -################################################################################################# -################################################################################################# -################################################################################################# - -################################################################################################# -# sub add -# Usage: add($http_query); -# Returns: values for HTTP::Response -# Do: add stylesheet(s) to hash -# Used by: daemon -# Uses : addparsequery, addvalues, ok_replace, -# ok_print, synerror_print, operror_print -################################################################################################# -sub add -{ - my $http_query = shift(@_); # querystring - my $cont =""; # return value - my @binds; #values of binds passed via querystring - my $err; # error string - if ($err = addparsequery($http_query,\@binds)) { return synerror_print($err,$add_usage); } - else - { - foreach my $bind (@binds) - { - my ($a_key , $e_uri) = split(/,/,$bind,2); - my $une_uri = uri_unescape($e_uri); - if ($err = addvalues($a_key,$une_uri)) { $cont .= "$err\n"; } - else { $cont .= ok_replace("$s_add\n",$a_key,$une_uri); } - }#foreach - return ok_print($cont); - } -} -################################################################################################# - -################################################################################################# -# sub remove -# Usage: remove($http_query); -# Returns: values for HTTP::Response -# Do: remove stylesheet(s) from hash -# Used by: daemon -# Uses : reparsequery, getkeys, recheckvalues, removevalues, -# ok_print, synerror_print, operror_print -################################################################################################# -sub remove -{ - my $http_query = shift(@_); # querystring - my $rem_keys; - my $cont=""; - my $err; - if ($http_query eq "") - { - my $i=0; - foreach my $rem_key (keys %stylesheet_hash) - { - $cont .= removevalues($rem_key); - $i++; - } - if ($i==0) { return operror_print($error{"re_no_sl"}); } - } - elsif ($err = reparsequery($http_query,$rem_keys)){return synerror_print($err,$remove_usage);} - else - { - foreach my $rem_key (split (/,/,$rem_keys)) - { - if (my $err = recheckvalues($rem_key)) { $cont .= "$err\n"; } - else { $cont .= removevalues($rem_key); } - } - } - return ok_print($cont); -} -################################################################################################# - -################################################################################################# -# sub reload -# Usage: remove($http_query); -# Returns: values for HTTP::Response -# Do: remove stylesheet(s) from hash -# Used by: daemon -# Uses : reparsequery, getkeys, recheckvalues, removevalues, -# ok_print, synerror_print, operror_print -################################################################################################# -sub reload #reload stylesheet(s) from hash -{ - my $http_query = shift(@_); - my $rel_keys; - my @rel_k; - my $dr_cont = ""; - if ($http_query eq "") - { - my $i=0; - foreach my $key (keys %stylesheet_hash) - { - if (my $err = reloadvalues($key)) { return $dr_cont .= $err; } - else {$dr_cont .= ok_replace("$s_reload\n",$key,$stylesheet_hash{$key}[0]);} - $i++; - } - if ($i==0) { return operror_print($error{"re_no_sl"}); } - } - elsif ($err = reparsequery($http_query,$rel_keys)){return synerror_print($err,$reload_usage);} - else - { - foreach my $key (split (/,/,$rel_keys)) - { - if (my $err = reloadvalues($key)) { return $dr_cont .= $err; } - else {$dr_cont .= ok_replace("$s_reload\n",$key,$stylesheet_hash{$key}[0]);} - } - } - return ok_print($dr_cont); -} -################################################################################################# - -sub apply #apply stylesheets -{ - my $http_query = shift(@_); - my $headers_ptr = shift(@_); - my $xmluri; - my @applykeys; - my %app_param; - my %app_prop; - my $results; - my $lastkey; - my $enc; - - if (my $err=applyparsequery($http_query,\@applykeys,\%app_param,\%app_prop,$xmluri)) - { - return synerror_print($err,$apply_usage); - } - elsif (my $err=applycheckvalues(\@applykeys)) { return operror_print($err); } - elsif (my $err=load_xml_doc($xmluri,$results)) { return operror_print($err); } - #apply - foreach my $applykey (@applykeys) - { - $lastkey=$applykey; - if (my $err=apply_style($applykey,\%{$app_param{$applykey}},$results)) - { - return operror_print($err); - } - }#foreach - my $i=0; - while (my ($n, $v) = each %app_prop) - { - if (($n eq "method") or ($n eq "METHOD")) - { - if ($v eq 'html') { $headers_ptr->{'Content-Type'}='text/html'; } - elsif ($v eq 'text') { $headers_ptr->{'Content-Type'}='text/plain'; } - else { $headers_ptr->{'Content-Type'}='text/xml'; } - } - if (($n eq "encoding") or ($n eq "ENCODING")) - { - $headers_ptr->{'Content-Encoding'}=$v; - if ($v ne "UTF-8") { $enc = $v; } - } - if (($n eq "media-type") or ($n eq "MEDIA_TYPE") or ($n eq "MEDIA-TYPE")) - { - $headers_ptr->{'Content-Type'}=$v; - } - $i++; - } - if ($i == 0) - { - %$headers_ptr= ('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - return get_results($lastkey,$results); - } - else - { - my $result; - $headers_ptr->{'Cache-Control'} = 'no-cache'; - $headers_ptr->{'Pragma'} = "no-cache"; - $headers_ptr->{'Expires'} = '0'; - if ($headers_ptr->{'Content-Type'} eq 'text/html') - { - $result = get_results_html($results); - } - else - { - $result = get_results_prop($results); - if ($enc) - { - $result = decode($result,$enc); - } - } - return $result; - } -} - -sub list #list all the stylesheet loaded -{ - my $cont=""; - my $ind = 0; - foreach $key (keys %stylesheet_hash) - { - $cont .= ok_replace("$list\n",$key,$stylesheet_hash{$key}[0]); - $ind++; - } - if ($ind > 0) { return ok_print($cont); } - else { return ok_print($empty); } -} - -sub home #return Dispay active -{ - if ($_[0] ne "") { return synerror_print($error{"home_qs"},$all_usage); } - else { - return ok_print($home_message.$all_usage); - } -} - -sub help #return html help -{ - if ($_[0] ne "") { return synerror_print($error{"help_qs"},$help_usage); } - return ok_print($help_message.$all_usage); -} - -################################################################################################# -################################################################################################# -# Subrutines to get parameters for commands from Query String (query string parsing) -################################################################################################# -################################################################################################# - -sub add_comma_analysis -{ - my $bind = shift(@_); - my ($l , $r) = split(/,/,$bind,2); - if (index($bind ,",") == -1) { return $error{"add_no_sep"}; } - elsif (index($r ,",") != -1) { return $error{"add_many_sep"}; } - elsif (($l eq "") or ($r eq "")) { return $error{"add_null_bind"}; } - else { return 0; } -} -## -#usage: -#addparsequery($querystring,\@binds) -#returns $errcode; -sub addparsequery -{ - my $query = shift(@_); - my $value_ptr = shift(@_); - if ($query eq "") { return $error{"add_no_bind"}; } - else - { - foreach my $params (split(/&/,$query)) - { - my ($k , $v) = split(/=/,$params,2); - $v=uri_unescape($v); - if ($k ne "bind") { return $error{"add_oth"}; } - elsif ($v eq "") { return $error{"add_null_bind"}; } - elsif (my $err=add_comma_analysis($v)) { return $err; } - else { push @$value_ptr,$v;} - }#foreach - return 0; - } -} - -sub reparsequery -{ - my $query = shift(@_); - my $k; - my $v; - my $err; - if (index($query, "&") == -1) - { - ($k , $v) = split(/=/,$query,2); - $v=uri_unescape($v); - if ($k ne "keys") { return $error{"re_oth"}; } - elsif ($v eq "") { return $error{"re_null_keys"}; } - elsif ((index($v,",")==0) or (index($v,",,")!=-1) or (substr($v,-1) eq ",")) - { - return $error{"re_null_keys"}; - } - else { $_[0] = $v; return 0; } - } - else { return $error{"re_many"}; } -} - -sub get_req -{ - my $arr_ptr = shift(@_); - my $xmluri_found = 0; - my $keys_found = 0; - foreach my $el (@$arr_ptr) - { - my ($k , $v) = split(/=/,$el,2); - $v=uri_unescape($v); - if ($k eq "param") { return $error{"apply_no_dots_param"}; } - elsif ($k eq "prop") { return $error{"apply_no_dots_prop"}; } - elsif ($k eq "xmluri") - { - if ($xmluri_found) { return $error{"apply_many_uri"}; } - else - { - if ($v eq "") { return $error{"apply_null_uri"}; } - else { $_[0] = $v; $xmluri_found = 1; } - } - } - elsif ($k eq "keys") - { - if ($keys_found) { return $error{"apply_many_keys"}; } - else - { - if ($v eq "") { return $error{"apply_null_keys"}; } - elsif ((index($v,",")==0) or (index($v,",,")!=-1) or (substr($v,-1) eq ",")) - { - return $error{"apply_null_keys"}; - } - else { $_[1] = $v; $keys_found = 1; } - } - } - else { return $error{"apply_oth"}; } - }#foreach my $el (@$arr_ptr) - if ((!$xmluri_found or !$keys_found)) { return $error{"apply_few_pars"}; } - else { return 0; } -} - -sub applyparsequery -{ - my $query = shift(@_); - my $apply_keys_ptr = shift(@_); - my $keyparshoh = shift(@_); - my $proph_ptr = shift(@_); - my $applykeys; - my %prop_h; - my %genparam_h; - my %keyparam_h; - my @nodots; - - if ($query eq "") { return $error{"apply_few_pars"}; } - if (index($query, "&") == -1) { return $error{"apply_few_pars"}; } - foreach my $param (split(/&/,$query)) - { - my ($k , $v) = split(/=/,$param,2); - $v=uri_unescape($v); - if (index($k, ".") == -1) { push @nodots,$param; } - else - { - my ($l , $r) = split(/\./,$k,2); - if ($l eq "prop") - { - if (($r eq "") or ($v eq "")) { return $error{"apply_null_prop"}; } - elsif (index($r, ".") > -1) { return $error{"apply_dots_prop"}; } - else { $prop_h{$r} = $v; } - } - elsif ($l eq "param") - { - if (($r eq "") or ($v eq "")) { return $error{"apply_null_param"}; } - elsif (index($r, ".") == -1) { $genparam_h{$r} = $v; } - else - { - my ($kk , $va) = split(/\./,$r,2); - if (index($va, ".") > -1) { return $error{"apply_dots_param"}; } - elsif (($kk eq "") or ($va eq "")) { return $error{"apply_null_param"}; } - else { $keyparam_h{$kk}{$va}=$v; } - } - } - else { return $error{"apply_oth"}; } - } - } - - if (my $err = get_req(\@nodots,$_[0],$applykeys)) { return $err; } - while (my ($gn, $gv) = each %prop_h) - { - $proph_ptr->{$gn} = $gv; - } - foreach my $pkey ( keys %keyparam_h ) - { - my $k_found=0; - foreach my $verkey (split (/,/,$applykeys)) - { - if ($pkey eq $verkey) { $k_found = 1; } - } - if (! $k_found) { return $error{"apply_inv_param"}; } - } - - foreach my $applykey (split (/,/,$applykeys)) - { - while (my ($gn, $gv) = each %genparam_h) - { - $keyparshoh->{$applykey}{$gn} = $gv; - } - while (my ($kn, $kv) = each %{ $keyparam_h{$applykey} } ) - { - $keyparshoh->{$applykey}{$kn} = $kv; - } - push @$apply_keys_ptr, $applykey; - }#foreach - return 0; -} - -################################################################################################# -################################################################################################# -################################################################################################# -# Subrutines to replace values between {} on loaded templates -################################################################################################# -################################################################################################# -################################################################################################# - -sub ok_print -{ - my $message = shift(@_); - $message =~ s/(\n)/
\1/g; - my $retval = $ok_tpl; - $retval =~ s/\{MESSAGE\}/$message/g; - return $retval; -} - -sub operror_print -{ - my $message = shift(@_); - $message =~ s/(\n)/
\1/g; - my $retval = $operror_tpl; - $retval =~ s/\{ERROR\}/$message/g; - return $retval; -} - -sub synerror_print -{ - my $message = shift(@_); - my $us = shift(@_); - $message =~ s/(\n)/
\1/g; - my $retval = $synerror_tpl; - $retval =~ s/\{ERROR\}/$message/g; - $retval =~ s/\{USAGE\}/$us/g; - return $retval; -} - -################################################################################################# -################################################################################################# -################################################################################################# -# Subrutines to replace values between {} on loaded messages -################################################################################################# -################################################################################################# -################################################################################################# - -sub ok_replace -{ - my $message = shift(@_); - my $key = shift(@_); - my $s_uri = shift(@_); - $message =~ s/\{KEY\}/$key/g; - $message =~ s/\{URI\}/$s_uri/g; - return $message; -} - -sub err_replace -{ - my $message = shift(@_); - my $key = shift(@_); - my $s_uri = shift(@_); - my $errr = shift(@_); - $message =~ s/\{KEY\}/$key/g; - $message =~ s/\{URI\}/$s_uri/g; - $message =~ s/\{ERROR\}/$errr/g; - $message =~ s/\{OLDKEY\}/$errr/g; - return $message; -} - -sub parser_error_replace -{ - my $no_at = shift(@_); - $no_at =~ s/(.*)\sat\s(.*)/\1/g; - $no_at =~ s//>/g; - return $no_at; -} - -################################################################################################# -################################################################################################# -################################################################################################# -# Subrutines to load config files and templates -################################################################################################# -################################################################################################# -################################################################################################# - -sub load_messages -{ - if ($language eq "IT") - { - open(MESSAGE, "./msg/message.it") || die "Can't open config file '/msg/message.it' : $!"; - } - else - { - open(MESSAGE, "./msg/message.en") || die "Can't open config file '/msg/message.en' : $!"; - } - while(my $line = ) { - # ignore comments and full line comments - $line =~ s/#.*$//; - next unless $line =~ /\S/; - $line =~ s/\{URL\}/$puwobo_url/g; - $line =~ s/\{VER\}/$ver/g; - if ($line =~ /^(home_message)\s*=\s*(.*)$/) {$home_message = $2; } - if ($line =~ /^(help_message)\s*=\s*(.*)$/) {$help_message = $2; } - if ($line =~ /^(s_add)\s*=\s*(.*)$/) {$s_add = $2; } - if ($line =~ /^(s_reload)\s*=\s*(.*)$/) {$s_reload = $2; } - if ($line =~ /^(s_remove)\s*=\s*(.*)$/) {$s_remove = $2; } - if ($line =~ /^(list)\s*=\s*(.*)$/) {$list = $2; } - if ($line =~ /^(empty)\s*=\s*(.*)$/) {$empty = $2; } - if ($line =~ /^(all_usage)\s*=\s*(.*)$/) {$all_usage = $2; } - if ($all_usage_synerr eq "ON") - { - $help_usage=$add_usage=$remove_usage=$list_usage=$reload_usage=$apply_usage=$all_usage; - } - else - { - if ($line =~ /^(help_usage)\s*=\s*(.*)$/) {$help_usage = $2; } - if ($line =~ /^(add_usage)\s*=\s*(.*)$/) {$add_usage = $2; } - if ($line =~ /^(remove_usage)\s*=\s*(.*)$/) {$remove_usage = $2; } - if ($line =~ /^(list_usage)\s*=\s*(.*)$/) {$list_usage = $2; } - if ($line =~ /^(reload_usage)\s*=\s*(.*)$/) {$reload_usage = $2; } - if ($line =~ /^(apply_usage)\s*=\s*(.*)$/) {$apply_usage = $2; } - } - } - close MESSAGE; -} - -sub load_conf -{ - open(CONFIG, "./config") || die "Can't open config file 'config' : $!"; - while(my $line = ) { - # ignore comments and full line comments - $line =~ s/#.*$//; - next unless $line =~ /\S/; - if ($line =~ /^(working_path)\s*=\s*(.*)$/) {$working_path = $2; } - if ($line =~ /^(language)\s*=\s*(.*)$/) {$language = $2; } - if ($line =~ /^(port)\s*=\s*(.*)$/) {$port = $2; } - if ($line =~ /^(all_usage_synerr)\s*=\s*(.*)$/) {$all_usage_synerr = $2; } - if ($line =~ /^(expand_xinc)\s*=\s*(.*)$/) {$expand_xinc = $2; } - if ($line =~ /^(max_depth)\s*=\s*(.*)$/) {$max_depth = $2; } - } - close CONFIG; -} - -sub load_err -{ - if ($language eq "IT") - { - open(ERRO, "./msg/error.it") || die "Can't open config file '/msg/error.it' : $!"; - } - else - { - open(ERRO, "./msg/error.en") || die "Can't open config file '/msg/error.en' : $!"; - } - while(my $line = ) - { - # ignore comments and full line comments - $line =~ s/#.*$//; - next unless $line =~ /\S/; - if ($line =~ /^(.*?)\s*=\s*(.*)$/) {$error{$1} = $2; } - } - close ERRO; -} - -sub load_templates -{ - # load ok template - open(OK_TPL, "./tpl/ok.tpl") - || die "Can't open template file '/tpl/ok.tpl' : $!"; - while(my $line = ) {$ok_tpl .= $line; } - close OK_TPL; - - # load operror template - open(OPERROR_TPL, "./tpl/operror.tpl") - || die "Can't open template file '/tpl/operror.tpl' : $!"; - while(my $line = ) {$operror_tpl .= $line; } - close OPERROR_TPL; - - # load synerror template - open(SYNERROR_TPL, "./tpl/synerror.tpl") - || die "Can't open template file '/tpl/synerror.tpl' : $!"; - while(my $line = ) {$synerror_tpl .= $line; } - close SYNERROR_TPL; -} - -################################################################################################# -################################################################################################# -################################################################################################# -# the LibXML callbacks follow -# these callbacks are used for both the original parse AND the XInclude (if set) -################################################################################################# -################################################################################################# -################################################################################################# - -sub match_uri { - my $uri = shift; - return $uri !~ /:\/\// ? 1 : 0; # we handle only files -} - -sub open_uri { - my $uri = shift; - - my $handler = new IO::File; - if ( not $handler->open( "<$uri" ) ){ - $file = 0; - } - - return $file; -} - -sub read_uri { - my $handler = shift; - my $length = shift; - my $buffer = undef; - if ( $handler ) { - $handler->read( $rv , $length ); - } - return $buffer; -} - -sub close_uri { - my $handler = shift; - if ( $handler ) { - $handler->close(); - } - return 1; -} diff --git a/helm/hxsp/make.pl b/helm/hxsp/make.pl deleted file mode 100644 index ecd3a2886..000000000 --- a/helm/hxsp/make.pl +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/perl -open(MAIN, ">","./hxsp.pl")|| die "Can't open ./hxsp.pl : $!"; -my $pd = "./splitted/"; -my @pieces = ("0.init.p.pl","1.globvars.p.pl","2.start.p.pl", - "3.daemon.p.pl","4.hash.p.pl","5.libxslt.p.pl", - "6.commands.p.pl","7.qsparse.p.pl", - "8.strrep.p.pl","9.load.p.pl"); - -foreach $p (@pieces) -{ - open(P, "$pd$p") || die "Can't open $pd$p : $!"; - while(my $line =

) { print MAIN $line; } - close P; - print MAIN "\n"; -} - -close MAIN; diff --git a/helm/hxsp/msg/error.en b/helm/hxsp/msg/error.en deleted file mode 100644 index 9ac62ab87..000000000 --- a/helm/hxsp/msg/error.en +++ /dev/null @@ -1,45 +0,0 @@ -#syntax errors - -home_qs = syntax error: don't use parameters on hxsp if they aren't required by a specific command - -help_qs = syntax error: too parameters, help don't require any parameter - -list_qs = syntax error: too parameters, list don't require any parameter - -add_no_bind = syntax error: you must use the "bind" parameter -add_oth = syntax error: you may use only the "bind" parameter -add_null_bind = syntax error: bad bind value (NULL) -add_many_sep = syntax error: bad bind value (too commas) -add_no_sep = syntax error: bad bind value (no comma) - -re_oth = syntax error: you may use only the "keys" parameter -re_many = syntax error: you may use only the "keys" parameter and you must use it once -re_null_keys = syntax error: bad keys value (NULL) - -apply_few_pars = syntax error: xmluri and keys are both required -apply_oth = syntax error: you may use only keys, xmluri e param as parameters -apply_many_uri = syntax error: you must use the xmluri parameter once -apply_null_uri = syntax error: bad xmluri value (NULL) -apply_many_keys = syntax error: you must use the keys parameter once -apply_null_keys = syntax error: bad keys value (NULL) -apply_no_dots_param = syntax error: bad param value (no dots) -apply_no_dots_prop = syntax error: bad prop value (no dots) -apply_dots_param = syntax error: bad param value (more than 2 dots) -apply_dots_prop = syntax error: bad prop value (many dots) -apply_null_param = syntax error: bad param value (NULL) -apply_null_prop = syntax error: bad prop value (NULL) -apply_inv_param = syntax error: bad param value (key not specified in the keys parameter) - -#operative errors -add_dup_key = error in the stylesheet with key {KEY} and uri {URI}: a stylesheet with key {KEY} was already loaded use another key -add_dup_value = error in the stylesheet with key {KEY} and uri {URI}: the stylesheet with uri {URI} was already loaded with key {OLDKEY} use "reload" instead -add_xml_error = the XML parser found an error in the stylesheet with key {KEY} and uri {URI}:
{ERROR} -add_xslt_error = the XSLT parser found an error in the stylesheet with key {KEY} and uri {URI}:
{ERROR} - -re_inv_key = the stylesheet with key {KEY} was not loaded -re_no_sl = there is no stylesheets loaded - -apply_inv_key = the stylesheet with key {KEY} was not loaded -apply_xml_error = the XML parser found an error in the file {URI}:
{ERROR} -apply_xslt_error = the LibXSLT library found an error applying the stylesheet with key {KEY} and uri {URI}:
{ERROR} -apply_xslt_out_error = lthe LibXSLT library found an error creating the return file:
{ERROR} diff --git a/helm/hxsp/msg/error.it b/helm/hxsp/msg/error.it deleted file mode 100644 index ebbfa8f6b..000000000 --- a/helm/hxsp/msg/error.it +++ /dev/null @@ -1,46 +0,0 @@ -#sintax errors - -home_qs = errore di sintassi: non passare parametri a hxsp se non per l'utilizzo dei comandi specificati - -help_qs = errore di sintassi: troppi parametri specificati, help non richiede parametri - -list_qs = errore di sintassi: troppi parametri specificati, list non richiede parametri - -add_no_bind = errore di sintassi: si deve assegnare almeno un valore a bind -add_oth = errore di sintassi: si possono assegnare valori solo a bind -add_null_bind = errore di sintassi: valore di bind errato (NULL) -add_many_sep = errore di sintassi: valore di bind errato (troppe virgole) -add_no_sep = errore di sintassi: valore di bind errato (non seperato da virgola) - -re_oth = errore di sintassi: si possono assegnare valori solo a keys -re_many = errore di sintassi: si possono assegnare valori solo a keys e una sola volta -re_null_keys = errore di sintassi: valore di keys errato (NULL) - -apply_few_pars = errore di sintassi: richiesti almeno xmluri e keys -apply_oth = errore di sintassi: si possono assegnare valori solo a keys, xmluri e param -apply_many_uri = errore di sintassi: si può assegnare solo un valore a xmluri -apply_null_uri = errore di sintassi: valore di xmluri errato (NULL) -apply_many_keys = errore di sintassi: si possono assegnare valori a keys una sola volta -apply_null_keys = errore di sintassi: valore di keys errato (NULL) -apply_no_dots_param = errore di sintassi: valore di param errato (param richiede il punto) -apply_no_dots_prop = errore di sintassi: valore di prop errato (prop richiede il punto) -apply_dots_param = errore di sintassi: valore di param errato (param richiede al massimo 2 punti) -apply_dots_prop = errore di sintassi: valore di prop errato (prop richiede un solo punto) -apply_null_param = errore di sintassi: valore di param errato (NULL) -apply_null_prop = errore di sintassi: valore di prop errato (NULL) -apply_inv_param = errore di sintassi: valore di param errato (chiave non indicata in keys) - -#operative errors -add_dup_key = errore nello stylesheet con chiave {KEY} e uri {URI}: esiste già uno stilesheet con chiave {KEY} usare un altra chiave -add_dup_value = errore nello stylesheet con chiave {KEY} e uri {URI}: lo stylesheet con uri {URI} è già stato caricato con la chiave {OLDKEY} usare "reload" per ricaricarlo -add_xml_error = il parser xml ha rilevato un errore nello stylesheet con chiave {KEY} e uri {URI}:
{ERROR} -add_xslt_error = il parser xslt ha rilevato un errore nello stylesheet con chiave {KEY} e uri {URI}:
{ERROR} - -re_inv_key = lo stylesheet con chiave {KEY} non è stato caricato -re_no_sl = nessuno stylesheet è stato caricato - -apply_inv_key = lo stylesheet con chiave {KEY} non è stato caricato -apply_xml_error = il parser xml ha rilevato un errore nello file {URI}:
{ERROR} -apply_xslt_error = la libreria LibXSLT ha rilevato un errore applicando lo stylesheet con chiave {KEY} e uri {URI}:
{ERROR} -apply_xslt_out_error = la libreria LibXSLT ha rilevato un errore nella creazione del file in uscita:
{ERROR} - diff --git a/helm/hxsp/msg/message.en b/helm/hxsp/msg/message.en deleted file mode 100644 index 6a43e828b..000000000 --- a/helm/hxsp/msg/message.en +++ /dev/null @@ -1,96 +0,0 @@ -######################################################################## -######################################################################## -# -# Interface messages config file in EN language for hxsp -# Author: Alessandro Barzanti (barzu@libero.it) -# -######################################################################## -######################################################################## - -######################################################################## -######################################################################## -# usage messages -######################################################################## -######################################################################## - -######################################################################## -# Message sent after help syntax errors if "all_usage_synerr" is set OFF -######################################################################## -help_usage = usage:
{URL}/help - -######################################################################## -# Message sent after add syntax errors if "all_usage_synerr" is set OFF -######################################################################## -add_usage = usage:
{URL}/add?bind=key,stylesheet[&bind=key,stylesheet]* - -######################################################################## -# Message sent after remove syntax errors if "all_usage_synerr" is set OFF -######################################################################## -remove_usage = usage:
{URL}/remove[?keys=key_1,...,key_n] - -######################################################################## -# Message sent after list syntax errors if "all_usage_synerr" is set OFF -######################################################################## -list_usage = usage:
{URL}/list - -######################################################################## -# Message sent after reload syntax errors if "all_usage_synerr" is set OFF -######################################################################## -reload_usage =usage:
{URL}/reload[?keys=key_1,...,key_n] - -######################################################################## -# Message sent after apply syntax errors if "all_usage_synerr" is set OFF -######################################################################## -apply_usage =usage:
{URL}/apply?xmluri=xmldata&keys=key_1,...,key_n[¶m.name=value]*[¶m.key.name=value]*[&prop.name=[value]]* - -######################################################################## -# Message sent after "home_message" when hxsp was called without commands -# and sent after "help_message" when hxsp was called with the help command -# and after all syntax errors if "all_usage_synerr" is set ON -######################################################################## -all_usage = usage:

  • {URL}/help
  • {URL}/add?bind=key,stylesheet&bind=key,stylesheet]*
  • {URL}/remove[?keys=key_1,...,key_n]
  • {URL}/list
  • {URL}/reload[?keys=key_1,...,key_n]
  • {URL}/apply?xmluri=xmldata&keys=key_1,...,key_n[¶m.name=value]*[¶m.key.name=value]*[&prop.name=[value]]*
- -######################################################################## -######################################################################## -#operative messages -######################################################################## -######################################################################## - -######################################################################## -# Message sent when hxsp was called without commands -######################################################################## -home_message =

hxsp v{VER} active


- -######################################################################## -# Message sent when hxsp was called with the help command -######################################################################## -help_message = - -######################################################################## -# Message sent when a stylesheet is added -######################################################################## -s_add = the stylesheet with key: {KEY} and uri: {URI} was successfully loaded - -######################################################################## -# Message sent when a stylesheet is reloaded -######################################################################## -s_reload = the stylesheet with key: {KEY} and uri: {URI} was successfully reloaded - -######################################################################## -# Message sent when a stylesheet is removed -######################################################################## -s_remove = the stylesheet with key: {KEY} and uri: {URI} was successfully removed - -######################################################################## -# Message to print the stylesheet status for list command -######################################################################## -list = the stylesheet with key: {KEY} and uri: {URI} was loaded - -######################################################################## -# Message sent when the list command was called -# and there is no stylesheet loaded -######################################################################## -empty = there is no stylesheet loaded - -######################################################################## -######################################################################## diff --git a/helm/hxsp/msg/message.it b/helm/hxsp/msg/message.it deleted file mode 100644 index 77c1d6b79..000000000 --- a/helm/hxsp/msg/message.it +++ /dev/null @@ -1,96 +0,0 @@ -######################################################################## -######################################################################## -# -# Interface messages config file in IT language for hxsp -# Author: Alessandro Barzanti (barzu@libero.it) -# -######################################################################## -######################################################################## - -######################################################################## -######################################################################## -# usage messages -######################################################################## -######################################################################## - -######################################################################## -# Message sent after help syntax errors if "all_usage_synerr" is set OFF -######################################################################## -help_usage = utilizzo:
{URL}/help - -######################################################################## -# Message sent after add syntax errors if "all_usage_synerr" is set OFF -######################################################################## -add_usage = utilizzo:
{URL}/add?bind=key,stylesheet[&bind=key,stylesheet]* - -######################################################################## -# Message sent after remove syntax errors if "all_usage_synerr" is set OFF -######################################################################## -remove_usage = utilizzo:
{URL}/remove[?keys=key_1,...,key_n] - -######################################################################## -# Message sent after list syntax errors if "all_usage_synerr" is set OFF -######################################################################## -list_usage = utilizzo:
{URL}/list - -######################################################################## -# Message sent after reload syntax errors if "all_usage_synerr" is set OFF -######################################################################## -reload_usage = utilizzo:
{URL}/reload[?keys=key_1,...,key_n] - -######################################################################## -# Message sent after apply syntax errors if "all_usage_synerr" is set OFF -######################################################################## -apply_usage = utilizzo:
{URL}/apply?xmluri=xmldata&keys=key_1,...,key_n[¶m.name=value]*[¶m.key.name=value]*[&prop.name=[value]]* - -######################################################################## -# Message sent after "home_message" when hxsp was called without commands -# and sent after "help_message" when hxsp was called with the help command -# and after all syntax errors if "all_usage_synerr" is set ON -######################################################################## -all_usage = utilizzo:
  • {URL}/help
  • {URL}/add?bind=key,stylesheet&bind=key,stylesheet]*
  • {URL}/remove[?keys=key_1,...,key_n]
  • {URL}/list
  • {URL}/reload[?keys=key_1,...,key_n]
  • {URL}/apply?xmluri=xmldata&keys=key_1,...,key_n[¶m.name=value]*[¶m.key.name=value]*[&prop.name=[value]]*
- -######################################################################## -######################################################################## -#operative messages -######################################################################## -######################################################################## - -######################################################################## -# Message sent when hxsp was called without commands -######################################################################## -home_message =

hxsp v{VER} attivo


- -######################################################################## -# Message sent when hxsp was called with the help command -######################################################################## -help_message =

hxsp v{VER} attivo


- -######################################################################## -# Message sent when a stylesheet is added -######################################################################## -s_add = lo stylesheet con chiave: {KEY} e uri: {URI} è stato caricato con successo - -######################################################################## -# Message sent when a stylesheet is reloaded -######################################################################## -s_reload = lo stylesheet con chiave: {KEY} e uri: {URI} è stato ricaricato con successo - -######################################################################## -# Message sent when a stylesheet is removed -######################################################################## -s_remove = lo stylesheet con chiave: {KEY} e uri: {URI} è stato rimosso - -######################################################################## -# Message to print the stylesheet status for list command -######################################################################## -list = lo stylesheet con chiave: {KEY} e uri: {URI} è presente nel sistema - -######################################################################## -# Message sent when the list command was called -# and there is no stylesheet loaded -######################################################################## -empty = non è ancora stato caricato nessuno stylesheet - -######################################################################## -######################################################################## diff --git a/helm/hxsp/splitted/0.init.p.pl b/helm/hxsp/splitted/0.init.p.pl deleted file mode 100644 index 6c378c716..000000000 --- a/helm/hxsp/splitted/0.init.p.pl +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/perl - -################################################################################################# -################################################################################################# -################################################################################################# -# -# H.X.S.P. V 1.0 -# T S T R -# T L Y O -# P T E C -# S E -# H S -# E S -# E O -# T R -# -################################################################################################# -################################################################################################# -################################################################################################# - -use HTTP::Daemon; -use HTTP::Status; -use HTTP::Request; -use LWP::UserAgent; -use URI::Escape; -use CGI; -use FindBin; -use XML::LibXML; -use XML::LibXSLT; -use IO; diff --git a/helm/hxsp/splitted/1.globvars.p.pl b/helm/hxsp/splitted/1.globvars.p.pl deleted file mode 100644 index 9a9a88708..000000000 --- a/helm/hxsp/splitted/1.globvars.p.pl +++ /dev/null @@ -1,95 +0,0 @@ -################################################################################################# -################################################################################################# -################################################################################################# -# Global Variables -################################################################################################# -################################################################################################# -################################################################################################# - -# Version number -my $ver ="1.0"; - -# Working path of hxsp (loaded from config) -my $working_path; - -# Interface language (loaded from config) -my $language; - -# Port to use for hxsp (loaded from config) -my $port; - -# Use complete command description on syntax error if ON (loaded from config) -my $all_usage_synerr; - -# Include XIncludes on the fly if ON (loaded from config) -my $expand_xinc; - -# Max Depth of the DOM tree while parsing -my $max_depth; - -# Message sent when hxsp was called without commands (loaded from message.##) -my $home_message; - -# Message sent when hxsp was called with the help command (loaded from message.##) -my $help_message; - -# Message sent when a stylesheet is added (loaded from message.##) -my $s_add; - -# Message sent when a stylesheet is reloaded (loaded from message.##) -my $s_reload; - -# Message sent when a stylesheet is removed (loaded from message.##) -my $s_remove; - -# Message to print the stylesheet status for list command (loaded from message.##) -my $list; - -# Message sent when the list command was called -# and there is no stylesheet loaded (loaded from message.##) -my $empty; - -# Message sent after "home_message" when hxsp was called without commands -# and sent after "help_message" when hxsp was called with the help command -# and after all syntax errors if "all_usage_synerr" is set ON (loaded from message.##) -my $all_usage; - -# All the following syntax errors messages are used #only# if "all_usage_synerr" is set OFF - -# Message sent on help syntax errors (loaded from message.##) -my $help_usage; - -# Message sent on add syntax errors (loaded from message.##) -my $add_usage; - -# Message sent on remove syntax errors (loaded from message.##) -my $remove_usage; - -# Message sent on list syntax errors (loaded from message.##) -my $list_usage; - -# Message sent on reload syntax errors (loaded from message.##) -my $reload_usage; - -# Message sent on apply syntax errors (loaded from message.##) -my $apply_usage; - -# The error hash contains the error messages to call in case of syntax -# or operative errors, the keys are defined by the left value of each line in error## -my %error; - -# load ok template -my $ok_tpl; - -# load operror template -my $operror_tpl; - -# load synerror template -my $synerror_tpl; - -# This is the data structure to store the loaded stylesheets (hash of array) -# [0] :Styleseet URI , [1] : Loaded styleseet -my %stylesheet_hash; - -# This is a hash for fast duplicate uri detection -my %by_name; diff --git a/helm/hxsp/splitted/2.start.p.pl b/helm/hxsp/splitted/2.start.p.pl deleted file mode 100644 index a123ca798..000000000 --- a/helm/hxsp/splitted/2.start.p.pl +++ /dev/null @@ -1,49 +0,0 @@ -################################################################################################# -################################################################################################# -################################################################################################# -# Starting Operations -################################################################################################# -################################################################################################# -################################################################################################# - -# chdir to the directory of this perl script -chdir $FindBin::Bin; - -# load CONFIG -load_conf(); - -# initialize the objects to use LibXML and LibXSLT -my $parser = XML::LibXML->new(); -my $xslt = XML::LibXSLT->new(); - -# initialize the LibXML callbacks to load uri's -XML::LibXML->callbacks(\&match_uri,\&open_uri,\&read_uri,\&close_uri); - -# include XIncludes on the fly if required -if ($expand_xinc eq "ON") { $parser->expand_xinclude( 1 ); } - -# initialize the hxsp as HTTP::Daemon -my $d = new HTTP::Daemon LocalPort => $port; - -# get the complete working url of hxsp -my $puwobo_url = $d->url().$working_path; - -# set the working path to be comparable with url->path -$working_path = "/". $working_path; - -# load messages -load_messages(); - -# load error -load_err(); - -# load templates -load_templates(); - -# print starting information on console -print qq{ -hxsp v$ver active at: - Language is $language - On syntax error usage of every command is $all_usage_synerr - Include XIncludes on the fly is $expand_xinc; -}; diff --git a/helm/hxsp/splitted/3.daemon.p.pl b/helm/hxsp/splitted/3.daemon.p.pl deleted file mode 100644 index 3e3787336..000000000 --- a/helm/hxsp/splitted/3.daemon.p.pl +++ /dev/null @@ -1,131 +0,0 @@ -################################################################################################# -################################################################################################# -# HTTP::Daemon Operations -################################################################################################# -################################################################################################# - -# do not accumulate defunct processes -$SIG{CHLD} = "IGNORE"; -$SIG{USR1} = \&listen; # sent by the child to make the parent read the pipe - -pipe LIST_CHILD, TELL_PARENT; -pipe LIST_PARENT, TELL_CHILD; -TELL_PARENT->autoflush(1); -TELL_CHILD->autoflush(1); - - -sub listen { - my $res; - my $query = ; - if ($query =~ /^add /) { - $query =~ s/^add //; - chomp($query); - $res = add($query); - } - elsif ($query =~ /^reload /) { - $query =~ s/^reload //; - chomp($query); - $res = reload($query); - } - elsif ($query =~ /^remove /) { - $query =~ s/^remove //; - chomp($query); - $res = remove($query); - } - print TELL_CHILD "$res\n"; - print TELL_CHILD "____\n"; # end of response -} - -while (my $c = $d->accept) #connect -{ - if (fork() == 0) #start new concurrent process - { - while (my $r = $c->get_request) #get http request - { - if ($r->method eq 'GET' && - ($r->url->path eq $working_path or $r->url->path eq $working_path."/"))#start dir - { - my $response = new HTTP::Response; - $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - $response->content(home($r->url->query)); - $c->send_response($response); - } - elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/help")#usage - { - my $response = new HTTP::Response; - $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - $response->content(help($r->url->query)); - $c->send_response($response); - } - elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/add")#add - { - my $response = new HTTP::Response; - kill(USR1,getppid()); # ask the parent to read the pipe - my $qs = $r->url->query; - print TELL_PARENT "add $qs\n"; - my $in; - while (($in = ) ne "____\n") { - $res .= $in; - } - chomp($res); - $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - $response->content($res); - $c->send_response($response); - } - elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/remove")#remove - { - my $response = new HTTP::Response; - kill(USR1,getppid()); # ask the parent to read the pipe - my $qs = $r->url->query; - print TELL_PARENT "remove $qs\n"; - my $in; - my $res=""; - while (($in = ) ne "____\n") { - $res .= $in; - } - chomp($res); - $response->content($res); - $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - $c->send_response($response); - } - elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/reload")#reload - { - my $response = new HTTP::Response; - kill(USR1,getppid()); # ask the parent to read the pipe - my $qs = $r->url->query; - print TELL_PARENT "reload $qs\n"; - my $in; - my $res=""; - while (($in = ) ne "____\n") { - $res .= $in; - } - chomp($res); - $response->content($res); - $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - $c->send_response($response); - } - elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/list")#list - { - my $response = new HTTP::Response; - $response->header('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - $response->content(list($r->url->query)); - $c->send_response($response); - } - elsif ($r->method eq 'GET' && $r->url->path eq $working_path."/apply")#apply - { - my %headers; - my $response = new HTTP::Response; - $response->content(apply($r->url->query,\%headers)); - $response->header(%headers); - $c->send_response($response); - } - else #wrong command or not working_path - { - $c->send_error(RC_FORBIDDEN) - } - } - $c->close; - undef($c); - exit; - } # fork -} diff --git a/helm/hxsp/splitted/4.hash.p.pl b/helm/hxsp/splitted/4.hash.p.pl deleted file mode 100644 index e3b1fc140..000000000 --- a/helm/hxsp/splitted/4.hash.p.pl +++ /dev/null @@ -1,150 +0,0 @@ -################################################################################################# -################################################################################################# -################################################################################################# -# Stylesheet hash check subrutines -################################################################################################# -################################################################################################# -################################################################################################# - -################################################################################################# -# sub addcheckvalues -# Usage: addcheckvalues($key,$uri); -# Returns: error message or 0 if no errors found -# Do: check if key and uri are already loaded -# Used by: addvalues -# Uses : err_replace -################################################################################################# -sub addcheckvalues -{ - my $ac_key = shift(@_); - my $ac_uri = shift(@_); - if (exists $stylesheet_hash{$ac_key}) - { - return err_replace($error{"add_dup_key"},$ac_key,$ac_uri,""); - } - elsif (exists $by_name{$ac_uri}) - { - return err_replace($error{"add_dup_value"},$ac_key,$ac_uri,$by_name{$ac_key}); - } - else { return 0; } -} -################################################################################################# - -################################################################################################# -# sub recheckvalues -# Usage: recheckvalues($key); -# Returns: error message or 0 if no errors found -# Do: check if key are loaded -# Used by: remove, reloadvalues -# Uses : err_replace -################################################################################################# -sub recheckvalues -{ - my $re_key = shift(@_); - if (not exists $stylesheet_hash{$re_key}) - { - return err_replace($error{"re_inv_key"},$re_key,"",""); - } - else { return 0; } -} -################################################################################################# - -################################################################################################# -# sub applycheckvalues -# Usage: applycheckvalues(\@keys); -# Returns: error message or 0 if no errors found -# Do: check if keys in @keys are loaded -# Used by: remove, reloadvalues -# Uses : err_replace -################################################################################################# -sub applycheckvalues -{ - my $applykeys_ptr = shift(@_); - foreach $applykey (@$applykeys_ptr) - { - if (not exists $stylesheet_hash{$applykey}) - { - return err_replace($error{"apply_inv_key"},$applykey,"",""); - } - } - return 0; -} -################################################################################################# - -################################################################################################# -################################################################################################# -################################################################################################# -# Stylesheet hash modify subrutines -################################################################################################# -################################################################################################# -################################################################################################# - -################################################################################################# -# sub addvalues -# Usage: if add_halt_on_errors is ON addvalues($key,$uri,@added); -# else addvalues($key,$uri) -# Returns: error message or 0 on success, -# if add_halt_on_errors is ON return all the added keys on @added -# Do: add the values to the stylesheet hash -# Used by: add -# Uses : addcheckvalues, loadstyle -################################################################################################# -sub addvalues -{ - my $av_key = shift(@_); - my $av_uri = shift(@_); - my $av_stylesheet; #parsed stylesheet to be placed in hash - if (my $err = addcheckvalues($av_key,$av_uri)) { return $err; } - elsif (my $err = loadstyle($av_key, $av_uri, $av_stylesheet)) { return $err; } - else - { - $stylesheet_hash{$av_key}[0]=$av_uri; - $stylesheet_hash{$av_key}[1]=$av_stylesheet; - $by_name{$av_uri}=$av_key; - return 0; - } -} -################################################################################################# - -################################################################################################# -# sub removevalues -# Usage: removevalues($key); -# Returns: message -# Do: remove the key specified and relative values from the stylesheet hash -# Used by: remove, do_remove -# Uses : ok_replace -################################################################################################# -sub removevalues -{ - my $cr_key = shift(@_); - my $cr_uri = $stylesheet_hash{$cr_key}[0]; - delete $stylesheet_hash{$cr_key}; - delete $by_name{$cr_uri}; - return ok_replace("$s_remove\n",$cr_key,$cr_uri); -} -################################################################################################# - -################################################################################################# -# sub reloadvalues -# Usage: if add_halt_on_errors is ON reloadvalues($key.\%reloaded); -# else reloadvalues($key); -# Returns: error message or 0 on success, -# if add_halt_on_errors is ON return the old stylesheets in %reloaded -# Do: reload the stlylesheet with the key specified -# Used by: do_reload -# Uses : recheckvalues, loadstyle -################################################################################################# -sub reloadvalues -{ - my $rv_key = shift(@_); - my $rv_uri = $stylesheet_hash{$rv_key}[0]; - my $rv_stylesheet; #parsed stylesheet to be placed in hash - if (my $err = recheckvalues($rv_key)) { return $err; } - elsif (my $err = loadstyle($rv_key, $rv_uri, $rv_stylesheet)) { return $err; } - else - { - $stylesheet_hash{$rv_key}[1] = $rv_stylesheet; - return 0; - } -} -################################################################################################# diff --git a/helm/hxsp/splitted/5.libxslt.p.pl b/helm/hxsp/splitted/5.libxslt.p.pl deleted file mode 100644 index 4d90dc1fb..000000000 --- a/helm/hxsp/splitted/5.libxslt.p.pl +++ /dev/null @@ -1,174 +0,0 @@ -################################################################################################# -################################################################################################# -################################################################################################# -# LibXML LIBXSLT access subrutines -################################################################################################# -################################################################################################# -################################################################################################# - -################################################################################################# -# sub loadstyle -# Usage: loadstyle($key,$uri,$stylesheet); -# Returns: error message or 0 on success, -# parsed stylesheet in $stylesheet -# Do: parse the stylesheet at the given uri -# Used by: addvalues , reloadvalues -# Uses : err_replace, parser_error_replace -################################################################################################# -sub loadstyle -{ - my $ls_key= shift(@_); - my $ls_uri= shift(@_); - my $uncatched = ""; - my $line = ""; - my $style_doc; - pipe P, STDERR; - STDERR->autoflush(1); - eval { $style_doc = $parser->parse_file($ls_uri); }; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - - if ($@ or $uncatched ne "") - { - return err_replace($error{"add_xml_error"},$ls_key,$ls_uri,parser_error_replace($@.$uncatched)); - } - else - { - pipe P, STDERR; - STDERR->autoflush(1); - $uncatched = ""; - $line = ""; - eval { $_[0] = $xslt->parse_stylesheet($style_doc); }; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - return err_replace($error{"add_xslt_error"},$ls_key,$ls_uri,parser_error_replace($@.$uncatched)); - } - else {return 0} - } -} - -sub load_xml_doc -{ - my $xmluri = shift(@_); - my $uncatched = ""; - my $line = ""; - pipe P, STDERR; - STDERR->autoflush(1); - eval { $_[0] = $parser->parse_file($xmluri); }; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - return err_replace($error{"apply_xml_error"},"",$xmluri,parser_error_replace($@.$uncatched)); - } - else {return 0} -} - -sub apply_style -{ - my $k = shift(@_); - my $params_ptr = shift(@_); - my %params = XML::LibXSLT::xpath_to_string(%$params_ptr); - my $pippo; - my $uncatched = ""; - my $line = ""; - pipe P, STDERR; - STDERR->autoflush(1); - XML::LibXSLT->max_depth($max_depth); - eval { $_[0] = $stylesheet_hash{$k}[1]->transform($_[0],%params); }; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - my $e_r = parser_error_replace($@.$uncatched); - return err_replace($error{"apply_xslt_error"},$k,$stylesheet_hash{$k}[0],$e_r); - } - else {return 0} -} -sub get_results -{ - my $k = shift(@_); - my $results = shift(@_); - my $retval; - my $uncatched = ""; - my $line = ""; - pipe P, STDERR; - STDERR->autoflush(1); - eval { $retval = $stylesheet_hash{$k}[1]->output_string($results); }; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - my $e_r = parser_error_replace($@.$uncatched); - return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r)); - } - else { return $retval; } -} -sub get_results_prop -{ - my $result = shift(@_); - my $retval; - my $uncatched = ""; - my $line = ""; - pipe P, STDERR; - STDERR->autoflush(1); - eval { $retval = $result->toString; }; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - my $e_r = parser_error_replace($@.$uncatched); - return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r)); - } - else { return $retval; } -} - -sub get_results_html -{ - my $result = shift(@_); - my $retval; - my $uncatched = ""; - my $line = ""; - pipe P, STDERR; - STDERR->autoflush(1); - eval { $retval = $result->toStringHTML();}; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - my $e_r = parser_error_replace($@.$uncatched); - return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r)); - } - else { return $retval; } -} - -sub decode -{ - my $result = shift(@_); - my $enc = shift(@_); - my $retval; - my $uncatched = ""; - my $line = ""; - pipe P, STDERR; - STDERR->autoflush(1); - eval { $retval = decodeFromUTF8($enc, $result);}; - print STDERR "____\n"; - while(($line =

) ne "____\n") { $uncatched .= $line; } - close P; - if ($@ or $uncatched ne "") - { - my $e_r = parser_error_replace($@.$uncatched); - return operror_print(err_replace($error{"apply_xslt_out_error"},"","",$e_r)); - } - else { return $retval; } -} -################################################################################################# diff --git a/helm/hxsp/splitted/6.commands.p.pl b/helm/hxsp/splitted/6.commands.p.pl deleted file mode 100644 index 142acc590..000000000 --- a/helm/hxsp/splitted/6.commands.p.pl +++ /dev/null @@ -1,215 +0,0 @@ -################################################################################################# -################################################################################################# -################################################################################################# -# Commands subrutines -################################################################################################# -################################################################################################# -################################################################################################# - -################################################################################################# -# sub add -# Usage: add($http_query); -# Returns: values for HTTP::Response -# Do: add stylesheet(s) to hash -# Used by: daemon -# Uses : addparsequery, addvalues, ok_replace, -# ok_print, synerror_print, operror_print -################################################################################################# -sub add -{ - my $http_query = shift(@_); # querystring - my $cont =""; # return value - my @binds; #values of binds passed via querystring - my $err; # error string - if ($err = addparsequery($http_query,\@binds)) { return synerror_print($err,$add_usage); } - else - { - foreach my $bind (@binds) - { - my ($a_key , $e_uri) = split(/,/,$bind,2); - my $une_uri = uri_unescape($e_uri); - if ($err = addvalues($a_key,$une_uri)) { $cont .= "$err\n"; } - else { $cont .= ok_replace("$s_add\n",$a_key,$une_uri); } - }#foreach - return ok_print($cont); - } -} -################################################################################################# - -################################################################################################# -# sub remove -# Usage: remove($http_query); -# Returns: values for HTTP::Response -# Do: remove stylesheet(s) from hash -# Used by: daemon -# Uses : reparsequery, getkeys, recheckvalues, removevalues, -# ok_print, synerror_print, operror_print -################################################################################################# -sub remove -{ - my $http_query = shift(@_); # querystring - my $rem_keys; - my $cont=""; - my $err; - if ($http_query eq "") - { - my $i=0; - foreach my $rem_key (keys %stylesheet_hash) - { - $cont .= removevalues($rem_key); - $i++; - } - if ($i==0) { return operror_print($error{"re_no_sl"}); } - } - elsif ($err = reparsequery($http_query,$rem_keys)){return synerror_print($err,$remove_usage);} - else - { - foreach my $rem_key (split (/,/,$rem_keys)) - { - if (my $err = recheckvalues($rem_key)) { $cont .= "$err\n"; } - else { $cont .= removevalues($rem_key); } - } - } - return ok_print($cont); -} -################################################################################################# - -################################################################################################# -# sub reload -# Usage: remove($http_query); -# Returns: values for HTTP::Response -# Do: remove stylesheet(s) from hash -# Used by: daemon -# Uses : reparsequery, getkeys, recheckvalues, removevalues, -# ok_print, synerror_print, operror_print -################################################################################################# -sub reload #reload stylesheet(s) from hash -{ - my $http_query = shift(@_); - my $rel_keys; - my @rel_k; - my $dr_cont = ""; - if ($http_query eq "") - { - my $i=0; - foreach my $key (keys %stylesheet_hash) - { - if (my $err = reloadvalues($key)) { return $dr_cont .= $err; } - else {$dr_cont .= ok_replace("$s_reload\n",$key,$stylesheet_hash{$key}[0]);} - $i++; - } - if ($i==0) { return operror_print($error{"re_no_sl"}); } - } - elsif ($err = reparsequery($http_query,$rel_keys)){return synerror_print($err,$reload_usage);} - else - { - foreach my $key (split (/,/,$rel_keys)) - { - if (my $err = reloadvalues($key)) { return $dr_cont .= $err; } - else {$dr_cont .= ok_replace("$s_reload\n",$key,$stylesheet_hash{$key}[0]);} - } - } - return ok_print($dr_cont); -} -################################################################################################# - -sub apply #apply stylesheets -{ - my $http_query = shift(@_); - my $headers_ptr = shift(@_); - my $xmluri; - my @applykeys; - my %app_param; - my %app_prop; - my $results; - my $lastkey; - my $enc; - - if (my $err=applyparsequery($http_query,\@applykeys,\%app_param,\%app_prop,$xmluri)) - { - return synerror_print($err,$apply_usage); - } - elsif (my $err=applycheckvalues(\@applykeys)) { return operror_print($err); } - elsif (my $err=load_xml_doc($xmluri,$results)) { return operror_print($err); } - #apply - foreach my $applykey (@applykeys) - { - $lastkey=$applykey; - if (my $err=apply_style($applykey,\%{$app_param{$applykey}},$results)) - { - return operror_print($err); - } - }#foreach - my $i=0; - while (my ($n, $v) = each %app_prop) - { - if (($n eq "method") or ($n eq "METHOD")) - { - if ($v eq 'html') { $headers_ptr->{'Content-Type'}='text/html'; } - elsif ($v eq 'text') { $headers_ptr->{'Content-Type'}='text/plain'; } - else { $headers_ptr->{'Content-Type'}='text/xml'; } - } - if (($n eq "encoding") or ($n eq "ENCODING")) - { - $headers_ptr->{'Content-Encoding'}=$v; - if ($v ne "UTF-8") { $enc = $v; } - } - if (($n eq "media-type") or ($n eq "MEDIA_TYPE") or ($n eq "MEDIA-TYPE")) - { - $headers_ptr->{'Content-Type'}=$v; - } - $i++; - } - if ($i == 0) - { - %$headers_ptr= ('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0'); - return get_results($lastkey,$results); - } - else - { - my $result; - $headers_ptr->{'Cache-Control'} = 'no-cache'; - $headers_ptr->{'Pragma'} = "no-cache"; - $headers_ptr->{'Expires'} = '0'; - if ($headers_ptr->{'Content-Type'} eq 'text/html') - { - $result = get_results_html($results); - } - else - { - $result = get_results_prop($results); - if ($enc) - { - $result = decode($result,$enc); - } - } - return $result; - } -} - -sub list #list all the stylesheet loaded -{ - my $cont=""; - my $ind = 0; - foreach $key (keys %stylesheet_hash) - { - $cont .= ok_replace("$list\n",$key,$stylesheet_hash{$key}[0]); - $ind++; - } - if ($ind > 0) { return ok_print($cont); } - else { return ok_print($empty); } -} - -sub home #return Dispay active -{ - if ($_[0] ne "") { return synerror_print($error{"home_qs"},$all_usage); } - else { - return ok_print($home_message.$all_usage); - } -} - -sub help #return html help -{ - if ($_[0] ne "") { return synerror_print($error{"help_qs"},$help_usage); } - return ok_print($help_message.$all_usage); -} diff --git a/helm/hxsp/splitted/7.qsparse.p.pl b/helm/hxsp/splitted/7.qsparse.p.pl deleted file mode 100644 index aa7be53b5..000000000 --- a/helm/hxsp/splitted/7.qsparse.p.pl +++ /dev/null @@ -1,172 +0,0 @@ -################################################################################################# -################################################################################################# -# Subrutines to get parameters for commands from Query String (query string parsing) -################################################################################################# -################################################################################################# - -sub add_comma_analysis -{ - my $bind = shift(@_); - my ($l , $r) = split(/,/,$bind,2); - if (index($bind ,",") == -1) { return $error{"add_no_sep"}; } - elsif (index($r ,",") != -1) { return $error{"add_many_sep"}; } - elsif (($l eq "") or ($r eq "")) { return $error{"add_null_bind"}; } - else { return 0; } -} -## -#usage: -#addparsequery($querystring,\@binds) -#returns $errcode; -sub addparsequery -{ - my $query = shift(@_); - my $value_ptr = shift(@_); - if ($query eq "") { return $error{"add_no_bind"}; } - else - { - foreach my $params (split(/&/,$query)) - { - my ($k , $v) = split(/=/,$params,2); - $v=uri_unescape($v); - if ($k ne "bind") { return $error{"add_oth"}; } - elsif ($v eq "") { return $error{"add_null_bind"}; } - elsif (my $err=add_comma_analysis($v)) { return $err; } - else { push @$value_ptr,$v;} - }#foreach - return 0; - } -} - -sub reparsequery -{ - my $query = shift(@_); - my $k; - my $v; - my $err; - if (index($query, "&") == -1) - { - ($k , $v) = split(/=/,$query,2); - $v=uri_unescape($v); - if ($k ne "keys") { return $error{"re_oth"}; } - elsif ($v eq "") { return $error{"re_null_keys"}; } - elsif ((index($v,",")==0) or (index($v,",,")!=-1) or (substr($v,-1) eq ",")) - { - return $error{"re_null_keys"}; - } - else { $_[0] = $v; return 0; } - } - else { return $error{"re_many"}; } -} - -sub get_req -{ - my $arr_ptr = shift(@_); - my $xmluri_found = 0; - my $keys_found = 0; - foreach my $el (@$arr_ptr) - { - my ($k , $v) = split(/=/,$el,2); - $v=uri_unescape($v); - if ($k eq "param") { return $error{"apply_no_dots_param"}; } - elsif ($k eq "prop") { return $error{"apply_no_dots_prop"}; } - elsif ($k eq "xmluri") - { - if ($xmluri_found) { return $error{"apply_many_uri"}; } - else - { - if ($v eq "") { return $error{"apply_null_uri"}; } - else { $_[0] = $v; $xmluri_found = 1; } - } - } - elsif ($k eq "keys") - { - if ($keys_found) { return $error{"apply_many_keys"}; } - else - { - if ($v eq "") { return $error{"apply_null_keys"}; } - elsif ((index($v,",")==0) or (index($v,",,")!=-1) or (substr($v,-1) eq ",")) - { - return $error{"apply_null_keys"}; - } - else { $_[1] = $v; $keys_found = 1; } - } - } - else { return $error{"apply_oth"}; } - }#foreach my $el (@$arr_ptr) - if ((!$xmluri_found or !$keys_found)) { return $error{"apply_few_pars"}; } - else { return 0; } -} - -sub applyparsequery -{ - my $query = shift(@_); - my $apply_keys_ptr = shift(@_); - my $keyparshoh = shift(@_); - my $proph_ptr = shift(@_); - my $applykeys; - my %prop_h; - my %genparam_h; - my %keyparam_h; - my @nodots; - - if ($query eq "") { return $error{"apply_few_pars"}; } - if (index($query, "&") == -1) { return $error{"apply_few_pars"}; } - foreach my $param (split(/&/,$query)) - { - my ($k , $v) = split(/=/,$param,2); - $v=uri_unescape($v); - if (index($k, ".") == -1) { push @nodots,$param; } - else - { - my ($l , $r) = split(/\./,$k,2); - if ($l eq "prop") - { - if (($r eq "") or ($v eq "")) { return $error{"apply_null_prop"}; } - elsif (index($r, ".") > -1) { return $error{"apply_dots_prop"}; } - else { $prop_h{$r} = $v; } - } - elsif ($l eq "param") - { - if (($r eq "") or ($v eq "")) { return $error{"apply_null_param"}; } - elsif (index($r, ".") == -1) { $genparam_h{$r} = $v; } - else - { - my ($kk , $va) = split(/\./,$r,2); - if (index($va, ".") > -1) { return $error{"apply_dots_param"}; } - elsif (($kk eq "") or ($va eq "")) { return $error{"apply_null_param"}; } - else { $keyparam_h{$kk}{$va}=$v; } - } - } - else { return $error{"apply_oth"}; } - } - } - - if (my $err = get_req(\@nodots,$_[0],$applykeys)) { return $err; } - while (my ($gn, $gv) = each %prop_h) - { - $proph_ptr->{$gn} = $gv; - } - foreach my $pkey ( keys %keyparam_h ) - { - my $k_found=0; - foreach my $verkey (split (/,/,$applykeys)) - { - if ($pkey eq $verkey) { $k_found = 1; } - } - if (! $k_found) { return $error{"apply_inv_param"}; } - } - - foreach my $applykey (split (/,/,$applykeys)) - { - while (my ($gn, $gv) = each %genparam_h) - { - $keyparshoh->{$applykey}{$gn} = $gv; - } - while (my ($kn, $kv) = each %{ $keyparam_h{$applykey} } ) - { - $keyparshoh->{$applykey}{$kn} = $kv; - } - push @$apply_keys_ptr, $applykey; - }#foreach - return 0; -} diff --git a/helm/hxsp/splitted/8.strrep.p.pl b/helm/hxsp/splitted/8.strrep.p.pl deleted file mode 100644 index 90557fefd..000000000 --- a/helm/hxsp/splitted/8.strrep.p.pl +++ /dev/null @@ -1,76 +0,0 @@ -################################################################################################# -################################################################################################# -################################################################################################# -# Subrutines to replace values between {} on loaded templates -################################################################################################# -################################################################################################# -################################################################################################# - -sub ok_print -{ - my $message = shift(@_); - $message =~ s/(\n)/
\1/g; - my $retval = $ok_tpl; - $retval =~ s/\{MESSAGE\}/$message/g; - return $retval; -} - -sub operror_print -{ - my $message = shift(@_); - $message =~ s/(\n)/
\1/g; - my $retval = $operror_tpl; - $retval =~ s/\{ERROR\}/$message/g; - return $retval; -} - -sub synerror_print -{ - my $message = shift(@_); - my $us = shift(@_); - $message =~ s/(\n)/
\1/g; - my $retval = $synerror_tpl; - $retval =~ s/\{ERROR\}/$message/g; - $retval =~ s/\{USAGE\}/$us/g; - return $retval; -} - -################################################################################################# -################################################################################################# -################################################################################################# -# Subrutines to replace values between {} on loaded messages -################################################################################################# -################################################################################################# -################################################################################################# - -sub ok_replace -{ - my $message = shift(@_); - my $key = shift(@_); - my $s_uri = shift(@_); - $message =~ s/\{KEY\}/$key/g; - $message =~ s/\{URI\}/$s_uri/g; - return $message; -} - -sub err_replace -{ - my $message = shift(@_); - my $key = shift(@_); - my $s_uri = shift(@_); - my $errr = shift(@_); - $message =~ s/\{KEY\}/$key/g; - $message =~ s/\{URI\}/$s_uri/g; - $message =~ s/\{ERROR\}/$errr/g; - $message =~ s/\{OLDKEY\}/$errr/g; - return $message; -} - -sub parser_error_replace -{ - my $no_at = shift(@_); - $no_at =~ s/(.*)\sat\s(.*)/\1/g; - $no_at =~ s//>/g; - return $no_at; -} diff --git a/helm/hxsp/splitted/9.load.p.pl b/helm/hxsp/splitted/9.load.p.pl deleted file mode 100644 index 2746b273a..000000000 --- a/helm/hxsp/splitted/9.load.p.pl +++ /dev/null @@ -1,149 +0,0 @@ -################################################################################################# -################################################################################################# -################################################################################################# -# Subrutines to load config files and templates -################################################################################################# -################################################################################################# -################################################################################################# - -sub load_messages -{ - if ($language eq "IT") - { - open(MESSAGE, "./msg/message.it") || die "Can't open config file '/msg/message.it' : $!"; - } - else - { - open(MESSAGE, "./msg/message.en") || die "Can't open config file '/msg/message.en' : $!"; - } - while(my $line = ) { - # ignore comments and full line comments - $line =~ s/#.*$//; - next unless $line =~ /\S/; - $line =~ s/\{URL\}/$puwobo_url/g; - $line =~ s/\{VER\}/$ver/g; - if ($line =~ /^(home_message)\s*=\s*(.*)$/) {$home_message = $2; } - if ($line =~ /^(help_message)\s*=\s*(.*)$/) {$help_message = $2; } - if ($line =~ /^(s_add)\s*=\s*(.*)$/) {$s_add = $2; } - if ($line =~ /^(s_reload)\s*=\s*(.*)$/) {$s_reload = $2; } - if ($line =~ /^(s_remove)\s*=\s*(.*)$/) {$s_remove = $2; } - if ($line =~ /^(list)\s*=\s*(.*)$/) {$list = $2; } - if ($line =~ /^(empty)\s*=\s*(.*)$/) {$empty = $2; } - if ($line =~ /^(all_usage)\s*=\s*(.*)$/) {$all_usage = $2; } - if ($all_usage_synerr eq "ON") - { - $help_usage=$add_usage=$remove_usage=$list_usage=$reload_usage=$apply_usage=$all_usage; - } - else - { - if ($line =~ /^(help_usage)\s*=\s*(.*)$/) {$help_usage = $2; } - if ($line =~ /^(add_usage)\s*=\s*(.*)$/) {$add_usage = $2; } - if ($line =~ /^(remove_usage)\s*=\s*(.*)$/) {$remove_usage = $2; } - if ($line =~ /^(list_usage)\s*=\s*(.*)$/) {$list_usage = $2; } - if ($line =~ /^(reload_usage)\s*=\s*(.*)$/) {$reload_usage = $2; } - if ($line =~ /^(apply_usage)\s*=\s*(.*)$/) {$apply_usage = $2; } - } - } - close MESSAGE; -} - -sub load_conf -{ - open(CONFIG, "./config") || die "Can't open config file 'config' : $!"; - while(my $line = ) { - # ignore comments and full line comments - $line =~ s/#.*$//; - next unless $line =~ /\S/; - if ($line =~ /^(working_path)\s*=\s*(.*)$/) {$working_path = $2; } - if ($line =~ /^(language)\s*=\s*(.*)$/) {$language = $2; } - if ($line =~ /^(port)\s*=\s*(.*)$/) {$port = $2; } - if ($line =~ /^(all_usage_synerr)\s*=\s*(.*)$/) {$all_usage_synerr = $2; } - if ($line =~ /^(expand_xinc)\s*=\s*(.*)$/) {$expand_xinc = $2; } - if ($line =~ /^(max_depth)\s*=\s*(.*)$/) {$max_depth = $2; } - } - close CONFIG; -} - -sub load_err -{ - if ($language eq "IT") - { - open(ERRO, "./msg/error.it") || die "Can't open config file '/msg/error.it' : $!"; - } - else - { - open(ERRO, "./msg/error.en") || die "Can't open config file '/msg/error.en' : $!"; - } - while(my $line = ) - { - # ignore comments and full line comments - $line =~ s/#.*$//; - next unless $line =~ /\S/; - if ($line =~ /^(.*?)\s*=\s*(.*)$/) {$error{$1} = $2; } - } - close ERRO; -} - -sub load_templates -{ - # load ok template - open(OK_TPL, "./tpl/ok.tpl") - || die "Can't open template file '/tpl/ok.tpl' : $!"; - while(my $line = ) {$ok_tpl .= $line; } - close OK_TPL; - - # load operror template - open(OPERROR_TPL, "./tpl/operror.tpl") - || die "Can't open template file '/tpl/operror.tpl' : $!"; - while(my $line = ) {$operror_tpl .= $line; } - close OPERROR_TPL; - - # load synerror template - open(SYNERROR_TPL, "./tpl/synerror.tpl") - || die "Can't open template file '/tpl/synerror.tpl' : $!"; - while(my $line = ) {$synerror_tpl .= $line; } - close SYNERROR_TPL; -} - -################################################################################################# -################################################################################################# -################################################################################################# -# the LibXML callbacks follow -# these callbacks are used for both the original parse AND the XInclude (if set) -################################################################################################# -################################################################################################# -################################################################################################# - -sub match_uri { - my $uri = shift; - return $uri !~ /:\/\// ? 1 : 0; # we handle only files -} - -sub open_uri { - my $uri = shift; - - my $handler = new IO::File; - if ( not $handler->open( "<$uri" ) ){ - $file = 0; - } - - return $file; -} - -sub read_uri { - my $handler = shift; - my $length = shift; - my $buffer = undef; - if ( $handler ) { - $handler->read( $rv , $length ); - } - return $buffer; -} - -sub close_uri { - my $handler = shift; - if ( $handler ) { - $handler->close(); - } - return 1; -} \ No newline at end of file diff --git a/helm/hxsp/tpl/ok.tpl b/helm/hxsp/tpl/ok.tpl deleted file mode 100644 index 633267e4e..000000000 --- a/helm/hxsp/tpl/ok.tpl +++ /dev/null @@ -1,5 +0,0 @@ - - -{MESSAGE} - - diff --git a/helm/hxsp/tpl/operror.tpl b/helm/hxsp/tpl/operror.tpl deleted file mode 100644 index 4dbe1f56b..000000000 --- a/helm/hxsp/tpl/operror.tpl +++ /dev/null @@ -1,5 +0,0 @@ - - -{ERROR} - - diff --git a/helm/hxsp/tpl/synerror.tpl b/helm/hxsp/tpl/synerror.tpl deleted file mode 100644 index 990df9cb5..000000000 --- a/helm/hxsp/tpl/synerror.tpl +++ /dev/null @@ -1,6 +0,0 @@ - - -{ERROR}
-{USAGE} - - diff --git a/helm/mathql/doc/.cvsignore b/helm/mathql/doc/.cvsignore deleted file mode 100644 index c24dc0f5b..000000000 --- a/helm/mathql/doc/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.dvi *.aux *.log *.ps *.gz *.toc diff --git a/helm/mathql/doc/llncs.cls b/helm/mathql/doc/llncs.cls deleted file mode 100644 index 29e505e60..000000000 --- a/helm/mathql/doc/llncs.cls +++ /dev/null @@ -1,1189 +0,0 @@ -% LLNCS DOCUMENT CLASS -- version 2.13 (28-Jan-2002) -% Springer Verlag LaTeX2e support for Lecture Notes in Computer Science -% -%% -%% \CharacterTable -%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z -%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -%% Digits \0\1\2\3\4\5\6\7\8\9 -%% Exclamation \! Double quote \" Hash (number) \# -%% Dollar \$ Percent \% Ampersand \& -%% Acute accent \' Left paren \( Right paren \) -%% Asterisk \* Plus \+ Comma \, -%% Minus \- Point \. Solidus \/ -%% Colon \: Semicolon \; Less than \< -%% Equals \= Greater than \> Question mark \? -%% Commercial at \@ Left bracket \[ Backslash \\ -%% Right bracket \] Circumflex \^ Underscore \_ -%% Grave accent \` Left brace \{ Vertical bar \| -%% Right brace \} Tilde \~} -%% -\NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesClass{llncs}[2002/01/28 v2.13 -^^J LaTeX document class for Lecture Notes in Computer Science] -% Options -\let\if@envcntreset\iffalse -\DeclareOption{envcountreset}{\let\if@envcntreset\iftrue} -\DeclareOption{citeauthoryear}{\let\citeauthoryear=Y} -\DeclareOption{oribibl}{\let\oribibl=Y} -\let\if@custvec\iftrue -\DeclareOption{orivec}{\let\if@custvec\iffalse} -\let\if@envcntsame\iffalse -\DeclareOption{envcountsame}{\let\if@envcntsame\iftrue} -\let\if@envcntsect\iffalse -\DeclareOption{envcountsect}{\let\if@envcntsect\iftrue} -\let\if@runhead\iffalse -\DeclareOption{runningheads}{\let\if@runhead\iftrue} - -\let\if@openbib\iffalse -\DeclareOption{openbib}{\let\if@openbib\iftrue} - -% languages -\let\switcht@@therlang\relax -\def\ds@deutsch{\def\switcht@@therlang{\switcht@deutsch}} -\def\ds@francais{\def\switcht@@therlang{\switcht@francais}} - -\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} - -\ProcessOptions - -\LoadClass[twoside]{article} -\RequirePackage{multicol} % needed for the list of participants, index - -\setlength{\textwidth}{12.2cm} -\setlength{\textheight}{19.3cm} -\renewcommand\@pnumwidth{2em} -\renewcommand\@tocrmarg{3.5em} -% -\def\@dottedtocline#1#2#3#4#5{% - \ifnum #1>\c@tocdepth \else - \vskip \z@ \@plus.2\p@ - {\leftskip #2\relax \rightskip \@tocrmarg \advance\rightskip by 0pt plus 2cm - \parfillskip -\rightskip \pretolerance=10000 - \parindent #2\relax\@afterindenttrue - \interlinepenalty\@M - \leavevmode - \@tempdima #3\relax - \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip - {#4}\nobreak - \leaders\hbox{$\m@th - \mkern \@dotsep mu\hbox{.}\mkern \@dotsep - mu$}\hfill - \nobreak - \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}% - \par}% - \fi} -% -\def\switcht@albion{% -\def\abstractname{Abstract.} -\def\ackname{Acknowledgement.} -\def\andname{and} -\def\lastandname{\unskip, and} -\def\appendixname{Appendix} -\def\chaptername{Chapter} -\def\claimname{Claim} -\def\conjecturename{Conjecture} -\def\contentsname{Table of Contents} -\def\corollaryname{Corollary} -\def\definitionname{Definition} -\def\examplename{Example} -\def\exercisename{Exercise} -\def\figurename{Fig.} -\def\keywordname{{\bf Key words:}} -\def\indexname{Index} -\def\lemmaname{Lemma} -\def\contriblistname{List of Contributors} -\def\listfigurename{List of Figures} -\def\listtablename{List of Tables} -\def\mailname{{\it Correspondence to\/}:} -\def\noteaddname{Note added in proof} -\def\notename{Note} -\def\partname{Part} -\def\problemname{Problem} -\def\proofname{Proof} -\def\propertyname{Property} -\def\propositionname{Proposition} -\def\questionname{Question} -\def\remarkname{Remark} -\def\seename{see} -\def\solutionname{Solution} -\def\subclassname{{\it Subject Classifications\/}:} -\def\tablename{Table} -\def\theoremname{Theorem}} -\switcht@albion -% Names of theorem like environments are already defined -% but must be translated if another language is chosen -% -% French section -\def\switcht@francais{%\typeout{On parle francais.}% - \def\abstractname{R\'esum\'e.}% - \def\ackname{Remerciements.}% - \def\andname{et}% - \def\lastandname{ et}% - \def\appendixname{Appendice} - \def\chaptername{Chapitre}% - \def\claimname{Pr\'etention}% - \def\conjecturename{Hypoth\`ese}% - \def\contentsname{Table des mati\`eres}% - \def\corollaryname{Corollaire}% - \def\definitionname{D\'efinition}% - \def\examplename{Exemple}% - \def\exercisename{Exercice}% - \def\figurename{Fig.}% - \def\keywordname{{\bf Mots-cl\'e:}} - \def\indexname{Index} - \def\lemmaname{Lemme}% - \def\contriblistname{Liste des contributeurs} - \def\listfigurename{Liste des figures}% - \def\listtablename{Liste des tables}% - \def\mailname{{\it Correspondence to\/}:} - \def\noteaddname{Note ajout\'ee \`a l'\'epreuve}% - \def\notename{Remarque}% - \def\partname{Partie}% - \def\problemname{Probl\`eme}% - \def\proofname{Preuve}% - \def\propertyname{Caract\'eristique}% -%\def\propositionname{Proposition}% - \def\questionname{Question}% - \def\remarkname{Remarque}% - \def\seename{voir} - \def\solutionname{Solution}% - \def\subclassname{{\it Subject Classifications\/}:} - \def\tablename{Tableau}% - \def\theoremname{Th\'eor\`eme}% -} -% -% German section -\def\switcht@deutsch{%\typeout{Man spricht deutsch.}% - \def\abstractname{Zusammenfassung.}% - \def\ackname{Danksagung.}% - \def\andname{und}% - \def\lastandname{ und}% - \def\appendixname{Anhang}% - \def\chaptername{Kapitel}% - \def\claimname{Behauptung}% - \def\conjecturename{Hypothese}% - \def\contentsname{Inhaltsverzeichnis}% - \def\corollaryname{Korollar}% -%\def\definitionname{Definition}% - \def\examplename{Beispiel}% - \def\exercisename{\"Ubung}% - \def\figurename{Abb.}% - \def\keywordname{{\bf Schl\"usselw\"orter:}} - \def\indexname{Index} -%\def\lemmaname{Lemma}% - \def\contriblistname{Mitarbeiter} - \def\listfigurename{Abbildungsverzeichnis}% - \def\listtablename{Tabellenverzeichnis}% - \def\mailname{{\it Correspondence to\/}:} - \def\noteaddname{Nachtrag}% - \def\notename{Anmerkung}% - \def\partname{Teil}% -%\def\problemname{Problem}% - \def\proofname{Beweis}% - \def\propertyname{Eigenschaft}% -%\def\propositionname{Proposition}% - \def\questionname{Frage}% - \def\remarkname{Anmerkung}% - \def\seename{siehe} - \def\solutionname{L\"osung}% - \def\subclassname{{\it Subject Classifications\/}:} - \def\tablename{Tabelle}% -%\def\theoremname{Theorem}% -} - -% Ragged bottom for the actual page -\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil -\global\let\@textbottom\relax}} - -\renewcommand\small{% - \@setfontsize\small\@ixpt{11}% - \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ - \abovedisplayshortskip \z@ \@plus2\p@ - \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ - \def\@listi{\leftmargin\leftmargini - \parsep 0\p@ \@plus1\p@ \@minus\p@ - \topsep 8\p@ \@plus2\p@ \@minus4\p@ - \itemsep0\p@}% - \belowdisplayskip \abovedisplayskip -} - -\frenchspacing -\widowpenalty=10000 -\clubpenalty=10000 - -\setlength\oddsidemargin {63\p@} -\setlength\evensidemargin {63\p@} -\setlength\marginparwidth {90\p@} - -\setlength\headsep {16\p@} - -\setlength\footnotesep{7.7\p@} -\setlength\textfloatsep{8mm\@plus 2\p@ \@minus 4\p@} -\setlength\intextsep {8mm\@plus 2\p@ \@minus 2\p@} - -\setcounter{secnumdepth}{2} - -\newcounter {chapter} -\renewcommand\thechapter {\@arabic\c@chapter} - -\newif\if@mainmatter \@mainmattertrue -\newcommand\frontmatter{\cleardoublepage - \@mainmatterfalse\pagenumbering{Roman}} -\newcommand\mainmatter{\cleardoublepage - \@mainmattertrue\pagenumbering{arabic}} -\newcommand\backmatter{\if@openright\cleardoublepage\else\clearpage\fi - \@mainmatterfalse} - -\renewcommand\part{\cleardoublepage - \thispagestyle{empty}% - \if@twocolumn - \onecolumn - \@tempswatrue - \else - \@tempswafalse - \fi - \null\vfil - \secdef\@part\@spart} - -\def\@part[#1]#2{% - \ifnum \c@secnumdepth >-2\relax - \refstepcounter{part}% - \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% - \else - \addcontentsline{toc}{part}{#1}% - \fi - \markboth{}{}% - {\centering - \interlinepenalty \@M - \normalfont - \ifnum \c@secnumdepth >-2\relax - \huge\bfseries \partname~\thepart - \par - \vskip 20\p@ - \fi - \Huge \bfseries #2\par}% - \@endpart} -\def\@spart#1{% - {\centering - \interlinepenalty \@M - \normalfont - \Huge \bfseries #1\par}% - \@endpart} -\def\@endpart{\vfil\newpage - \if@twoside - \null - \thispagestyle{empty}% - \newpage - \fi - \if@tempswa - \twocolumn - \fi} - -\newcommand\chapter{\clearpage - \thispagestyle{empty}% - \global\@topnum\z@ - \@afterindentfalse - \secdef\@chapter\@schapter} -\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne - \if@mainmatter - \refstepcounter{chapter}% - \typeout{\@chapapp\space\thechapter.}% - \addcontentsline{toc}{chapter}% - {\protect\numberline{\thechapter}#1}% - \else - \addcontentsline{toc}{chapter}{#1}% - \fi - \else - \addcontentsline{toc}{chapter}{#1}% - \fi - \chaptermark{#1}% - \addtocontents{lof}{\protect\addvspace{10\p@}}% - \addtocontents{lot}{\protect\addvspace{10\p@}}% - \if@twocolumn - \@topnewpage[\@makechapterhead{#2}]% - \else - \@makechapterhead{#2}% - \@afterheading - \fi} -\def\@makechapterhead#1{% -% \vspace*{50\p@}% - {\centering - \ifnum \c@secnumdepth >\m@ne - \if@mainmatter - \large\bfseries \@chapapp{} \thechapter - \par\nobreak - \vskip 20\p@ - \fi - \fi - \interlinepenalty\@M - \Large \bfseries #1\par\nobreak - \vskip 40\p@ - }} -\def\@schapter#1{\if@twocolumn - \@topnewpage[\@makeschapterhead{#1}]% - \else - \@makeschapterhead{#1}% - \@afterheading - \fi} -\def\@makeschapterhead#1{% -% \vspace*{50\p@}% - {\centering - \normalfont - \interlinepenalty\@M - \Large \bfseries #1\par\nobreak - \vskip 40\p@ - }} - -\renewcommand\section{\@startsection{section}{1}{\z@}% - {-18\p@ \@plus -4\p@ \@minus -4\p@}% - {12\p@ \@plus 4\p@ \@minus 4\p@}% - {\normalfont\large\bfseries\boldmath - \rightskip=\z@ \@plus 8em\pretolerance=10000 }} -\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% - {-18\p@ \@plus -4\p@ \@minus -4\p@}% - {8\p@ \@plus 4\p@ \@minus 4\p@}% - {\normalfont\normalsize\bfseries\boldmath - \rightskip=\z@ \@plus 8em\pretolerance=10000 }} -\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% - {-18\p@ \@plus -4\p@ \@minus -4\p@}% - {-0.5em \@plus -0.22em \@minus -0.1em}% - {\normalfont\normalsize\bfseries\boldmath}} -\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% - {-12\p@ \@plus -4\p@ \@minus -4\p@}% - {-0.5em \@plus -0.22em \@minus -0.1em}% - {\normalfont\normalsize\itshape}} -\renewcommand\subparagraph[1]{\typeout{LLNCS warning: You should not use - \string\subparagraph\space with this class}\vskip0.5cm -You should not use \verb|\subparagraph| with this class.\vskip0.5cm} - -\DeclareMathSymbol{\Gamma}{\mathalpha}{letters}{"00} -\DeclareMathSymbol{\Delta}{\mathalpha}{letters}{"01} -\DeclareMathSymbol{\Theta}{\mathalpha}{letters}{"02} -\DeclareMathSymbol{\Lambda}{\mathalpha}{letters}{"03} -\DeclareMathSymbol{\Xi}{\mathalpha}{letters}{"04} -\DeclareMathSymbol{\Pi}{\mathalpha}{letters}{"05} -\DeclareMathSymbol{\Sigma}{\mathalpha}{letters}{"06} -\DeclareMathSymbol{\Upsilon}{\mathalpha}{letters}{"07} -\DeclareMathSymbol{\Phi}{\mathalpha}{letters}{"08} -\DeclareMathSymbol{\Psi}{\mathalpha}{letters}{"09} -\DeclareMathSymbol{\Omega}{\mathalpha}{letters}{"0A} - -\let\footnotesize\small - -\if@custvec -\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle#1$}} -{\mbox{\boldmath$\textstyle#1$}} -{\mbox{\boldmath$\scriptstyle#1$}} -{\mbox{\boldmath$\scriptscriptstyle#1$}}} -\fi - -\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}} -\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil -\penalty50\hskip1em\null\nobreak\hfil\squareforqed -\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi} - -\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip -\halign{\hfil -$\displaystyle##$\hfil\cr\gets\cr\to\cr}}} -{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets -\cr\to\cr}}} -{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets -\cr\to\cr}}} -{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr -\gets\cr\to\cr}}}}} -\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil -$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}} -{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr -\noalign{\vskip1.2pt}=\cr}}} -{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr -\noalign{\vskip1pt}=\cr}}} -{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr -<\cr -\noalign{\vskip0.9pt}=\cr}}}}} -\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil -$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}} -{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr -\noalign{\vskip1.2pt}=\cr}}} -{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr -\noalign{\vskip1pt}=\cr}}} -{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr ->\cr -\noalign{\vskip0.9pt}=\cr}}}}} -\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip -\halign{\hfil -$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}} -{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr ->\cr\noalign{\vskip-1pt}<\cr}}} -{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr ->\cr\noalign{\vskip-0.8pt}<\cr}}} -{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr ->\cr\noalign{\vskip-0.3pt}<\cr}}}}} -\def\bbbr{{\rm I\!R}} %reelle Zahlen -\def\bbbm{{\rm I\!M}} -\def\bbbn{{\rm I\!N}} %natuerliche Zahlen -\def\bbbf{{\rm I\!F}} -\def\bbbh{{\rm I\!H}} -\def\bbbk{{\rm I\!K}} -\def\bbbp{{\rm I\!P}} -\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l} -{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}} -\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox -to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} -{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox -to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} -{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox -to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} -{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox -to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}} -\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm -Q$}\hbox{\raise -0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} -{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise -0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} -{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise -0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}} -{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise -0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}} -\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm -T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} -{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox -to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} -{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox -to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} -{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox -to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}} -\def\bbbs{{\mathchoice -{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox -to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox -to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} -{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox -to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox -to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} -{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox -to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox -to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}} -{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox -to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox -to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}} -\def\bbbz{{\mathchoice {\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} -{\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} -{\hbox{$\mathsf\scriptstyle Z\kern-0.3em Z$}} -{\hbox{$\mathsf\scriptscriptstyle Z\kern-0.2em Z$}}}} - -\let\ts\, - -\setlength\leftmargini {17\p@} -\setlength\leftmargin {\leftmargini} -\setlength\leftmarginii {\leftmargini} -\setlength\leftmarginiii {\leftmargini} -\setlength\leftmarginiv {\leftmargini} -\setlength \labelsep {.5em} -\setlength \labelwidth{\leftmargini} -\addtolength\labelwidth{-\labelsep} - -\def\@listI{\leftmargin\leftmargini - \parsep 0\p@ \@plus1\p@ \@minus\p@ - \topsep 8\p@ \@plus2\p@ \@minus4\p@ - \itemsep0\p@} -\let\@listi\@listI -\@listi -\def\@listii {\leftmargin\leftmarginii - \labelwidth\leftmarginii - \advance\labelwidth-\labelsep - \topsep 0\p@ \@plus2\p@ \@minus\p@} -\def\@listiii{\leftmargin\leftmarginiii - \labelwidth\leftmarginiii - \advance\labelwidth-\labelsep - \topsep 0\p@ \@plus\p@\@minus\p@ - \parsep \z@ - \partopsep \p@ \@plus\z@ \@minus\p@} - -\renewcommand\labelitemi{\normalfont\bfseries --} -\renewcommand\labelitemii{$\m@th\bullet$} - -\setlength\arraycolsep{1.4\p@} -\setlength\tabcolsep{1.4\p@} - -\def\tableofcontents{\chapter*{\contentsname\@mkboth{{\contentsname}}% - {{\contentsname}}} - \def\authcount##1{\setcounter{auco}{##1}\setcounter{@auth}{1}} - \def\lastand{\ifnum\value{auco}=2\relax - \unskip{} \andname\ - \else - \unskip \lastandname\ - \fi}% - \def\and{\stepcounter{@auth}\relax - \ifnum\value{@auth}=\value{auco}% - \lastand - \else - \unskip, - \fi}% - \@starttoc{toc}\if@restonecol\twocolumn\fi} - -\def\l@part#1#2{\addpenalty{\@secpenalty}% - \addvspace{2em plus\p@}% % space above part line - \begingroup - \parindent \z@ - \rightskip \z@ plus 5em - \hrule\vskip5pt - \large % same size as for a contribution heading - \bfseries\boldmath % set line in boldface - \leavevmode % TeX command to enter horizontal mode. - #1\par - \vskip5pt - \hrule - \vskip1pt - \nobreak % Never break after part entry - \endgroup} - -\def\@dotsep{2} - -\def\hyperhrefextend{\ifx\hyper@anchor\@undefined\else -{chapter.\thechapter}\fi} - -\def\addnumcontentsmark#1#2#3{% -\addtocontents{#1}{\protect\contentsline{#2}{\protect\numberline - {\thechapter}#3}{\thepage}\hyperhrefextend}} -\def\addcontentsmark#1#2#3{% -\addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}\hyperhrefextend}} -\def\addcontentsmarkwop#1#2#3{% -\addtocontents{#1}{\protect\contentsline{#2}{#3}{0}\hyperhrefextend}} - -\def\@adcmk[#1]{\ifcase #1 \or -\def\@gtempa{\addnumcontentsmark}% - \or \def\@gtempa{\addcontentsmark}% - \or \def\@gtempa{\addcontentsmarkwop}% - \fi\@gtempa{toc}{chapter}} -\def\addtocmark{\@ifnextchar[{\@adcmk}{\@adcmk[3]}} - -\def\l@chapter#1#2{\addpenalty{-\@highpenalty} - \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup - \parindent \z@ \rightskip \@tocrmarg - \advance\rightskip by 0pt plus 2cm - \parfillskip -\rightskip \pretolerance=10000 - \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip - {\large\bfseries\boldmath#1}\ifx0#2\hfil\null - \else - \nobreak - \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern - \@dotsep mu$}\hfill - \nobreak\hbox to\@pnumwidth{\hss #2}% - \fi\par - \penalty\@highpenalty \endgroup} - -\def\l@title#1#2{\addpenalty{-\@highpenalty} - \addvspace{8pt plus 1pt} - \@tempdima \z@ - \begingroup - \parindent \z@ \rightskip \@tocrmarg - \advance\rightskip by 0pt plus 2cm - \parfillskip -\rightskip \pretolerance=10000 - \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip - #1\nobreak - \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern - \@dotsep mu$}\hfill - \nobreak\hbox to\@pnumwidth{\hss #2}\par - \penalty\@highpenalty \endgroup} - -\def\l@author#1#2{\addpenalty{\@highpenalty} - \@tempdima=\z@ %15\p@ - \begingroup - \parindent \z@ \rightskip \@tocrmarg - \advance\rightskip by 0pt plus 2cm - \pretolerance=10000 - \leavevmode \advance\leftskip\@tempdima %\hskip -\leftskip - \textit{#1}\par - \penalty\@highpenalty \endgroup} - -\setcounter{tocdepth}{0} -\newdimen\tocchpnum -\newdimen\tocsecnum -\newdimen\tocsectotal -\newdimen\tocsubsecnum -\newdimen\tocsubsectotal -\newdimen\tocsubsubsecnum -\newdimen\tocsubsubsectotal -\newdimen\tocparanum -\newdimen\tocparatotal -\newdimen\tocsubparanum -\tocchpnum=\z@ % no chapter numbers -\tocsecnum=15\p@ % section 88. plus 2.222pt -\tocsubsecnum=23\p@ % subsection 88.8 plus 2.222pt -\tocsubsubsecnum=27\p@ % subsubsection 88.8.8 plus 1.444pt -\tocparanum=35\p@ % paragraph 88.8.8.8 plus 1.666pt -\tocsubparanum=43\p@ % subparagraph 88.8.8.8.8 plus 1.888pt -\def\calctocindent{% -\tocsectotal=\tocchpnum -\advance\tocsectotal by\tocsecnum -\tocsubsectotal=\tocsectotal -\advance\tocsubsectotal by\tocsubsecnum -\tocsubsubsectotal=\tocsubsectotal -\advance\tocsubsubsectotal by\tocsubsubsecnum -\tocparatotal=\tocsubsubsectotal -\advance\tocparatotal by\tocparanum} -\calctocindent - -\def\l@section{\@dottedtocline{1}{\tocchpnum}{\tocsecnum}} -\def\l@subsection{\@dottedtocline{2}{\tocsectotal}{\tocsubsecnum}} -\def\l@subsubsection{\@dottedtocline{3}{\tocsubsectotal}{\tocsubsubsecnum}} -\def\l@paragraph{\@dottedtocline{4}{\tocsubsubsectotal}{\tocparanum}} -\def\l@subparagraph{\@dottedtocline{5}{\tocparatotal}{\tocsubparanum}} - -\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn - \fi\section*{\listfigurename\@mkboth{{\listfigurename}}{{\listfigurename}}} - \@starttoc{lof}\if@restonecol\twocolumn\fi} -\def\l@figure{\@dottedtocline{1}{0em}{1.5em}} - -\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn - \fi\section*{\listtablename\@mkboth{{\listtablename}}{{\listtablename}}} - \@starttoc{lot}\if@restonecol\twocolumn\fi} -\let\l@table\l@figure - -\renewcommand\listoffigures{% - \section*{\listfigurename - \@mkboth{\listfigurename}{\listfigurename}}% - \@starttoc{lof}% - } - -\renewcommand\listoftables{% - \section*{\listtablename - \@mkboth{\listtablename}{\listtablename}}% - \@starttoc{lot}% - } - -\ifx\oribibl\undefined -\ifx\citeauthoryear\undefined -\renewenvironment{thebibliography}[1] - {\section*{\refname} - \def\@biblabel##1{##1.} - \small - \list{\@biblabel{\@arabic\c@enumiv}}% - {\settowidth\labelwidth{\@biblabel{#1}}% - \leftmargin\labelwidth - \advance\leftmargin\labelsep - \if@openbib - \advance\leftmargin\bibindent - \itemindent -\bibindent - \listparindent \itemindent - \parsep \z@ - \fi - \usecounter{enumiv}% - \let\p@enumiv\@empty - \renewcommand\theenumiv{\@arabic\c@enumiv}}% - \if@openbib - \renewcommand\newblock{\par}% - \else - \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% - \fi - \sloppy\clubpenalty4000\widowpenalty4000% - \sfcode`\.=\@m} - {\def\@noitemerr - {\@latex@warning{Empty `thebibliography' environment}}% - \endlist} -\def\@lbibitem[#1]#2{\item[{[#1]}\hfill]\if@filesw - {\let\protect\noexpand\immediate - \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} -\newcount\@tempcntc -\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi - \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do - {\@ifundefined - {b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bfseries - ?}\@warning - {Citation `\@citeb' on page \thepage \space undefined}}% - {\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}% - \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne - \@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}% - \else - \advance\@tempcntb\@ne - \ifnum\@tempcntb=\@tempcntc - \else\advance\@tempcntb\m@ne\@citeo - \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}} -\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else - \@citea\def\@citea{,\,\hskip\z@skip}% - \ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else - {\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else - \def\@citea{--}\fi - \advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi} -\else -\renewenvironment{thebibliography}[1] - {\section*{\refname} - \small - \list{}% - {\settowidth\labelwidth{}% - \leftmargin\parindent - \itemindent=-\parindent - \labelsep=\z@ - \if@openbib - \advance\leftmargin\bibindent - \itemindent -\bibindent - \listparindent \itemindent - \parsep \z@ - \fi - \usecounter{enumiv}% - \let\p@enumiv\@empty - \renewcommand\theenumiv{}}% - \if@openbib - \renewcommand\newblock{\par}% - \else - \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% - \fi - \sloppy\clubpenalty4000\widowpenalty4000% - \sfcode`\.=\@m} - {\def\@noitemerr - {\@latex@warning{Empty `thebibliography' environment}}% - \endlist} - \def\@cite#1{#1}% - \def\@lbibitem[#1]#2{\item[]\if@filesw - {\def\protect##1{\string ##1\space}\immediate - \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} - \fi -\else -\@cons\@openbib@code{\noexpand\small} -\fi - -\def\idxquad{\hskip 10\p@}% space that divides entry from number - -\def\@idxitem{\par\hangindent 10\p@} - -\def\subitem{\par\setbox0=\hbox{--\enspace}% second order - \noindent\hangindent\wd0\box0}% index entry - -\def\subsubitem{\par\setbox0=\hbox{--\,--\enspace}% third - \noindent\hangindent\wd0\box0}% order index entry - -\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax} - -\renewenvironment{theindex} - {\@mkboth{\indexname}{\indexname}% - \thispagestyle{empty}\parindent\z@ - \parskip\z@ \@plus .3\p@\relax - \let\item\par - \def\,{\relax\ifmmode\mskip\thinmuskip - \else\hskip0.2em\ignorespaces\fi}% - \normalfont\small - \begin{multicols}{2}[\@makeschapterhead{\indexname}]% - } - {\end{multicols}} - -\renewcommand\footnoterule{% - \kern-3\p@ - \hrule\@width 2truecm - \kern2.6\p@} - \newdimen\fnindent - \fnindent1em -\long\def\@makefntext#1{% - \parindent \fnindent% - \leftskip \fnindent% - \noindent - \llap{\hb@xt@1em{\hss\@makefnmark\ }}\ignorespaces#1} - -\long\def\@makecaption#1#2{% - \vskip\abovecaptionskip - \sbox\@tempboxa{{\bfseries #1.} #2}% - \ifdim \wd\@tempboxa >\hsize - {\bfseries #1.} #2\par - \else - \global \@minipagefalse - \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% - \fi - \vskip\belowcaptionskip} - -\def\fps@figure{htbp} -\def\fnum@figure{\figurename\thinspace\thefigure} -\def \@floatboxreset {% - \reset@font - \small - \@setnobreak - \@setminipage -} -\def\fps@table{htbp} -\def\fnum@table{\tablename~\thetable} -\renewenvironment{table} - {\setlength\abovecaptionskip{0\p@}% - \setlength\belowcaptionskip{10\p@}% - \@float{table}} - {\end@float} -\renewenvironment{table*} - {\setlength\abovecaptionskip{0\p@}% - \setlength\belowcaptionskip{10\p@}% - \@dblfloat{table}} - {\end@dblfloat} - -\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname - ext@#1\endcsname}{#1}{\protect\numberline{\csname - the#1\endcsname}{\ignorespaces #2}}\begingroup - \@parboxrestore - \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par - \endgroup} - -% LaTeX does not provide a command to enter the authors institute -% addresses. The \institute command is defined here. - -\newcounter{@inst} -\newcounter{@auth} -\newcounter{auco} -\newdimen\instindent -\newbox\authrun -\newtoks\authorrunning -\newtoks\tocauthor -\newbox\titrun -\newtoks\titlerunning -\newtoks\toctitle - -\def\clearheadinfo{\gdef\@author{No Author Given}% - \gdef\@title{No Title Given}% - \gdef\@subtitle{}% - \gdef\@institute{No Institute Given}% - \gdef\@thanks{}% - \global\titlerunning={}\global\authorrunning={}% - \global\toctitle={}\global\tocauthor={}} - -\def\institute#1{\gdef\@institute{#1}} - -\def\institutename{\par - \begingroup - \parskip=\z@ - \parindent=\z@ - \setcounter{@inst}{1}% - \def\and{\par\stepcounter{@inst}% - \noindent$^{\the@inst}$\enspace\ignorespaces}% - \setbox0=\vbox{\def\thanks##1{}\@institute}% - \ifnum\c@@inst=1\relax - \gdef\fnnstart{0}% - \else - \xdef\fnnstart{\c@@inst}% - \setcounter{@inst}{1}% - \noindent$^{\the@inst}$\enspace - \fi - \ignorespaces - \@institute\par - \endgroup} - -\def\@fnsymbol#1{\ensuremath{\ifcase#1\or\star\or{\star\star}\or - {\star\star\star}\or \dagger\or \ddagger\or - \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger - \or \ddagger\ddagger \else\@ctrerr\fi}} - -\def\inst#1{\unskip$^{#1}$} -\def\fnmsep{\unskip$^,$} -\def\email#1{{\tt#1}} -\AtBeginDocument{\@ifundefined{url}{\def\url#1{#1}}{}% -\@ifpackageloaded{babel}{% -\@ifundefined{extrasenglish}{}{\addto\extrasenglish{\switcht@albion}}% -\@ifundefined{extrasfrenchb}{}{\addto\extrasfrenchb{\switcht@francais}}% -\@ifundefined{extrasgerman}{}{\addto\extrasgerman{\switcht@deutsch}}% -}{\switcht@@therlang}% -} -\def\homedir{\~{ }} - -\def\subtitle#1{\gdef\@subtitle{#1}} -\clearheadinfo - -\renewcommand\maketitle{\newpage - \refstepcounter{chapter}% - \stepcounter{section}% - \setcounter{section}{0}% - \setcounter{subsection}{0}% - \setcounter{figure}{0} - \setcounter{table}{0} - \setcounter{equation}{0} - \setcounter{footnote}{0}% - \begingroup - \parindent=\z@ - \renewcommand\thefootnote{\@fnsymbol\c@footnote}% - \if@twocolumn - \ifnum \col@number=\@ne - \@maketitle - \else - \twocolumn[\@maketitle]% - \fi - \else - \newpage - \global\@topnum\z@ % Prevents figures from going at top of page. - \@maketitle - \fi - \thispagestyle{empty}\@thanks -% - \def\\{\unskip\ \ignorespaces}\def\inst##1{\unskip{}}% - \def\thanks##1{\unskip{}}\def\fnmsep{\unskip}% - \instindent=\hsize - \advance\instindent by-\headlineindent - \if!\the\toctitle!\addcontentsline{toc}{title}{\@title}\else - \addcontentsline{toc}{title}{\the\toctitle}\fi - \if@runhead - \if!\the\titlerunning!\else - \edef\@title{\the\titlerunning}% - \fi - \global\setbox\titrun=\hbox{\small\rm\unboldmath\ignorespaces\@title}% - \ifdim\wd\titrun>\instindent - \typeout{Title too long for running head. Please supply}% - \typeout{a shorter form with \string\titlerunning\space prior to - \string\maketitle}% - \global\setbox\titrun=\hbox{\small\rm - Title Suppressed Due to Excessive Length}% - \fi - \xdef\@title{\copy\titrun}% - \fi -% - \if!\the\tocauthor!\relax - {\def\and{\noexpand\protect\noexpand\and}% - \protected@xdef\toc@uthor{\@author}}% - \else - \def\\{\noexpand\protect\noexpand\newline}% - \protected@xdef\scratch{\the\tocauthor}% - \protected@xdef\toc@uthor{\scratch}% - \fi - \addcontentsline{toc}{author}{\toc@uthor}% - \if@runhead - \if!\the\authorrunning! - \value{@inst}=\value{@auth}% - \setcounter{@auth}{1}% - \else - \edef\@author{\the\authorrunning}% - \fi - \global\setbox\authrun=\hbox{\small\unboldmath\@author\unskip}% - \ifdim\wd\authrun>\instindent - \typeout{Names of authors too long for running head. Please supply}% - \typeout{a shorter form with \string\authorrunning\space prior to - \string\maketitle}% - \global\setbox\authrun=\hbox{\small\rm - Authors Suppressed Due to Excessive Length}% - \fi - \xdef\@author{\copy\authrun}% - \markboth{\@author}{\@title}% - \fi - \endgroup - \setcounter{footnote}{\fnnstart}% - \clearheadinfo} -% -\def\@maketitle{\newpage - \markboth{}{}% - \def\lastand{\ifnum\value{@inst}=2\relax - \unskip{} \andname\ - \else - \unskip \lastandname\ - \fi}% - \def\and{\stepcounter{@auth}\relax - \ifnum\value{@auth}=\value{@inst}% - \lastand - \else - \unskip, - \fi}% - \begin{center}% - \let\newline\\ - {\Large \bfseries\boldmath - \pretolerance=10000 - \@title \par}\vskip .8cm -\if!\@subtitle!\else {\large \bfseries\boldmath - \vskip -.65cm - \pretolerance=10000 - \@subtitle \par}\vskip .8cm\fi - \setbox0=\vbox{\setcounter{@auth}{1}\def\and{\stepcounter{@auth}}% - \def\thanks##1{}\@author}% - \global\value{@inst}=\value{@auth}% - \global\value{auco}=\value{@auth}% - \setcounter{@auth}{1}% -{\lineskip .5em -\noindent\ignorespaces -\@author\vskip.35cm} - {\small\institutename} - \end{center}% - } - -% definition of the "\spnewtheorem" command. -% -% Usage: -% -% \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font} -% or \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font} -% or \spnewtheorem*{env_nam}{caption}{cap_font}{body_font} -% -% New is "cap_font" and "body_font". It stands for -% fontdefinition of the caption and the text itself. -% -% "\spnewtheorem*" gives a theorem without number. -% -% A defined spnewthoerem environment is used as described -% by Lamport. -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\def\@thmcountersep{} -\def\@thmcounterend{.} - -\def\spnewtheorem{\@ifstar{\@sthm}{\@Sthm}} - -% definition of \spnewtheorem with number - -\def\@spnthm#1#2{% - \@ifnextchar[{\@spxnthm{#1}{#2}}{\@spynthm{#1}{#2}}} -\def\@Sthm#1{\@ifnextchar[{\@spothm{#1}}{\@spnthm{#1}}} - -\def\@spxnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname - {\@definecounter{#1}\@addtoreset{#1}{#3}% - \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand - \csname the#3\endcsname \noexpand\@thmcountersep \@thmcounter{#1}}% - \expandafter\xdef\csname #1name\endcsname{#2}% - \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% - \global\@namedef{end#1}{\@endtheorem}}} - -\def\@spynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname - {\@definecounter{#1}% - \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}% - \expandafter\xdef\csname #1name\endcsname{#2}% - \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#3}{#4}}% - \global\@namedef{end#1}{\@endtheorem}}} - -\def\@spothm#1[#2]#3#4#5{% - \@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}% - {\expandafter\@ifdefinable\csname #1\endcsname - {\global\@namedef{the#1}{\@nameuse{the#2}}% - \expandafter\xdef\csname #1name\endcsname{#3}% - \global\@namedef{#1}{\@spthm{#2}{\csname #1name\endcsname}{#4}{#5}}% - \global\@namedef{end#1}{\@endtheorem}}}} - -\def\@spthm#1#2#3#4{\topsep 7\p@ \@plus2\p@ \@minus4\p@ -\refstepcounter{#1}% -\@ifnextchar[{\@spythm{#1}{#2}{#3}{#4}}{\@spxthm{#1}{#2}{#3}{#4}}} - -\def\@spxthm#1#2#3#4{\@spbegintheorem{#2}{\csname the#1\endcsname}{#3}{#4}% - \ignorespaces} - -\def\@spythm#1#2#3#4[#5]{\@spopargbegintheorem{#2}{\csname - the#1\endcsname}{#5}{#3}{#4}\ignorespaces} - -\def\@spbegintheorem#1#2#3#4{\trivlist - \item[\hskip\labelsep{#3#1\ #2\@thmcounterend}]#4} - -\def\@spopargbegintheorem#1#2#3#4#5{\trivlist - \item[\hskip\labelsep{#4#1\ #2}]{#4(#3)\@thmcounterend\ }#5} - -% definition of \spnewtheorem* without number - -\def\@sthm#1#2{\@Ynthm{#1}{#2}} - -\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname - {\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}% - \expandafter\xdef\csname #1name\endcsname{#2}% - \global\@namedef{end#1}{\@endtheorem}}} - -\def\@Thm#1#2#3{\topsep 7\p@ \@plus2\p@ \@minus4\p@ -\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}} - -\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces} - -\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1} - {#4}{#2}{#3}\ignorespaces} - -\def\@Begintheorem#1#2#3{#3\trivlist - \item[\hskip\labelsep{#2#1\@thmcounterend}]} - -\def\@Opargbegintheorem#1#2#3#4{#4\trivlist - \item[\hskip\labelsep{#3#1}]{#3(#2)\@thmcounterend\ }} - -\if@envcntsect - \def\@thmcountersep{.} - \spnewtheorem{theorem}{Theorem}[section]{\bfseries}{\itshape} -\else - \spnewtheorem{theorem}{Theorem}{\bfseries}{\itshape} - \if@envcntreset - \@addtoreset{theorem}{section} - \else - \@addtoreset{theorem}{chapter} - \fi -\fi - -%definition of divers theorem environments -\spnewtheorem*{claim}{Claim}{\itshape}{\rmfamily} -\spnewtheorem*{proof}{Proof}{\itshape}{\rmfamily} -\if@envcntsame % alle Umgebungen wie Theorem. - \def\spn@wtheorem#1#2#3#4{\@spothm{#1}[theorem]{#2}{#3}{#4}} -\else % alle Umgebungen mit eigenem Zaehler - \if@envcntsect % mit section numeriert - \def\spn@wtheorem#1#2#3#4{\@spxnthm{#1}{#2}[section]{#3}{#4}} - \else % nicht mit section numeriert - \if@envcntreset - \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} - \@addtoreset{#1}{section}} - \else - \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} - \@addtoreset{#1}{chapter}}% - \fi - \fi -\fi -\spn@wtheorem{case}{Case}{\itshape}{\rmfamily} -\spn@wtheorem{conjecture}{Conjecture}{\itshape}{\rmfamily} -\spn@wtheorem{corollary}{Corollary}{\bfseries}{\itshape} -\spn@wtheorem{definition}{Definition}{\bfseries}{\itshape} -\spn@wtheorem{example}{Example}{\itshape}{\rmfamily} -\spn@wtheorem{exercise}{Exercise}{\itshape}{\rmfamily} -\spn@wtheorem{lemma}{Lemma}{\bfseries}{\itshape} -\spn@wtheorem{note}{Note}{\itshape}{\rmfamily} -\spn@wtheorem{problem}{Problem}{\itshape}{\rmfamily} -\spn@wtheorem{property}{Property}{\itshape}{\rmfamily} -\spn@wtheorem{proposition}{Proposition}{\bfseries}{\itshape} -\spn@wtheorem{question}{Question}{\itshape}{\rmfamily} -\spn@wtheorem{solution}{Solution}{\itshape}{\rmfamily} -\spn@wtheorem{remark}{Remark}{\itshape}{\rmfamily} - -\def\@takefromreset#1#2{% - \def\@tempa{#1}% - \let\@tempd\@elt - \def\@elt##1{% - \def\@tempb{##1}% - \ifx\@tempa\@tempb\else - \@addtoreset{##1}{#2}% - \fi}% - \expandafter\expandafter\let\expandafter\@tempc\csname cl@#2\endcsname - \expandafter\def\csname cl@#2\endcsname{}% - \@tempc - \let\@elt\@tempd} - -\def\theopargself{\def\@spopargbegintheorem##1##2##3##4##5{\trivlist - \item[\hskip\labelsep{##4##1\ ##2}]{##4##3\@thmcounterend\ }##5} - \def\@Opargbegintheorem##1##2##3##4{##4\trivlist - \item[\hskip\labelsep{##3##1}]{##3##2\@thmcounterend\ }} - } - -\renewenvironment{abstract}{% - \list{}{\advance\topsep by0.35cm\relax\small - \leftmargin=1cm - \labelwidth=\z@ - \listparindent=\z@ - \itemindent\listparindent - \rightmargin\leftmargin}\item[\hskip\labelsep - \bfseries\abstractname]} - {\endlist} - -\newdimen\headlineindent % dimension for space between -\headlineindent=1.166cm % number and text of headings. - -\def\ps@headings{\let\@mkboth\@gobbletwo - \let\@oddfoot\@empty\let\@evenfoot\@empty - \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% - \leftmark\hfil} - \def\@oddhead{\normalfont\small\hfil\rightmark\hspace{\headlineindent}% - \llap{\thepage}} - \def\chaptermark##1{}% - \def\sectionmark##1{}% - \def\subsectionmark##1{}} - -\def\ps@titlepage{\let\@mkboth\@gobbletwo - \let\@oddfoot\@empty\let\@evenfoot\@empty - \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% - \hfil} - \def\@oddhead{\normalfont\small\hfil\hspace{\headlineindent}% - \llap{\thepage}} - \def\chaptermark##1{}% - \def\sectionmark##1{}% - \def\subsectionmark##1{}} - -\if@runhead\ps@headings\else -\ps@empty\fi - -\setlength\arraycolsep{1.4\p@} -\setlength\tabcolsep{1.4\p@} - -\endinput -%end of file llncs.cls diff --git a/helm/mathql/doc/mathql.tex b/helm/mathql/doc/mathql.tex deleted file mode 100644 index 73cd44d2e..000000000 --- a/helm/mathql/doc/mathql.tex +++ /dev/null @@ -1,40 +0,0 @@ -\documentclass{llncs} - -\usepackage{mathql_macros} -\newcommand\xcomment[1]{} - -\title{MathQL-1 Version 4\\Reference Documentation} -\author{Ferruccio Guidi% -\thanks{This work has been partially supported by -MoWGLI (European FET Project IST-2001-33562).} -} - -\institute{Department of Computer Science\\ -Mura Anteo Zamboni 7, 40127 Bologna, ITALY.\\ -\email{fguidi@cs.unibo.it}} - -\date{ } - -\begin{document} - -\maketitle - -\begin{abstract} -\end{abstract} - -\addtocounter{tocdepth}{2} - -\section*{\contentsname}{ -\catcode`@=11 -\def\l@title#1#2{} -\def\l@author#1#2{} -\@starttoc{toc} -\catcode`@=12} - -\input{mathql_overview} -\input{mathql_introduction} -\input{mathql_operational} -\input{mathql_tests} -\input{mathql_bib} - -\end{document} diff --git a/helm/mathql/doc/mathql_bib.tex b/helm/mathql/doc/mathql_bib.tex deleted file mode 100644 index be28be8ff..000000000 --- a/helm/mathql/doc/mathql_bib.tex +++ /dev/null @@ -1,89 +0,0 @@ -\begin{thebibliography}{99} - -\bibitem {APSCGS03} -A. Asperti, L. Padovani, C. Sacerdoti Coen, F.Guidi, I. Schena: -\emph{Mathematical Knowledge Management in HELM}. -In Annals of Mathematics and Artificial Intelligence 38(1), -Kluwer Academic Publishers (May 2003), pp. 27-46. - -\bibitem {Gui03} -F. Guidi: -\emph{Searching and Retrieving in Content-based Repositories of Formal -Mathematical Knowledge}. -Ph.D. Thesis in Computer Science, University of Bologna, March 2003. Technical -report UBLCS 2003-06. - -\bibitem {GSC03} -F. Guidi, C. Sacerdoti Coen: -\emph{Querying Distributed Digital Libraries of Mathematics}. -In Proc. of the 11th Symposium on the Integration of Symbolic Computation and -Mechanized Reasoning (Calculemus 2003). Rome, Italy, -September 2003. pages 17-30, Aracne. 2003. - -\bibitem {GS03} -F. Guidi, I. Schena: -\emph{A Query Language for a Metadata Framework about Mathematical Resources}. -In Proc. of 2nd International Conference on Mathematical Knowledge -Management (MKM 2003). -Bertinoro, Italy, February 2003. -LNCS 2594, pp. 105-118, Springer. 2003. - -\bibitem {Lan98} -C. Laneve: -\emph{La descrizione operazionale dei linguaggi di programmazione. \\ -Un'introduzione} -FrancoAngeli, 1998. - -\bibitem {Lor02} -D. Lordi: -\emph{Sperimentazione e Sviluppo di Strumenti per la gestione di metadati}. \\ -Master Thesis in Computer Science, University of Bologna, 2002. - -\bibitem {RDF} -\emph{Resource Description Framework (RDF) Model and Syntax Specification}. -W3C Recommendation. February 22, 1999. \\ -\CURI{http://www.w3.org/TR/1999/REC-rdfsyntax-19990222/}. - -\bibitem {RDFS} -\emph{RDF Vocabulary Description Language 1.0: RDF Schema}. -W3C Working Draft. January 23, 2003 -\CURI{http://www.w3.org/TR/rdf-schema/}. - -\bibitem {Sam00} -G. Sambin: \emph{Formal topology and domains}. -Electronic Notes in Theoretical Computer Science, (35). 2000. - -\bibitem {Sch02} -I. Schena: -\emph{Towards a Semantic Web for Formal Mathematics}. -Ph.D. dissertation. University of Bologna, 2002. Advisor: A. Asperti. - -\bibitem {Unicode} -Unicode Consortium: -\emph{The Unicode Standard, Version 3.2}. March 2002. \\ -\CURI{http://www.unicode.org/unicode/standard/standard.html}. - -\bibitem {URI} -\emph{Uniform Resource Identifiers (URI): Generic Syntax (RFC 2396)}. -August 1998. \\ -\CURI{http://www.ietf.org/rfc/rfc2396.txt}. - -\bibitem {W3Ca} -\emph{Character Model for the World Wide Web 1.0}, -W3C Working Draft. April 30, 2002. -\CURI{http://www.w3.org/TR/charmod/}. - -\bibitem {Win93} -G. Winskel: -\emph{The formal semantics of programming languages: an introduction}. -MIT Press Series in the Foundations of Computing. London: MIT Press, 1993. - -\bibitem {XML} -\emph{Extensible Markup Language (XML) 1.0 (Second Edition)}. -W3C Recommendation. October 6, 2000. \CURI{http://www.w3.org/REC-xml}. - -\bibitem {XQuery} -\emph{XQuery 1.0: An XML Query Language}. -W3C Working Draft November 15, 2002. \CURI{http://www.w3.org/TR/xquery/}. - -\end{thebibliography} diff --git a/helm/mathql/doc/mathql_introduction.tex b/helm/mathql/doc/mathql_introduction.tex deleted file mode 100644 index 73086dba7..000000000 --- a/helm/mathql/doc/mathql_introduction.tex +++ /dev/null @@ -1,24 +0,0 @@ -\section{Introduction} - -This paper presents {\MathQL} version 4 which is the latest version of the -language, fully developed by the Author. -For a description of the previous versions of {\MathQL} see: \cite{Gui03} -(version 3), \cite{GS03} (version 2), \cite{Lor02} (version 1). -The main novelties of this version are the elimination of some cast operators -(producing a substantial simplification in the query structure and semantics), -a clear distinction between the core language and the auxiliary functions of -the basic library, a support for query generating functions, the possibility -of extending the language adding new libraries of functions and a more uniform -textual syntax. -{\MathQL}.4 incorporates the features of {\MathQL}.3 not documented on paper% -\footnote -{See the ``what's new'' section of {\MathQL} Web Site: -\CURI{helm.cs.unibo.it/mathql}.} -and adds some new features improving {\MathQL} capabilities to post-process -the query results. - -\input{mathql_introduction_avsets} -\input{mathql_introduction_property} -\input{mathql_introduction_core} -\input{mathql_introduction_basic} -\input{mathql_introduction_textual} diff --git a/helm/mathql/doc/mathql_introduction_avsets.tex b/helm/mathql/doc/mathql_introduction_avsets.tex deleted file mode 100644 index 20e826403..000000000 --- a/helm/mathql/doc/mathql_introduction_avsets.tex +++ /dev/null @@ -1,296 +0,0 @@ -\subsection {Sets of attributed values.} \label{AVSets} - -The data representation model used by {\MathQL} relies on the notion of -\emph{set of attributed values} ({\av} set for short) that is, in practice, -the only data type available in {\MathQL}.4. In this sense {\MathQL}.4 is a -statically untyped language.% -\footnote -{A type system that fits {\MathQL} as an {\RDF}-oriented query language, -should be driven from the {\RDFS} class system. This may be a future -improvement.} -Each {\av} in an {\av} set consists of a string% -\footnote{When we say \emph{string}, we mean a finite sequence of characters.} -(that we call the \emph{head string} or \emph{value}) and a (possibly empty) -multiset of named attributes whose content is a set of strings. -Attribute names are made of a (possibly empty) list of string components, so -they can be hierarchically structured. -Moreover the attributes of a value are partitioned into a set of \emph{groups} -({\ie} subsets) to improve its structure. - -In the above description a \emph{set} is an \emph{unordered} finite -sequence \emph{without} repetitions whereas a \emph{multiset} is an -\emph{unordered} finite sequence \emph{with} repetitions. - -In the present context repetitions are defined as follows: -two {\av}'s are repeated if they share the same head string without any -condition on their attributes, two groups are repeated of they contain the -same attributes (equal both in name and content), two attributes of a group -are repeated if they share the same name without any condition on their -content, and two strings are always compared in a case-sensitive manner.% -\footnote -{The Author's experience with {\MathQL} seems to show that the above -definition of an {\av} set is just the right one among the many alternatives -that were tried.} - -As we said, {\MathQL}.4 uses {\av} sets to represent many kinds of -information: - -\begin{enumerate} - -\item -A pool of {\RDF} triples having a common subject $r$, which in general is a -{\URI} reference \cite{URI}% -\footnote -{A {\URI} \emph {reference} is a {\URI} with an optional fragment identifier.}, -is encoded in a single {\av} placing $r$ in the head string. -The predicates of the triples are encoded as attribute names and their objects -are placed in the attributes' contents. -These contents are structured as multiple strings with the aim of holding the -objects of repeated predicates. -Moreover structured attribute names can encode various components of -structured properties preserving their semantics. - -\begin{figure} -\begin{footnotesize} \begin{verbatim} -The RDF triples: - ("protocol", "dc:creator", "Sandro Hawke") - ("protocol", "dc:creator", "Eric Prud'hommeaux") - ("protocol", "dc:date", "2002-01-08") - -The corresponding attributed value: - "protocol" attr {/"dc:creator" = {"Sandro Hawke", "Eric Prud'hommeaux"}; - /"dc:date" = "2002-01-08"} -\end{verbatim} \end{footnotesize} -\vspace{-1pc} -\caption{The representation of a pool of {\RDF} triples} \label{AVOne} -\end{figure} - -\figref{AVOne} shows how a set of triples can be coded in an {\av}. -Note that the word \TT{attr} separates the head string from its attributes, -braces enclose an attribute group in which attributes are separated by -semicolons, and an equal sign separates an attribute name from its contents. - -In this setting the grouping feature can be used to separate semantically -different classes of properties associated to a resource (as for instance -Dublin Core metadata, Euler metadata and user-defined metadata). - -\item -A pool of arbitrarily chosen {\RDF} triples is encoded in an {\av} set -placing in each {\av} the subset of triples sharing the same head string. - -Note that the use of {\av} sets to build query results allows {\MathQL} queries -to return sets of {\RDF} triples instead of mere sets of resources, in the -spirit of what is currently done by other {\RDF}-oriented query languages. - -If the {\av}'s of an {\av} set share the same attribute names and grouping -structure, this set can be represented as a table in which each row encodes -an {\av} and each column is associated to an attribute (except the first one -which holds the head strings). -\figref{Table} shows an {\av} set describing the properties of two resources -``A'' and ``B'' giving its table representation, in which the columns -corresponding to attributes in the same group are clustered between -double-line delimiters.% -\footnote{A table with grouped labelled columns like the one above resembles a -set of relational database tables.} - -\begin{figure} -\begin{footnotesize} \begin{verbatim} -"A" attr {/"major" = "1"; /"minor" = "2"}, - {/"first" = "2002-01-01"; /"modified" = "2002-03-01"}; -"B" attr {/"major" = "1"; /"minor" = "7"}, - {/"first" = "2002-02-01"; /"modified" = "2002-04-01"} -\end{verbatim} -\begin{center} \begin{tabular}{|c||c|c||c|c||} -\hline & \textbf{``major''} & \textbf{``minor''} & \textbf{``first''} & \textbf{``modified''} \\ -\hline ``A'' & ``1'' & ``2'' & ``2002-01-01'' & ``2002-03-01'' \\ -\hline ``B'' & ``1'' & ``7'' & ``2002-02-01'' & ``2002-04-01'' \\ -\hline -\end{tabular} \end{center} \end{footnotesize} -\caption{A set of attributed values displayed as a table} \label{Table} -\end{figure} - -The above example gives a spatial idea of the geometry of an {\av} set ({\ie} -a query result) which fits in 4 dimensions: namely we can extend independently -the set of the head strings (dimension 1), the attributes in each group -(dimension 2), the groups in each {\av} (dimension 3) and the contents of each -attribute (dimension 4). -The metadata defined in the table of \figref{Table} will be used in subsequent -examples. -For this purpose assume that ``first'' and ``modified'' are the components -of a structured property ``date'' available for the resources ``A'' and ``B''. - -\item -The value of an {\RDF} property is encoded in an {\av} distinguishing three -cases: - -\begin{itemize} - -\item -If the property is unstructured, its value is placed in the {\av} head -string and no attributes are defined. - -\item -If the property is structured and its value has a main component% -\footnote{Which is set by the \emph{rdf:value} property or defined by a -specific application.}, -the content of this component is placed in the {\av} head string and the -other components are stored in the {\av} attributes as in the case 1. - -\item -For the value of a structured property without a main component, the head -string is empty and the components are stored in the attributes. - -\end{itemize} - -\begin{figure} -\begin{footnotesize} \begin{verbatim} -First example, one instance: - "" attr {/"major" = "1"; /"minor" = "2"} no main component - "1" attr {/"minor" = "2"} main component is "major" - "2" attr {/"major" = "1"} main component is "minor" - -Second example: two separate instances: - "" attr {/"major" = "1"; /"minor" = "2"}, - {/"major" = "1"; /"minor" = "7"} no main component - "1" attr {/"minor" = "2"}, {/"minor" = "7"} main component is "major" - -Third example: two mixed instances: - "" attr {/"major" = "3", "6"; /"minor" = {"4", "9"}} no main component -\end{verbatim} \end{footnotesize} -\vspace{-1pc} -\caption{The representation of the structured value of a property} -\label{AVTwo} -\end{figure} - -\figref{AVTwo} (first example) shows three possible ways of representing in -{\av}'s an instance of a structured property ``id'' whose value has two -fields ({\ie} properties) ``major'' and ``minor''. -In this instance, ``major'' is set to ``1'' and ``minor'' is set to ``2''. -The representations depend on which component of ``id'' is chosen as the -main component (none, ``major'' or ``minor'' respectively). -Several structured property values sharing a common main component can be -encodes in a single {\av} exploiting the grouping facility: in this case the -attributes of every instance are enclosed in separate groups. -\figref{AVTwo} (second example) shows the representations of two instances of -``id'': the former and a new one for which ``major'' is ``1'' and ``minor'' is -``7''. - -Note that if the attributes of the two groups are encoded in a single group, -the notion of which components belong to the same property value can not be -recovered in the general case because the values of an attribute form a set -and thus are unordered. -As an example think of two instances of ``id'' encoded as in \figref{AVTwo} -(third example). - -\item -A natural number is stored, using its decimal representation, in the head -string of a single {\av} with no attributes. - -\item -The boolean value \emph{false} is stored as an empty {\av} set, whereas -an inhabited {\av} set may be interpreted as the boolean value \emph{true}. -The default representation of \emph{true} is a single {\av} with an empty -head string and no attributes. - -\end{enumerate} - -{\MathQL} defines five core binary operations on {\av} sets: two unions, two -intersections and a difference. The first four are defined in terms of an -operation, that we call \emph{addition}, involving two {\av}'s with the same -head string. -The result is an {\av} with the same head string of the operands but there are -two ways to compose the attribute groups: - -\begin{itemize} - -\item -with the \emph{set-theoretic} addition, the set of attribute groups in the -resulting {\av} is the set-theoretic union of the sets of attribute groups in -the operands; - -\item -with the \emph{distributive} addition, the set of attribute groups in the -resulting {\av} is the ``Cartesian product'' of the sets of attribute groups -in the two operands. -Here an element of the ``Cartesian product'' is not a pair of groups but it is -the set-theoretic union of these groups where the contents of homonymous -attributes are clustered together using set-theoretic unions. - -\end{itemize} - -\figref{Addition} shows an example of the two kinds of addition. - -\begin{figure} -\begin{footnotesize} \begin{verbatim} -Attributed values used as operands for the addition: - "1" attr {/"A" = "a"}, {/"B" = "b1"} - "1" attr {/"A" = "a"}, {/"B" = "b2"} - -Set-theoretic addition: -" 1" attr {/"A" = "a"}, {/"B" = "b1"}, {/"B" = "b2"} - -Distributive addition: - "1" attr {/"A" = "a"}, {/"A" = "a"; /"B" = "b2"}, - {/"B" = "b1"; /"A" = "a"}, {/"B" = {"b1", "b2"}} -\end{verbatim} \end{footnotesize} -\vspace{-1pc} -\caption{The addition of attributed values} -\label{Addition} -\end{figure} - -Now we can discuss the five operations between {\av} sets: - -\begin{itemize} - -\item -The two unions corresponds to the set-theoretic union of their operand where -the {\av}'s sharing the head string are added either set-theoretically or -distributively as explained above (thus we have a set-theoretic union and a -distributive union in the two cases). In this context the empty {\av} set -plays the role of the neutral element. -These operations play a central role {\MathQL} architecture and allow to -compose the attributes of the operands preserving their group structure. - -\item -The two intersections are the dual of the above unions: they contain the -{\av}'s whose head string appears in each argument where the {\av}'s sharing -the head string are added either set-theoretically or distributively as before. - -The distributive intersection has the double benefit of filtering the -common values of the given {\av} sets, and of merging their attribute groups -in every possible way. This feature enables the possibility of performing -additional filtering operations checking the content of the merged groups. - -\item -The difference of two {\av} sets contains the {\av}'s of the first -argument whose head string does not appear in the second argument. - -\end{itemize} - -\figref{Binary} shows how the above operations work in a simple example. - -\begin{figure} -\begin{footnotesize} \begin{verbatim} -Sets of attributed values used as operands for the operations: - "1" attr {/"A" = "a"}; "2" attr {/"B" = "b1"} - "2" attr {/"B" = "b2"} - -Set-theoretic union: - "1" attr {/"A" = "a"}; "2" attr {/"B" = "b1"}, {/"B" = "b2"} - -Distributive union: - "1" attr {/"A" = "a"}; "2" attr {/"B" = {"b1", "b2"}} - -Set-theoretic intersection: - "2" attr {/"B" = "b1"}, {/"B" = "b2"} - -Distributive intersection: - "2" attr {/"B" = {"b1", "b2"}} - -Difference: - "1" attr {/"A" = "a"} -\end{verbatim} \end{footnotesize} -\vspace{-1pc} -\caption{The binary operations on sets of attributed values} -\label{Binary} -\end{figure} diff --git a/helm/mathql/doc/mathql_introduction_basic.tex b/helm/mathql/doc/mathql_introduction_basic.tex deleted file mode 100644 index ccf13f280..000000000 --- a/helm/mathql/doc/mathql_introduction_basic.tex +++ /dev/null @@ -1,136 +0,0 @@ -\subsection{The basic library} \label{Basic} - -The present paper leaves us too little space to present a complete -description of {\MathQL}.4 basic library, so we only give a glance to the -features it provides. - -For the user convenience {\MathQL}.4 includes a syntax extension for all the -basic library functions, in order to hide the actual function invocation. - -Here are some of the provided constructions: - -\begin{itemize} - -\item -\textbf{Aliases for commonly used constant {\av} sets.} -\EM{empty}, \EM{false}, \EM{true}. - -\item -\textbf{Conditional operator.} -\TT{if} \EM{av-set} \TT{then} \EM{av-set} \TT{else} \EM{av-set}. -Tests the first {\av} set for inhabitance and evaluates one of the other {\av} -sets accordingly. - -\item -\textbf{Standard \emph{select} clause.} -\TT{select @}\EM{variable} \TT{from} \EM{av-set-1} \TT{where} \EM{av-set-2}. -It is: -\TT{for @}\EM{variable} \TT{in} \EM{av-set-1} \TT{sup} -\TT{if} \EM{av-set-2} \TT{then @}\EM{variable} \TT{else empty}. - -\item -\textbf{Set refinement}. The operator -\TT{keep} \EM{optional-flag} \EM{name-list} \TT{in} \EM{av-set} -removes from its argument every attribute whose name is included (or is not, -according to the \EM{flag}) in the given \EM{name-list}. -If the \EM{flag} is not present, the \EM{name-list} specifies the attributes -to keep, whereas if the \EM{flag} is \TT{allbut}, the \EM{name-list} specifies -the attributes to remove. -Removing unwanted information from an {\av} set is useful in two cases: it -lowers the complexity of intermediate query results increasing the performance -of subsequent operations and it cleans the final query results making them -easier to manage for the application that submits the query.% -\footnote -{Interpreting {\av} sets as relational database tables, this functionality -allows to select the columns a table is made of, as with the {\SQL} -\emph{select} operator.} - -\item -\textbf{projections.} -The operator -\TT{proj} \EM{name} \TT{of} \EM{av-set} makes the set-theoretic union of the -contents that the specified attribute has in each group of the given {\av} set. -Each element of this union then becomes the head string of an {\av} without -attributes and the set of these is returned.% -\footnote -{This is the content of a labelled column of the given \EM{av-set} viewed as a -table.} -See \figref{Proj}. - -\begin{figure} -\begin{footnotesize} \begin{verbatim} -proj /"name" of ["1" attr {\"name" = {"a", "b"}}, {\"name" = {"b", "c"}} -gives "a"; "b"; "b" -\end{verbatim} \end{footnotesize} -\vspace{-1pc} -\caption{A simple projection} \label{Proj} -\end{figure} - -The construction \TT{keep} \EM{av-set} is also provided to remove all the -attributes in the given \EM{av-set} ({\ie} the list of the attributes to keep -is empty).% -\footnote -{This is the content of the first column of the \EM{av-set} viewed as a table.} - -\item -\textbf{Core operations on {\av} sets.} -\EM{av-set} \EM{core-operator} \EM{av-set} -returns an {\av} set composing the two operands according to the specified -\EM{core-operator} (see \subsecref{AVSets}) which can be \TT{union} -(set-theoretic union), \TT{intersect} (set-theoretic intersection) or -\TT{diff} (difference). -\TT{union} and \TT{intersect} are also provided in their $n$-ary form -($ n \ge 1 $ for \TT{intersect}) and the $n$-ary union has the syntax -extension: -\verb+{+ \EM{av-set} \TT{,} $\cdots$ \TT{,} \EM{av-set} \verb+}+. - -\item -\textbf{Logical operations on {\av} sets.} -\EM{and}, \EM{or}, \EM{xor}, \EM{not}. -They are inspired by the C-style Boolean operators defined for the -integer numbers. In particular: - -\TT{not} \EM{av-set}: -returns \emph{false} if the \EM{av-set} is inhabited, or \emph{true} otherwise. - -\EM{av-set-1} \TT{and} \EM{av-set-2}: -gives \EM{av-set-2} if \EM{av-set-1} is inhabited, or \emph{false} otherwise. - -\EM{av-set-1} \TT{or} \EM{av-set-2}: -returns \EM{av-set-1} if it is inhabited, or \EM{av-set-2} otherwise. - -\EM{av-set-1} \TT{xor} \EM{av-set-2}: -gives \emph{false} if both av-sets are inhabited or empty, or the inhabited -\EM{av-set} otherwise. - -\TT{and} and \TT{or} are also available in their $n$-ary form. - -\item -\textbf{Comparisons between {\av} sets.} -\EM{av-set} \EM{test-operator} \EM{av-set}. -Following the repetition rules of {\av} sets presented in \subsecref{AVSets}, -these operators work just on the head strings of their arguments and -discard the attributes. All of them return \emph{false} or \emph{true} -according to the outcome of the respective test. -The \emph{test-operator} includes: \TT{sub} (set-theoretic subset relation), -\TT{eq} (set-theoretic quality), \TT{meet} (inhabitance of the set-theoretic -intersection), \TT{le} (numeric less-or-equal-than), \TT{lt} (numeric -less-than).% -\footnote{\TT{le} and \TT{lt} return \emph{false} if their operands are invalid -numbers.} - -Note that the set-theoretic ``meet'' operator -({\ie} $ V \meet W \equiv (\lex v \in V)\ v \in W $) -is the natural companion of the corresponding ``sub'' operator -({\ie} $ V \sub W \equiv (\lall v \in V)\ v \in W $) being its logical dual -and is already being used successfully in the context of a constructive -({\ie} intuitionistic and predicative) approach to point-free topology -(see \cite{Sam00} for details). - -\item -\textbf{Cardinality of an {\av} set.} -This information is retrieved by the operator \TT{count} \EM{av-set} that -returns an {\av} set representing a natural number. - -\end{itemize} - diff --git a/helm/mathql/doc/mathql_introduction_core.tex b/helm/mathql/doc/mathql_introduction_core.tex deleted file mode 100644 index 05f9e9fd9..000000000 --- a/helm/mathql/doc/mathql_introduction_core.tex +++ /dev/null @@ -1,162 +0,0 @@ -\subsection{The core language} - -{\MathQL}.4 consists of a core language and of a basic library. Other -user-defined libraries can be added at will. The core language includes the -\TT{property} operator mentioned in \subsecref{HighAccess} that queries the -underlying {\RDF} database, and the infrastructure to post-process the -query results. The components of this infrastructure are listed below: - -\begin{itemize} - -\item -\textbf{Explicit sets of attributed values.} -An explicit {\av} set can be placed in a query in two forms: -as a quoted string, like \verb+"this is a query result"+, that evaluates in a -single {\av} with that value and no attributes, or as a full {\av} set in the -syntax shown in the previous sections but surrounded by square brackets, like -\verb+["head" attr {/"attribute" = "contents"}]+. -\newline -In the second form, the contents of an attribute can be the result of a query -and in this case the contents of the attribute are the head strings of the -query result, whose attributes (if any) are discarded. -\end{itemize} - -\begin{center} -\verb+["head" attr {/"attribute" = property /"metadata" of "resource"}]+ -\end{center} - -\begin{itemize} - -\item -\textbf{Variable assignment.} -Variables for {\av} sets (preceded by a \TT{\$} sign and called -\emph{set variables}) can be assigned using a standard \emph{let-in} -construction and may appear wherever an {\av} set ({\ie} a query result) is -allowed. -The assignment has the form: -\TT{let \$}\EM{variable} \TT{=} \EM{av-set} \TT{in} \EM{av-set} -so we can write: -\newline -\verb+let $var = "contents" in ["head" attr {/"attribute" = $var}]+. - -The scope of {\MathQL} variables is typical for an imperative programming -language and any case of assignment propagation will be indicated. - -\item -\textbf{Sequential composition.} -This construction has the form: \EM{av-set} \TT{;;} \EM{av-set} and works as -follows: the two {\av} sets are evaluated one after the other and the first -one is discarded but the variables assigned in the first {\av} set are -available to the second one. - -\item -\textbf{Unbounded iteration.} -This construction comes in two forms: - -\TT{while} \EM{av-set-1} \TT{sup} \EM{av-set-2}: -iterates the evaluation of \EM{av-set-2} until \EM{av-set-1} is empty and -returns the {\MathQL} set-theoretic union of all the evaluations of -\EM{av-set-2}. -\TT{while} \EM{av-set-1} \TT{inf} \EM{av-set-2}: -like the former but the set-theoretic intersection is used instead of the -set-theoretic union. - -In order for \TT{while} to work as expected, both {\av} sets are evaluated in -a common context during the iteration ({\ie} the variables defined in both -are available to both) and this context is also propagated outside the -\TT{while}. - -\item -\textbf{Bounded iteration.} -Also this construction comes in two forms: - -\TT{for @}\EM{variable} \TT{in} \EM{av-set} \TT{sup} \EM{av-set}: -iterates the evaluation of the second \EM{av-set} assigning the \EM{variable} -to each element in the first \EM{av-set} and builds the {\MathQL} -set-theoretic union of the obtained results. - -\TT{for @}\EM{variable} \TT{in} \EM{av-set} \TT{inf} \EM{av-set}: -like the former but the set-theoretic intersection is used instead of the -set-theoretic union. - -The variables for attributed values (preceded by a \TT{@} sign and called -\emph{element variables}) may appear wherever an {\av} set is allowed and -and in some additional places. -The element variables are kept distinct from the set variables (therefore -\TT{\$variable} and \TT{@variable} may appear in the same query without -ambiguity). -Concerning the scope rules used in these constructions, the variables -assigned by the first {\av} set are available to the second {\av} set during -the iteration and the variables assigned by both {\av} sets are available -outside the \TT{for} as in the previous case. - -\item -\textbf{Addition of groups.} -\TT{add} \EM{optional-flag} \EM{attribute-groups} \TT{in} \EM{av-set} -builds an {\av} set adding the specified \EM{attribute-groups} to each element -of the given {\av} set. -If no \EM{flag} is specified the addition is set-theoretic, whereas with the -\TT{distr} flag the addition is distributive. -The \EM{attribute-groups} can be given explicitly (in the same syntax used for -explicit {\av} sets) or they can be replaced by an element variable. In the -latter case the attribute groups of the {\av} stored in the variable are -considered. - -\figref{Add} shows how to build a one-element {\av} set using \TT{add}. - -\begin{figure} -\begin{footnotesize} \begin{verbatim} -The set of attributed values given explicitly: - ["head" attr {/"attribute" = property /"metadata" of "resource"}] - -The same set built with the add operator: - add {/"attribute" = property /"metadata" of "resource"} in "head" -\end{verbatim} \end{footnotesize} -\vspace{-1pc} -\caption{A simple use of the add operator} -\label{Add} -\end{figure} - -\item -\textbf{Existential test.} -The existential test has the form \TT{ex} \EM{av-set} where the -specification of the {\av} set contains some instances of the construction -\TT{@}\EM{variable}\TT{.}\EM{attribute-name}, and runs as follows: -the given {\av} set is evaluated replacing each -\TT{@}\EM{variable}\TT{.}\EM{attribute-name} -with the contents of \EM{attribute-name} in an attribute group of the {\av} -stored in \TT{@}\EM{variable} and the evaluation is repeated for every -possible choice of these groups (recall that different groups are allowed to -contain attributes with the same name). If one evaluation gives a non empty -result, the default representation of \emph{true} is returned, in the other -case the empty {\av} set, {\ie} \emph{false}, is returned. - -\item -\textbf{Function invocation.} -The core language allows to invoke two kinds of external functions (with -which a language extension may be provided): the functions of the first kind -return an {\av} set, the functions of the second kind return a piece of -{\MathQL} code representing an {\av} set ({\ie} they interface a {\MathQL} -code generator). In particular: - -\EM{function-name} \verb+{+ -\EM{name} \TT{,} $\cdots$ \TT{,} \EM{name} \verb+} {+ -\EM{av-set} \TT{,} $\cdots$ \TT{,} \EM{av-set} \verb+}+ -invokes a function of the first kind on the given arguments and returns its -result. The \EM{name} arguments are {\MathQL} paths and usually -represent attribute names. - -\TT{gen} \EM{function-name} \verb+{+ -\EM{av-set} \TT{,} $\cdots$ \TT{,} \EM{av-set} \verb+}+ -invokes a function of the second kind on the given arguments and replaces -itself with the function result. - -The function names are {\MathQL} paths exactly as the attribute names and the -graph paths used by the \TT{property} operator. The names of the two kinds of -functions are kept in distinct environments so they do not clash. - -{\MathQL}.4 comes with a basic library of functions of the first kind -(see \subsecref{Basic}) that integrate the core language providing several -facilities. - -\end{itemize} diff --git a/helm/mathql/doc/mathql_introduction_property.tex b/helm/mathql/doc/mathql_introduction_property.tex deleted file mode 100644 index 6bd8561e3..000000000 --- a/helm/mathql/doc/mathql_introduction_property.tex +++ /dev/null @@ -1,200 +0,0 @@ -\subsection{High level access to metadata} \label{HighAccess} - -{\MathQL} high level access to an {\RDF} database is \emph{graph-oriented} and -is delegated to its \TT{property} operator that builds a \emph{result} {\av} -set starting from two mandatory arguments: the \emph{source} {\av} set and the -\emph{head path}. -Other optional arguments may be used to change its default behaviour or to -request advanced functionalities. - -This operator has the following syntax, where a path has the structure of an -attribute name ({\ie} a list of strings) and denotes a (possibly empty) finite -sequence of contiguous arcs (describing properties in the {\RDF} graph% -\footnote -{When we say \emph{{\RDF} graph}, we actually mean both the {\RDFM} graph and -the {\RDFS} graph.}% -). - -\begin{center} -\TT{property} \EM{optional-flags} \EM{head-path} \EM{optional-clauses} \TT{of} -\EM{optional-flag} \EM{av-set} -\end{center} - -\begin{figure} -\begin{footnotesize} \begin{verbatim} - These examples refer to the resources "A" and "B" of Figure 2. - -Example 1: reading an unstructured property - simple case: - property /"id"/"major" of {"A", "B"} gives "1" - property /"id"/"minor" of {"A", "B"} gives "2"; "7" - -Example 2: reading an unstructured property - use of pattern: - property /"id"/"minor" of pattern ".*" gives "2"; "7" - -Example 3: reading a structured property without main component: - property /"id" attr /"major", /"minor" of {"A", "B"} - generates the following attributed values: - "" attr {/"major" = "1"; /"minor" = "2"}; - "" attr {/"major" = "1"; /"minor" = "7"} - that are composed with the set-theoretic union giving: - "" attr {/"major" = "1"; /"minor" = "2"}, - {/"major" = "1"; /"minor" = "7"} - -Example 4: reading a structured property specifying a main component: - property /"id" main /"major" attr /"minor" of {"A", "B"} gives - "1" attr {/"minor" = "2"}, {/"minor" = "7"} - -Example 5: the renaming mechanism: - property /"id" attr /"minor" as /"new-name" of {"A", "B"} gives - "" attr {/"new-name" = "2"}, {/"new-name" = "7"} - -Example 6: imposing constraints on property values: - property /"date" istrue /"first" in "2002-01-01" - attr /"modified" of {"A", "B"} and - property /"date" istrue /"first" match ".*01.*" - attr /"modified" of {"A", "B"} give - "" attr {/"modified" = "2002-03-01"} - Only the instance of "date" with "first" set to "2002-01-01" - is considered. - -Example 7: inverse traversal of the head path: -property inverse /"date" attr /"first" in "" gives -"A" attr {/"first" = "2002-01-01"}; "B" attr {/"first" = "2002-02-01"} - -Example 8: some triples of an access relation: -The triples formalizing the property "date" of the resource "A": -("A", /"date", ""); -("A", /"date"/"first", "2002-01-01"); -("A", /"date"/"modified", "2002-03-01") -\end{verbatim} \end{footnotesize} -\vspace{-1pc} -\caption{The ``property'' operator} -\label{Property} -\end{figure} - -In the simplest case \TT{property} is used to read the values of a (possibly -compound) property with an unstructured value and does the following: - -\begin{enumerate} - -\item -It computes the instances of the given path in the {\RDF} graph available to -the query engine, using the resources specified in the head strings of the -source {\av} set (call them source resources) as start-nodes. - -\item -The computation gives a set of nodes ({\ie} the end-nodes of the instantiated -paths) which are the values of the instances of the (possibly compound) -property specified by the path and concerning the source resources. - -\item -These values, encoded into {\av}'s as explained above, are composed by means -of the {\MathQL} set-theoretic union to form the result {\av} set. - -\end{enumerate} - -\figref{Property} (example 1) shows an instance of this procedure. -Note that the result sets of this example have no attributes and that a path -is represented by a slash-separated list of strings denoting the path's arcs.% -\footnote{If needed, the empty path is represented by a single slash.} - -Using the \TT{pattern} flag, \TT{property} can be instructed to regard the -values of the source {\av} set as POSIX regular expressions rather than as -constant strings. -In this case \TT{pattern} selects the set of resources matching at least one -of the given expressions. -See for instance \figref{Property} (example 2). - -If we want to read the value of a structured property we can specify the -value's main component in the \TT{main} \EM{optional-clause} (this -specification overrides the default setting inferred from the {\RDF} graph -through the \emph{rdf:value} property) and the list of the value's secondary -components in the \TT{attr} \EM{optional-clause}. - -Note that if a secondary component is not listed in the \TT{attr} clause, it -will not be read. -Also recall that, when the result {\av}'s are formed, the main component is -is read in the head string, whereas the secondary components are -encoded using the attributes of a single group. -See for instance \figref{Property} (examples 3 and 4). -As a component of a property's value may be a structured property, its -specification (appearing in the \TT{main} or \TT{attr} clause) is -actually a path in the {\RDF} graph starting from the end-node of the head -path. - -Note that the name of an attribute, which by default is its defining path in -the \TT{attr} clause, can be changed with an optional \TT{as} clause for the -user's convenience. See for instance \figref{Property} (example 5). -Note that the assigned name must be a path for typing reasons. -The alternative could be to use a simple string but in any case a string can -be seen as a one-element path. - -In the default case \TT{property} builds its result considering every -component of the {\RDFM} graph ({\ie} every {\RDFM}) but we can constrain -some nodes of the inspected components to have (or not to have) a given value, -with the aim of improving the performance of the inspection procedure. -The constrained nodes are specified in the \TT{istrue} and \TT{istrue} -\EM{optional-clauses} and the constraining values are expressed by \TT{in} or -\TT{match} constructions depending on their semantics (constant values or -POSIX regular expressions respectively). -See for instance \figref{Property} (example 6). -Again a constrained node may be the value of a compound property, therefore -its specification (appearing in the \TT{istrue} or \TT{isfalse} clause) is -a path in the {\RDF} graph starting from the end-node of the head path. - -\TT{property} allows to access the {\RDFS} property hierarchy by specifying -a flag \TT{sub} or \TT{super}. -If the \TT{sub} flag is present, \TT{property} inspects the instances of the -default tree (made by the head path and by the \EM{optional-clauses} paths) -and every other tree obtained by substituting an arc $ p $ with the arc of a -subproperty of $ p $. -If the \TT{super} flag is present, super-property arcs are substituted instead. - -\TT{property} also allows the inverse traversal of its head path if the -\TT{inverse} flag is specified. -In this case the operator works as follows: - -\begin{enumerate} - -\item -It instantiates the head path using as end-nodes the values whose main -component is specified in head strings of the source {\av} set. - -\item -It encodes the resources corresponding to the instances of the start-nodes into -{\av}'s assigning the attributes obtained instantiating the attribute paths% -\footnote{The paths in the \EM{optional-clauses} are never traversed backward.} -and builds the result set composing these {\av}'s with the set-theoretic union. - -\end{enumerate} - -See for instance \figref{Property} (example 7). - -Formally \TT{property} accesses the {\RDF} graph through an \emph{access -relation} which is a set of triples $ (r_1, p, r_2) $ where $ r_1 $ and -$ r_2 $ are strings, and $ p $ is a path. -Each triple is a sort of ``extended {\RDF} triple'' in the sense that $ r_1 $ -is a resource for which some metadata is provided, $ p $ is a path in the -{\RDF} graph and $ r_2 $ is the main value of the end-node of the instance of -$ p $ starting from $ r_1 $ (this includes the instances of sub- and -super-arcs of $ p $ if necessary). -See for instance \figref{Property} (example 8). -{\MathQL} does not provide for any built-in access relation so any query -engine can freely define the access relations that are appropriate with -respect to the metadata it can access. - -It is worth remarking, as it was already stressed in \cite{Gui03,GS03}, that -the concept of access relation corresponds to the abstract concept of property -in the basic {\RDF} data model which draws on well established principles from -various data representation communities. -In this sense an {\RDF} property can be thought of either as an attribute of a -resource (traditional attribute-value pairs model), or as a relation between -a resource and a value (entity-relationship model). -This observation leads us to conclude that {\MathQL} is sound and complete -with respect to querying an abstract {\RDF} metadata model. -Finally note that access relations are close to {\RDF} entity-relationship -model, but they do not work if we allow paths with an arbitrary number of -loops ({\ie} with an arbitrary length) because this would lead to creating -infinite sets of triples. -If we want to handle this case, we need to turn these relations into -multivalued functions. diff --git a/helm/mathql/doc/mathql_introduction_textual.tex b/helm/mathql/doc/mathql_introduction_textual.tex deleted file mode 100644 index 2bcb2b4cd..000000000 --- a/helm/mathql/doc/mathql_introduction_textual.tex +++ /dev/null @@ -1,178 +0,0 @@ -\subsection{Textual syntax} \label{Textual} - -In this section we present {\MathQL}.4 textual syntax using the same notation -that we adopted in \cite{GS03,Gui03}. In particular the grammatical -productions we use resemble {\BNF} with some {\POSIX} formalism: - -\begin{itemize} - -\item -\TT{::=} defines a grammatical production by means of a regular expression. - -Regular expressions are made of the following elements -(\TT{...} is a placeholder): - -\item -\TT{`...`} represents any character in a character set; - -\item -\verb+`^ ...`+ represents any character (U+20 to U+7E) not in a character set; - -\item -\TT{"..."} represents a string to be matched verbatim; - -\item -\GP{...} represents a regular expression defined by a grammatical production; - -\item -\TT{... ...} represents a conjunctive regular expression; - -\item -\TT{... | ...} represents a disjunctive regular expression; - -\item -\TT{[ ... ]?} represents an optional regular expression; - -\item -\TT{[ ... ]+} represents a regular expression to be repeated one or more times; - -\item -\TT{[ ... ]*} represents a regular expression to be repeated zero or more times; - -\item -\TT{[ ... ]} represents a grouped regular expression. - -\end{itemize} - -\begin{figure} -\begin{footnotesize} \begin{verbatim} - ::= '0 - 9' - ::= [ ]* - ::= | 'A - F' | 'a - f' - ::= "u" | '"' | "\" | "^" - ::= '"' [ "\" "^" | '^ "\^' ]* '"' - ::= "/" | [ "/" ]+ -\end{verbatim} \end{footnotesize} -\vskip-1pc -\caption{Textual syntax of numbers, strings and paths} \label{StrTS} -\end{figure} - -\begin{figure} -\begin{footnotesize} -\begin{center} \begin{tabular}{|l|l|c|} -\hline {\bf Escape sequence} & {\bf Unicode character} & {\bf Text} \\ -\hline \verb+\u....^+ & U+.... & \\ -\hline \verb+\"^+ & U+0022 & \verb+"+ \\ -\hline \verb+\\^+ & U+005C & \verb+\+ \\ -\hline \verb+\^^+ & U+005E & \verb+^+ \\ -\hline -\end{tabular} \end{center} -\end{footnotesize} -\vskip-1pc -\caption{Textual syntax of escaped characters} \label{EscTS} -\end{figure} - -Queries and results can contain quoted constant strings with the syntax of -\figref {StrTS}% -\footnote -{Note that the first slash of the \GP{path} is not optional as in {\MathQL}.3.} -and the meaning of the escaped sequences is shown in \figref{EscTS} (where -$ .... $ is a 4-digit placeholder). -{\MathQL} character escaping syntax aims at complying with W3C character model -for the World Wide Web \cite{W3Ca} which recommends a support for standard -Unicode characters (U+0000 to U+FFFF) and escape sequences with start/end -delimiters. -In particular {\MathQL} escape delimiters (backslash and caret) are chosen -among the \emph{unwise} characters for {\URI} references (see \cite{URI}) -because {\URI} references are the natural content of constant strings and -these characters should not be so frequent in them. - -\begin{figure} -\begin{footnotesize} \begin{verbatim} - ::= [ 'A - Z' | 'a - z' | `_` ]+ - ::= [ | ]* - ::= "$" - ::= "@" -\end{verbatim}\end{footnotesize} %$ -\vskip-1pc -\caption{Textual syntax of variables} \label{VarTS} -\end{figure} - -Queries can also contain \emph{set} variables (production \GP{svar}) and -\emph{element} variables (production \GP{evar}) according to the syntax of -\figref{VarTS}.% -\footnote{This syntax resembles the one of programming languages identifiers.} -A set variable holds an {\av} set, {\ie} a query result, while an element -variable holds an {\av}. - -\begin{figure} -\begin{footnotesize} \begin{verbatim} - ::= [ "sub" | "super" ]? - ::= [ "inverse" ]? -

::= [ "main" ]? - ::= [ "in" | "match" ] - ::= [ "istrue" [ "," ]* ]? - ::= [ "isfalse" [ "," ]* ]* - ::= [ "as" ]? - ::= [ "attr" [ "," ]* ]? - ::=
- ::= [ "pattern" ]? - ::= [ "," ]* - ::= "(" ")" | | "[" "]" - | "property" "of" - | "let" "=" "in" - | ";;" | | - | "ex" | "." - | "add" [ "distr" ]? [ | ] "in" - | "for" "in" [ "sup" | "inf" ] - | "while" [ "sup" | "inf" ] - | "{" [ ]? "}" "{" "}" - | "gen" [ "{" "}" | "in" ] - ::= [ [ "," ]* ]? - ::= "=" - ::= "{" [ ";" ]* "}" - ::= [ "," ]* - ::= [ "attr" ]? - ::= [ [ ";" ]* ]? -\end{verbatim} \end{footnotesize} -\vskip-1pc -\caption{Textual syntax of queries} \label{QueryTS} -\end{figure} - -\begin{figure} -\begin{footnotesize} \begin{verbatim} - ::= "=" | "{" [ "," ]* "}" - ::= "{" [ ";" ]* "}" - ::= [ "attr" [ "," ]* ]? - ::= [ [ ";" ]* ]? -\end{verbatim} \end{footnotesize} -\vskip-1pc -\caption{Textual syntax of results} \label{ResultTS} -\end{figure} - -\begin{figure} -\begin{footnotesize} \begin{verbatim} - ::= "empty" | "false" | "true" - | [ "not" | "count" | "proj" "of" ] - | [ "and" | "or" | "xor" ] - | [ "sub" | "meet" | "eq" | "le" | "lt" ] - | [ "union" | "intersect" | "diff" ] - | "{" "}" - | "keep" [ "allbut" ]? [ "in" ]? - | "if" "then" "else" - | "select" "from" "where" -\end{verbatim} \end{footnotesize} -\vskip-1pc -\caption{Textual syntax of the basic extension} \label{BasicTS} -\end{figure} - -The core infrastructure of {\MathQL}.4 defines a syntax for queries -(\figref{QueryTS}, production \GP{query}) and a syntax for results -(\figref{ResultTS}, production \GP{avs}). -A syntax extension for the most common functions of the basic library is -also provided for the user's convenience and for backward compatibility with -{\MathQL}.3. The syntax extension concerning the functions covered in this -paper is shown in \figref{BasicTS}. -Note that this extension makes \GP{avs} an instance of \GP{xavs}. - - diff --git a/helm/mathql/doc/mathql_macros.sty b/helm/mathql/doc/mathql_macros.sty deleted file mode 100644 index 8c8a85130..000000000 --- a/helm/mathql/doc/mathql_macros.sty +++ /dev/null @@ -1,104 +0,0 @@ -\usepackage{amssymb} - -\newcommand\CURI[1]{\texttt{<#1>}} -\newcommand\EM[1]{\noindent\hbox{\frenchspacing\em #1}} -\newcommand\TT[1]{\noindent\hbox{\frenchspacing\tt #1}} -\newcommand\RM[1]{\noindent\hbox{\frenchspacing\rm #1}} -\newcommand\secref[1]{Section~\ref{#1}} -\newcommand\subsecref[1]{Subsection~\ref{#1}} -\newcommand\figref[1]{Figure~\ref{#1}} -\newcommand\ie{{\frenchspacing i.e.}} -\newcommand\oft{\mathrel :} -\newcommand\lex{\exists} -\newcommand\lall{\forall} -\newcommand\sub{\subseteq} -\newcommand\meet{\between} -\newcommand\sand{\cap} -\newcommand\sdor{\sqcup} -\newcommand\sor{\cup} -\newcommand\bigsor{\bigcup} -\newcommand\app{\mathbin @} -\newcommand\fa{\phi} -\newcommand\fb{\psi} -\newcommand\st{\mathrel |} -\newcommand\p{{^\prime}} -\newcommand\jolly{\mathbin\square} -\newcommand\gdlap[2]{\vbox to 0pt {\vskip#2\hbox{#1}\vss}} -\newcommand\setnames@[2]{&\gdlap{\kern2pt$#1$}{#2}} -\newcommand\imain[1]{{\offinterlineskip\lineskip=2pt\noindent - $\vcenter{\halign{\hss$##$\hss&##\hss\cr#1\crcr}}$}} -\newcommand\iname[1]{\cr\hrulefill\setnames@{#1}{-1.0ex}\cr} -\newcommand\irule[3]{\imain{#1 \iname{#2} #3}} -\newcommand\spc{\hspace{1em}} -\newcommand\icr{\cr} -\newcommand\Nop{\noindent\hbox to 0pt{\vbox to 1ex{\vfil}\hfil}} - -\newcommand\BNF{\textsc{bnf}} -\newcommand\CAML{\textsc{caml}} -\newcommand\Galax{\textsc{galax}} -\newcommand\HELM{\textsc{helm}} -\newcommand\MathQL{\textsc{mathql-1}} -\newcommand\MySQL{\textsc{mysql}} -\newcommand\POSIX{\textsc{posix}} -\newcommand\PostgreSQL{\textsc{postgresql}} -\newcommand\RDF{\textsc{rdf}} -\newcommand\RDFM{\textsc{rdf model}} -\newcommand\RDFS{\textsc{rdf schema}} -\newcommand\SQL{\textsc{sql}} -\newcommand\URI{\textsc{uri}} -\newcommand\XML{\textsc{xml}} -\newcommand\XQuery{\textsc{xquery}} - -\newcommand\av{{\frenchspacing a.v.}} - -\newcommand\D{\Delta} -\newcommand\G{\Gamma} -\newcommand\ES{\emptyset} -\newcommand\bigsum{\bigoplus} -\newcommand\daq{\mathrel{\Downarrow_q}} -\newcommand\dar{\mathrel{\Downarrow_r}} -\newcommand\distr{\mathbin\odot} -\newcommand\dprod{\mathbin\boxtimes} -\newcommand\dsum{\mathbin\boxplus} -\newcommand\g{(\G_s, \G_e, \G_g)} -\newcommand\get[2]{#1(#2)} -\newcommand\sdiff{\mathbin\ominus} -\newcommand\set[3]{#1[#2 \gets #3]} -\newcommand\sprod{\mathbin\otimes} -\newcommand\ssum{\mathbin\oplus} - -\newcommand\Boole{\TT{Boole}} -\newcommand\Listof{\TT{ListOf}} -\newcommand\Setof{\TT{SetOf}} -\newcommand\Str{\TT{Str}} -\newcommand\Num{\TT{Num}} - -\newcommand\All{\TT{All}} -\newcommand\Exp{\TT{Exp}} -\newcommand\F{\TT{F}} -\newcommand\For{\TT{For}} -\newcommand\Fst{\TT{Fst}} -\newcommand\Fsts{\TT{Fsts}} -\newcommand\Fun{\TT{Fun}} -\newcommand\Gen{\TT{Gen}} -\newcommand\Head{\TT{Head}} -\newcommand\Istrue{\TT{IsT}} -\newcommand\Keep{\TT{Keep}} -\newcommand\Match{\TT{Match}} -\newcommand\Name{\TT{Name}} -\newcommand\Pattern{\TT{Pattern}} -\newcommand\Proj{\TT{Proj}} -\newcommand\Property{\TT{Property}} -\newcommand\Snd{\TT{Snd}} -\newcommand\Src{\TT{Src}} -\newcommand\Unquote{\TT{Unq}} -\newcommand\T{\TT{T}} - -\newcommand\GP[1]{\TT{<#1>}} - -\newcommand\Set{\textsf{Set}} -\newcommand\Prop{\textsf{Prop}} -\newcommand\MainConclusion{\textsf{MainConclusion}} -\newcommand\MainHypothesis{\textsf{MainHypothesis}} -\newcommand\occurrence{\textsf{occurrence}} -\newcommand\refObj{\textsf{refObj}} diff --git a/helm/mathql/doc/mathql_operational.tex b/helm/mathql/doc/mathql_operational.tex deleted file mode 100644 index a7b3a9a49..000000000 --- a/helm/mathql/doc/mathql_operational.tex +++ /dev/null @@ -1,14 +0,0 @@ -\section {Operational Semantics} \label {Operational} - -This section describes {\MathQL} semantics, that we present in a natural -operational style \cite{Lan98,Win93}. -Here we use a simple type system that includes basic types such as strings and -Booleans, and some type constructors such as product and exponentiation. -$ y \oft Y $ will denote a typing judgement. -This semantics is not meant as a formal system \emph{per se}, but should be a -reference for implementors. - -\input{mathql_operational_background} -\input{mathql_operational_core} -\input{mathql_operational_basic} - diff --git a/helm/mathql/doc/mathql_operational_background.tex b/helm/mathql/doc/mathql_operational_background.tex deleted file mode 100644 index ad0be5122..000000000 --- a/helm/mathql/doc/mathql_operational_background.tex +++ /dev/null @@ -1,147 +0,0 @@ -\subsection {Mathematical background} - -As background for the semantics, we revise the one presented in -\cite{Gui03,GS03}. - -{\Str} denotes the type of strings and its elements are the finite sequences -of Unicode \cite{Unicode} characters. -Grammatical productions denote the subtype of {\Str} containing the produced -sequences of characters. - -{\Num} denotes the type of numbers and is the subtype of {\Str} defined by -\GP{num}. In this type, numbers are represented by their decimal expansion. - -$ \Setof\ Y $ denotes the type of finite sets ({\ie} unordered finite -sequences without repetitions) over $ Y $ and -$ \Listof\ Y $ denotes the type of lists ({\ie} ordered finite sequences) -over $ Y $. -We will use the notation $ [y_1, \cdots, y_m] $ for the list whose elements -are $ y_1, \cdots, y_m $ ($ \{y_1, \cdots, y_m\} $ will denote a set as -usual). - -{\Boole}, the type of Boolean values, is defined as the set -$ \{\ES, \{("", \ES)\}\} $ of type $ \Setof\ \Setof\ (\Str \times \Setof\ Y) $ -where the first element stands for \emph{false} (denoted by {\F}) and the -second element stands for \emph{true} (denoted by {\T}).% -\footnote{This definition allows to treat a Boolean value as an {\av} set.} - -$ Y \times Z $ denotes the product of the types $ Y $ and $ Z $ whose elements -are the ordered pairs $ (y, z) $ such that $ y \oft Y $ and $ z \oft Z $. -The notation is also extended to a ternary product. -$ Y \to Z $ denotes the type of functions from $ Y $ to $ Z $ and $ f\ y $ -denotes the application of $ f \oft Y \to Z $ to $ y \oft Y $. -Relations over types, such as equality, are seen as functions to {\Boole}. - -With the above constructors we can give a formal meaning to most of the -standard notation. For instance we will use the following: - -\begin{itemize} - -\item -$ {\ES} \oft (\Setof\ Y) $ - -\item -$ {\lex} \oft ((\Setof\ Y) \to \Boole) \to \Boole $ - -\item -$ {\lall} \oft ((\Setof\ Y) \to \Boole) \to \Boole $ - -\item -$ {\in} \oft Y \to (\Setof\ Y) \to \Boole $ (infix) - -\item -$ {\sub} \oft (\Setof\ Y) \to (\Setof\ Y) \to \Boole $ (infix) - -\item -$ {\meet} \oft (\Setof\ Y) \to (\Setof\ Y) \to \Boole $ (infix) - -\item -$ {\sand} \oft (\Setof\ Y) \to (\Setof\ Y) \to (\Setof\ Y) $ (infix) - -\item -$ {\sor} \oft (\Setof\ Y) \to (\Setof\ Y) \to (\Setof\ Y) $ (infix) - -\item -$ {\sdor} \oft (\Setof\ Y) \to (\Setof\ Y) \to (\Setof\ Y) $ -(the disjoint union, infix) - -\item -$ \le \oft \Num \to \Num \to \Boole $ (infix) - -\item -$ < \oft \Num \to \Num \to \Boole $ (infix) - -\item -$ \# \oft (\Setof\ Y) \to \Num $ (the size operator) - -\item -$ \app \oft (\Listof\ Y) \to (\Listof\ Y) \to (\Listof\ Y) $ -(the concatenation, infix) - -\item -$ \lnot \oft \Boole \to \Boole $ - -\end{itemize} - -\noindent -Note that $ \lall $ and $ \lex $ are always decidable because the sets are -finite by definition. - -\noindent -$ U \meet W $ means $ (\lex u \in U)\ u \in W $ and expresses the fact that -$ U \sand W $ is inhabited as a primitive notion, {\ie} without mentioning -intersection and equality as for $ U \sand W \neq \ES $, which is equivalent -but may be implemented less efficiently in real cases% -\footnote{As for the Boolean condition $ \fa \lor \fb $ which may have a more -efficient implementation than $ \lnot(\lnot \fa \land \lnot \fb) $.}. -$ U \meet W $ is a natural companion of $ U \sub W $ being its logical dual -(recall that $ U \sub W $ means $ (\lall u \in U)\ u \in W $) -and is already being used successfully in the context of a constructive -({\ie} intuitionistic and predicative) approach to point-free topology -\cite{Sam00}. - -Sets of couples play a central role in our presentation and we will use: - -\begin{itemize} - -\item -$ \Fst \oft (Y \times Z) \to Y $ such that $ \Fst\ (y, z) = y $. - -\item -$ \Snd \oft (Y \times Z) \to Z $ such that $ \Snd\ (y, z) = z $. - -\item -$ \Fsts \oft \Setof\ (Y \times Z) \to \Setof\ Z $ such that -$ \Fsts\ U = \{\Fst\ u \st u \in U\} $. - -\item -With the same notation, if $ W $ contains just one couple whose first -component is $ y $, then $ \get{W}{y} $ is the second component of that couple. -In the other cases $ \get{W}{y} $ is not defined. -This operator has type $ (\Setof\ (Y \times Z)) \to Y \to Z $. - -\item -Moreover $ \set{W}{y}{z} $ is the set obtained from $ W $ removing every -couple whose first component is $ y $ and adding the couple $ (y, z) $. -The type of this operator is -$ (\Setof\ (Y \times Z)) \to Y \to Z \to (\Setof\ (Y \times Z)) $. - -\item -Also $ U + W $ is the union of two sets of couples in the following sense: - -\begin{footnotesize} -\begin{center} \begin{tabular}{rll} -% -$ U + \ES $ & rewrites to & $ U $ \\ -$ U + (W \sdor \{(y, z)\}) $ & rewrites to & $ \set{U}{y}{z} + W $ -% -\end{tabular} \end{center} -\end{footnotesize} - -\end{itemize} - -The last three operators are used to read, write and join association sets, -which are sets of couples such that the first components of two different -elements are always different. -These sets will be exploited to formalize the memories appearing in evaluation -contexts. diff --git a/helm/mathql/doc/mathql_operational_basic.tex b/helm/mathql/doc/mathql_operational_basic.tex deleted file mode 100644 index cc309f732..000000000 --- a/helm/mathql/doc/mathql_operational_basic.tex +++ /dev/null @@ -1,298 +0,0 @@ -\subsection {The basic library} - -In this section we present the functions provided by the {\MathQL}.4 basic -library. Describing the whole library would require an amount of space that -goes beyond the limits of this paper so we include here just a selection of -the available functions (the ones for which we gave the syntax extension in -\secref{Textual}). - -The function below are grouped by their arity. - -\begin{itemize} - -\item -\textbf{The predefined {\av} sets.} -The functions \TT{/"empty"}, \TT{/"false"} and \newline \TT{/"true"} take no -path arguments and no set arguments. - -\begin{footnotesize} -\begin{center} -% -\irule{\Nop}{}{\Fun\ \TT{/"empty"}\ [\,]\ [\,]\ \G \equiv \F} \spc -\irule{\Nop}{}{\Fun\ \TT{/"false"}\ [\,]\ [\,]\ \G \equiv \F} -\end{center} -\begin{center} -% -\irule{\Nop}{}{\Fun\ \TT{/"true"}\ [\,]\ [\,]\ \G \equiv \T} -% -\end{center} -\end{footnotesize} - -Moreover ``\TT{empty}'' rewrites to ``\verb+fun /"empty" {} {}+'', -``\TT{false}'' rewrites to ``\verb+fun /"false" {} {}+'' and -``\TT{true}'' rewrites to ``\verb+fun /"true" {} {}+''. - -\item -\textbf{Boolean negation and size.} -The functions \TT{/"not"} and \TT{/"count"} take no path arguments and one set -argument. -Here Rule 1 overrides rule 2. - -\begin{footnotesize} -\begin{center} -% -\irule{(\G, x) \daq \F}{1}{\Fun\ \TT{/"not"}\ [\,]\ [x]\ \G \equiv \T} \spc -\irule{(\G, x) \daq S}{2}{\Fun\ \TT{/"not"}\ [\,]\ [x]\ \G \equiv \F} -\end{center} -\begin{center} -% -\irule{(\G, x) \daq S}{}{\Fun\ \TT{/"count"}\ [\,]\ [x]\ \G \equiv \#\ S} -% -\end{center} -\end{footnotesize} - -Moreover ``\TT{not} x'' rewrites to ``\verb+fun /"not" {} {+x\verb+}+'' -and ``\TT{count} x'' rewrites to ``\verb+fun /"count" {} {+x\verb+}+''. - -\item -\textbf{Boolean xor, set-theoretic and numerical tests, difference.} -\TT{/"xor"}, \TT{/"sub"}, \TT{/"meet"}, \TT{/"eq"}, \TT{/"le"}, \TT{/"lt"} and -\TT{/"diff"} take no path arguments and two set arguments. -The rule with the lowest number is applied first. - -\begin{footnotesize} -\begin{center} -% -\irule{(\G, x_1) \daq \F \spc (\G, x_2) \daq \F}{1} - {\Fun\ \TT{/"xor"}\ [\,]\ [x_1, x_2]\ \G \equiv \T} \spc -\irule{(\G, x_1) \daq S_1 \spc (\G, x_2) \daq \F}{2} - {\Fun\ \TT{/"xor"}\ [\,]\ [x_1, x_2]\ \G \equiv S_1} -% -\end{center} -\begin{center} -% -\irule{(\G, x_1) \daq \F \spc (\G, x_2) \daq S_2}{3} - {\Fun\ \TT{/"xor"}\ [\,]\ [x_1, x_2]\ \G \equiv S_2} \spc -\irule{(\G, x_1) \daq S_1 \spc (\G, x_2) \daq S_2}{4} - {\Fun\ \TT{/"xor"}\ [\,]\ [x_1, x_2]\ \G \equiv \F} -% -\end{center} -\begin{center} -% -\irule{(\G, x_1) \daq S_1 \spc (\G, x_2) \daq S_2}{} - {\Fun\ \TT{/"sub"}\ [\,]\ [x_1, x_2]\ \G \equiv (\Fsts\ S_1 \sub \Fsts\ S_2)} -% -\end{center} -\begin{center} -% -\irule{(\G, x_1) \daq S_1 \spc (\G, x_2) \daq S_2}{} - {\Fun\ \TT{/"meet"}\ [\,]\ [x_1, x_2]\ \G \equiv (\Fsts\ S_1 \meet \Fsts\ S_2)} -% -\end{center} -\begin{center} -% -\irule{(\G, x_1) \daq S_1 \spc (\G, x_2) \daq S_2}{} - {\Fun\ \TT{/"eq"}\ [\,]\ [x_1, x_2]\ \G \equiv (\Fsts\ S_1 = \Fsts\ S_2)} -% -\end{center} -\begin{center} -% -\irule{(\G, x_1) \daq \{(r_1, A_1)\} \spc (\G, x_2) \daq \{(r_2, A_2)\}}{} - {\Fun\ \TT{/"le"}\ [\,]\ [x_1, x_2]\ \G \equiv (r_1 \le r_2)} -% -\end{center} -\begin{center} -% -\irule{(\G, x_1) \daq \{(r_1, A_1)\} \spc (\G, x_2) \daq \{(r_2, A_2)\}}{} - {\Fun\ \TT{/"lt"}\ [\,]\ [x_1, x_2]\ \G \equiv (r_1 < r_2)} -% -\end{center} -\begin{center} -% -\irule{(\G, x_1) \daq S_1 \spc (\G, x_2) \daq S_2}{} - {\Fun\ \TT{/"eq"}\ [\,]\ [x_1, x_2]\ \G \equiv (S_1 \sdiff S_2)} -% -\end{center} -\end{footnotesize} - -where $\sdiff$ is a helper function two rewrite rules: - -\begin{footnotesize} -\begin{center} \begin{tabular}{lrll} -5 & -$ (S_1 \sdor \{(r, A_1)\}) \sdiff (S_2 \sdor \{(r, A_2)\}) $ & rewrites to & -$ S_1 \sdiff S_2 $ \\ -6 & $ S_1 \sdiff S_2 $ & rewrites to & $ S_1 $ -% -\end{tabular} \end{center} -\end{footnotesize} - -``x \TT{xor} y'' rewrites to ``\verb+fun /"xor" {} {+x\TT{,}y\verb+}+'', -``x \TT{sub} y'' rewrites to \newline ``\verb+fun /"sub" {} {+x\TT{,}y\verb+}+'', -``x \TT{meet} y'' rewrites to ``\verb+fun /"meet" {} {+x\TT{,}y\verb+}+'', -``x \TT{eq} y'' rewrites to ``\verb+fun /"eq" {} {+x\TT{,}y\verb+}+'', -``x \TT{le} y'' rewrites to \newline ``\verb+fun /"le" {} {+x\TT{,}y\verb+}+'', -``x \TT{lt} y'' rewrites to ``\verb+fun /"lt" {} {+x\TT{,}y\verb+}+'' and -``x \TT{diff} y'' rewrites to ``\verb+fun /"diff" {} {+x\TT{,}y\verb+}+'' - -\item -\textbf{Conditional operator and standard \emph{select} clause}. -\TT{/"if"} takes no path arguments and three set arguments. -The usual rule overriding policy applies. - -\begin{footnotesize} -\begin{center} -% -\irule{(\G, x_1) \daq \F \spc (\G, x_3) \daq S_3}{1} - {\Fun\ \TT{/"if"}\ [\,]\ [x_1, x_2, x_2]\ \G \equiv S_3} \spc -\irule{(\G, x_1) \daq S_1 \spc (\G, x_2) \daq S_2}{2} - {\Fun\ \TT{/"if"}\ [\,]\ [x_1, x_2, x_2]\ \G \equiv S_2} -% -\end{center} -\end{footnotesize} - -``\TT{if} x \TT{then} y \TT{else} z'' rewrites to -``\verb+fun /"if" {} {+x\TT{,}y\TT{,}z\verb+}+'' and -``\TT{select} i \TT{from} x \TT{where} y'' rewrites to -``\TT{for} i \TT{in} x \TT{sup} \TT{if} y \TT{then} i \TT{else} \TT{empty}''. - -\item -\textbf{Intersection without attribute distribution.} -\TT{/"intersect"} takes no path arguments and any positive number of set -arguments. - -\begin{footnotesize} -\begin{center} -% -\irule{(\G, x_1) \daq S_1 \spc \cdots \spc (\G, x_m) \daq S_m}{} - {\Fun\ \TT{/"intersect"}\ [\,]\ [x_1, \cdots, x_m]\ \G \equiv - (S_1 \sprod \cdots \sprod S_m)} -% -\end{center} -\end{footnotesize} - -As usual -``x \TT{intersect} y'' rewrites to ``\verb+fun /"intersect" {} {+x\TT{,}y\verb+}+''. - -\item -\textbf{Union without attribute distribution, Boolean conjunction and -disjunction.} -\TT{/"union"}, \TT{/"and"} and \TT{/"or"} take no path arguments and any -number of set arguments. -The usual rule overriding policy applies. - -\begin{footnotesize} -\begin{center} -% -\irule{\Nop}{}{\Fun\ \TT{/"union"}\ [\,]\ [\,]\ \G \equiv \F} \spc -\irule{(\G, x_1) \daq S_1 \spc \cdots \spc (\G, x_m) \daq S_m}{} - {\Fun\ \TT{/"union"}\ [\,]\ [x_1, \cdots, x_m]\ \G \equiv - (S_1 \ssum \cdots \ssum S_m)} -% -\end{center} -\begin{center} -% -\irule{\Nop}{}{\Fun\ \TT{/"and"}\ [\,]\ [\,]\ \G \equiv \T} \spc -\irule{\Nop}{}{\Fun\ \TT{/"or"}\ [\,]\ [\,]\ \G \equiv \F} -% -\end{center} -\begin{center} -% -\irule{\Fun\ \TT{/"and"}\ [\,]\ l\ \G \equiv \F}{1} - {\Fun\ \TT{/"and"}\ [\,]\ (l \app [x])\ \G \equiv \F} \spc -\irule{\Fun\ \TT{/"or"}\ [\,]\ l\ \G \equiv \F \spc (\G, x) \daq S}{3} - {\Fun\ \TT{/"or"}\ [\,]\ (l \app [x])\ \G \equiv S} -% -\end{center} -\begin{center} -% -\irule{\Fun\ \TT{/"and"}\ [\,]\ l\ \G \equiv S_l \spc (\G, x) \daq S}{2} - {\Fun\ \TT{/"and"}\ [\,]\ (l \app [x])\ \G \equiv S} \spc -\irule{\Fun\ \TT{/"or"}\ [\,]\ l\ \G \equiv S_l}{4} - {\Fun\ \TT{/"or"}\ [\,]\ (l \app [x])\ \G \equiv S_l} -\end{center} -\end{footnotesize} - -``x \TT{and} y'' rewrites to ``\verb+fun /"and" {} {+x\TT{,}y\verb+}+'', -``x \TT{or} y'' rewrites to \newline ``\verb+fun /"or" {} {+x\TT{,}y\verb+}+'', -``x \TT{union} y'' rewrites to \kern-1.1pt ``\verb+fun /"union" {} {+x\TT{,}y\verb+}+'' -and ``\verb+{+x$_1$\TT{,}$\cdots$\TT{,}x$_m$\verb+}+'' rewrites to -``\verb+fun /"union" {} {+x$_1$\TT{,}$\cdots$\TT{,}x$_m$\verb+}+''. - -\item -\textbf{Projection.} -\TT{/"proj"} takes one path argument and one set argument. - -\begin{footnotesize} -\begin{center} -% -\irule {p \oft \TT{} \spc - (\G, x) \daq \{ (r_1, A_1), \cdots, (r_m, A_m) \}}{} - {\Fun\ \TT{/"proj"}\ [p]\ [x]\ \G \equiv - \Head\ (\Proj\ (\Name\ p)\ A_1 \sor \cdots \sor \Proj\ (\Name\ p)\ A_m)} -% -\end{center} -\begin{center} \begin{tabular}{rll} -% -$ \Proj\ p\ \{G_1, \cdots, G_n\} $ & rewrites to & -$ \get{G_1}{p} \sor \cdots \sor \get{G_n}{p} $ \\ -$ \Head\ \{s_1, \cdots, s_k\} $ & rewrites to & $ \{ (s_1, \ES), \cdots, (s_k, \ES) \} $ -\end{tabular} \end{center} -\end{footnotesize} - -where, for each $ 1 \le j \le n $, $ \get{G_j}{p} $ is $ \ES $ if $ p $ is not -defined in $ G_j $. - -Moreover -``\TT{proj} p \TT{of} x'' rewrites to ``\verb+fun /"proj" {+p\verb+} {+x\verb+}+''. - -\item -\textbf{Refinement.} -The functions \TT{/"keep"/"these"} and \TT{/"keep"/"allbut"} take any number -of path arguments and one set argument. -In the following rules if $ l $ is $ [p_1, \cdots, p_m] $ then -$ W $ is $ \{\Name\ p_1, \cdots, \Name\ p_m\} $ Moreover {\Keep} and $\Keep\p$ -are helper functions and the usual rule overriding policy applies. - -\begin{footnotesize} -\begin{center} -% -\irule{l \oft \Listof\ \TT{} \spc (\G, x) \daq S}{} - {\Fun\ \TT{/"keep"/"these"}\ l\ [x]\ \G \equiv - \{ (r, \bigsor \{ \Keep\ \T\ W\ G \st G \in A \}) \st (r, A) \in S \}} -% -\end{center} -\begin{center} -% -\irule{l \oft \Listof\ \TT{} \spc (\G, x) \daq S}{} - {\Fun\ \TT{/"keep"/"allbut"}\ l\ [x]\ \G \equiv - \{ (r, \bigsor \{ \Keep\ \F\ W\ G \st G \in A \}) \st (r, A) \in S \}} -% -\end{center} -\begin{center} -% -\irule{\Keep\p\ b\ W\ G\ \RM{rewrites to}\ \ES}{1} -{\Keep\ b\ W\ G\ \RM{rewrites to}\ \ES} \spc -\irule{\Keep\p\ b\ W\ G\ \RM{rewrites to}\ G\p}{2} -{\Keep\ b\ W\ G\ \RM{rewrites to}\ \{G\p\}} -% -\end{center} -\begin{center} \begin{tabular}{rll} -% -$ \Keep\p\ \T\ W\ G $ & rewrites to & $ \{ (p, V) \in G \st p \in W \} $ \\ -$ \Keep\p\ \F\ W\ G $ & rewrites to & $ \{ (p, V) \in G \st p \notin W \} $ -% -\end{tabular} \end{center} -\end{footnotesize} - -``\TT{keep} p$_1$\TT{,}$\cdots$\TT{,}p$_m$ \TT{in} x'' rewrites to -``\TT{fun /"keep"/"these"} \verb+{+p$_1$\TT{,}$\cdots$\TT{,}p$_m$\verb+}+ \verb+{+x\verb+}+'', -``\TT{keep} x'' rewrites to ``\TT{fun /"keep"/"these"} \verb+{}+ \verb+{+x\verb+}+'', -``\TT{keep allbut} p$_1$\TT{,}$\cdots$\TT{,}p$_m$ \TT{in} x'' rewrites to -``\TT{fun /"keep"/"allbut"} \verb+{+p$_1$\TT{,}$\cdots$\TT{,}p$_m$\verb+}+ \verb+{+x\verb+}+'' -and -``\TT{keep allbut} x'' rewrites to ``\TT{fun /"keep"/"allbut"} \verb+{}+ \verb+{+x\verb+}+''. - -Note that ``\TT{keep allbut} x'' gives the same result as ``x'' does. - -\end{itemize} diff --git a/helm/mathql/doc/mathql_operational_core.tex b/helm/mathql/doc/mathql_operational_core.tex deleted file mode 100644 index e096879bb..000000000 --- a/helm/mathql/doc/mathql_operational_core.tex +++ /dev/null @@ -1,547 +0,0 @@ -\subsection {The core language} \label{OCore} - -\subsubsection*{Preliminaries} - -With the above background we are able to type the main objects needed in the -formalization: - -\begin{itemize} - -\item -A path $ p $ is a list of strings therefore its type is -$ T_{0a} = \Listof\ \Str $. - -\item -The attribute contents $ V $ are an object of type $ T_{0b} = \Setof\ \Str $. - -\item -An attribute group $ G $ is an association set connecting the attribute names -to their contents, therefore its type is -$ T_1 = \Setof\ (T_{0a} \times T_{0b}) $. - -\item -A head string $ r $ is an object of type $ \Str $. - -\item -A set $ A $ of attribute groups is an object of type $ T_2 = \Setof\ T_1 $. - -\item -An {\av}, {\ie} a head string with its attribute groups, has type -$ T_3 = \Str \times T_2 $. - -\item -A set $ S $ of {\av}'s is an association set of type $ T_4 = \Setof\ T_3 $. - -\item -A triple of an attributed relation is of type -$ T_5 = \Str \times \Str \times (T_{0a} \to \Str) $. - -\end{itemize} - -When a constant string appearing in a {\MathQL} expression is unquoted, the -surrounding double quotes are deleted and each escaped sequence is translated -according to \figref{EscTS}. -This operation is formally performed by the function -$ \Unquote $ of type $ \Str \to \Str $. -Moreover $ \Name \oft \GP{path} \to T_{0a} $ is a helper function that -converts a linearized path in its structured representation. -Formally $ \Name\ (\TT{/}q_1\TT{/} \cdots \TT{/}q_m) $ -rewrites to $ [\Unquote\ q_1, \cdots, \Unquote\ q_m] $. - -The semantics of {\MathQL} expressions denoting queries is given by the infix -relation $ \daq $ that evaluates a query to an {\av} set. -These expressions are evaluated in a context $ \G = \g $ -which is a triple of association sets that connect -set variables to {\av} sets, element variables to {\av}'s and element -variables to attribute groups. -Therefore the type $ K $ of the context $ \G $ is: - -\begin{footnotesize} \begin{center} -$ -\Setof\ (\GP{svar} \times T_4) \times -\Setof\ (\GP{evar} \times T_3) \times % $ \\ $ \times\ -\Setof\ (\GP{evar} \times T_1) -$ -\end{center} \end{footnotesize} - -\noindent -and the evaluating relation is of the following type: - -\begin{footnotesize} -\begin{center} \begin{tabular}{l} -$ \mathord{\daq} \oft (K \times \GP{query}) \times (K \times T_4) \to \Boole $. -\end{tabular} \end{center} -\end{footnotesize} - -The context components $ \G_s $ and $ \G_e $ are used to store the contents of -variables, while $ \G_g $ is used by the \TT{ex} operator to be presented -below. - -In the following we will write $ (\G, x) \daq S $ to abbreviate -$ (\G, x) \daq (\G, S) $. - -The semantics of {\MathQL} expressions denoting results is given by the infix -relation $ \dar \oft \GP{avs} \times T_4 \to \Boole $ that evaluates a result -to an {\av} set. - -\subsubsection*{Queries} - -The first group of \GP{query} expressions include the representation of -explicit {\av} sets and the syntactic grouping facility: - -\begin{itemize} - -\item -The syntactic grouping is obtained enclosing a \GP{query} between \TT{(} -and \TT{)}. -An explicit {\av} set can be represented either by a single string, which is -converted into a single {\av} with no attributes, or by a \GP{xavs} -(extended {\av} set) expression enclosed between \TT{[} and \TT{]}. -Such an expression describes all the components of an {\av} set and is -evaluated using the rules given below. - -\begin{footnotesize} -\begin{center} -% -\irule{(\G, x) \daq S}{}{(\G, (x)) \daq S} \spc -\irule{q \oft \GP{string}}{}{(\G, q) \daq \{(\Unquote\ q, \ES)\}} -% -\end{center} -\begin{center} -% -\irule{x_1, \cdots, x_m \in \GP{xav} \spc - (\G, \TT{[} x_1 \TT{]}) \daq S_1 \spc \cdots \spc (\G, \TT{[} x_m \TT{]}) \daq S_m}{} - {(\G, \TT{[} x_1 \TT{;} \cdots \TT{;} x_m \TT{]}) \daq S_1 \ssum \cdots \ssum S_m} -% -\end{center} -\begin{center} -% -\irule{q \in \GP{string} \spc g_1, \cdots, g_m \in \GP{xgroup} \icr - (\G, \TT{[} q\ \TT{attr}\ g_1 \TT{]}) \daq S_1 \spc \cdots \spc - (\G, \TT{[} q\ \TT{attr}\ g_m \TT{]}) \daq S_m}{} - {(\G, \TT{[} q\ \TT{attr}\ g_1 \TT{,} \cdots \TT{,} g_m \TT{]}) \daq S_1 \ssum \cdots \ssum S_m} -% -\end{center} -\begin{center} -% -\irule{q \in \GP{string} \spc a_1, \cdots, a_m \in \GP{xatr} \icr - (\G, \TT{[} q\ \TT{attr}\ \{ a_1 \} \TT{]}) \daq S_1 \spc \cdots \spc - (\G, \TT{[} q\ \TT{attr}\ \{ a_m \} \TT{]}) \daq S_m}{} - {(\G, \TT{[} q\ \TT{attr}\ \{ a_1 \TT{;} \cdots \TT{;} a_m \} \TT{]}) \daq S_1 \dsum \cdots \dsum S_m} -% -\end{center} -\begin{center} -% -\irule{q \in \GP{string} \spc p \in \GP{path} \spc x \daq S}{} - {(\G, \TT{[} q\ \TT{attr}\ \{ p = x \} \TT{]}) \daq - \{(\Unquote\ q, \{ \{ (\Name\ p, \Fsts\ S) \} \})\}} -% -\end{center} -\end{footnotesize} - -$ \dsum $ and $ \ssum $ are helper functions describing the two union -operations on {\av} sets: with and without attribute distribution respectively. - -\begin{footnotesize} -\begin{center} \begin{tabular}{lrll} -% -1a & -$ (S_1 \sdor \{(r, A_1)\}) \ssum (S_2 \sdor \{(r, A_2)\}) $ & rewrites to & -$ (S_1 \ssum S_2) \sor \{(r, A_1 \sor A_2)\} $ \\ -1b & $ S_1 \ssum S_2 $ & rewrites to & $ S_1 \sor S_2 $ \\ -2a & -$ (S_1 \sdor \{(r, A_1)\}) \dsum (S_2 \sdor \{(r, A_2)\}) $ & rewrites to & -$ (S_1 \dsum S_2) \sor \{(r, A_1 \distr A_2)\} $ \\ -2b & $ S_1 \dsum S_2 $ & rewrites to & $ S_1 \sor S_2 $ -% -\end{tabular} \end{center} -\end{footnotesize} - -Rules 1a, 2a override 1b, 2b and -$ A_1 \distr A_2 = \{G_1 \ssum G_2 \st G_1 \in A_1, G_2 \in A_2\} $. - -\item -The semantics of the \TT{property} operator is described below. - -In the following rule, -$s$ is ``$ \TT{property}\ h\ p_1\ \TT{main}\ p_2\ \TT{attr}\ e_1, \cdots, -e_m\ \TT{in}\ k\ x $'', $P$ is $ \Property\ h $ and -$A_2$ is $ \{ \Exp\ P\ p_1\ r_1\ \{e_1, \cdots, e_m\}\} $: - -\begin{footnotesize} -\begin{center} -% -\irule -{h \oft \GP{ref} \spc p_1, p_2 \oft \GP{path} \spc - e_1, \cdots, e_m \oft \GP{exp} \spc k \in \TT{["pattern"]?} \spc - (\G, x) \daq S -}{A} -{(\G, s) \daq \bigsum \{ \{(r_2, A_2)\} \st -(\lex r_1 \in \Src\ k\ P\ (\Fsts\ S))\ -(r_1, p_1 \app p_2, r_2) \in P -\}} -% -\end{center} -\end{footnotesize} - -When the \TT{main} clause is not present, we assume $ p_2 = \TT{/} $. - -Here $ \Property\ h $ gives the appropriate access relation according to -the $ h $ flag (this is the primitive function that inspects the {\RDF} -graph). - -$ \Src\ k\ P\ V $ is a helper function giving the source set -according to the $ k $ flag. $ \Src $ is based on $ \Match $, the helper -function handling {\POSIX} regular expressions. -Here $ \Pattern\ W\ s $ is the primitive function returning the subset of -$ W \oft \Setof\ \Str $ whose element match the {\POSIX} 1003.2-1992% -\footnote{In {\POSIX} 1003.1-2001: -\CURI{http://www.unix-systems.org/version3/ieee\_\,std.html}.} -regular expression $ \verb+"^"+ \app s \app \TT{"\$"} $. - -\begin{footnotesize} -\begin{center} \begin{tabular}{rll} -% -$ \Src\ \TT{""}\ P\ V $ & rewrites to & $ V $ \\ -$ \Src\ \TT{"pattern"}\ P\ V $ & rewrites to & -$ \Match\ \{r_1 \st (\lex p, r2)\ (r_1, p, r_2) \in P\} $\ V \\ -$ \Match\ W\ V $ & rewrites to & $ \bigsor \{\Pattern\ W\ s \st s \in V\} $ -% -\end{tabular} \end{center} -\end{footnotesize} - -$ \Exp\ P\ p_1\ r_1\ E $ is the helper function that builds the group of -attributes specified in the \TT{attr} clause. -$ \Exp $ is based on $ \Exp\p $ which handles a single attribute. Formally, -if $ p, p\p \oft \GP{path} $ and $ E \oft \Setof\ \GP{exp} $: - -\begin{footnotesize} -\begin{center} \begin{tabular}{rll} -% -$ f\ P\ r_1\ p_1\ p $ & rewrites to & -$ \{ r_2 \st (r_1, p_1 \app (\Name\ p), r_2) \in P \} $ \\ -$ \Exp\p\ P\ r_1\ p_1\ p $ & rewrites to & -$ \{ (\Name\ p, f\ P\ r_1\ p_1\ p) \} $ \\ -$ \Exp\p\ P\ r_1\ p_1\ (p\ \TT{as}\ p\p) $ & rewrites to & -$ \{ (\Name\ p\p, f\ P\ r_1\ p_1\ p) \} $ \\ -$ \Exp\ P\ r_1\ p_1\ E $ & rewrites to & -$ \bigsum \{ \Exp\p\ P\ r_1\ p_1\ e \st e \in E \} $ \\ -\end{tabular} \end{center} -\end{footnotesize} - -When $ c_1, \cdots, c_n \oft \GP{cons} $ and the clause -``\TT{istrue} $ c_1, \cdots, c_n $'' is present, the set $ P $ must be replaced -with $ \{ (r_1, p, r_2) \in P \st \Istrue\ P\ r_1\ p_1\ C \} $ -where $ C $ is $ \{c_1, \cdots, c_n\} $ and $ \Istrue $ is a helper function -that checks the constraints in $ C $. -$ \Istrue $ is based on $ \Istrue\p $ that handles a single constraint. -Formally, if $ p \oft \GP{path} $ and $ (\G, x) \daq S $: - -\begin{footnotesize} -\begin{center} \begin{tabular}{rll} -% -$ g\ P\ p_1\ p $ & rewrites to & -$ \{ r_2 \st (\lex r_1)\ (r_1, p_1 \app (\Name\ p), r_2) \in P \} $ \\ -$ \Istrue\p\ P\ r_1\ p_1\ (p\ \TT{in}\ x) $ & rewrites to & -$ (f\ P\ r_1\ p_1\ p) \meet \Fsts\ S $ \\ -$ \Istrue\p\ P\ r_1\ p_1\ (p\ \TT{match}\ x) $ & rewrites to & -$ (f\ P\ r_1\ p_1\ p) \meet \Match\ (g\ P\ p_1\ p)\ (\Fsts\ S) $ \\ -$ \Istrue\ P\ r_1\ p_1\ C $ & rewrites to & -$ (\lall c \in W)\ \Istrue\p\ P\ r_1\ p_1\ c $ -% -\end{tabular} \end{center} -\end{footnotesize} - -For each clause ``\TT{isfalse} $ c_1, \cdots, c_n $'' the set $ P $ -must be replaced with \newline -$ \{ (r_1, p, r_2) \in P \st \lnot (\Istrue\ P\ r_1\ p_1\ C) \} $ -(using the above notation). -Note that these substitutions and the former must be composed if necessary. - -If the \TT{inverse} flag is present, also replace the instances of $ P $ in -the rule $A$ and in the definition of $ \Src $ with -$ \{ (r_2, p, r_1) \st (r_1, p, r_2) \in P \} $. - -\end{itemize} - -The second group of \GP{query} expressions allows the context manipulation: - -\begin{itemize} - -\item -The operators for reading variables: - -\begin{footnotesize} \begin{center} -% -\irule{i \oft \GP{svar}}{}{(\g, i) \daq \get{\G_s}{i}} \spc -\irule{i \oft \GP{evar}}{}{(\g, i) \daq \{\get{\G_e}{i}\}} -% -\end{center} \end{footnotesize} - -$ \get{\G_s}{i} $ and $ \{\get{\G_e}{i}\} $ mean $ \ES $ if $ i $ is not defined. - -\item -The \TT{let} operator assigns a set variable (\GP{svar}): - -\begin{footnotesize} -\begin{center} -% -\irule{i \oft \GP{svar} \spc (\G_1, x_1) \daq (\g, S_1) \spc - ((\set{\G_s}{i}{S_1}, \G_e, \G_g), x_2) \daq (\G_2, S_2)} -{}{(\G_1, \TT{let}\ i\ \TT{=}\ x_1\ \TT{in}\ x_2) \daq (\G_2, S_2)} -% -\end{center} -\end{footnotesize} - -The sequential composition operator \TT{;;} has the semantics of a \TT{let} -introducing a fresh variable, so ``$ x_1\ \TT{;;}\ x_2 $'' rewrites -to ``$ \TT{let}\ i\ \TT{=}\ x_1\ \TT{in}\ x_2 $'' where $i$ does not occur in -$x_2$. - -\item -The \TT{ex} and ``dot'' operators provide a way to read the attributes stored -in element variables. -The \TT{ex} (exists) operator gives access to the groups of attributes -associated to the {\av}'s in the $ \G_e $ part of the context and does -this by loading its $ \G_g $ part, which is used by the ``dot'' operator -described below. - -\TT{ex} is true if the query following it is successful for at least one -pool of attribute groups, one for each {\av} in the $ \G_e $ part of the -context. Formally we have the rules: - -\begin{footnotesize} -\begin{center} -% -\irule{(\lall \D_g \in \All\ \G_e)\ ((\G_s, \G_e, \G_g + \D_g), y) \daq \F} - {1}{(\G, \TT{ex}\ y) \daq \F} \spc -\irule{\Nop}{2}{(\G, \TT{ex}\ y) \daq \T} \spc -% -\end{center} -\begin{center} -% -\irule {i \oft \GP{evar} \spc p \oft \GP{path} \spc \get{\get{\G_g}{i}}{\Name\ p} = \{s_1, \cdots, s_m\}}{} - {(\G, i\TT{.}p) \daq \{(s_1, \ES), \cdots, (s_m, \ES)\}} -% -\end{center} -\end{footnotesize} - -where% -\footnote{$\D_g$ has the type of $ \G_g $.} -$ \All\ \G_e = \{\D_g \st \get{\D_g}{i} = G\ \RM{iff}\ G \in \Snd\ \get{\G_e}{i} \} $, -and $ \G = \g $. - -Moreover $ \get{\get{\G_g}{i}}{\Name\ p} $ means $ \ES $ -if $ i $ or $ \Name\ p $ are not defined where appropriate. -Here the first rule has higher precedence than the second one does. - -\end{itemize} - -The third group of \GP{query} expressions allows the {\av} set manipulation: - -\begin{itemize} - -\item -The \TT{add} operator adds a given set of attribute groups to the {\av}'s -of an {\av} set using a union with or without attribute distribution -according to the setting of the \TT{distr} flag. - -\begin{footnotesize} -\begin{center} -% -\irule -{h \in \TT{["distr"]?} \spc a \in \GP{xgroups} \icr - (\G, \TT{[} ""\ \TT{attr}\ a \TT{]}) \daq \{("", A)\} \spc - (\G, x) \daq \{(r_1, A_1), \cdots, (r_m, A_m)\}}{} -{(\G, \TT{add}\ a\ \TT{in}\ x) \daq \{(r_1, A_1 \jolly A), \cdots, (r_m, A_m \jolly A)\}} -% -\end{center} -\begin{center} -% -\irule -{h \in \TT{["distr"]?} \spc i \in \GP{evar} \spc - (\g, x) \daq \{(r_1, A_1), \cdots, (r_m, A_m)\}}{} -{(\g, \TT{add}\ i\ \TT{in}\ x) \daq \{(r_1, A_1 \jolly \Snd\ \get{\G_e}{i}), \cdots, (r_m, A_m \jolly \Snd\ \get{\G_e}{i})\}} -% -\end{center} -\end{footnotesize} - -Where $ \jolly_{\tt""} = \sor $ and $ \jolly_{\tt"distr"} = \distr $. -Moreover $ \Snd\ \get{\G_e}{i} = \ES $ if $i$ is not defined. - -\item -The semantics of the \TT{for} operator is given using the {\For} helper -function: - -\begin{footnotesize} -\begin{center} -% -\irule{i \oft \GP{evar} \spc (\G, x_1) \daq (\G_1, S_1) \spc h \in \TT{["sup"|"inf"]}} -{}{(\G, \TT{for}\ i\ \TT{in}\ x_1\ h\ x_2) \daq \For\ h\ \G_1\ i\ x_2\ S_1} -% -\end{center} -\begin{center} -% -\irule{i \oft \GP{evar} \spc x_2 \oft \GP{query}}{} - {\For\ h\ \G\ i\ x_2\ \ES\ \RM{rewrites to}\ (\G, \ES)} -% -\end{center} -\begin{center} -% -\irule{i \oft \GP{evar} \spc ((\G_s, \set{\G_e}{i}{R}, \G_g), x_2) \daq (\G_2, S_2)} - {}{\For\ h\ \G\ i\ x_2\ (S_1 \sdor \{R\})\ \RM{rewrites to}\ - (\G_2 ,(\Snd\ (\For\ h\ \G_2\ i\ x_2\ S_1)) \jolly_h S_2)} -% -\end{center} -\end{footnotesize} - -Here we have $ R \oft T_3 $, $ \G = \g $, $ \jolly_{\tt"sup"} = \ssum $ and -$ \jolly_{\tt"inf"} = \sprod $. - -$ \dprod $ and $ \sprod $ are helper functions describing the two intersection -operations on {\av} sets: with and without attribute distribution respectively. -They are dual to $ \dsum $ and $ \ssum $. $ \dprod $ does not appear in this -version of {\MathQL} but was used in the earlier versions -\cite{Lor02,GS03,Gui03}. - -\begin{footnotesize} -\begin{center} \begin{tabular}{lrll} -% -1a & -$ (S_1 \sdor \{(r, A_1)\}) \sprod (S_2 \sdor \{(r, A_2)\}) $ & rewrites to & -$ (S_1 \sprod S_2) \sor \{(r, A_1 \sor A_2)\} $ \\ -1b & $ S_1 \sprod S_2 $ & rewrites to & $ \ES $ \\ -2a & -$ (S_1 \sdor \{(r, A_1)\}) \dprod (S_2 \sdor \{(r, A_2)\}) $ & rewrites to & -$ (S_1 \dprod S_2) \sor \{(r, A_1 \distr A_2)\} $ \\ -2b & $ S_1 \dprod S_2 $ & rewrites to & $ \ES $ -% -\end{tabular} \end{center} -\end{footnotesize} - -As for $ \ssum $ and $ \dsum $, rules 1a, 2a override rules 1b, 2b respectively. - -\item -The semantics of the \TT{while} operator is given by the rules below: - -\begin{footnotesize} -\begin{center} -% -\irule{h \in \TT{["sup"|"inf"]} \spc (\G, x_1) \daq (\G_1, \ES)}{1} -{(\G, \TT{while}\ x_1\ h\ x_2) \daq (\G_1, \ES)} -% -\end{center} -\begin{center} -% -\irule -{h \in \TT{["sup"|"inf"]} \spc (\G, x_1) \daq (\G_1, S_1) \spc - (\G_1, x_2) \daq (\G_2, S_2) \icr - (\G_2, \TT{while}\ x_1\ h\ x_2) \daq (\G_3, S)}{2} -{(\G, \TT{while}\ x_1\ h\ x_2) \daq (\G_3, S_2 \jolly_h S)} -% -\end{center} -\end{footnotesize} - -Again $ \jolly_{\tt"sup"} = \ssum $ and $ \jolly_{\tt"inf"} = \sprod $. -Rule 1 takes precedence over rule 2. - -\end{itemize} - -The forth group of \GP{query} constructions makes {\MathQL} extensible. - -\begin{itemize} - -\item -The ``function'' construction invokes an external function returning an {\av} -set. The function is identified by a \GP{path} and its arguments are a set of -\GP{path}'s and a set of \GP{query}'s. It is a mistake to invoke a function -with the wrong number of \GP{path}'s and \GP{query}'s as input (each -particular function defines these numbers independently). - -\begin{footnotesize} -\begin{center} -% -\irule -{p, p_1, \cdots, p_m \in \GP{path} \spc x_1, \cdots, x_n \in \GP{query}}{} -{(\G, p\ \{p_1 \TT{,} \cdots \TT{,} p_m\}\ \{x_1 \TT{,} \cdots \TT{,} x_m\}) - \daq \Fun\ p\ [p_1, \cdots, p_m]\ [x_1, \cdots, x_n]\ \G} -% -\end{center} -\end{footnotesize} - -where $ \Fun \oft \GP{path} \times (\Listof\ \GP{path}) \times (\Listof\ -\GP{query}) \times K \to T_4 $ is the primitive function performing the -low level invocation. -The core language does not include any external function and it is a mistake -to invoke an undefined function. - -\item -The \TT{gen} construction invokes an external function returning a \GP{query}. -The function is identified by a \GP{path} and its arguments are a set of -\GP{query}'s. It is a mistake to invoke a function with the wrong number of -\GP{query}'s as input (each particular function defines this number -independently). - -\begin{footnotesize} -\begin{center} -% -\irule -{p \in \GP{path} \spc x_1, \cdots, x_n \in \GP{query} \spc - (\G, \Gen\ p\ [x_1, \cdots, x_n]\ \G) \daq (\G\p, S)}{} -{(\G, \TT{gen}\ p\ \{x_1 \TT{,} \cdots \TT{,} x_m\}) \daq (\G\p, S)} -% -\end{center} -\end{footnotesize} - -where $ \Gen \oft \GP{path} \times (\Listof\ \GP{query}) \times K \to -\GP{query} $ is the primitive function performing the low level invocation. -The core language does not include any external function of this kind and it -is a mistake to invoke an undefined function. -The construction ``\TT{gen} p \TT{in} x'' rewrites to ``\TT{gen} p \verb+{+x\verb+}+''. - -\end{itemize} - -\subsubsection*{Results} - -An \GP{avs} expression (the explicit representation of an {\av} set denoting a -query result) is evaluated to an {\av} set according to the following rules. - -\begin{footnotesize} -\begin{center} -% -\irule{x_1, \cdots, x_m \in \GP{av} \spc - x_1 \dar S_1 \spc \cdots \spc x_m \dar S_m}{} - {x_1 \TT{;} \cdots \TT{;} x_m \dar S_1 \ssum \cdots \ssum S_m} -% -\end{center} -\begin{center} -% -\irule{q \in \GP{string} \spc g_1, \cdots, g_m \in \GP{group} \spc - q\ \TT{attr}\ g_1 \dar S_1 \spc \cdots \spc - q\ \TT{attr}\ g_m \dar S_m}{} - {q\ \TT{attr}\ g_1 \TT{,} \cdots \TT{,} g_m \dar S_1 \ssum \cdots \ssum S_m} -% -\end{center} -\begin{center} -% -\irule{q \in \GP{string} \spc a_1, \cdots, a_m \in \GP{atr} \spc - q\ \TT{attr}\ \{ a_1 \} \dar S_1 \spc \cdots \spc - q\ \TT{attr}\ \{ a_m \} \dar S_m}{} - {(\G, q\ \TT{attr}\ \{ a_1 \TT{;} \cdots \TT{;} a_m \} \dar S_1 \dsum \cdots \dsum S_m} -% -\end{center} -\begin{center} -% -\irule{q, q_0 \in \GP{string} \spc p \in \GP{path}}{} - {q\ \TT{attr}\ \{ p = q_0 \} \dar - \{(\Unquote\ q, \{ \{ (\Name\ p, \{ \Unquote\ q_0 \}) \} \})\}} -% -\end{center} -\begin{center} -% -\irule{q, q_1, \cdots, q_m \in \GP{string} \spc p \in \GP{path}}{} - {q\ \TT{attr}\ \{ p = \{ q_1 \TT{,} \cdots \TT{,} q_m \} \} \dar - \{(\Unquote\ q, \{ \{ (\Name\ p, \{ \Unquote\ q_1, \cdots, \Unquote\ q_m \}) \} \})\}} -% -\end{center} -\end{footnotesize} diff --git a/helm/mathql/doc/mathql_operational_library.tex b/helm/mathql/doc/mathql_operational_library.tex deleted file mode 100644 index d5c782872..000000000 --- a/helm/mathql/doc/mathql_operational_library.tex +++ /dev/null @@ -1 +0,0 @@ -\subsection {The basic library} diff --git a/helm/mathql/doc/mathql_overview.tex b/helm/mathql/doc/mathql_overview.tex deleted file mode 100644 index 45fd2cb99..000000000 --- a/helm/mathql/doc/mathql_overview.tex +++ /dev/null @@ -1,145 +0,0 @@ -\section{Overview} - -{\MathQL}% -\footnote{See \CURI{http://helm.cs.unibo.it/mathql}.} -is a query language for {\RDF} \cite{RDF,RDFS} databases, developed in the -context of the {\HELM}% -\footnote{See \CURI{http://helm.cs.unibo.it}.} -project \cite{APSCGS03}. -Its name suggests that it is supposed to be the first of a group of query -languages for retrieving information from distributed digital libraries of -formal mathematical knowledge by means of content-aware requests, but no other -languages of this proposal have been implemented yet except for {\MathQL} that -is not Mathematics-oriented. So the name is a bit misleading. -This proposal has several domains of application and may be useful for -database or on-line libraries reviewers, for proof assistants or -proof-checking systems, and also for learning environments because these -applications require features for classifying, searching and browsing -mathematical information in a semantically meaningful way. -Other languages to be defined in the context of the MathQL proposal may be -suitable for queries about the semantic structure of mathematical data: -this includes content-based pattern-matching and possibly other forms of -formal matching involving for instance isomorphism, unification and -$\delta$-expansion% -\footnote{By $\delta$-expansion we mean the expansion of definitions.}. -In this perspective the role of a query on metadata is that of producing a -filtered knowledge base containing relevant information for subsequent queries -of other kind (see \cite{GSC03} for a more detailed description of this -approach). - -{\MathQL} is carefully designed for making up for two limitations that seem to -characterize several implementations and proposals of current {\RDF}-oriented -query languages, namely the insufficient compliance with the most requested -features and the poor attention paid to query result management. -Thus the language has the following design goals: - -\begin{enumerate} - -\item -compliance with the main requirements stated by the {\RDF} community; - -\item -native support for post-processing the query results; - -\item -{\HELM}-independent implementation of the query engine. - -\end{enumerate} - -We will briefly analyze these features in the remaining part of this -section. - -\vspace{-1pc} - -\subsubsection*{The main requirements from the RDF community} - -As a query language for {\RDF} databases, {\MathQL} has a well-conceived -semantics, defined in term of an abstract metadata model, according to which -queries return exhaustive solutions. -The language provides facilities for imposing query constraints based on -{\RDFS} \cite{RDFS} and for the traversal of compound values of properties. -It also provides a full set of Boolean operators to compose the query -constraints and facilities for selecting resources or literals by means of -{\POSIX} regular expressions. -Moreover the language allows to customize the query results specifying what -part of a solution should be preserved, and supports a machine-processable -{\XML} \cite{XML} syntax as well as a human-readable textual syntax to achieve -the best usability. -The two syntaxes concern both queries and results, making {\MathQL} usable in -a distributed environment where query engines are implemented as stand-alone -components. In this setting in fact both the queries and their results must be -exchanged by the system's components and thus need to be clearly encoded. - -{\MathQL} provides a graph-oriented access to the {\RDF} metadata, based on -tree instantiation. -This approach has the advantage of providing an abstraction over the -concrete representation of the {\RDF} database (that can consist of {\RDF} -triples and {\XML} files simultaneously) at the user level, and this is -definitely desirable especially in a distributed context. - -{\MathQL} query results are meant to capture the structure of trees coming -from an {\RDF} graph and for this purpose a standard $1$- or $2$-dimensional -organization (as provided by most {\RDF}-oriented query languages) is not -satisfactory. {\MathQL} approach is to use a $4$-dimensional organization -for its query results. - -\vspace{-1pc} - -\subsubsection*{Post-processing and code generation capabilities} - -The {\MathQL} query engine, that is written in {\CAML}% -\footnote{See \CURI{http://caml.inria.fr}.} -for an easy integration with the {\HELM} software, provides two ways of -processing the query results: at {\CAML} side and natively. - -At {\CAML} side, an application issues a query calling a function of the -engine and manipulates the result either operating directly on its internal -representation (through a low-level interface), or using a set of dedicated -functions specifically designed to manage the query results. -This set of functions includes a basic library but is extensible depending -on the {\CAML} modules included in the engine at compile-time. In this way -an expert user can write a {\CAML} module with new dedicated functions and can -include it in the engine recompiling it. - -{\MathQL} supports native post-processing of the query results including the -standard constructions of an imperative Turing-complete programming language, -whose aim is definitely not that of being all-purpose (the user can work at -{\CAML} side for that), but of being optimized for the management of the -query results. -In this context an {\SQL}-like ``select-from-where'' construction is provided -(as required by the {\RDF} community) as well as a mechanism for accessing the -post-processing dedicated functions available to the engine. - -Moreover the language provides access to an extensible set of code-generating -functions (also available at {\CAML} side) that the expert user can define -writing suitable {\CAML} modules for the engine. -Note that the generated code is always {\MathQL} code. -The code generation features allow to build complex queries incrementally and -in an automatic manner, as required by the needs of the {\HELM} project. -Using the native programming language, instead, queries can include the -post-processing algorithms on their results so the querying code and the -subsequent processing code (if needed) are treated together as a -self-contained object that can be computed by a single engine. -In this sense the alternative of performing a complex query on a remote -component issuing some {\MathQL} querying code followed by some {\CAML} -post-processing code is really infeasible in a distributed context. - -\vspace{-1pc} - -\subsubsection*{Physical organization of the RDF database} - -The implementation of the {\MathQL} query engine does not depend on any -software developed within the {\HELM} project, nor it depends on the {\HELM} -metadata model in any way. - -However the engine does make few assumptions on the way metadata are -physically organized and needs some user-provided knowledge about the concrete -metadata representation. -Metadata stored as {\RDF} triples are accessed through a {\MySQL}% -\footnote{See \CURI{http://www.mysql.com}.} -or a {\PostgreSQL}% -\footnote{See \CURI{http://www.postgresql.org}.} -engine, while metadata stored as {\RDF}/{\XML} files are accessed through a -{\Galax}% -\footnote{See \CURI{http://db.bell-labs.com/galax/}.} -{\XQuery} \cite{XQuery} engine. diff --git a/helm/mathql/doc/mathql_tests.tex b/helm/mathql/doc/mathql_tests.tex deleted file mode 100644 index 883bf23ab..000000000 --- a/helm/mathql/doc/mathql_tests.tex +++ /dev/null @@ -1,30 +0,0 @@ -\section{A use case: retrieving the transitive principles} - -In this section we briefly present one on the many queries that we are using -to test {\MathQL}.4: the one that retrieves the transitive principles stored -in the {\HELM} library. The details on the {\RDF} metadata used to index the -contents of the library can be found in \cite{Sch02,Gui03,GSC03}. -This query, executed in {\MySQL}-mode on an AMD Athlon 1.5 GHz, retrieved -$55$ {\HELM} objects (out of $41451$) in $4.00s$ (the interpreter worked -for $0.31s$) after having issued $2205$ {\SQL} queries to the underlying -database. This test was executed on April 2 2004 by the Author. - -\begin{footnotesize} \begin{verbatim} -gen /"helm"/"aliases" in let $sets = property inverse /"refSort" istrue -/"h:sort" in $SET, /"h:position" in $MC, /"h:depth" in "0" of "" in let -$prop = property inverse /"refSort" istrue /"h:sort" in $PROP, -/"h:position" in $MC, /"h:depth" in "2" of "" in let $rels0 = for @uri -in $prop sup add {/"set" = property /"refObj" main /"h:occurrence" istrue -/"h:position" in $MH of @uri} in @uri in let $rels = select @uri from -$rels0 where ex ((count @uri./"set" eq "1") and (@uri./"set" sub $sets)) -in let $trans0 = for @uri in $rels sup add {/"rel" = @uri; /"set" = proj -/"set" of @uri} in property inverse /"refObj" main /"h:occurrence" istrue -/"h:position" in $MC, /"h:depth" in "5" of @uri in let $trans1 = for @uri -in $trans0 sup add distr {/"premises" = property /"refObj" main /"h:occur -rence" istrue /"h:position" in $MH of @uri; /"extra" = property /"refObj" -main /"h:occurrence" istrue /"h:position" in {$IC, $IH} of @uri} in @uri -in let $trans = select @uri from $trans1 where ex (not @uri./"extra" and -(@uri./"premises" sub {@uri./"rel", @uri./"set"})) in keep $trans -\end{verbatim} \end{footnotesize} %$ - -\input{mathql_tests_transitive} diff --git a/helm/mathql/grammar.txt b/helm/mathql/grammar.txt deleted file mode 100644 index 5622761a3..000000000 --- a/helm/mathql/grammar.txt +++ /dev/null @@ -1,148 +0,0 @@ -GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI -MATHEMATICAL QUERY LANGUAGE (MathQL) - - := (* clausola iniziale *) - - := ( ) (* parentesizzazione *) - | (* var per insieme singoletto - di una risorsa *) - | (* var per insieme di risorse - (insieme di valori) *) - | REF (* oggetto/i referenziato/i da - URI esplicita/e *) - | PATTERN (* oggetto/i referenziato/i da - URI ottenute da espansione - del pattern *) - | SELECT IN WHERE (* selezione *) - | LET BE IN (* assegnazione a set-var in - contesto *) - | LET BE IN (* assegnamento a value-var - in contesto*) - | RELATION ATTR - (* unione insieme risorse in - relazione specificata con le - risorse in set, ognuna con - attributi (ATTR) *) - | UNION (* unione *) - | INTERSECT (* intersezione *) - | DIFF (* differenza *) - - := "" (* relazione (proprieta') *) - | SUB (* proprieta' e - sotto-proprieta' *) - | SUPER (* proprieta' e - super-proprieta' *) - - := - (* relazione (proprieta') *) - | "/" - (* insieme di stringhe: - proprieta' strutturata *) - - := - | , - - - := ( ) (* parentesizzazione *) - | TRUE (* vero *) - | FALSE (* falso *) - | NOT (* negazione *) - | AND (* congiunzione *) - | OR (* disgiunzione *) - | EQ (* uguaglianza tra insiemi - stringhe (case sensitive) *) - | SUB (* operazione di sottoinsieme - tra insiemi stringhe *) - | MEET (* operazione di meet tra - insiemi stringhe *) - | EX (* existential on attributes - of references *) - := ( ) (* parentesizzazione *) - | {} (* insieme vuoto*) - | (* stringa singoletto *) - | {}(* insieme stringhe *) - | REFOF (* insieme riferimenti *) - | . (* variabile per insieme - stringhe, relativa a - riferimento *) - | - (* applicazione di funzione - specificata a riferimento - o insiemi di rif. o var*) - | (* vvar introduced by LET *) - - := - | , - (* lista di stringhe *) - - := FUN (* funzione generale *) - | - - := ATTRIBUTE (* funzione proprieta': restituisce - suoi valori (anche strutturati) - (e delle sotto-proprieta' o - super-proprieta' *) - - - := @ (* variabile per riferimento *) - := $ (* variabile per insiemi - stringhe *) - := % (* variabile per insiemi - riferimenti *) - - -- Idea di base: grammatica del linguaggio semplice e permissiva (duttile) -- MEET e' definito come "esiste almeno un elemento che appartiene - all'interserzione tra due insiemi" -- le stringhe sono "case sensitive" -- la funzione non definita sull'argomento restituisce la stringa nulla -- le si presuppongono essere istanziate come URI references costituite - da un URI e da un fragment identifier opzionale complete; i riferimenti - identificano risorse -- Precedenza operatori: - NOT (+) DIFF - AND INTERSECT - OR (-) UNION -- L'ordinamento di default e' quello alfabetico crescente in base al nome - delle rvar -- REF aumenta performance perche' NON accede al data base (costoso). -- l'argomento di PATTERN ha sintassi di una espressione regolare - POSIX 1003.2-1992 -- Possibile FUN (): - NAME (* URIREF -> nome_oggetto *) -- MEET aumenta performance nel caso si verifichi (a in S) oppure - (b in S) = ({a,b} meet S) perche' valuta S una volta sola - Il MEET codifica inoltre l'esistenziale su risorse (URI) in un certo - insieme che soddisfa certe condizioni -- record . serve per disambiguare nomi uguali di variabili -- Operatori (come EQ) hanno nomi abbreviati rispetto ai costrutti del - linguaggio -- EX verfica che la sua condizione sia vera per almeno un insieme di attributi - associato all'URI in rvar -- Possibili RELATION sono: - USE con attributo POSITION (riferimenti backward) e valori MAINHYPOTHESIS, - HYPOTHESIS, MAINCONCLUSION, CONCLUSION, BODY - USEBY con attributo POSITION (riferimenti forward) e valori MAINHYPOTHESIS, - HYPOTHESIS, MAINCONCLUSION, CONCLUSION, BODY - CONSTRUCTORS - INTHEORY con attributo ITEMTYPE (riferimenti oggetti contenuti in teorie) - THEORYREFTO con attributo ITEMTYPE (riferimenti teorie referenti a oggetti) -- invece di come argomento di poiche' la REF non - e' piu' restrittiva su argomento/i e quindi e' inutile imporne l'uso quando - si passano i riferimenti alle funzioni. Con l'utente e' libero - di passare direttamente le stringhe dei riferimenti. -- Il costrutto di ordinamento: - SORTEDBY (* unione insieme ordinato secondo - valore funzione e ordine *) - := DESC (* ordinamento decrescente *) - | ASC (* ordinamento crescente *) - perde di senso nel caso di metadati, poiche' per definizione le proprieta' - in RDF possono essere ripetute quindi restituiscono (come anche le funzioni - in generale) valori multipli per ogni riferimento (ambiguita' nell'ordine) -- Possibili proprieta' (): - le DC: TITLE, CONTRIBUTOR, CREATOR, PUBLISHER, SUBJECT, DESCRIPTION, DATE, - TYPE, FORMAT, IDENTIFIER, LANGUAGE, RELATION, SOURCE, COVERAGE, RIGHTS, - RIGHTS; and INSTITUTION, CONTACT, FIRSTVERSION, MODIFIED, THEORY -- Il concetto di Classe, sottoclasse, superclasse, puo' essere visto come una - particolare proprieta' (type o tipo) di una risorsa, e quindi codificabile - da RELATION \ No newline at end of file diff --git a/helm/mathql/homepage/authors.html b/helm/mathql/homepage/authors.html deleted file mode 100644 index 7ed38d33f..000000000 --- a/helm/mathql/homepage/authors.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - MathQL - - - - - - - - - -

MathQL-1

- -

A query language for RDF metadata

- - - - - - - - - -
- - - - - - - - - - - -
    -
  • The authors
    -
  • - - -
- - -
-
- -
The authors
-
-
- MathQL-1is developed by Ferruccio Guidi and Irene Schena at the Department of Computer Science of the - University of Bologna since April - 2002.
-
- Ferruccio Guidi obtained a Master degree in Mathematics -at the University of Padova and a PhD in Computer Science at the University - of Bologna. His research interests include computer-assisted proof development, - Martin-Löf type theory and substructural logic. He is a member of -the HELM Working Group and of -the "Paulus Venetus" Research -Group in Logic.
-
- Irene Schena obtained a Master Degree in Computer Science -and a Ph.D. in Computer Science at the University of Bologna. Her research -interests include Linear Logic and Web Technologies. She is a member of the - HELM Working Group and of the - W3C Math Working Group.
-
- Contacts: fguidi@cs.unibo.it, - schena@cs.unibo.it.
-
-
- - diff --git a/helm/mathql/homepage/documentation.html b/helm/mathql/homepage/documentation.html deleted file mode 100644 index e91e9a719..000000000 --- a/helm/mathql/homepage/documentation.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - MathQL - - - -
-

MathQL-1

-
- -
-

A query language for RDF metadata

-
-
- - - - - - - - - - - -

-
- - - - - - -
    -
  • Documentation
  • - -
- - - - - - -
-
Documentation
- -


- All available information about MathQL-1 can be found in the papers below - (listed in order of relevance).
- The newest features of MathQL-1, which are not included in this documentation, - are reported in the What's new section.

- -

Papers concerning the developement version of MathQL-1:

- - - Papers concerning the latest stable version of MathQL-1: - - - - - Papers concerning the earlier versions of MathQL-1: - -
    -
  • F. Guidi and I. Schena: A Query Language for a Metadata Framework - about Mathematical Resources. In Proc. of the 2nd International Conference - on Mathematical Knowledge Management (MKM 2003). Bertinoro, Italy, February - 2003. LNCS 2594, pages 105-118, Springer. 2003.
  • - -
- - - - - - - - -
-
-
-
- - diff --git a/helm/mathql/homepage/features.html b/helm/mathql/homepage/features.html deleted file mode 100644 index ae5333f29..000000000 --- a/helm/mathql/homepage/features.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - MathQL - - - - - - - - - -

MathQL-1

- -

A query language for RDF metadata

- - - - - - - - - -
- - - -
    -
  • Features
  • - -
- - - - - - - - - - -
-
- -
Goals  and features
-
-
- MathQL-1 is designed to achieve the following goals:
- -
    -
  1. Exploitation of RDF technology - to manage metadata and compliance with the main requirements for an - RDF query language. In particular:
  2. - -
- -
-
    -
  • MathQL-1 provides facilities for hierarchical constraints - based on RDF Schema and for - traversal of compound values of properties.
  • - -
- -
    -
  • MathQL-1 provides a full set of Boolean operators to compose - the query constraints and facilities for selecting URI's or literals by means - of regular expressions.
  • - -
- -
    -
  • MathQL-1 allows to customize the query results specifying - what part of a solution should be preserved or discarded.
  • - -
- -
    -
  • MathQL-1 has a well-conceived semantics defined in term -of an abstract metadata model, imposes that queries return exhaustive solutions - and includes a "select-from-where"-like construction.
  • - -
- -
    -
  • MathQL-1 supports a machine-processable XML syntax as well as a human-readable - textual syntax to achieve the best usability.
    -
  • - -
-
- -
    -
  1. Careful treatment of query results that are as important - as the queries themselves. In particular:
    -
  2. - -
- -
-
    -
  • MathQL-1 query results have a 4-dimensional geometry whereas - other languages assume that query results are returned in 1-dimensional structures - (i.e. lists of resources) or 2-dimensional structures (i.e. relational database - tables). This allows to get better outcomes from queries returning structured - results.
    -
  • - -
- -
    -
  • Besides the syntax for queries, MathQL-1 provides a syntax - for query results with its own rigorously defined semantics.
    -
  • - -
-
- -
    -
  1. Exploitation of constructions borrowed from programming -languages to allow sophisticated queries that need computation over the -queried data. In particular:
    -
  2. - -
- -
-
    -
  • MathQL-1 supports variables for storing intermediate query - results, provides iterators over these results, has a conditional operator - and includes logging facilities for debugging purposes.
  • - -
-
-
-
- - diff --git a/helm/mathql/homepage/implementation.html b/helm/mathql/homepage/implementation.html deleted file mode 100644 index fa268005b..000000000 --- a/helm/mathql/homepage/implementation.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - - - - - MathQL - - - -
-

MathQL-1

-
- -
-

A query language for RDF metadata

-
-
- - - - - - - - - - - -

-
- - - - - - - - -
    -
  • Implementation
  • - -
- - - - -
-
Implementation
- -


- The MathQL-1 Suite for HELM is implemented in Caml and is currently available through -the HELM CVS repository. -The Suite provides the following  software components: 

- -
    -
  1. The basic Caml package for MathQL-1 (mathql) - provides a HELM independent Caml -representation of queries and query results, plus some general purpose utilities.
  2. - -
- -
    -
  1. The MathQL-1 interpreter (mathql_interpreter) -provides the proper search engine and is now HELM independent.
  2. -
-
    -
  1. The HELM query generator (mathql_generator) - allows to build specific kinds of MathQL-1 queries, which are meaningful -in the context of HELM, starting from a high-level description of the wanted - results. These queries are described at an abstract level in the following - paper:
  2. - -
- -
-
    -
  • F. Guidi and C. Sacerdoti Coen: Querying Distributed Digital Libraries - of Mathematics. In Proc. of the 11th Symposium on the Integration of -Symbolic Computation and Mechanized Reasoning (Calculemus 2003). Rome, Italy, -September 2003. pages 17-30, Aracne. 2003.
  • - -
-
- -
    -
  1. The testing software for the MathQL-1 Suite (mathql_test) - provides three textual interfaces (one for the basic package, one for the - interpreter and one for the query generator) with specific features meant - for testing.
  2. - -
- The current version of the Suite, realized entirely by F. Guidi, implements - MathQL-1 version 3 (i.e. MathQL-1.3). The newly implemented features, which - are not included in the official documentation - yet, are reported in the What's new section. - -

The latest HELM - query engine (enter here - if you are behind a restrictive firewall), powered by MathQL-1.3, allows -to issue both user-defined queries and the specific queries produced by the -HELM query generator.
-  

-
-
-
- - diff --git a/helm/mathql/homepage/index.html b/helm/mathql/homepage/index.html deleted file mode 100644 index 769689e52..000000000 --- a/helm/mathql/homepage/index.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - MathQL - - - - - - - - - - - - -

MathQL-1

- -

A query language for RDF metadata

- - - - - - - - - - -
- - -
    -
  • Forward
    -
  • - - - -
- - - - - - - - - - - - - - - - - -
-
- - -
Forward
-
-
- The MathQL proposal rises in the context of the HELM project, which aims at the development -of a suitable technology for the creation and maintenance of a virtual, -distributed, hypertextual library of structured mathematical knowledge -based on XML technology, through the - integration of the current proof assistants and logical frameworks with -the most recent technologies for the development of Web applications and -electronic publishing.
-
- The objective of the MathQL proposal is the development -of a set of query languages enabling the retrieval of formalized mathematical - Web resources on the basis of content-aware requests. The first of these - languages, MathQL-1, is focused on querying an arbitrary - RDF database because RDF is -the W3C standard for describing - Web resources at the general-purpose content level.
-
- As an RDF query language, MathQL-1 provides the main features - required by the RDF community while complying with the needs of HELM. - The peculiar aspects of this language concern the query results, -which are highly structured and possess their own syntax, formally -explained by a rigorous semantics.
-
- MathQL-1 is particularly helpful in distributed systems -where query engines are implemented as stand-alone units, because -in this situation the query results are exchanged between the system -components as well as the queries, and thus both the queries and the query -results need to be encoded in a clearly defined format.
-
- Other languages to be developed in the context of the MathQL proposal - will be suitable for queries about the semantic structure of mathematical - data: this will include content-based pattern-matching (MathQL-2) and -possibly other forms of formal matching involving for instance isomorphism, -unification and definitions expansion (MathQL-3).
-
-
-
- -
This site is maintained by Ferruccio Guidi, last update: November -13, 2003.
-
-
-
- - -
-
- - diff --git a/helm/mathql/homepage/links.html b/helm/mathql/homepage/links.html deleted file mode 100644 index ec8c4f218..000000000 --- a/helm/mathql/homepage/links.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - MathQL - - - - - - - - - - -

MathQL-1

- -

A query language for RDF metadata

- - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
    -
  • Links
    -
  • - - -
-
-
- -
Links
-
- -
    -
  • HELM Project homepage, -   MOWGLI Project homepage
  • - -
- -
    -
  • W3C XML resources,   - W3C RDF resources
  • - -
- -
    -
  • Some RDF query languages having a homepage
  • - -
- -
DAML+OIL   rdfDB   RDFPath   RDFQL   RDQL   RQL   RuleML   TRIPLE   SquishQL   XDD
-
- -
The developers wishing to have their RDF query language - listed here may contact the authors.
-
-
-
- - diff --git a/helm/mathql/homepage/whatsnew.html b/helm/mathql/homepage/whatsnew.html deleted file mode 100644 index 1a15631ba..000000000 --- a/helm/mathql/homepage/whatsnew.html +++ /dev/null @@ -1,328 +0,0 @@ - - - - MathQL - - - - - - - - - - -

MathQL-1

- -

A query language for RDF metadata

- - - - - - - - - -
- - - - - - - -
    -
  • What's new
    -
  • - - -
- - - - - - - - - - - - -
-
- -
What's new
-
-
- This page reports the newly implemented - features of MathQL-1 that are not included in the official documentation yet.
-
- -

-

New -  MathQL-1 version 4 now under development ...

-We are now implementing the new unstable version of MathQL-1 (i.e. MathQL-1.4). -The main goals of this release are:
-
    -
  • A clear distinction between the core language and the auxiliary -functions, which should be part of an extensible library.
    -
  • -
-
    -
  • The elimination of the explicit casts between the <query> -and <value> types in queries.
    -
  • -
- -
-
-

Changes and additions to MathQL-1 operators:

-
- -
    -
  • The add operator now accepts a syntax extension allowing - to specify more than one explicit attribute group.
  • - -
- -
The syntax now is:
- -
<query> := "add" [ "distr" ]? [ <groups> | -<avar> ] "in" <query>
- <groups> := <group> [ ";" <group> ]*
- <group> := <attribute> [ "," <attribute> ]*
- <attribute> := <value> "as" <path>
-
- Examples:
- the query add "1" as "a", "2" as "b" in subj "A" gives the result - "A" attr {"a"="1"; "b"="2"} while
- the query add "1" as "a"; "2" as "b" in subj "A" gives the result - "A" attr {"a"="1"}, {"b"="2"}.
-
- -
    -
  • The new align operator takes an integer i (represented - as a string), a multiple string value v and returns the same v - where each string with length n < i is prefixed with i - n - spaces. The syntax of the add operator is:
  • - -
- -
<value> := "align" <string> "in" <value>
-
- This operators aligns strings containing numbers so that their alphabetic - order agrees with their numeric order.
-
- -
    -
  • The intersect operator now intersects the attribute - groups of the matching subject strings set-theoretically rather than making - their "Cartesian product". This semantics reduces the computational costs - and makes intersection the dual of union.
  • - -
- -
    -
  • The property operator now accepts more than one isfalse - clause to increase the complexity of the constraint condition used to filter - the raw query results. This feature is exploited in the queries produced - by the HELM query generator.
  • - -
-
- -
-
-

The PostgreSQL database map:

-
- The PostgreSQL database map is a file describing how the MathQL-1 - interpreter must interact with the underlying PostgreSQL database, when -it is run in Postgres mode. Currently this file contains the following information:
- -
    -
  • the database connection string to be used when the interpreter - opens a connection with the database;
  • - -
- -
    -
  • the map describing the correspondence between the metadata - access paths used by the property operator and the fields of the -database tables.
  • - -
- The format of the file is textual and line oriented, but a corresponding - XML syntax will be provided soon.
- The first line must contain the database connection string and the subsequent - lines contain the map with the following syntax:
- -
    -
  • blank lines: ignored (used for separation);
  • - -
- -
    -
  • lines starting with a # followed by a space: ignored (used -for comments);
    -
  • - -
- -
    -
  • <table_name>  <field_name>  "<-"  - [  <path_component>  ]*
    -
  • - -
- -
the information about the metadata denoted by the given - path is found in the given field of the given table in the database. For -example the line:
-
- refobj  h_occurrence  <-  refObj  h:occurrence
-
- tells that the metadata denoted by the path /"refObj"/"h:occurrence" - is found in the field "h_occurrence" of the table "refobj" in the database, - while:
-
- refobj  source  <-
-
- tells that the metadata denoted by the path / is found in the field - "source" of the table "refobj" in the database;
-
- -
    -
  • <table_name>  <field_name>  "<+"  - [  <path_component>  ]*
    -
  • - -
- -
same as the previous but defines a default table and field - for the given path. This is used to force the interpreter to query a particular - table when the information denoted by a path can be found in more than one - table and field. For example:
-
- objectname  source  <+
- refobj           source  <-
- refrel            source  -<-
- refsort          source  <-
-
- tells that the metadata denoted by the path / is found in the "source" - field of the "objectname", "refobj", "refrel" and "refsort" tables, and -that the first choice is preferred;
-
- -
    -
  • <table_name>  "<-" [ <path_component>  ]*
  • - -
- -
the given path denotes a structured metadata whose components - are found in the fields of the given table. For example:
-
- refobj  <-  refObj
-
- tells that the path /"refObj" denotes a structured metadata whose - components are found in the fields of the table "refobj";
-
- -
    -
  • <table_name>  "<+" [ <path_component>  ]*
  • - -
- -
same as the previous but tells that this is a default  correspondence; -
-
- -
    -
  • <virtual_table_name>  "->" <concrete_table_name>
  • - -
- -
defines a correspondence between a virtual table name an - a concrete table name. All the <table_name> entries represent virtual - table names that are mapped to concrete table names using the identity function - unless a particular mapping is defined for them using the above construction. - This mechanism allows to define several set of metadata on the same database - table as in:
-
- refobj           source      -        <-
- refobj           h_occurrence  <- -  refObj           h:occurrence
- backpointer  source           -   <-  backPointer  h:occurrence
- backpointer  h_occurrence  <-
- backpointer                   -        ->  refobj
-
- -
which defines four path accessing two virtual tables ("refobj" - and "backpointer") and then maps these tables in a single concrete table;
-
- -
    -
  • "->"
    -
  • - -
- -
a line like this must end the map file. 
-
- Here you can find the current - version of PostgreSQL database map for HELM.
-
- How does the interpreter use the map? The map file is read -during the interpreter initialization process from the file pointed by the -MATHQL_DB_MAP environment variable and is used during the execution of each - property operation in the issued queries.When executing a property -operation, the interpreter uses the map to find the smallest set of database -tables containing the information required by the given access paths and then -queries these tables to obtain the wanted information.
-
-
-
- - diff --git a/helm/mathql/query.xml b/helm/mathql/query.xml deleted file mode 100644 index 4efca730d..000000000 --- a/helm/mathql/query.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - diff --git a/helm/mathql/result.xml b/helm/mathql/result.xml deleted file mode 100644 index dc79c0879..000000000 --- a/helm/mathql/result.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - MainHypothesis - - - InConclusion - - - - - diff --git a/helm/mathql/xmathql.dtd b/helm/mathql/xmathql.dtd deleted file mode 100644 index 96b52a22b..000000000 --- a/helm/mathql/xmathql.dtd +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/mathql/xmqlresult.dtd b/helm/mathql/xmqlresult.dtd deleted file mode 100644 index 9b3333d38..000000000 --- a/helm/mathql/xmqlresult.dtd +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helm/mathql_db_map.txt b/helm/mathql_db_map.txt deleted file mode 100644 index c58d843d2..000000000 --- a/helm/mathql_db_map.txt +++ /dev/null @@ -1,26 +0,0 @@ -objectName source <+ -objectName value <- objectName -refObj <- refObj -refObj source <- -refObj h_occurrence <- refObj h:occurrence -refObj h_position <- refObj h:position -refObj h_depth <- refObj h:depth -refRel <- refRel -refRel source <- -refRel h_position <- refRel h:position -refRel h_depth <- refRel h:depth -refSort <- refSort -refSort source <- -refSort h_sort <- refSort h:sort -refSort h_position <- refSort h:position -refSort h_depth <- refSort h:depth -backPointer <- backPointer -backPointer source <- backPointer h:occurrence -backPointer h_occurrence <- -backPointer h_position <- backPointer h:position -backPointer h_depth <- backPointer h:depth -no_inconcl_aux source <- -no_inconcl_aux no <- no_inconcl - -backPointer -> refObj - -> diff --git a/helm/mathql_test/.cvsignore b/helm/mathql_test/.cvsignore deleted file mode 100644 index 180760238..000000000 --- a/helm/mathql_test/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -*.cm[aiox] *.cmxa *.opt mqtop mqitop mqgtop examples* -mQGTopParser.ml mQGTopParser.mli mQGTopLexer.ml diff --git a/helm/mathql_test/.depend b/helm/mathql_test/.depend deleted file mode 100644 index b8d9e578a..000000000 --- a/helm/mathql_test/.depend +++ /dev/null @@ -1,6 +0,0 @@ -mqgtop.cmo: mQGTopLexer.cmo mQGTopParser.cmi -mqgtop.cmx: mQGTopLexer.cmx mQGTopParser.cmx -mQGTopParser.cmo: mQGTopParser.cmi -mQGTopParser.cmx: mQGTopParser.cmi -mQGTopLexer.cmo: mQGTopParser.cmi -mQGTopLexer.cmx: mQGTopParser.cmx diff --git a/helm/mathql_test/Makefile b/helm/mathql_test/Makefile deleted file mode 100644 index 45aa2a498..000000000 --- a/helm/mathql_test/Makefile +++ /dev/null @@ -1,79 +0,0 @@ -BIN_DIR = /usr/local/bin -REQUIRES = unix helm-registry helm-cic_textual_parser \ - helm-mathql helm-mathql_interpreter helm-mathql_generator -PREDICATES = -OCAMLOPTIONS = -package "$(REQUIRES)" -predicates "$(PREDICATES)" -thread -OCAMLC = ocamlfind ocamlc $(OCAMLOPTIONS) -OCAMLOPT = ocamlfind ocamlopt $(OCAMLOPTIONS) -OCAMLDEP = ocamldep -OCAMLYACC = ocamlyacc -OCAMLLEX = ocamllex - -LIBRARIES = $(shell ocamlfind query -recursive -predicates "byte $(PREDICATES)" -format "%d/%a" $(REQUIRES)) -LIBRARIES_OPT = $(shell ocamlfind query -recursive -predicates "native $(PREDICATES)" -format "%d/%a" $(REQUIRES)) - -MQTOP = mqtop.ml -MQITOP = mqitop.ml -MQGTOP = mqgtop.ml - -DEPOBJS = $(MQTOP) $(MQITOP) $(MQGTOP) -AUXOBJS = mQGTopParser.ml mQGTopParser.mli mQGTopLexer.ml - -all: $(DEPOBJS:.ml=) -opt: $(DEPOBJS:.ml=.opt) - -depend: $(AUXOBJS) - $(OCAMLDEP) $(DEPOBJS) $(AUXOBJS) > .depend - -mqtop: $(MQTOP:.ml=.cmo) $(LIBRARIES) - $(OCAMLC) -linkpkg -o mqtop $(MQTOP:.ml=.cmo) - -mqtop.opt: $(MQTOP:.ml=.cmx) $(LIBRARIES_OPT) - $(OCAMLOPT) -linkpkg -o mqtop.opt $(MQTOP:.ml=.cmx) - -mqitop: $(MQITOP:.ml=.cmo) $(LIBRARIES) - $(OCAMLC) -linkpkg -o mqitop $(MQITOP:.ml=.cmo) - -mqitop.opt: $(MQITOP:.ml=.cmx) $(LIBRARIES_OPT) - $(OCAMLOPT) -linkpkg -o mqitop.opt $(MQITOP:.ml=.cmx) - -mqgtop: mQGTopParser.cmi $(AUXOBJS:.ml=.cmo) $(MQGTOP:.ml=.cmo) $(LIBRARIES) - $(OCAMLC) -linkpkg -o mqgtop $(AUXOBJS:.ml=.cmo) $(MQGTOP:.ml=.cmo) - -mqgtop.opt: $(AUXOBJS:.ml=.cmx) $(MQGTOP:.ml=.cmx) $(LIBRARIES_OPT) - $(OCAMLOPT) -linkpkg -o mqgtop.opt $(AUXOBJS:.ml=.cmx) $(MQGTOP:.ml=.cmx) - -.SUFFIXES: .ml .mli .cmo .cmi .cmx .mly .mll -.ml.cmo: $(LIBRARIES) - $(OCAMLC) -c $< -.mli.cmi: $(LIBRARIES) - $(OCAMLC) -c $< -.ml.cmx: $(LIBRARIES_OPT) - $(OCAMLOPT) -c $< -.mly.ml: - $(OCAMLYACC) $< -.mly.mli: - $(OCAMLYACC) $< -.mll.ml: - $(OCAMLLEX) $< - -$(DEPOBJS:%.ml=%.cmo): $(LIBRARIES) -$(DEPOBJS:%.ml=%.cmx): $(LIBRARIES_OPT) - -clean: - rm -f *.cm[iox] *.o $(DEPOBJS:.ml=) $(DEPOBJS:.ml=.opt) \ - mQGTopParser.ml mQGTopParser.mli mQGTopLexer.ml - -install: - cp $(DEPOBJS:.ml=) $(DEPOBJS:.ml=.opt) $(BIN_DIR) - -uninstall: - cd $(BIN_DIR) - rm -f $(DEPOBJS:.ml=) $(DEPOBJS:.ml=.opt) - -.PHONY: install uninstall clean - -ifneq ($(MAKECMDGOALS), depend) - include .depend -endif - diff --git a/helm/mathql_test/mQGTopLexer.mll b/helm/mathql_test/mQGTopLexer.mll deleted file mode 100644 index 7e69bccf6..000000000 --- a/helm/mathql_test/mQGTopLexer.mll +++ /dev/null @@ -1,71 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(* AUTOR: Ferruccio Guidi - *) - -{ - open MQGTopParser - - let debug = false - - let out s = if debug then prerr_endline s -} - -let SPC = [' ' '\t' '\n']+ -let ALPHA = ['A'-'Z' 'a'-'z' '_'] -let NUM = ['0'-'9'] -let IDEN = ALPHA (NUM | ALPHA)* -let QSTR = [^ '"' '\\']+ - -rule comm_token = parse - | "(*" { comm_token lexbuf; comm_token lexbuf } - | "*)" { () } - | ['*' '('] { comm_token lexbuf } - | [^ '*' '(']* { comm_token lexbuf } -and string_token = parse - | '"' { DQ } - | '\\' _ { STR (String.sub (Lexing.lexeme lexbuf) 1 1) } - | QSTR { STR (Lexing.lexeme lexbuf) } - | eof { EOF } -and spec_token = parse - | "(*" { comm_token lexbuf; spec_token lexbuf } - | SPC { spec_token lexbuf } - | '"' { let str = qstr string_token lexbuf in - out ("STR " ^ str); STR str } - | '{' { out "LC"; LC } - | '}' { out "RC"; RC } - | ',' { out "CM"; CM } - | '$' { out "DL"; DL } - | "mustobj" { out "MOBJ" ; MOBJ } - | "mustsort" { out "MSORT" ; MSORT } - | "mustrel" { out "MREL" ; MREL } - | "onlyobj" { out "OOBJ" ; OOBJ } - | "onlysort" { out "OSORT" ; OSORT } - | "onlyrel" { out "OREL" ; OREL } - | "universe" { out "UNIV" ; UNIV } - | IDEN { let id = Lexing.lexeme lexbuf in - out ("ID " ^ id); ID id } - | eof { EOF } diff --git a/helm/mathql_test/mQGTopParser.mly b/helm/mathql_test/mQGTopParser.mly deleted file mode 100644 index 3e260d88f..000000000 --- a/helm/mathql_test/mQGTopParser.mly +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - */ - -/* AUTOR: Ferruccio Guidi - */ - -%{ - let f (x, y, z) = x - let s (x, y, z) = y - let t (x, y, z) = z - - module T = MQGTypes - module U = MQGUtil -%} - %token ID - %token CONURI - %token VARURI - %token INDTYURI - %token INDCONURI - %token ALIAS EOF - - %start interp - %type CicTextualParser0.interpretation_codomain_item option> interp - - %token STR - %token DL DQ LC RC CM - %token MOBJ MSORT MREL OOBJ OSORT OREL UNIV - - %start qstr specs - %type qstr - %type specs -%% - uri: - | CONURI { CicTextualParser0.ConUri $1 } - | VARURI { CicTextualParser0.VarUri $1 } - | INDTYURI { CicTextualParser0.IndTyUri ((fst $1), (snd $1)) } - | INDCONURI { CicTextualParser0.IndConUri ((f $1), (s $1), (t $1)) } - ; - alias: - | ALIAS ID uri { ($2, CicTextualParser0.Uri $3) } - ; - aliases: - | alias aliases { $1 :: $2 } - | EOF { [] } - ; - interp: - | aliases { function CicTextualParser0.Id s -> (try Some (List.assoc s $1) - with Not_found -> None) - | _ -> None } - ; - - qstr: - | DQ { "" } - | STR qstr { $1 ^ $2 } - ; - strs: - | STR CM strs { $1 :: $3 } - | STR { [$1] } - | { [] } - ; - uri_list: - | LC strs RC { List.map U.uri_of_mathql $2 } - ; - sort_list: - | LC strs RC { List.map U.sort_of_mathql $2 } - ; - pos_list: - | LC strs RC { List.map U.position_of_mathql $2 } - ; - depth_list: - | LC strs RC { List.map U.depth_of_mathql $2 } - ; - spec: - | MOBJ uri_list pos_list depth_list { T.MustObj ($2, $3, $4) } - | MSORT sort_list pos_list depth_list { T.MustSort ($2, $3, $4) } - | MREL pos_list depth_list { T.MustRel ($2, $3) } - | OOBJ uri_list pos_list depth_list { T.OnlyObj ($2, $3, $4) } - | OSORT sort_list pos_list depth_list { T.OnlySort ($2, $3, $4) } - | OREL pos_list depth_list { T.OnlyRel ($2, $3) } - | UNIV pos_list { T.Universe $2 } - ; - specs: - | spec specs { $1 :: $2 } - | EOF { [] } - ; diff --git a/helm/mathql_test/mqgtop.ml b/helm/mathql_test/mqgtop.ml deleted file mode 100644 index bb7764747..000000000 --- a/helm/mathql_test/mqgtop.ml +++ /dev/null @@ -1,336 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(* AUTOR: Ferruccio Guidi - *) - -let query_num = ref 1 - -let interp_file = ref "interp.cic" - -let log_file = ref "" - -let show_queries = ref false - -let int_options = ref "" - -let nl = "

\n" - -module U = MQueryUtil -module I = MQueryInterpreter -module C = MQIConn -module G = MQueryGenerator -module L = MQGTopLexer -module P = MQGTopParser -module TL = CicTextualLexer -module TP = CicTextualParser -module C3 = CGLocateInductive -module C2 = CGSearchPattern -module C1 = CGMatchConclusion -module GU = MQGUtil - -let get_handle () = - C.init ~flags:(C.flags_of_string ! int_options) - ~log:(fun s -> print_string s; flush stdout) () - -let issue handle q = - let mode = [Open_wronly; Open_append; Open_creat; Open_text] in - let perm = 64 * 6 + 8 * 6 + 4 in - let time () = - let lt = Unix.localtime (Unix.time ()) in - "NEW LOG: " ^ - string_of_int (lt.Unix.tm_mon + 1) ^ "-" ^ - string_of_int (lt.Unix.tm_mday + 1) ^ "-" ^ - string_of_int (lt.Unix.tm_year + 1900) ^ " " ^ - string_of_int (lt.Unix.tm_hour) ^ ":" ^ - string_of_int (lt.Unix.tm_min) ^ ":" ^ - string_of_int (lt.Unix.tm_sec) - in - let log q r = - let och = open_out_gen mode perm ! log_file in - let out = output_string och in - if ! query_num = 1 then out (time () ^ nl); - out ("Query: " ^ string_of_int ! query_num ^ nl); - U.text_of_query out nl q; - out ("Result: " ^ nl); - U.text_of_result out nl r; - close_out och - in - if ! show_queries then U.text_of_query (output_string stdout) nl q; - let r = I.execute handle q in - U.text_of_result (output_string stdout) nl r; - if ! log_file <> "" then log q r; - incr query_num; - flush stdout - -let get_interp () = - let lexer = function - | TP.ID s -> P.ID s - | TP.CONURI u -> P.CONURI u - | TP.VARURI u -> P.VARURI u - | TP.INDTYURI (u, p) -> P.INDTYURI (u, p) - | TP.INDCONURI (u, p, s) -> P.INDCONURI (u, p, s) - | TP.LETIN -> P.ALIAS - | TP.EOF -> P.EOF - | _ -> assert false - in - let ich = open_in ! interp_file in - let lexbuf = Lexing.from_channel ich in - let f = P.interp (fun x -> lexer (TL.token x)) lexbuf in - close_in ich; f - -let get_terms interp = - let interp = get_interp () in - let lexbuf = Lexing.from_channel stdin in - let rec aux () = - try - let dom, mk_term = - CicTextualParserContext.main [] [] CicTextualLexer.token lexbuf - in - (snd (mk_term interp)) :: aux () - with - CicTextualParser0.Eof -> [] - in - aux () - -let pp_type_of uri = - let u = UriManager.uri_of_string uri in - let s = match (CicEnvironment.get_obj u) with - | Cic.Constant (_, _, ty, _) -> CicPp.ppterm ty - | Cic.Variable (_, _, ty, _) -> CicPp.ppterm ty - | _ -> "Current proof or inductive definition." -(* - | Cic.CurrentProof (_,conjs,te,ty) -> - | C.InductiveDefinition _ -> -*) - in print_endline s; flush stdout - -let rec display = function - | [] -> () - | term :: tail -> - display tail; - print_string ("? " ^ CicPp.ppterm term ^ nl); - flush stdout - -let execute ich = - let lexbuf = Lexing.from_channel ich in - let handle = get_handle () in - let rec execute_aux () = - try - let q = U.query_of_text lexbuf in - issue handle q; execute_aux () - with End_of_file -> () - in - execute_aux (); - C.close handle - -let compose () = - let handle = get_handle () in - let cl = P.specs L.spec_token (Lexing.from_channel stdin) in - issue handle (G.compose cl); - C.close handle - -let locate name = - let handle = get_handle () in - issue handle (G.locate name); - C.close handle - -let unreferred target source = - let handle = get_handle () in - issue handle (G.unreferred target source); - C.close handle - -let mpattern n m l = - let queries = ref [] in - let univ = Some C2.universe in - let handle = get_handle () in - let rec pattern level = function - | [] -> () - | term :: tail -> - pattern level tail; - print_string ("? " ^ CicPp.ppterm term ^ nl); - let t = U.start_time () in - let om,rm,sm = C2.get_constraints term in - let oml,rml,sml = List.length om, List.length rm, List.length sm in - let oo, ool = if level land 1 = 0 then None, 0 else Some om, oml in - let ro, rol = if level land 2 = 0 then None, 0 else Some rm, rml in - let so, sol = if level land 4 = 0 then None, 0 else Some sm, sml in - let q = G.query_of_constraints univ (om,rm,sm) (oo,ro,so) in - if not (List.mem q ! queries) then - begin - issue handle q; - Printf.eprintf "[%i] " (pred ! query_num); flush stderr; - Printf.printf "%i GEN = %i: %s" - (pred ! query_num) (oml + rml + sml + ool + rol + sol) - (U.stop_time t ^ nl); - flush stdout; queries := q :: ! queries - end - in - for level = max m n downto min m n do - Printf.eprintf "\nmqgtop: pattern: trying level %i\n" level; - flush stderr; pattern level l - done; - Printf.eprintf "\nmqgtop: pattern: %i queries issued\n" - (List.length ! queries); - flush stderr; - C.close handle - -let mbackward n m l = - let queries = ref [] in - let univ = Some C1.universe in - let handle = get_handle () in - let rec backward level = function - | [] -> () - | term :: tail -> - backward level tail; - print_string ("? " ^ CicPp.ppterm term ^ nl); - let t = U.start_time () in - let list_of_must, only = C1.get_constraints [] [] term in - let max_level = pred (List.length list_of_must) in - let must = List.nth list_of_must (min level max_level) in - let q = G.query_of_constraints univ (must, [], []) (Some only , None, None) in - if not (List.mem q ! queries) then - begin - issue handle q; - Printf.eprintf "[%i] " (pred ! query_num); flush stderr; - Printf.printf "%i GEN = %i: %s" - (pred ! query_num) (List.length must) - (U.stop_time t ^ nl); - flush stdout; queries := q :: ! queries - end - in - for level = max m n downto min m n do - Printf.eprintf "\nmqgtop: backward: trying level %i\n" level; - flush stderr; backward level l - done; - Printf.eprintf "\nmqgtop: backward: %i queries issued\n" - (List.length ! queries); - flush stderr; - C.close handle - -let inductive l = - let queries = ref [] in - let univ = None in - let handle = get_handle () in - let rec aux = function - | [] -> () - | term :: tail -> - aux tail; - print_string ("? " ^ CicPp.ppterm term ^ nl); - let t = U.start_time () in - let m = C3.get_constraints term in - let q = G.query_of_constraints univ m (None, None, None) in - if not (List.mem q ! queries) then - begin - issue handle q; - Printf.eprintf "[%i] " (pred ! query_num); flush stderr; - Printf.printf "%i GEN: %s" - (pred ! query_num) (U.stop_time t ^ nl); - flush stdout; queries := q :: ! queries - end - in - aux l; - Printf.eprintf "\nmqgtop: inductive: %i queries issued\n" - (List.length ! queries); - flush stderr; - C.close handle - -let check () = - let handle = get_handle () in - Printf.eprintf - "mqgtop: current options: %s, connection: %s\n" - ! int_options (if C.connected handle then "on" else "off"); - C.close handle - -let prerr_help () = - prerr_endline "\nUSAGE: mqgtop.opt OPTIONS < INPUTFILE\n"; - prerr_endline "The tool provides a textual interface to the HELM Query Generator, used for"; - prerr_endline "testing purposes. mqgtop reads its input from stdin and produces ith output"; - prerr_endline "in HTML on stdout. The options can be one ore more of the following.\n"; - prerr_endline "OPTIONS:\n"; - prerr_endline "-h -help shows this help message"; - prerr_endline "-q -show-queries outputs generated queries"; - prerr_endline "-l -log-file FILE sets the log file"; - prerr_endline "-o -options STRING sets the interpreter options"; - prerr_endline "-c -check checks the database connection"; - prerr_endline "-t -typeof URI outputs the CIC type of the given HELM object"; - prerr_endline "-x -execute issues a query given in the input file"; - prerr_endline "-i -interp FILE sets the CIC short names interpretation file"; - prerr_endline "-d -disply outputs the CIC terms given in the input file"; - prerr_endline "-L -locate ALIAS issues the \"Locate\" query for the given alias"; - prerr_endline "-U T_PATTERN S_PATTERN issues the \"Unreferred\" query for the given patterns"; - prerr_endline "-C -compose issues the \"Compose\" query reading its specifications"; - prerr_endline " from the input file"; - prerr_endline "-B -backward LEVEL issues the \"Backward\" query for the given level on all"; - prerr_endline " CIC terms in the input file"; - prerr_endline "-MB -multi-backward MAX issues the \"Backward\" query for each level from max to 0"; - prerr_endline " on all CIC terms in the input file"; - prerr_endline "-P -pattern LEVEL issues the \"Pattern\" query for the given level on all"; - prerr_endline " CIC terms in the input file"; - prerr_endline "-MP -multi-pattern issues the \"Pattern\" query for each level from 7 to 0"; - prerr_endline " on all CIC terms in the input file"; - prerr_endline "-I issues the \"Inductive\" query on all CIC terms in the"; - prerr_endline " input file\n"; - prerr_endline "NOTES: * current interpreter options are:"; - prerr_endline " P (postgres), G (Galax), S (show statistics), Q (quiet)"; - prerr_endline " * CIC terms are read with the HELM CIC Textual Parser"; - prerr_endline " * -typeof does not work with inductive types and proofs in progress\n" - -let rec parse = function - | [] -> () - | ("-h"|"-help") :: rem -> prerr_help (); parse rem - | ("-i"|"-interp") :: arg :: rem -> interp_file := arg; parse rem - | ("-d"|"-display") :: rem -> display (get_terms ()); parse rem - | ("-t"|"-typeof") :: arg :: rem -> pp_type_of arg; parse rem - | ("-x"|"-execute") :: rem -> execute stdin; parse rem - | ("-q"|"-show-queries") :: rem -> show_queries := true; parse rem - | ("-o"|"-options") :: arg :: rem -> int_options := arg; parse rem - | ("-c"|"-check") :: rem -> check (); parse rem - | ("-l"|"-log-file") :: arg :: rem -> log_file := arg; parse rem - | ("-L"|"-Locate") :: arg :: rem -> locate arg; parse rem - | ("-C"|"-compose") :: rem -> compose (); parse rem - | ("-B"|"-backward") :: arg :: rem -> - let m = (int_of_string arg) in mbackward m m (get_terms ()); parse rem - | ("-MB"|"-multi-backward") :: arg :: rem -> - let m = (int_of_string arg) in mbackward m 0 (get_terms ()); parse rem - | ("-P"|"-pattern") :: arg :: rem -> - let m = (int_of_string arg) in mpattern m m (get_terms ()); parse rem - | ("-MP"|"-multi-pattern") :: rem -> mpattern 7 0 (get_terms ()); parse rem - | ("-U"|"-unreferred") :: arg1 :: arg2 :: rem -> - unreferred arg1 arg2; parse rem - | ("-I"|"-inductive") :: rem -> inductive (get_terms ()); parse rem - | _ :: rem -> parse rem - -let _ = - Helm_registry.load_from "/home/fguidi/miohelm/gTopLevel.conf.xml"; - let t = U.start_time () in -(* - CicLogger.log_callback := - (CicLogger.log_to_html - ~print_and_flush:(fun s -> print_string s; flush stdout)) ; -*) - parse (List.tl (Array.to_list Sys.argv)); - prerr_endline ("mqgtop: done in " ^ (U.stop_time t)); - exit 0 diff --git a/helm/mathql_test/mqitop.ml b/helm/mathql_test/mqitop.ml deleted file mode 100644 index 055841052..000000000 --- a/helm/mathql_test/mqitop.ml +++ /dev/null @@ -1,53 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(* AUTOR: Ferruccio Guidi - *) - -module U = MQueryUtil -module I = MQueryInterpreter -module C = MQIConn - -let _ = - Helm_registry.load_from "/home/fguidi/miohelm/gTopLevel.conf.xml"; - let t = U.start_time () in - let ich = Lexing.from_channel stdin in - let flags = if Array.length Sys.argv >= 2 then Sys.argv.(1) else "" in - let log s = print_string s; flush stdout in - let handle = C.init ~flags:(C.flags_of_string flags) ~log:log () in - if not (C.connected handle) then begin - print_endline "mqitop: no connection"; flush stdout - end; - let rec aux () = - let t = U.start_time () in - let r = I.execute handle (U.query_of_text ich) in -(* U.text_of_result log r "\n"; -*) Printf.printf "mqitop: query: %s,%i\n" (U.stop_time t) (List.length r); - flush stdout; aux() - - in - begin try aux() with End_of_file -> () end; - C.close handle; - Printf.printf "mqitop: done: %s\n" (U.stop_time t) diff --git a/helm/mathql_test/mqtop.ml b/helm/mathql_test/mqtop.ml deleted file mode 100644 index 851a63391..000000000 --- a/helm/mathql_test/mqtop.ml +++ /dev/null @@ -1,40 +0,0 @@ -(* Copyright (C) 2000, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -(* AUTOR: Ferruccio Guidi - *) - -let _ = - let module U = MQueryUtil in - let t = U.start_time () in - let ich = Lexing.from_channel stdin in - let rec aux () = - let t = U.start_time () in - U.text_of_query print_string "\n" (U.query_of_text ich); - Printf.printf "mqtop: query: %s\n" (U.stop_time t); - flush stdout; aux() - in - begin try aux() with End_of_file -> () end; - Printf.printf "mqtop: done: %s\n" (U.stop_time t) diff --git a/helm/matita/.cvsignore b/helm/matita/.cvsignore deleted file mode 100644 index 1f613f38a..000000000 --- a/helm/matita/.cvsignore +++ /dev/null @@ -1,45 +0,0 @@ -*.a -*.annot -autom4te.cache -buildTimeConf.ml -cicbrowser -cicbrowser.opt -*.cma -*.cmi -*.cmo -*.cmx -*.cmxa -config.log -config.status -configure -.depend -gtkmathview.matita.conf.xml -Makefile -matita -.matita -matitac -matitaclean -matitaclean.opt -matita.conf.xml -matita.conf.xml -matita.conf.xml.sample -matitac.opt -matitadep -matitadep.opt -matitaGeneratedGui.ml -matitaGeneratedGui.mli -matita.glade.bak -matita.gladep -matita.gladep.bak -matitamake -matitamake.opt -matita.opt -matita.opt -dump_moo -dump_moo.opt -matitatop -*.moo -*.o -*.static -*.swp -*.upx diff --git a/helm/matita/.depend b/helm/matita/.depend deleted file mode 100644 index ff2e6c935..000000000 --- a/helm/matita/.depend +++ /dev/null @@ -1,95 +0,0 @@ -dump_moo.cmo: matitaMoo.cmi matitaLog.cmi buildTimeConf.cmo -dump_moo.cmx: matitaMoo.cmx matitaLog.cmx buildTimeConf.cmx -matitacleanLib.cmo: matitaSync.cmi matitaMoo.cmi matitaMisc.cmi matitaLog.cmi \ - matitaExcPp.cmi matitaDb.cmi buildTimeConf.cmo matitacleanLib.cmi -matitacleanLib.cmx: matitaSync.cmx matitaMoo.cmx matitaMisc.cmx matitaLog.cmx \ - matitaExcPp.cmx matitaDb.cmx buildTimeConf.cmx matitacleanLib.cmi -matitaclean.cmo: matitacleanLib.cmi matitaMisc.cmi matitaLog.cmi \ - matitaInit.cmi matitaDb.cmi matitaclean.cmi -matitaclean.cmx: matitacleanLib.cmx matitaMisc.cmx matitaLog.cmx \ - matitaInit.cmx matitaDb.cmx matitaclean.cmi -matitacLib.cmo: matitacleanLib.cmi matitaTypes.cmi matitaMoo.cmi \ - matitaLog.cmi matitaInit.cmi matitaExcPp.cmi matitaEngine.cmi \ - matitaDb.cmi buildTimeConf.cmo matitacLib.cmi -matitacLib.cmx: matitacleanLib.cmx matitaTypes.cmx matitaMoo.cmx \ - matitaLog.cmx matitaInit.cmx matitaExcPp.cmx matitaEngine.cmx \ - matitaDb.cmx buildTimeConf.cmx matitacLib.cmi -matitac.cmo: matitamake.cmo matitadep.cmi matitaclean.cmi matitacLib.cmi -matitac.cmx: matitamake.cmx matitadep.cmx matitaclean.cmx matitacLib.cmx -matitaDb.cmo: matitaMisc.cmi matitaDb.cmi -matitaDb.cmx: matitaMisc.cmx matitaDb.cmi -matitadep.cmo: matitacleanLib.cmi matitaMisc.cmi matitaLog.cmi matitaInit.cmi \ - matitadep.cmi -matitadep.cmx: matitacleanLib.cmx matitaMisc.cmx matitaLog.cmx matitaInit.cmx \ - matitadep.cmi -matitaDisambiguator.cmo: matitaTypes.cmi matitaDisambiguator.cmi -matitaDisambiguator.cmx: matitaTypes.cmx matitaDisambiguator.cmi -matitaEngine.cmo: matitacleanLib.cmi matitaTypes.cmi matitaSync.cmi \ - matitaMoo.cmi matitaMisc.cmi matitaLog.cmi matitaDisambiguator.cmi \ - matitaDb.cmi matitaEngine.cmi -matitaEngine.cmx: matitacleanLib.cmx matitaTypes.cmx matitaSync.cmx \ - matitaMoo.cmx matitaMisc.cmx matitaLog.cmx matitaDisambiguator.cmx \ - matitaDb.cmx matitaEngine.cmi -matitaExcPp.cmo: matitaTypes.cmi matitaMoo.cmi matitaDisambiguator.cmi \ - matitaExcPp.cmi -matitaExcPp.cmx: matitaTypes.cmx matitaMoo.cmx matitaDisambiguator.cmx \ - matitaExcPp.cmi -matitaGeneratedGui.cmo: matitaGeneratedGui.cmi -matitaGeneratedGui.cmx: matitaGeneratedGui.cmi -matitaGtkMisc.cmo: matitaTypes.cmi matitaGeneratedGui.cmi matitaGtkMisc.cmi -matitaGtkMisc.cmx: matitaTypes.cmx matitaGeneratedGui.cmx matitaGtkMisc.cmi -matitaGui.cmo: matitamakeLib.cmi matitacleanLib.cmi matitaTypes.cmi \ - matitaScript.cmi matitaMoo.cmi matitaMisc.cmi matitaMathView.cmi \ - matitaLog.cmi matitaGtkMisc.cmi matitaGeneratedGui.cmi matitaExcPp.cmi \ - matitaDisambiguator.cmi buildTimeConf.cmo matitaGui.cmi -matitaGui.cmx: matitamakeLib.cmx matitacleanLib.cmx matitaTypes.cmx \ - matitaScript.cmx matitaMoo.cmx matitaMisc.cmx matitaMathView.cmx \ - matitaLog.cmx matitaGtkMisc.cmx matitaGeneratedGui.cmx matitaExcPp.cmx \ - matitaDisambiguator.cmx buildTimeConf.cmx matitaGui.cmi -matitaInit.cmo: matitamakeLib.cmi matitaDb.cmi buildTimeConf.cmo \ - matitaInit.cmi -matitaInit.cmx: matitamakeLib.cmx matitaDb.cmx buildTimeConf.cmx \ - matitaInit.cmi -matitaLog.cmo: matitaLog.cmi -matitaLog.cmx: matitaLog.cmi -matitamakeLib.cmo: matitaLog.cmi buildTimeConf.cmo matitamakeLib.cmi -matitamakeLib.cmx: matitaLog.cmx buildTimeConf.cmx matitamakeLib.cmi -matitamake.cmo: matitamakeLib.cmi matitaInit.cmi -matitamake.cmx: matitamakeLib.cmx matitaInit.cmx -matitaMathView.cmo: matitaTypes.cmi matitaScript.cmi matitaMisc.cmi \ - matitaLog.cmi matitaGuiTypes.cmi matitaGtkMisc.cmi matitaExcPp.cmi \ - buildTimeConf.cmo matitaMathView.cmi -matitaMathView.cmx: matitaTypes.cmx matitaScript.cmx matitaMisc.cmx \ - matitaLog.cmx matitaGuiTypes.cmi matitaGtkMisc.cmx matitaExcPp.cmx \ - buildTimeConf.cmx matitaMathView.cmi -matitaMisc.cmo: matitaTypes.cmi buildTimeConf.cmo matitaMisc.cmi -matitaMisc.cmx: matitaTypes.cmx buildTimeConf.cmx matitaMisc.cmi -matita.cmo: matitaTypes.cmi matitaScript.cmi matitaMathView.cmi matitaLog.cmi \ - matitaInit.cmi matitaGui.cmi matitaGtkMisc.cmi matitaEngine.cmi \ - buildTimeConf.cmo -matita.cmx: matitaTypes.cmx matitaScript.cmx matitaMathView.cmx matitaLog.cmx \ - matitaInit.cmx matitaGui.cmx matitaGtkMisc.cmx matitaEngine.cmx \ - buildTimeConf.cmx -matitaMoo.cmo: matitaTypes.cmi matitaMoo.cmi -matitaMoo.cmx: matitaTypes.cmx matitaMoo.cmi -matitaScript.cmo: matitamakeLib.cmi matitacleanLib.cmi matitaTypes.cmi \ - matitaSync.cmi matitaMisc.cmi matitaLog.cmi matitaEngine.cmi \ - matitaDisambiguator.cmi matitaDb.cmi buildTimeConf.cmo matitaScript.cmi -matitaScript.cmx: matitamakeLib.cmx matitacleanLib.cmx matitaTypes.cmx \ - matitaSync.cmx matitaMisc.cmx matitaLog.cmx matitaEngine.cmx \ - matitaDisambiguator.cmx matitaDb.cmx buildTimeConf.cmx matitaScript.cmi -matitaSync.cmo: matitaTypes.cmi matitaMisc.cmi matitaLog.cmi matitaDb.cmi \ - matitaSync.cmi -matitaSync.cmx: matitaTypes.cmx matitaMisc.cmx matitaLog.cmx matitaDb.cmx \ - matitaSync.cmi -matitaTypes.cmo: matitaLog.cmi matitaTypes.cmi -matitaTypes.cmx: matitaLog.cmx matitaTypes.cmi -matitaDisambiguator.cmi: matitaTypes.cmi -matitaEngine.cmi: matitaTypes.cmi -matitaGtkMisc.cmi: matitaGeneratedGui.cmi -matitaGui.cmi: matitaGuiTypes.cmi matitaDisambiguator.cmi -matitaGuiTypes.cmi: matitaTypes.cmi matitaLog.cmi matitaGeneratedGui.cmi -matitaMathView.cmi: matitaTypes.cmi matitaGuiTypes.cmi -matitaMoo.cmi: matitaTypes.cmi -matitaScript.cmi: matitaTypes.cmi -matitaSync.cmi: matitaTypes.cmi diff --git a/helm/matita/.ocamlinit b/helm/matita/.ocamlinit deleted file mode 100644 index 1585f71b2..000000000 --- a/helm/matita/.ocamlinit +++ /dev/null @@ -1,44 +0,0 @@ -(* directories *) -#directory "../ocaml/cic" -#directory "../ocaml/cic_notation" -#directory "../ocaml/cic_omdoc" -#directory "../ocaml/cic_proof_checking" -#directory "../ocaml/cic_textual_parser2" -#directory "../ocaml/cic_transformations" -#directory "../ocaml/cic_unification" -#directory "../ocaml/getter" -#directory "../ocaml/hbugs" -#directory "../ocaml/mathql" -#directory "../ocaml/mathql_generator" -#directory "../ocaml/mathql_interpreter" -#directory "../ocaml/metadata" -#directory "../ocaml/paramodulation" -#directory "../ocaml/registry" -#directory "../ocaml/tactics" -#directory "../ocaml/thread" -#directory "../ocaml/urimanager" -#directory "../ocaml/xml" -#directory "../ocaml/xmldiff" - -(* custom printers *) -let fppuri ppf uri = - let s = UriManager.string_of_uri uri in - Format.pp_print_string ppf s -;; - -#install_printer CicMetaSubst.fppsubst;; -#install_printer CicMetaSubst.fppterm;; -#install_printer CicMetaSubst.fppmetasenv;; -#install_printer fppuri;; - -(* utility functions *) -let go = MatitacLib.interactive_loop;; - -(* let's go! *) -let _ = - at_exit (fun () -> MatitacLib.clean_exit None); - if Array.length Sys.argv > 1 then - MatitacLib.main `TOPLEVEL - else - MatitacLib.go () -;; diff --git a/helm/matita/AUTHORS b/helm/matita/AUTHORS deleted file mode 100644 index a2da427a5..000000000 --- a/helm/matita/AUTHORS +++ /dev/null @@ -1,5 +0,0 @@ -Andrea Asperti -Luca Padovani -Enrico Tassi -Claudio Sacerdoti Coen -Stefano Zacchiroli diff --git a/helm/matita/LICENSE b/helm/matita/LICENSE deleted file mode 100644 index 7665cd2ce..000000000 --- a/helm/matita/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (C) 2000-2005, HELM Team. - -Matita is part of HELM, an Hypertextual, Electronic -Library of Mathematics, developed at the Computer Science -Department, University of Bologna, Italy. - -HELM is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -HELM is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with HELM; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. - -For details, see the HELM World-Wide-Web page, -http://helm.cs.unibo.it/ diff --git a/helm/matita/Makefile.in b/helm/matita/Makefile.in deleted file mode 100644 index 127f8a407..000000000 --- a/helm/matita/Makefile.in +++ /dev/null @@ -1,365 +0,0 @@ -export SHELL=/bin/bash - -NULL = - -MAKEFLAGS+=--no-print-directory -OCAMLPATH = ../ocaml/METAS/ -OCAMLFIND = OCAMLPATH=$(OCAMLPATH):$$OCAMLPATH @OCAMLFIND@ -CAMLP4O = @CAMLP4O@ -LABLGLADECC = @LABLGLADECC@ -REQUIRES = @FINDLIB_REQUIRES@ -CREQUIRES = @FINDLIB_CREQUIRES@ -DEPREQUIRES = @FINDLIB_DEPREQUIRES@ -CLEANREQUIRES = @FINDLIB_CLEANREQUIRES@ -MAKEREQUIRES = @FINDLIB_MAKEREQUIRES@ -HAVE_OCAMLOPT = @HAVE_OCAMLOPT@ - -OCAML_FLAGS = -pp $(CAMLP4O) -PKGS = -package "$(REQUIRES)" -CPKGS = -package "$(CREQUIRES)" -DEPPKGS = -package "$(DEPREQUIRES)" -CLEANPKGS = -package "$(CLEANREQUIRES)" -MAKEPKGS = -package "$(MAKEREQUIRES)" -OCAML_THREADS_FLAGS = -thread -OCAML_DEBUG_FLAGS = -g -OCAMLC_FLAGS = $(OCAML_FLAGS) $(OCAML_THREADS_FLAGS) -OCAMLC = $(OCAMLFIND) ocamlc $(OCAMLC_FLAGS) $(OCAML_DEBUG_FLAGS) -OCAMLOPT = $(OCAMLFIND) opt $(OCAMLC_FLAGS) -OCAMLDEP = $(OCAMLFIND) ocamldep $(OCAML_FLAGS) - -MATITA_FLAGS = -noprofile -NODB=false -ifeq ($(NODB),true) - MATITA_FLAGS += -nodb -endif - -# objects for matita (GTK GUI) -CMOS = \ - buildTimeConf.cmo \ - matitaLog.cmo \ - matitaTypes.cmo \ - matitaMoo.cmo \ - matitaMisc.cmo \ - matitaDb.cmo \ - matitamakeLib.cmo \ - matitaInit.cmo \ - matitaSync.cmo \ - matitaDisambiguator.cmo \ - matitaExcPp.cmo \ - matitacleanLib.cmo \ - matitaEngine.cmo \ - matitacLib.cmo \ - matitaScript.cmo \ - matitaGeneratedGui.cmo \ - matitaGtkMisc.cmo \ - matitaMathView.cmo \ - matitaGui.cmo \ - $(NULL) -# objects for matitac (batch compiler) -CCMOS = \ - buildTimeConf.cmo \ - matitaLog.cmo \ - matitaTypes.cmo \ - matitaMoo.cmo \ - matitaMisc.cmo \ - matitaDb.cmo \ - matitamakeLib.cmo \ - matitaInit.cmo \ - matitaSync.cmo \ - matitaDisambiguator.cmo \ - matitaExcPp.cmo \ - matitacleanLib.cmo \ - matitaEngine.cmo \ - matitacLib.cmo \ - $(NULL) -MAINCMOS = \ - matitadep.cmo \ - matitaclean.cmo \ - matitamake.cmo \ - $(NULL) -DEPCMOS = $(CCMOS) -CLEANCMOS = $(CCMOS) -MAKECMOS = \ - buildTimeConf.cmo \ - matitaLog.cmo \ - matitamakeLib.cmo \ - $(NULL) -PROGRAMS_BYTE = matita matitac cicbrowser matitadep matitaclean matitamake dump_moo -PROGRAMS = $(PROGRAMS_BYTE) matitatop -PROGRAMS_OPT = $(patsubst %,%.opt,$(PROGRAMS_BYTE)) - -.PHONY: all -all: matita.conf.xml $(PROGRAMS) coq.moo - -matita.conf.xml: matita.conf.xml.sample - @if diff matita.conf.xml.sample matita.conf.xml 1>/dev/null 2>/dev/null; then\ - touch matita.conf.xml;\ - else\ - echo;\ - echo "matita.conf.xml.sample is newer than matita.conf.xml";\ - echo;\ - echo "PLEASE update your configuration file!";\ - echo "(copying matita.conf.xml.sample should work)";\ - echo;\ - false;\ - fi - -matita.conf.xml.sample: matita.conf.xml.sample.in - autoconf - ./configure - @echo - @echo "WARNING: The configuration sample file has changed!" - @echo - -coq.moo: coq.ma matitac - ./matitac $(MATITA_FLAGS) coq.ma -coq.moo.opt: coq.ma matitac.opt - ./matitac.opt $(MATITA_FLAGS) coq.ma - -ifeq ($(HAVE_OCAMLOPT),yes) - -CMXS = $(patsubst %.cmo,%.cmx,$(CMOS)) -CCMXS = $(patsubst %.cmo,%.cmx,$(CCMOS)) -MAINCMXS = $(patsubst %.cmo,%.cmx,$(MAINCMOS)) -DEPCMXS = $(patsubst %.cmo,%.cmx,$(DEPCMOS)) -CLEANCMXS = $(patsubst %.cmo,%.cmx,$(CLEANCMOS)) -MAKECMXS = $(patsubst %.cmo,%.cmx,$(MAKECMOS)) -LIB_DEPS := $(shell $(OCAMLFIND) query -recursive -predicates "byte" -format "%d/%a" $(REQUIRES)) -LIBX_DEPS := $(shell $(OCAMLFIND) query -recursive -predicates "native" -format "%d/%a" $(REQUIRES)) -CLIB_DEPS := $(shell $(OCAMLFIND) query -recursive -predicates "byte" -format "%d/%a" $(CREQUIRES)) -CLIBX_DEPS := $(shell $(OCAMLFIND) query -recursive -predicates "native" -format "%d/%a" $(CREQUIRES)) -DEPLIB_DEPS := $(shell $(OCAMLFIND) query -recursive -predicates "byte" -format "%d/%a" $(DEPREQUIRES)) -DEPLIBX_DEPS := $(shell $(OCAMLFIND) query -recursive -predicates "native" -format "%d/%a" $(DEPREQUIRES)) -CLEANLIB_DEPS := $(shell $(OCAMLFIND) query -recursive -predicates "byte" -format "%d/%a" $(CLEANREQUIRES)) -CLEANLIBX_DEPS := $(shell $(OCAMLFIND) query -recursive -predicates "native" -format "%d/%a" $(CLEANREQUIRES)) -MAKELIB_DEPS := $(shell $(OCAMLFIND) query -recursive -predicates "byte" -format "%d/%a" $(MAKEREQUIRES)) -MAKELIBX_DEPS := $(shell $(OCAMLFIND) query -recursive -predicates "native" -format "%d/%a" $(MAKEREQUIRES)) -.PHONY: opt -opt: $(PROGRAMS_OPT) coq.moo.opt -.PHONY: upx -upx: $(PROGRAMS_UPX) coq.moo.opt - -else - -opt: - @echo "Native code compilation is disabled" - -endif - -matita: $(LIB_DEPS) $(CMOS) matita.ml - $(OCAMLC) $(PKGS) -linkpkg -o $@ $(CMOS) matita.ml -matita.opt: $(LIBX_DEPS) $(CMXS) matita.ml - $(OCAMLOPT) $(PKGS) -linkpkg -o $@ $(CMXS) matita.ml - -dump_moo: buildTimeConf.cmo matitaLog.cmo matitaMoo.cmo dump_moo.ml - $(OCAMLC) $(PKGS) -linkpkg -o $@ $^ -dump_moo.opt: buildTimeConf.cmx matitaLog.cmx matitaMoo.cmx dump_moo.ml - $(OCAMLOPT) $(PKGS) -linkpkg -o $@ $^ - -matitac: $(CLIB_DEPS) $(CCMOS) $(MAINCMOS) matitac.ml - $(OCAMLC) $(CPKGS) -linkpkg -o $@ $(CCMOS) $(MAINCMOS) matitac.ml -matitac.opt: $(CLIBX_DEPS) $(CCMXS) $(MAINCMXS) matitac.ml - $(OCAMLOPT) $(CPKGS) -linkpkg -o $@ $(CCMXS) $(MAINCMXS) matitac.ml - -matitatop: matitatop.ml $(CLIB_DEPS) $(CCMOS) - $(OCAMLC) $(CPKGS) -linkpkg -o $@ toplevellib.cma $(CCMOS) $< - -# matitadep: matitadep.ml $(DEPLIB_DEPS) $(DEPCMOS) -# $(OCAMLC) $(DEPPKGS) -linkpkg -o $@ $(DEPCMOS) $< -# matitadep.opt: matitadep.ml $(DEPLIB_DEPS) $(DEPCMXS) -# $(OCAMLOPT) $(DEPPKGS) -linkpkg -o $@ $(DEPCMXS) $< -matitadep: matitac - @test -f $@ || ln -s $< $@ -matitadep.opt: matitac.opt - @test -f $@ || ln -s $< $@ - -# matitaclean: matitaclean.ml $(CLEANLIB_DEPS) $(CLEANCMOS) -# $(OCAMLC) $(CLEANPKGS) -linkpkg -o $@ $(CLEANCMOS) $< -# matitaclean.opt: matitaclean.ml $(CLEANLIB_DEPS) $(CLEANCMXS) -# $(OCAMLOPT) $(CLEANPKGS) -linkpkg -o $@ $(CLEANCMXS) $< -matitaclean: matitac - @test -f $@ || ln -s $< $@ -matitaclean.opt: matitac.opt - @test -f $@ || ln -s $< $@ - -# matitamake: matitamake.ml $(MAKECMOS) -# $(OCAMLC) $(MAKEPKGS) -linkpkg -o $@ $(MAKECMOS) $< -# matitamake.opt: matitamake.ml $(MAKECMXS) -# $(OCAMLOPT) $(MAKEPKGS) -linkpkg -o $@ $(MAKECMXS) $< -matitamake: matitac - @test -f $@ || ln -s $< $@ -matitamake.opt: matitac.opt - @test -f $@ || ln -s $< $@ - -cicbrowser: matita - @test -f $@ || ln -s $< $@ -cicbrowser.opt: matita.opt - @test -f $@ || ln -s $< $@ - -matitaGeneratedGui.ml matitaGeneratedGui.mli: matita.glade - $(LABLGLADECC) -embed $< > matitaGeneratedGui.ml - $(OCAMLC) $(PKGS) -i matitaGeneratedGui.ml > matitaGeneratedGui.mli - -.PHONY: clean -clean: - rm -rf *.cma *.cmo *.cmi *.cmx *.cmxa *.a *.o \ - $(PROGRAMS) \ - $(PROGRAMS_OPT) \ - $(PROGRAMS_STATIC) \ - $(PROGRAMS_UPX) \ - $(NULL) - -tests: matitac matitadep matitaclean - @-(cd library && make -k clean all) - @-(cd tests && make -k clean all) - @-(cd tests/bad_tests && make -k clean all) - @-(cd contribs/LAMBDA-TYPES && make -k clean all) - @-(cd contribs/PREDICATIVE-TOPOLOGY && make -k clean all) -tests.opt: matitac.opt matitadep.opt matitaclean.opt - @-(cd library && make -k clean.opt opt) - @-(cd tests && make -k clean.opt opt) - @-(cd tests/bad_tests && make -k clean.opt opt) - @-(cd contribs/LAMBDA-TYPES && make -k clean.opt opt) - @-(cd contribs/PREDICATIVE-TOPOLOGY && make -k clean.opt opt) -cleantests: matitaclean - @(cd library && make clean) - @(cd tests && make clean) - @(cd tests/bad_tests && make clean) - @(cd contribs/LAMBDA-TYPES && make clean) - @(cd contribs/PREDICATIVE-TOPOLOGY && make clean) -cleantests.opt: matitaclean.opt - @(cd library && make clean.opt) - @(cd tests && make clean.opt) - @(cd tests/bad_tests && make clean) - @(cd contribs/LAMBDA-TYPES && make clean.opt) - @(cd contribs/PREDICATIVE-TOPOLOGY && make clean.opt) -.PHONY: tests tests.opt cleantests cleantests.opt - -# {{{ Distribution stuff - -STATIC_LINK = dist/static_link/static_link -# for matita -STATIC_LIBS = \ - t1 t1x \ - gtkmathview_gmetadom mathview mathview_backend_gtk mathview_frontend_gmetadom \ - gtksourceview-1.0 \ - gdome gmetadom_gdome_cpp_smart \ - stdc++ \ - mysqlclient \ - expat \ - $(NULL) -STATIC_EXTRA_LIBS = -cclib -lt1x -cclib -lstdc++ -# for matitac & co -STATIC_CLIBS = \ - gdome \ - mysqlclient \ - $(NULL) -STATIC_EXTRA_CLIBS = -PROGRAMS_STATIC = $(patsubst %,%.static,$(PROGRAMS_OPT)) -PROGRAMS_UPX = $(patsubst %,%.upx,$(PROGRAMS_STATIC)) - -ifeq ($(HAVE_OCAMLOPT),yes) -static: $(STATIC_LINK) $(PROGRAMS_STATIC) coq.moo.opt -else -upx: - @echo "Native code compilation is disabled" -static: - @echo "Native code compilation is disabled" -endif - -$(STATIC_LINK): - $(MAKE) -C dist/ $(STATIC_LINK) - -matita.opt.static: $(STATIC_LINK) $(LIBX_DEPS) $(CMXS) matita.ml - $(STATIC_LINK) $(STATIC_LIBS) -- \ - $(OCAMLOPT) $(PKGS) -linkpkg -o $@ $(CMXS) matita.ml \ - $(STATIC_EXTRA_LIBS) - strip $@ -dump_moo.opt.static: $(STATIC_LINK) buildTimeConf.cmx matitaLog.cmx matitaMoo.cmx dump_moo.ml - $(STATIC_LINK) $(STATIC_CLIBS) -- \ - $(OCAMLOPT) $(PKGS) -linkpkg -o $@ $^ \ - $(STATIC_EXTRA_CLIBS) - strip $@ -matitac.opt.static: $(STATIC_LINK) $(CLIBX_DEPS) $(CCMXS) $(MAINCMXS) matitac.ml - $(STATIC_LINK) $(STATIC_CLIBS) -- \ - $(OCAMLOPT) $(CPKGS) -linkpkg -o $@ $(CCMXS) $(MAINCMXS) matitac.ml \ - $(STATIC_EXTRA_CLIBS) - strip $@ -# matitadep.opt.static: $(STATIC_LINK) matitadep.ml $(DEPLIB_DEPS) $(DEPCMXS) -# $(STATIC_LINK) $(STATIC_CLIBS) -- \ -# $(OCAMLOPT) $(DEPPKGS) -linkpkg -o $@ $(DEPCMXS) $< \ -# $(STATIC_EXTRA_CLIBS) -# strip $@ -matitadep.opt.static: matitac.opt.static - @test -f $@ || ln -s $< $@ -# matitaclean.opt.static: $(STATIC_LINK) matitaclean.ml $(CLEANLIB_DEPS) $(CLEANCMXS) -# $(STATIC_LINK) $(STATIC_CLIBS) -- \ -# $(OCAMLOPT) $(CLEANPKGS) -linkpkg -o $@ $(CLEANCMXS) $< \ -# $(STATIC_EXTRA_CLIBS) -# strip $@ -matitaclean.opt.static: matitac.opt.static - @test -f $@ || ln -s $< $@ -# matitamake.opt.static: $(STATIC_LINK) matitamake.ml $(MAKECMXS) -# $(STATIC_LINK) $(STATIC_CLIBS) -- \ -# $(OCAMLOPT) $(PKGS) -linkpkg -o $@ $(MAKECMXS) $< \ -# $(STATIC_EXTRA_CLIBS) -# strip $@ -matitamake.opt.static: matitac.opt.static - @test -f $@ || ln -s $< $@ -cicbrowser.opt.static: matita.opt.static - @test -f $@ || ln -s $< $@ -cicbrowser.opt.static.upx: matita.opt.static.upx - @test -f $@ || ln -s $< $@ - -.PHONY: distclean -distclean: clean - $(MAKE) -C dist/ clean - rm -f matitaGeneratedGui.ml matitaGeneratedGui.mli - rm -f config.log config.status Makefile buildTimeConf.ml - rm -f matita.glade.bak matita.gladep.bak - rm -rf autom4te.cache/ - rm -f configure matita.conf.xml.sample - -%.upx: % - cp $< $@ - strip $@ - upx $@ - -# }}} End of distribution stuff - -tags: TAGS -.PHONY: TAGS -TAGS: - cd ..; otags -vi -r ocaml/ matita/ - -#.depend: matitaGeneratedGui.ml matitaGeneratedGui.mli *.ml *.mli - -.PHONY: depend -depend: - $(OCAMLDEP) *.ml *.mli > .depend - -include .depend - -%.cmi: %.mli - $(OCAMLC) $(PKGS) -c $< -%.cmo %.cmi: %.ml - $(OCAMLC) $(PKGS) -c $< -%.cmx: %.ml - $(OCAMLOPT) $(PKGS) -c $< -%.annot: %.ml - $(OCAMLC) -dtypes $(PKGS) -c $< - -$(CMOS): $(LIB_DEPS) -$(CMOS:%.cmo=%.cmx): $(LIBX_DEPS) - -ifeq ($(MAKECMDGOALS),all) - $(CMOS:%.cmo=%.cmi): $(LIB_DEPS) -endif -ifeq ($(MAKECMDGOALS),) - $(CMOS:%.cmo=%.cmi): $(LIB_DEPS) -endif -ifeq ($(MAKECMDGOALS),opt) - $(CMOS:%.cmo=%.cmi): $(LIBX_DEPS) -endif - -# vim: set foldmethod=marker: diff --git a/helm/matita/buildTimeConf.ml.in b/helm/matita/buildTimeConf.ml.in deleted file mode 100644 index c8a2061e2..000000000 --- a/helm/matita/buildTimeConf.ml.in +++ /dev/null @@ -1,55 +0,0 @@ -(* Copyright (C) 2004, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -let debug = @DEBUG@;; -let version = "@MATITA_VERSION@";; -let undo_history_size = 10;; -let console_history_size = 100;; -let browser_history_size = 100;; -let base_uri = "cic:/matita";; -let phrase_sep = ".";; -let blank_uri = "about:blank";; -let current_proof_uri = "about:current_proof";; -let default_font_size = 10;; -let script_font = "Monospace";; - - (** may be overridden with MATITA_RT_BASE_DIR environment variable, useful for - * binary distribution installed in user home directories *) -let runtime_base_dir = - try - Sys.getenv "MATITA_RT_BASE_DIR" - with Not_found -> "@RT_BASE_DIR@";; - -let images_dir = runtime_base_dir ^ "/icons" -let gtkrc_file = runtime_base_dir ^ "/matita.gtkrc" -let lang_file = runtime_base_dir ^ "/matita.lang" -let script_template = runtime_base_dir ^ "/matita.ma.templ" -let core_notation_script = runtime_base_dir ^ "/core_notation.moo" -let coq_notation_script = runtime_base_dir ^ "/coq.moo" -let matita_conf = runtime_base_dir ^ "/matita.conf.xml" -let closed_xml = runtime_base_dir ^ "/closed.xml" -let gtkmathview_conf = runtime_base_dir ^ "/gtkmathview.matita.conf.xml" -let matitamake_makefile_template = runtime_base_dir ^ "/template_makefile.in" - diff --git a/helm/matita/closed.xml b/helm/matita/closed.xml deleted file mode 100644 index d3125efb7..000000000 --- a/helm/matita/closed.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - This goal has already been closed. - Use the "skip" command to throw it away. - - - - diff --git a/helm/matita/configure.ac b/helm/matita/configure.ac deleted file mode 100644 index d20bf2192..000000000 --- a/helm/matita/configure.ac +++ /dev/null @@ -1,141 +0,0 @@ -AC_INIT(matitaTypes.ml) - -# Distribution settings (i.e. settings to be manipulated before a release) -DEBUG_DEFAULT="true" -RT_BASE_DIR_DEFAULT="`pwd`" -MATITA_VERSION="0.0.1" -# End of distribution settings - -AC_CHECK_PROG(HAVE_OCAMLC, ocamlc, yes, no) -if test $HAVE_OCAMLC = "no"; then - AC_MSG_ERROR(could not find ocamlc) -fi -AC_CHECK_PROG(HAVE_OCAMLOPT, ocamlopt, yes, no) -if test $HAVE_OCAMLOPT = "no"; then - AC_MSG_WARN(could not find ocamlopt: native code compilation disabled) -fi -AC_CHECK_PROG(HAVE_OCAMLFIND, ocamlfind, yes, no) -if test $HAVE_OCAMLFIND = "yes"; then - OCAMLFIND="ocamlfind" -else - AC_MSG_ERROR(could not find ocamlfind) -fi -AC_CHECK_PROG(HAVE_LABLGLADECC, lablgladecc2, yes, no) -if test $HAVE_LABLGLADECC = "yes"; then - LABLGLADECC="lablgladecc2" -else - AC_MSG_ERROR(could not find lablgladecc2) -fi -AC_CHECK_PROG(HAVE_CAMLP4O, camlp4o, yes, no) -if test $HAVE_CAMLP4O = "yes"; then - CAMLP4O="camlp4o" -else - AC_MSG_ERROR(could not find camlp4o) -fi -FINDLIB_COMREQUIRES="\ -pcre \ -mysql \ -helm-registry \ -helm-extlib \ -helm-hmysql \ -helm-cic_notation \ -helm-tactics \ -helm-cic_disambiguation \ -" -FINDLIB_CLEANREQUIRES="$FINDLIB_COMREQUIRES" -FINDLIB_DEPREQUIRES="$FINDLIB_COMREQUIRES" -FINDLIB_MAKEREQUIRES=" \ -helm-registry \ -helm-extlib \ -" -FINDLIB_CREQUIRES=" \ -$FINDLIB_COMREQUIRES \ -helm-paramodulation \ -" -FINDLIB_REQUIRES="\ -$FINDLIB_CREQUIRES \ -lablgtk2.glade \ -lablgtkmathview \ -lablgtksourceview \ -helm-xmldiff \ -helm-cic_transformations \ -helm-tactics \ -helm-cic_disambiguation \ -helm-paramodulation \ -" -for r in $FINDLIB_REQUIRES -do - AC_MSG_CHECKING(for $r ocaml library) - if OCAMLPATH=../ocaml/METAS $OCAMLFIND query $r &> /dev/null; then - AC_MSG_RESULT(yes) - else - AC_MSG_ERROR(could not find $r ocaml library) - fi -done - -OCAMLFIND_COMMANDS="" -# AC_CHECK_PROG(HAVE_OCAMLC_OPT, ocamlc.opt, yes, no) -# if test $HAVE_OCAMLC_OPT = "yes"; then -# if test "$OCAMLFIND_COMMANDS" = ""; then -# OCAMLFIND_COMMANDS="ocamlc=ocamlc.opt" -# else -# OCAMLFIND_COMMANDS="$OCAMLFIND_COMMANDS ocamlc=ocamlc.opt" -# fi -# fi -# AC_CHECK_PROG(HAVE_OCAMLOPT_OPT, ocamlopt.opt, yes, no) -# if test $HAVE_OCAMLOPT_OPT = "yes"; then -# if test "$OCAMLFIND_COMMANDS" = ""; then -# OCAMLFIND_COMMANDS="ocamlopt=ocamlopt.opt" -# else -# OCAMLFIND_COMMANDS="$OCAMLFIND_COMMANDS ocamlopt=ocamlopt.opt" -# fi -# fi -if test "$OCAMLFIND_COMMANDS" != ""; then - OCAMLFIND="OCAMLFIND_COMMANDS='$OCAMLFIND_COMMANDS' $OCAMLFIND" -fi - -AC_MSG_CHECKING(--enable-debug argument) -AC_ARG_ENABLE(debug, - [ --enable-debug Turn on debugging], - [GIVEN="yes"; - case "${enableval}" in - yes) DEBUG=true ;; - no) DEBUG=false ;; - *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;; - esac], - [GIVEN="no"; DEBUG="$DEBUG_DEFAULT"]) -MSG=$GIVEN -if test "$DEBUG" = "true"; then - MSG="$MSG, debugging enabled." -else - MSG="$MSG, debugging disabled." -fi -AC_MSG_RESULT($MSG) - -AC_MSG_CHECKING(--with-runtime-dir argument) -AC_ARG_WITH(runtime-dir, - [ --with-runtime-dir Runtime directory (current working directory if not given)], - [ RT_BASE_DIR="${withval}" ], - [ RT_BASE_DIR="$RT_BASE_DIR_DEFAULT" ]) -AC_MSG_RESULT($RT_BASE_DIR) - -AC_SUBST(CAMLP4O) -AC_SUBST(DEBUG) -AC_SUBST(TRANSFORMER_MODULE) -AC_SUBST(FINDLIB_REQUIRES) -AC_SUBST(FINDLIB_CREQUIRES) -AC_SUBST(FINDLIB_DEPREQUIRES) -AC_SUBST(FINDLIB_CLEANREQUIRES) -AC_SUBST(FINDLIB_MAKEREQUIRES) -AC_SUBST(HAVE_OCAMLOPT) -AC_SUBST(LABLGLADECC) -AC_SUBST(OCAMLFIND) -AC_SUBST(RT_BASE_DIR) -AC_SUBST(MATITA_VERSION) - -AC_OUTPUT([ - matita.conf.xml.sample - buildTimeConf.ml - Makefile - gtkmathview.matita.conf.xml -]) diff --git a/helm/matita/contribs/LAMBDA-TYPES/.cvsignore b/helm/matita/contribs/LAMBDA-TYPES/.cvsignore deleted file mode 100644 index 6d473d47a..000000000 --- a/helm/matita/contribs/LAMBDA-TYPES/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.depend -*.moo diff --git a/helm/matita/contribs/LAMBDA-TYPES/Makefile b/helm/matita/contribs/LAMBDA-TYPES/Makefile deleted file mode 100644 index c12b0fb43..000000000 --- a/helm/matita/contribs/LAMBDA-TYPES/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -SRC=$(shell find . -name "*.ma" -a -type f) - -MATITA_FLAGS = -NODB=false -ifeq ($(NODB),true) - MATITA_FLAGS += -nodb -endif - -MATITAC=../../scripts/do_tests.sh $(DO_TESTS_OPTS) "../../matitac $(MATITA_FLAGS)" "../../matitaclean $(MATITA_FLAGS)" /dev/null OK -MATITACOPT=../../scripts/do_tests.sh $(DO_TESTS_OPTS) "../../matitac.opt $(MATITA_FLAGS)" "../../matitaclean.opt $(MATITA_FLAGS)" /dev/null OK -VERBOSEMATITAC=../../matitac $(MATITA_FLAGS) -VERBOSEMATITACOPT=../../matitac.opt $(MATITA_FLAGS) - -MATITACLEAN=../../matitaclean $(MATITA_FLAGS) -MATITACLEANOPT=../../matitaclean.opt $(MATITA_FLAGS) - -MATITADEP=../../matitadep $(MATITA_FLAGS) -MATITADEPOPT=../../matitadep.opt $(MATITA_FLAGS) - -DEPEND_NAME=.depend - -H=@ - -all: $(SRC:%.ma=%.mo) - -opt: - $(H)$(MAKE) MATITAC='$(MATITACOPT)' MATITACLEAN='$(MATITACLEANOPT)' MATITADEP='$(MATITADEPOPT)' all - -verbose: - $(H)$(MAKE) MATITAC='$(VERBOSEMATITAC)' MATITACLEAN='$(MATITACLEAN)' MATITADEP='$(MATITADEP)' all - -%.opt: - $(H)$(MAKE) MATITAC='$(MATITACOPT)' MATITACLEAN='$(MATITACLEANOPT)' MATITADEP='$(MATITADEPOPT)' $(@:%.opt=%) - -clean: - $(H)$(MATITACLEAN) $(SRC) - -cleanall: - $(H)rm -f $(SRC:%.ma=%.moo) - $(MATITACLEAN) all - -depend: - rm -f $(DEPEND_NAME) - $(MAKE) $(DEPEND_NAME) -.PHONY: depend - -%.moo: - $(H)$(MATITAC) $< - -$(DEPEND_NAME): $(SRC) - $(H)$(MATITADEP) $(SRC) > $@ || rm -f $@ - -#include $(DEPEND_NAME) -include .depend diff --git a/helm/matita/contribs/LAMBDA-TYPES/lref_map_defs.ma b/helm/matita/contribs/LAMBDA-TYPES/lref_map_defs.ma deleted file mode 100644 index 572618808..000000000 --- a/helm/matita/contribs/LAMBDA-TYPES/lref_map_defs.ma +++ /dev/null @@ -1,22 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/LAMBDA-TYPES/lref_map_defs". - -include "terms_defs.ma". - -inductive tlref_map (A: Set) (N: Set) (map: nat \to nat): nat \to (T A N) \to (T A N) \to Prop \def - | tlref_map_sort: \forall i. \forall k. \forall y. (tlref_map A N map i (TSort A N y k) (TSort A N y k)) - | tlref_map_lref_lt: \forall j. \forall i. \forall y. j < i \to (tlref_map A N map i (TLRef A N y j) (TLRef A N y j)) - | tlref_map_lref_ge: \forall j. \forall i. \forall y. i \le j \to (tlref_map A N map i (TLRef A N y j) (TLRef A N y (map j))). diff --git a/helm/matita/contribs/LAMBDA-TYPES/terms_defs.ma b/helm/matita/contribs/LAMBDA-TYPES/terms_defs.ma deleted file mode 100644 index 9a2c5fb9d..000000000 --- a/helm/matita/contribs/LAMBDA-TYPES/terms_defs.ma +++ /dev/null @@ -1,47 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/LAMBDA-TYPES/terms_defs". - -include "coq.ma". - -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". -alias id "S" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2)". -alias id "O" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1)". -alias id "plus" = "cic:/Coq/Init/Peano/plus.con". -alias id "lt" = "cic:/Coq/Init/Peano/lt.con". -alias id "le" = "cic:/Coq/Init/Peano/le.ind#xpointer(1/1)". - -inductive B : Set \def - | Void: B - | Abbr: B - | Abst: B. - -inductive F : Set \def - | Appl: F - | Cast: F. - -inductive W : Set \def - | Bind: B \to W - | Flat: F \to W. - -inductive T (A:Set) (N:Set) : Set \def - | TSort: A \to nat \to (T A N) - | TLRef: A \to nat \to (T A N) - | TWag : A \to W \to (T A N) \to (T A N) \to (T A N) - | TGRef: A \to N \to (T A N). - -record X (A:Set) (N:Set) : Type \def { - get_gref: N \to B \to (T A N) \to Prop -}. diff --git a/helm/matita/contribs/LAMBDA-TYPES/tlt_defs.ma b/helm/matita/contribs/LAMBDA-TYPES/tlt_defs.ma deleted file mode 100644 index 390c067cc..000000000 --- a/helm/matita/contribs/LAMBDA-TYPES/tlt_defs.ma +++ /dev/null @@ -1,53 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/LAMBDA-TYPES/tlt_defs". - -include "terms_defs.ma". - -definition wadd: (nat \to nat) \to nat \to (nat \to nat) \def - \lambda map,w,n. - match n with [ - O \Rightarrow w - | (S m) \Rightarrow (map m) - ]. - -let rec weight_map (A:Set) (N:Set) (map:nat \to nat) (t:T A N) on t : nat \def - match t with [ - (TSort y k) \Rightarrow O - | (TLRef y i) \Rightarrow (map i) - | (TWag y z w u) \Rightarrow - match z with [ - (Bind b) \Rightarrow - match b with [ - Abbr \Rightarrow - (S ((weight_map A N map w) + (weight_map A N (wadd map (S (weight_map A N map w))) u))) - | Abst \Rightarrow - (S ((weight_map A N map w) + (weight_map A N (wadd map O) u))) - | Void \Rightarrow - (S ((weight_map A N map w) + (weight_map A N (wadd map O) u))) - ] - | (Flat a) \Rightarrow - (S ((weight_map A N map w) + (weight_map A N map u))) - ] - | (TGRef y n) \Rightarrow O - ]. - -definition weight: \forall A,N. T A N \to nat \def - \lambda A,N. - (weight_map A N (\lambda _.O)). - -definition tlt: \forall A,N. T A N \to T A N \to Prop \def - \lambda A,N,t1,t2. - weight A N t1 < weight A N t2. diff --git a/helm/matita/contribs/PREDICATIVE-TOPOLOGY/.cvsignore b/helm/matita/contribs/PREDICATIVE-TOPOLOGY/.cvsignore deleted file mode 100644 index 6d473d47a..000000000 --- a/helm/matita/contribs/PREDICATIVE-TOPOLOGY/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.depend -*.moo diff --git a/helm/matita/contribs/PREDICATIVE-TOPOLOGY/Makefile b/helm/matita/contribs/PREDICATIVE-TOPOLOGY/Makefile deleted file mode 100644 index c12b0fb43..000000000 --- a/helm/matita/contribs/PREDICATIVE-TOPOLOGY/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -SRC=$(shell find . -name "*.ma" -a -type f) - -MATITA_FLAGS = -NODB=false -ifeq ($(NODB),true) - MATITA_FLAGS += -nodb -endif - -MATITAC=../../scripts/do_tests.sh $(DO_TESTS_OPTS) "../../matitac $(MATITA_FLAGS)" "../../matitaclean $(MATITA_FLAGS)" /dev/null OK -MATITACOPT=../../scripts/do_tests.sh $(DO_TESTS_OPTS) "../../matitac.opt $(MATITA_FLAGS)" "../../matitaclean.opt $(MATITA_FLAGS)" /dev/null OK -VERBOSEMATITAC=../../matitac $(MATITA_FLAGS) -VERBOSEMATITACOPT=../../matitac.opt $(MATITA_FLAGS) - -MATITACLEAN=../../matitaclean $(MATITA_FLAGS) -MATITACLEANOPT=../../matitaclean.opt $(MATITA_FLAGS) - -MATITADEP=../../matitadep $(MATITA_FLAGS) -MATITADEPOPT=../../matitadep.opt $(MATITA_FLAGS) - -DEPEND_NAME=.depend - -H=@ - -all: $(SRC:%.ma=%.mo) - -opt: - $(H)$(MAKE) MATITAC='$(MATITACOPT)' MATITACLEAN='$(MATITACLEANOPT)' MATITADEP='$(MATITADEPOPT)' all - -verbose: - $(H)$(MAKE) MATITAC='$(VERBOSEMATITAC)' MATITACLEAN='$(MATITACLEAN)' MATITADEP='$(MATITADEP)' all - -%.opt: - $(H)$(MAKE) MATITAC='$(MATITACOPT)' MATITACLEAN='$(MATITACLEANOPT)' MATITADEP='$(MATITADEPOPT)' $(@:%.opt=%) - -clean: - $(H)$(MATITACLEAN) $(SRC) - -cleanall: - $(H)rm -f $(SRC:%.ma=%.moo) - $(MATITACLEAN) all - -depend: - rm -f $(DEPEND_NAME) - $(MAKE) $(DEPEND_NAME) -.PHONY: depend - -%.moo: - $(H)$(MATITAC) $< - -$(DEPEND_NAME): $(SRC) - $(H)$(MATITADEP) $(SRC) > $@ || rm -f $@ - -#include $(DEPEND_NAME) -include .depend diff --git a/helm/matita/contribs/PREDICATIVE-TOPOLOGY/class_defs.ma b/helm/matita/contribs/PREDICATIVE-TOPOLOGY/class_defs.ma deleted file mode 100644 index ba1195619..000000000 --- a/helm/matita/contribs/PREDICATIVE-TOPOLOGY/class_defs.ma +++ /dev/null @@ -1,52 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -(* Project started Wed Oct 12, 2005 ***************************************) - -set "baseuri" "cic:/matita/PREDICATIVE-TOPOLOGY/class_defs". - -include "../../library/logic/connectives.ma". - -(* ACZEL CATEGORIES: - - We use typoids with a compatible membership relation - - The category is intended to be the domain of the membership relation - - The membership relation is necessary because we need to regard the - domain of a propositional function (ie a predicative subset) as a - quantification domain and therefore as a category, but there is no - type in CIC representing the domain of a propositional function - - We set up a single equality predicate, parametric on the category, - defined as the reflexive, symmetic, transitive and compatible closure - of the cle1 predicate given inside the category. Then we prove the - properties of the equality that usually are axiomatized inside the - category structure. This makes categories easier to use -*) - -definition true_f \def \lambda (X:Type). \lambda (_:X). True. - -definition false_f \def \lambda (X:Type). \lambda (_:X). False. - -record Class: Type \def { - class: Type; - cin : class \to Prop; - cle1 : class \to class \to Prop -}. - -coercion class. - -inductive ceq (C:Class) (c1:C): C \to Prop \def - | ceq_refl: cin ? c1 \to ceq ? c1 c1 - | ceq_sing_r: \forall c2,c3. - ceq ? c1 c2 \to cin ? c3 \to cle1 ? c2 c3 \to ceq ? c1 c3 - | ceq_sing_l: \forall c2,c3. - ceq ? c1 c2 \to cin ? c3 \to cle1 ? c3 c2 \to ceq ? c1 c3. diff --git a/helm/matita/contribs/PREDICATIVE-TOPOLOGY/class_eq.ma b/helm/matita/contribs/PREDICATIVE-TOPOLOGY/class_eq.ma deleted file mode 100644 index 5c53b9459..000000000 --- a/helm/matita/contribs/PREDICATIVE-TOPOLOGY/class_eq.ma +++ /dev/null @@ -1,55 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/PREDICATIVE-TOPOLOGY/class_eq". - -include "class_defs.ma". - -theorem ceq_cl: \forall C,c1,c2. ceq ? c1 c2 \to cin C c1 \land cin C c2. -intros; elim H; clear H; clear c2; - [ auto | decompose H2; auto | decompose H2; auto ]. -qed. - -theorem ceq_trans: \forall C,c2,c1,c3. - ceq C c2 c3 \to ceq ? c1 c2 \to ceq ? c1 c3. -intros 5; elim H; clear H; clear c3; - [ auto - | apply ceq_sing_r; [||| apply H4 ]; auto - | apply ceq_sing_l; [||| apply H4 ]; auto - ]. -qed. - -theorem ceq_conf_rev: \forall C,c2,c1,c3. - ceq C c3 c2 \to ceq ? c1 c2 \to ceq ? c1 c3. -intros 5; elim H; clear H; clear c2; - [ auto - | lapply ceq_cl; [ decompose Hletin |||| apply H1 ]. - apply H2; apply ceq_sing_l; [||| apply H4 ]; auto - | lapply ceq_cl; [ decompose Hletin |||| apply H1 ]. - apply H2; apply ceq_sing_r; [||| apply H4 ]; auto - ]. -qed. - -theorem ceq_sym: \forall C,c1,c2. ceq C c1 c2 \to ceq C c2 c1. -intros; -lapply ceq_cl; [ decompose Hletin |||| apply H ]. -auto. -qed. - -theorem ceq_conf: \forall C,c2,c1,c3. - ceq C c1 c2 \to ceq ? c1 c3 \to ceq ? c2 c3. -intros. -lapply ceq_sym; [|||| apply H ]. -apply ceq_trans; [| auto | auto ]. -qed. diff --git a/helm/matita/contribs/PREDICATIVE-TOPOLOGY/domain_defs.ma b/helm/matita/contribs/PREDICATIVE-TOPOLOGY/domain_defs.ma deleted file mode 100644 index 916c91cd8..000000000 --- a/helm/matita/contribs/PREDICATIVE-TOPOLOGY/domain_defs.ma +++ /dev/null @@ -1,60 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/PREDICATIVE-TOPOLOGY/domain_defs". - -include "class_defs.ma". - -(* QUANTIFICATION DOMAINS - - These are the categories on which we allow quantification - - We set up single quantifiers, parametric on the domain, so they - already have the properties that usually are axiomatized inside the - domain structure. This makes domains easier to use -*) - -record Domain: Type \def { - qd: Class -}. - -coercion qd. - -(* internal universal quantification *) -inductive dall (D:Domain) (P:D \to Prop) : Prop \def - | dall_intro: (\forall d:D. cin D d \to P d) \to dall D P. - -(* internal existential quantification *) -inductive dex (D:Domain) (P:D \to Prop) : Prop \def - | dex_intro: \forall d:D. cin D d \land P d \to dex D P. - -(* notations **************************************************************) - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "internal for all" 'iforall \eta.x = - (cic:/matita/PREDICATIVE-TOPOLOGY/domain_defs/dall.ind#xpointer(1/1) _ x). - -notation > "hvbox(\iforall ident i opt (: ty) break . p)" - right associative with precedence 20 -for @{ 'iforall ${default - @{\lambda ${ident i} : $ty. $p)} - @{\lambda ${ident i} . $p}}}. - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "internal exists" 'dexists \eta.x = - (cic:/matita/PREDICATIVE-TOPOLOGY/domain_defs/dex.ind#xpointer(1/1) _ x). - -notation > "hvbox(\iexists ident i opt (: ty) break . p)" - right associative with precedence 20 -for @{ 'dexists ${default - @{\lambda ${ident i} : $ty. $p)} - @{\lambda ${ident i} . $p}}}. diff --git a/helm/matita/contribs/PREDICATIVE-TOPOLOGY/subset_defs.ma b/helm/matita/contribs/PREDICATIVE-TOPOLOGY/subset_defs.ma deleted file mode 100644 index 3cc583f02..000000000 --- a/helm/matita/contribs/PREDICATIVE-TOPOLOGY/subset_defs.ma +++ /dev/null @@ -1,66 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/PREDICATIVE-TOPOLOGY/subset_defs". - -include "domain_defs.ma". - -(* SUBSETS - - We use predicative subsets coded as propositional functions - according to G.Sambin and S.Valentini "Toolbox" -*) - -definition Subset \def \lambda (D:Domain). D \to Prop. - -(* subset membership (epsilon) *) -definition sin : \forall D. Subset D \to D \to Prop \def - \lambda (D:Domain). \lambda U,d. cin D d \and U d. - -(* subset top (full subset) *) -definition stop \def \lambda (D:Domain). true_f D. - -(* subset bottom (empty subset) *) -definition sbot \def \lambda (D:Domain). false_f D. - -(* subset and (binary intersection) *) -definition sand: \forall D. Subset D \to Subset D \to Subset D \def - \lambda D,U1,U2,d. U1 d \land U2 d. - -(* subset or (binary union) *) -definition sor: \forall D. Subset D \to Subset D \to Subset D \def - \lambda D,U1,U2,d. U1 d \lor U2 d. - -(* subset less or equal (inclusion) *) -definition sle: \forall D. Subset D \to Subset D \to Prop \def - \lambda D,U1,U2. \iforall d. U1 d \to U2 d. - -(* subset overlap *) -definition sover: \forall D. Subset D \to Subset D \to Prop \def - \lambda D,U1,U2. \iexists d. U1 d \land U2 d. - -(* coercions **************************************************************) - -(* the class of the subsets of a domain (not an implicit coercion) *) -definition class_of_subsets_of \def - \lambda D. mk_Class (Subset D) (true_f ?) (sle ?). - -(* the domain built upon a subset *) -definition domain_of_subset: \forall D. (Subset D) \to Domain \def - \lambda (D:Domain). \lambda U. - mk_Domain (mk_Class D (sin D U) (cle1 D)). - -coercion domain_of_subset. - -(* the full subset of a domain *) -coercion stop. diff --git a/helm/matita/coq.ma b/helm/matita/coq.ma deleted file mode 100644 index 10a3de677..000000000 --- a/helm/matita/coq.ma +++ /dev/null @@ -1,42 +0,0 @@ -(* aritmetic operators *) - -interpretation "Coq's natural plus" 'plus x y = (cic:/Coq/Init/Peano/plus.con x y). -interpretation "Coq's real plus" 'plus x y = (cic:/Coq/Reals/Rdefinitions/Rplus.con x y). -interpretation "Coq's binary integer plus" 'plus x y = (cic:/Coq/ZArith/BinInt/Zplus.con x y). -interpretation "Coq's binary positive plus" 'plus x y = (cic:/Coq/NArith/BinPos/Pplus.con x y). -interpretation "Coq's natural minus" 'minus x y = (cic:/Coq/Init/Peano/minus.con x y). -interpretation "Coq's real minus" 'minus x y = (cic:/Coq/Reals/Rdefinitions/Rminus.con x y). -interpretation "Coq's binary integer minus" 'minus x y = (cic:/Coq/ZArith/BinInt/Zminus.con x y). -interpretation "Coq's binary positive minus" 'minus x y = (cic:/Coq/NArith/BinPos/Pminus.con x y). -interpretation "Coq's natural times" 'times x y = (cic:/Coq/Init/Peano/mult.con x y). -interpretation "Coq's real times" 'times x y = (cic:/Coq/Reals/Rdefinitions/Rmult.con x y). -interpretation "Coq's binary positive times" 'times x y = (cic:/Coq/NArith/BinPos/Pmult.con x y). -interpretation "Coq's binary integer times" 'times x y = (cic:/Coq/ZArith/BinInt/Zmult.con x y). -interpretation "Coq's real power" 'power x y = (cic:/Coq/Reals/Rfunctions/pow.con x y). -interpretation "Coq's integer power" 'power x y = (cic:/Coq/ZArith/Zpower/Zpower.con x y). -interpretation "Coq's real divide" 'divide x y = (cic:/Coq/Reals/Rdefinitions/Rdiv.con x y). -interpretation "Coq's real unary minus" 'uminus x = (cic:/Coq/Reals/Rdefinitions/Ropp.con x). -interpretation "Coq's binary integer negative sign" 'uminus x = (cic:/Coq/ZArith/BinInt/Z.ind#xpointer(1/1/3) x). -interpretation "Coq's binary integer unary minus" 'uminus x = (cic:/Coq/ZArith/BinInt/Zopp.con x). - -(* logical operators *) - -interpretation "Coq's logical and" 'and x y = (cic:/Coq/Init/Logic/and.ind#xpointer(1/1) x y). -interpretation "Coq's logical or" 'or x y = (cic:/Coq/Init/Logic/or.ind#xpointer(1/1) x y). -interpretation "Coq's logical not" 'not x = (cic:/Coq/Init/Logic/not.con x). -interpretation "Coq's exists" 'exists \eta.x = (cic:/Coq/Init/Logic/ex.ind#xpointer(1/1) _ x). - -(* relational operators *) - -interpretation "Coq's natural 'less or equal to'" 'leq x y = (cic:/Coq/Init/Peano/le.ind#xpointer(1/1) x y). -interpretation "Coq's real 'less or equal to'" 'leq x y = (cic:/Coq/Reals/Rdefinitions/Rle.con x y). -interpretation "Coq's natural 'greater or equal to'" 'geq x y = (cic:/Coq/Init/Peano/ge.con x y). -interpretation "Coq's real 'greater or equal to'" 'geq x y = (cic:/Coq/Reals/Rdefinitions/Rge.con x y). -interpretation "Coq's natural 'less than'" 'lt x y = (cic:/Coq/Init/Peano/lt.con x y). -interpretation "Coq's real 'less than'" 'lt x y = (cic:/Coq/Reals/Rdefinitions/Rlt.con x y). -interpretation "Coq's natural 'greater than'" 'gt x y = (cic:/Coq/Init/Peano/gt.con x y). -interpretation "Coq's real 'greater than'" 'gt x y = (cic:/Coq/Reals/Rdefinitions/Rgt.con x y). - -interpretation "Coq's leibnitz's equality" 'eq x y = (cic:/Coq/Init/Logic/eq.ind#xpointer(1/1) _ x y). -interpretation "Coq's not equal to (leibnitz)" 'neq x y = (cic:/Coq/Init/Logic/not.con (cic:/Coq/Init/Logic/eq.ind#xpointer(1/1) _ x y)). - diff --git a/helm/matita/core_notation.moo b/helm/matita/core_notation.moo deleted file mode 100644 index c30e5142c..000000000 --- a/helm/matita/core_notation.moo +++ /dev/null @@ -1,115 +0,0 @@ -notation "hvbox(a break \to b)" - right associative with precedence 20 -for @{ \forall $_:$a.$b }. - -notation < "hvbox(a break \to b)" - right associative with precedence 20 -for @{ \Pi $_:$a.$b }. - -notation "hvbox(a break = b)" - non associative with precedence 45 -for @{ 'eq $a $b }. - -notation "hvbox(a break \leq b)" - non associative with precedence 45 -for @{ 'leq $a $b }. - -notation "hvbox(a break \geq b)" - non associative with precedence 45 -for @{ 'geq $a $b }. - -notation "hvbox(a break \lt b)" - non associative with precedence 45 -for @{ 'lt $a $b }. - -notation "hvbox(a break \gt b)" - non associative with precedence 45 -for @{ 'gt $a $b }. - -notation "hvbox(a break \neq b)" - non associative with precedence 45 -for @{ 'neq $a $b }. - -notation "hvbox(a break \nleq b)" - non associative with precedence 45 -for @{ 'nleq $a $b }. - -notation "hvbox(a break \ngeq b)" - non associative with precedence 45 -for @{ 'ngeq $a $b }. - -notation "hvbox(a break \nless b)" - non associative with precedence 45 -for @{ 'nless $a $b }. - -notation "hvbox(a break \ngtr b)" - non associative with precedence 45 -for @{ 'ngtr $a $b }. - -notation "hvbox(a break \divides b)" - non associative with precedence 45 -for @{ 'divides $a $b }. - -notation "hvbox(a break \ndivides b)" - non associative with precedence 45 -for @{ 'ndivides $a $b }. - -notation "hvbox(a break + b)" - left associative with precedence 50 -for @{ 'plus $a $b }. - -notation "hvbox(a break - b)" - left associative with precedence 50 -for @{ 'minus $a $b }. - -notation "hvbox(a break * b)" - left associative with precedence 55 -for @{ 'times $a $b }. - -notation "hvbox(a break \mod b)" - left associative with precedence 55 -for @{ 'module $a $b }. - -notation "\frac a b" - non associative with precedence 90 -for @{ 'divide $a $b }. - -notation "a \over b" - left associative with precedence 55 -for @{ 'divide $a $b }. - -notation "hvbox(a break / b)" - left associative with precedence 55 -for @{ 'divide $a $b }. - -notation > "- a" - right associative with precedence 60 -for @{ 'uminus $a }. - -notation < "- a" - right associative with precedence 75 -for @{ 'uminus $a }. - -notation "a !" - non associative with precedence 80 -for @{ 'fact $a }. - -notation "(a \sup b)" - right associative with precedence 65 -for @{ 'exp $a $b}. - -notation "\sqrt a" - non associative with precedence 60 -for @{ 'sqrt $a }. - -notation "hvbox(a break \lor b)" - left associative with precedence 30 -for @{ 'or $a $b }. - -notation "hvbox(a break \land b)" - left associative with precedence 35 -for @{ 'and $a $b }. - -notation "hvbox(\lnot a)" - left associative with precedence 40 -for @{ 'not $a }. diff --git a/helm/matita/dictionary-matita.xml b/helm/matita/dictionary-matita.xml deleted file mode 100644 index 35903486b..000000000 --- a/helm/matita/dictionary-matita.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/helm/matita/dist/Makefile b/helm/matita/dist/Makefile deleted file mode 100644 index 669137bf2..000000000 --- a/helm/matita/dist/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -MYSQL_FLAGS = --extended_insert --lock-tables=off --no-create-info -DB = -u helm -h mowgli.cs.unibo.it matita -TABLE_CREATOR = ../../ocaml/metadata/table_creator/table_creator -TABLES := $(shell $(TABLE_CREATOR) list all) -all: static_link -clean: static_link_clean -.PHONY: static_link -static_link: - $(MAKE) -C static_link/ -static_link_clean: - $(MAKE) -C static_link/ clean -dist: matita_stdlib.sql.gz -.PHONY: matita_stdlib.sql -matita_stdlib.sql: - mysqldump $(MYSQL_FLAGS) $(DB) $(TABLES) > $@ -%.gz: % - gzip -c $< > $@ diff --git a/helm/matita/dist/fill_db.sh b/helm/matita/dist/fill_db.sh deleted file mode 100755 index 1ae28d336..000000000 --- a/helm/matita/dist/fill_db.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -set -e - -MYSQL="mysql" -DBHOST="localhost" -DBNAME="matita" -DBUSER="helm" -DBPASS="" - -TABLE_CREATOR="../../ocaml/metadata/table_creator/table_creator" - -SQL="matita_db.sql" -STDLIB_DATA="matita_stdlib.sql.gz" - -grant_sql="GRANT ALL PRIVILEGES ON $DBNAME.* TO $DBUSER@$DBHOST" -create_sql="CREATE DATABASE $DBNAME" -drop_sql="DROP DATABASE $DBNAME" - -function appendsql() -{ - echo "$1" >> $SQL -} - -echo "Step 0." -echo " Dropping old databases, if any." -echo " You can ignore errors output by this step" -echo "$drop_sql" | $MYSQL -f -echo "Step 1." -echo " Creating database and users." -echo "# SQL statements to create Matita DB and users" > $SQL -appendsql "$create_sql;" -if [ -z "$DBPASS" ]; then - appendsql "$grant_sql;" -else - appendsql "$grant_sql IDENTIFIED BY '$DBPASS';" -fi -$MYSQL < $SQL -echo "Step 2." -echo " Creating database structure." -echo "# SQL statements to create Matita DB structure" > $SQL -creator_args="table fill index" -for arg in $creator_args; do - appendsql "`$TABLE_CREATOR $arg all`" -done -$MYSQL $DBNAME < $SQL -echo "Step 3." -echo " Filling database with standard library metadata." -if [ -f "$STDLIB_DATA" ]; then - gunzip -c "$STDLIB_DATA" | $MYSQL $DBNAME -else - echo " Standard library metadata file $STDLIB_DATA not found, skipping this step." -fi - diff --git a/helm/matita/dist/static_link/.cvsignore b/helm/matita/dist/static_link/.cvsignore deleted file mode 100644 index a922053a0..000000000 --- a/helm/matita/dist/static_link/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -static_link -static_link.cmi -static_link.cmo diff --git a/helm/matita/dist/static_link/Makefile b/helm/matita/dist/static_link/Makefile deleted file mode 100644 index 5a02bb3b7..000000000 --- a/helm/matita/dist/static_link/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -all: static_link -static_link: static_link.ml - ocamlfind ocamlc -package unix,str -linkpkg -o $@ $< -clean: - rm -f static_link.cm* static_link diff --git a/helm/matita/dist/static_link/static_link.ml b/helm/matita/dist/static_link/static_link.ml deleted file mode 100644 index 8b1d57668..000000000 --- a/helm/matita/dist/static_link/static_link.ml +++ /dev/null @@ -1,162 +0,0 @@ - -open Printf - -exception Found of string list - -let ocamlobjinfo = "ocamlobjinfo" -let noautolink = "-noautolink" -let dummy_opt_cmd = "dummy_ocamlopt" -let opt_cmd = "ocamlopt" -let libdirs = [ "/lib"; "/usr/lib"; "/usr/lib/gcc/i486-linux-gnu/4.0.2" ] -let exceptions = [ "threads.cma", [ "-lthreads", "-lthreadsnat" ] ] - -let blanks_RE = Str.regexp "[ \t\r\n]+" -let cmxa_RE = Str.regexp "\\.cmxa$" -let extra_cfiles_RE = Str.regexp "^.*Extra +C +object +files:\\(.*\\)$" -let extra_copts_RE = Str.regexp "^.*Extra +C +options:\\(.*\\)$" -let lib_RE = Str.regexp "^lib" -let l_RE = Str.regexp "^-l" -let opt_line_RE = Str.regexp (sprintf "^\\+ +%s +\\(.*\\)$" dummy_opt_cmd) -let trailing_cmxa_RE = Str.regexp ".*\\.cmxa$" - -let message s = prerr_endline ("STATIC_LINK: " ^ s) -let warning s = message ("WARNING: " ^ s) - -let handle_exceptions ~cma cflag = - try - let cma_exns = List.assoc (Filename.basename cma) exceptions in - let cflag' = List.assoc cflag cma_exns in - message (sprintf "using %s exception %s -> %s" cma cflag cflag'); - cflag' - with Not_found -> cflag - -let parse_cmdline () = - let mine, rest = ref [], ref [] in - let is_mine = ref true in - Array.iter - (function - | "--" -> is_mine := false - | s when !is_mine -> - if Str.string_match lib_RE s 0 then - warning (sprintf - ("libraries to be statically linked must be specified " - ^^ "without heading \"lib\", \"%s\" argument may be wrong") s); - mine := s :: !mine - | s -> rest := s :: !rest) - Sys.argv; - if !rest = [] then begin - prerr_endline "Usage: static_link [ CLIB .. ] -- COMMAND [ ARG .. ]"; - prerr_endline ("Example: static_link pcre expat --" - ^ " ocamlfind opt -package pcre,expat -linkpkg -o foo foo.ml"); - exit 0 - end; - List.tl (List.rev !mine), List.rev !rest - -let extract_opt_flags cmd = - let ic = Unix.open_process_in cmd in - (try - while true do - let l = input_line ic in - if Str.string_match opt_line_RE l 0 then begin - message ("got ocamlopt line: " ^ l); - raise (Found (Str.split blanks_RE (Str.matched_group 1 l))); - end - done; - [] (* dummy value *) - with - | End_of_file -> failwith "compiler command not found" - | Found flags -> - close_in ic; - flags) - -let cma_of_cmxa = Str.replace_first cmxa_RE ".cma" - -let find_clib libname = - let rec aux = - function - | [] -> raise Not_found - | libdir :: tl -> - let fname = sprintf "%s/lib%s.a" libdir libname in - if Sys.file_exists fname then fname else aux tl - in - aux libdirs - -let a_of_cflag cflag = (* "-lfoo" -> "/usr/lib/libfoo.a" *) - let libname = Str.replace_first l_RE "" cflag in - find_clib libname - -let cflags_of_cma fname = - let ic = Unix.open_process_in (sprintf "%s %s" ocamlobjinfo fname) in - let extra_copts = ref "" in - let extra_cfiles = ref "" in - (try - while true do - match input_line ic with - | s when Str.string_match extra_copts_RE s 0 -> - extra_copts := Str.matched_group 1 s - | s when Str.string_match extra_cfiles_RE s 0 -> - extra_cfiles := Str.matched_group 1 s - | _ -> () - done - with End_of_file -> ()); - close_in ic; - let extra_cfiles = List.rev (Str.split blanks_RE !extra_cfiles) in - let extra_copts = Str.split blanks_RE !extra_copts in - extra_copts @ extra_cfiles - -let staticize static_libs flags = - let static_flags = List.map ((^) "-l") static_libs in - let aux ~add_cclib ~cma cflag = - let cflag = - if List.mem cflag static_flags - then - (try - let a = a_of_cflag cflag in - message (sprintf "using static %s instead of shared %s" a cflag); - a - with Not_found -> warning ("can't find lib for " ^ cflag); cflag) - else (handle_exceptions ~cma cflag) - in - if add_cclib then [ "-cclib"; cflag ] else [ cflag ] - in - List.fold_right - (fun flag acc -> - let cma = cma_of_cmxa flag in - if Str.string_match trailing_cmxa_RE flag 0 then begin - message ("processing native archive: " ^ flag); - let cflags = cflags_of_cma cma in - let cflags' = - List.fold_right - (fun cflag acc -> (aux ~add_cclib:true ~cma cflag) @ acc) - cflags [] - in - flag :: (cflags' @ acc) - end else - (aux ~add_cclib:false ~cma flag) @ acc) - flags [] - -let quote_if_needed s = - try - ignore (Str.search_forward blanks_RE s 0); - "\"" ^ s ^ "\"" - with Not_found -> s - -let main () = - let static_libs, args = parse_cmdline () in - printf "C libraries to be linked-in: %s\n" (String.concat " " static_libs); - flush stdout; - let verbose_cmd = - sprintf "OCAMLFIND_COMMANDS='ocamlopt=%s' %s -verbose 2>&1" dummy_opt_cmd - (String.concat " " (List.map quote_if_needed args)) - in - let orig_opt_flags = extract_opt_flags verbose_cmd in - message ("original ocamlopt flags: " ^ String.concat " " orig_opt_flags); - let opt_flags = staticize static_libs orig_opt_flags in - message ("new ocamlopt flags: " ^ String.concat " " opt_flags); - let flags = noautolink :: opt_flags in - let cmd = String.concat " " (opt_cmd :: flags) in - message ("executing command: " ^ cmd); - exit (Sys.command cmd) - -let _ = main () - diff --git a/helm/matita/dump_moo.ml b/helm/matita/dump_moo.ml deleted file mode 100644 index 14dea3472..000000000 --- a/helm/matita/dump_moo.ml +++ /dev/null @@ -1,59 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -let arg_spec = - let std_arg_spec = [] in - let debug_arg_spec = [] in - std_arg_spec @ debug_arg_spec - -let usage = - sprintf "MatitaC v%s\nUsage: dump_moo [option ...] file.moo\nOptions:" - BuildTimeConf.version - -let _ = - let moos = ref [] in - let add_moo fname = moos := fname :: !moos in - Arg.parse arg_spec add_moo usage; - if !moos = [] then begin print_endline usage; exit 1 end; - List.iter - (fun fname -> - if not (Sys.file_exists fname) then - MatitaLog.error (sprintf "Can't find moo '%s', skipping it." fname) - else begin - printf "%s:\n" fname; flush stdout; - let commands, metadata = MatitaMoo.load_moo ~fname in - List.iter - (fun cmd -> - printf " %s\n" (GrafiteAstPp.pp_command cmd); flush stdout) - commands; - List.iter - (fun m -> - printf " %s\n" (GrafiteAstPp.pp_metadata m); flush stdout) - metadata - end) - (List.rev !moos) - diff --git a/helm/matita/gtkmathview.matita.conf.xml.in b/helm/matita/gtkmathview.matita.conf.xml.in deleted file mode 100644 index 0a33ae6d0..000000000 --- a/helm/matita/gtkmathview.matita.conf.xml.in +++ /dev/null @@ -1,15 +0,0 @@ - - -

- @RT_BASE_DIR@/dictionary-matita.xml -
-
-
-
-
- normal -
-
-
-
- diff --git a/helm/matita/icons/matita-bulb-high.png b/helm/matita/icons/matita-bulb-high.png deleted file mode 100644 index 03b6e7f86..000000000 Binary files a/helm/matita/icons/matita-bulb-high.png and /dev/null differ diff --git a/helm/matita/icons/matita-bulb-low.png b/helm/matita/icons/matita-bulb-low.png deleted file mode 100644 index f97302e48..000000000 Binary files a/helm/matita/icons/matita-bulb-low.png and /dev/null differ diff --git a/helm/matita/icons/matita-bulb-medium.png b/helm/matita/icons/matita-bulb-medium.png deleted file mode 100644 index d3d449f93..000000000 Binary files a/helm/matita/icons/matita-bulb-medium.png and /dev/null differ diff --git a/helm/matita/icons/matita-folder.png b/helm/matita/icons/matita-folder.png deleted file mode 100644 index ec0cc0839..000000000 Binary files a/helm/matita/icons/matita-folder.png and /dev/null differ diff --git a/helm/matita/icons/matita-object.png b/helm/matita/icons/matita-object.png deleted file mode 100644 index fe89a30e8..000000000 Binary files a/helm/matita/icons/matita-object.png and /dev/null differ diff --git a/helm/matita/icons/matita-theory.png b/helm/matita/icons/matita-theory.png deleted file mode 100644 index 389152ef3..000000000 Binary files a/helm/matita/icons/matita-theory.png and /dev/null differ diff --git a/helm/matita/icons/matita.png b/helm/matita/icons/matita.png deleted file mode 100644 index 342bcb44c..000000000 Binary files a/helm/matita/icons/matita.png and /dev/null differ diff --git a/helm/matita/icons/matita_medium.png b/helm/matita/icons/matita_medium.png deleted file mode 100644 index 335688af2..000000000 Binary files a/helm/matita/icons/matita_medium.png and /dev/null differ diff --git a/helm/matita/icons/matita_small.png b/helm/matita/icons/matita_small.png deleted file mode 100644 index cfb017b0f..000000000 Binary files a/helm/matita/icons/matita_small.png and /dev/null differ diff --git a/helm/matita/icons/meegg.png b/helm/matita/icons/meegg.png deleted file mode 100644 index 4c2be73fb..000000000 Binary files a/helm/matita/icons/meegg.png and /dev/null differ diff --git a/helm/matita/icons/whelp.png b/helm/matita/icons/whelp.png deleted file mode 100644 index 5597d51e6..000000000 Binary files a/helm/matita/icons/whelp.png and /dev/null differ diff --git a/helm/matita/icons/whelp.svg b/helm/matita/icons/whelp.svg deleted file mode 100644 index c1da66f6d..000000000 --- a/helm/matita/icons/whelp.svg +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - h - - e - - l - - p - - W - - - diff --git a/helm/matita/library/.cvsignore b/helm/matita/library/.cvsignore deleted file mode 100644 index 6d473d47a..000000000 --- a/helm/matita/library/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.depend -*.moo diff --git a/helm/matita/library/Makefile b/helm/matita/library/Makefile deleted file mode 100644 index e13b3e8a4..000000000 --- a/helm/matita/library/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -SRC=$(shell find . -name "*.ma" -a -type f) - -MATITA_FLAGS = -NODB=false -ifeq ($(NODB),true) - MATITA_FLAGS += -nodb -endif - -MATITAC=../scripts/do_tests.sh $(DO_TESTS_OPTS) "../matitac $(MATITA_FLAGS)" "../matitaclean $(MATITA_FLAGS)" /dev/null OK -MATITACOPT=../scripts/do_tests.sh $(DO_TESTS_OPTS) "../matitac.opt $(MATITA_FLAGS)" "../matitaclean.opt $(MATITA_FLAGS)" /dev/null OK -VERBOSEMATITAC=../matitac $(MATITA_FLAGS) -VERBOSEMATITACOPT=../matitac.opt $(MATITA_FLAGS) - -MATITACLEAN=../matitaclean $(MATITA_FLAGS) -MATITACLEANOPT=../matitaclean.opt $(MATITA_FLAGS) - -MATITADEP=../matitadep $(MATITA_FLAGS) -MATITADEPOPT=../matitadep.opt $(MATITA_FLAGS) - -DEPEND_NAME=.depend - -H=@ - -all: $(SRC:%.ma=%.mo) - -opt: - $(H)$(MAKE) MATITAC='$(MATITACOPT)' MATITACLEAN='$(MATITACLEANOPT)' MATITADEP='$(MATITADEPOPT)' all - -verbose: - $(H)$(MAKE) MATITAC='$(VERBOSEMATITAC)' MATITACLEAN='$(MATITACLEAN)' MATITADEP='$(MATITADEP)' all - -%.opt: - $(H)$(MAKE) MATITAC='$(MATITACOPT)' MATITACLEAN='$(MATITACLEANOPT)' MATITADEP='$(MATITADEPOPT)' $(@:%.opt=%) - -clean: - $(H)$(MATITACLEAN) $(SRC) - -cleanall: - $(H)rm -f $(SRC:%.ma=%.moo) - $(MATITACLEAN) all - -depend: - rm -f $(DEPEND_NAME) - $(MAKE) $(DEPEND_NAME) -.PHONY: depend - -%.moo: - $(H)$(MATITAC) $< - -$(DEPEND_NAME): $(SRC) - $(H)$(MATITADEP) $(SRC) > $@ || rm -f $@ - -#include $(DEPEND_NAME) -include .depend diff --git a/helm/matita/library/Q/q.ma b/helm/matita/library/Q/q.ma deleted file mode 100644 index 340154979..000000000 --- a/helm/matita/library/Q/q.ma +++ /dev/null @@ -1,320 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/Q/q". - -include "Z/compare.ma". -include "Z/plus.ma". - -(* a fraction is a list of Z-coefficients for primes, in natural -order. The last coefficient must eventually be different from 0 *) - -inductive fraction : Set \def - pp : nat \to fraction -| nn: nat \to fraction -| cons : Z \to fraction \to fraction. - -inductive ratio : Set \def - one : ratio - | frac : fraction \to ratio. - -(* a rational number is either O or a ratio with a sign *) -inductive Q : Set \def - OQ : Q - | Qpos : ratio \to Q - | Qneg : ratio \to Q. - -(* double elimination principles *) -theorem fraction_elim2: -\forall R:fraction \to fraction \to Prop. -(\forall n:nat.\forall g:fraction.R (pp n) g) \to -(\forall n:nat.\forall g:fraction.R (nn n) g) \to -(\forall x:Z.\forall f:fraction.\forall m:nat.R (cons x f) (pp m)) \to -(\forall x:Z.\forall f:fraction.\forall m:nat.R (cons x f) (nn m)) \to -(\forall x,y:Z.\forall f,g:fraction.R f g \to R (cons x f) (cons y g)) \to -\forall f,g:fraction. R f g. -intros 7.elim f. - apply H. - apply H1. - elim g. - apply H2. - apply H3. - apply H4.apply H5. -qed. - -(* boolean equality *) -let rec eqfb f g \def -match f with -[ (pp n) \Rightarrow - match g with - [ (pp m) \Rightarrow eqb n m - | (nn m) \Rightarrow false - | (cons y g1) \Rightarrow false] -| (nn n) \Rightarrow - match g with - [ (pp m) \Rightarrow false - | (nn m) \Rightarrow eqb n m - | (cons y g1) \Rightarrow false] -| (cons x f1) \Rightarrow - match g with - [ (pp m) \Rightarrow false - | (nn m) \Rightarrow false - | (cons y g1) \Rightarrow andb (eqZb x y) (eqfb f1 g1)]]. - -(* discrimination *) -definition aux \def - \lambda f. match f with - [ (pp n) \Rightarrow n - | (nn n) \Rightarrow n - | (cons x f) \Rightarrow O]. - -definition fhd \def -\lambda f. match f with - [ (pp n) \Rightarrow (pos n) - | (nn n) \Rightarrow (neg n) - | (cons x f) \Rightarrow x]. - -definition ftl \def -\lambda f. match f with - [ (pp n) \Rightarrow (pp n) - | (nn n) \Rightarrow (nn n) - | (cons x f) \Rightarrow f]. - -theorem injective_pp : injective nat fraction pp. -unfold injective.intros. -change with ((aux (pp x)) = (aux (pp y))). -apply eq_f.assumption. -qed. - -theorem injective_nn : injective nat fraction nn. -unfold injective.intros. -change with ((aux (nn x)) = (aux (nn y))). -apply eq_f.assumption. -qed. - -theorem eq_cons_to_eq1: \forall f,g:fraction.\forall x,y:Z. -(cons x f) = (cons y g) \to x = y. -intros. -change with ((fhd (cons x f)) = (fhd (cons y g))). -apply eq_f.assumption. -qed. - -theorem eq_cons_to_eq2: \forall x,y:Z.\forall f,g:fraction. -(cons x f) = (cons y g) \to f = g. -intros. -change with ((ftl (cons x f)) = (ftl (cons y g))). -apply eq_f.assumption. -qed. - -theorem not_eq_pp_nn: \forall n,m:nat. pp n \neq nn m. -intros.unfold Not. intro. -change with match (pp n) with -[ (pp n) \Rightarrow False -| (nn n) \Rightarrow True -| (cons x f) \Rightarrow True]. -rewrite > H. -simplify.exact I. -qed. - -theorem not_eq_pp_cons: -\forall n:nat.\forall x:Z. \forall f:fraction. -pp n \neq cons x f. -intros.unfold Not. intro. -change with match (pp n) with -[ (pp n) \Rightarrow False -| (nn n) \Rightarrow True -| (cons x f) \Rightarrow True]. -rewrite > H. -simplify.exact I. -qed. - -theorem not_eq_nn_cons: -\forall n:nat.\forall x:Z. \forall f:fraction. -nn n \neq cons x f. -intros.unfold Not. intro. -change with match (nn n) with -[ (pp n) \Rightarrow True -| (nn n) \Rightarrow False -| (cons x f) \Rightarrow True]. -rewrite > H. -simplify.exact I. -qed. - -theorem decidable_eq_fraction: \forall f,g:fraction. -decidable (f = g). -intros.unfold decidable. -apply (fraction_elim2 (\lambda f,g. f=g \lor (f=g \to False))). - intros.elim g1. - elim ((decidable_eq_nat n n1) : n=n1 \lor (n=n1 \to False)). - left.apply eq_f. assumption. - right.intro.apply H.apply injective_pp.assumption. - right.apply not_eq_pp_nn. - right.apply not_eq_pp_cons. - intros. elim g1. - right.intro.apply (not_eq_pp_nn n1 n).apply sym_eq. assumption. - elim ((decidable_eq_nat n n1) : n=n1 \lor (n=n1 \to False)). - left. apply eq_f. assumption. - right.intro.apply H.apply injective_nn.assumption. - right.apply not_eq_nn_cons. - intros.right.intro.apply (not_eq_pp_cons m x f1).apply sym_eq.assumption. - intros.right.intro.apply (not_eq_nn_cons m x f1).apply sym_eq.assumption. - intros.elim H. - elim ((decidable_eq_Z x y) : x=y \lor (x=y \to False)). - left.apply eq_f2.assumption. - assumption. - right.intro.apply H2.apply (eq_cons_to_eq1 f1 g1).assumption. - right.intro.apply H1.apply (eq_cons_to_eq2 x y f1 g1).assumption. -qed. - -theorem eqfb_to_Prop: \forall f,g:fraction. -match (eqfb f g) with -[true \Rightarrow f=g -|false \Rightarrow f \neq g]. -intros.apply (fraction_elim2 -(\lambda f,g.match (eqfb f g) with -[true \Rightarrow f=g -|false \Rightarrow f \neq g])). - intros.elim g1. - simplify.apply eqb_elim. - intro.simplify.apply eq_f.assumption. - intro.simplify.unfold Not.intro.apply H.apply injective_pp.assumption. - simplify.apply not_eq_pp_nn. - simplify.apply not_eq_pp_cons. - intros.elim g1. - simplify.unfold Not.intro.apply (not_eq_pp_nn n1 n).apply sym_eq. assumption. - simplify.apply eqb_elim.intro.simplify.apply eq_f.assumption. - intro.simplify.unfold Not.intro.apply H.apply injective_nn.assumption. - simplify.apply not_eq_nn_cons. - intros.simplify.unfold Not.intro.apply (not_eq_pp_cons m x f1).apply sym_eq. assumption. - intros.simplify.unfold Not.intro.apply (not_eq_nn_cons m x f1).apply sym_eq. assumption. - intros. - change in match (eqfb (cons x f1) (cons y g1)) - with (andb (eqZb x y) (eqfb f1 g1)). - apply eqZb_elim. - intro.generalize in match H.elim (eqfb f1 g1). - simplify.apply eq_f2.assumption. - apply H2. - simplify.unfold Not.intro.apply H2.apply (eq_cons_to_eq2 x y).assumption. - intro.simplify.unfold Not.intro.apply H1.apply (eq_cons_to_eq1 f1 g1).assumption. -qed. - -let rec finv f \def - match f with - [ (pp n) \Rightarrow (nn n) - | (nn n) \Rightarrow (pp n) - | (cons x g) \Rightarrow (cons (Zopp x) (finv g))]. - -definition Z_to_ratio :Z \to ratio \def -\lambda x:Z. match x with -[ OZ \Rightarrow one -| (pos n) \Rightarrow frac (pp n) -| (neg n) \Rightarrow frac (nn n)]. - -let rec ftimes f g \def - match f with - [ (pp n) \Rightarrow - match g with - [(pp m) \Rightarrow Z_to_ratio (pos n + pos m) - | (nn m) \Rightarrow Z_to_ratio (pos n + neg m) - | (cons y g1) \Rightarrow frac (cons (pos n + y) g1)] - | (nn n) \Rightarrow - match g with - [(pp m) \Rightarrow Z_to_ratio (neg n + pos m) - | (nn m) \Rightarrow Z_to_ratio (neg n + neg m) - | (cons y g1) \Rightarrow frac (cons (neg n + y) g1)] - | (cons x f1) \Rightarrow - match g with - [ (pp m) \Rightarrow frac (cons (x + pos m) f1) - | (nn m) \Rightarrow frac (cons (x + neg m) f1) - | (cons y g1) \Rightarrow - match ftimes f1 g1 with - [ one \Rightarrow Z_to_ratio (x + y) - | (frac h) \Rightarrow frac (cons (x + y) h)]]]. - -theorem symmetric2_ftimes: symmetric2 fraction ratio ftimes. -unfold symmetric2. intros.apply (fraction_elim2 (\lambda f,g.ftimes f g = ftimes g f)). - intros.elim g. - change with (Z_to_ratio (pos n + pos n1) = Z_to_ratio (pos n1 + pos n)). - apply eq_f.apply sym_Zplus. - change with (Z_to_ratio (pos n + neg n1) = Z_to_ratio (neg n1 + pos n)). - apply eq_f.apply sym_Zplus. - change with (frac (cons (pos n + z) f) = frac (cons (z + pos n) f)). - rewrite < sym_Zplus.reflexivity. - intros.elim g. - change with (Z_to_ratio (neg n + pos n1) = Z_to_ratio (pos n1 + neg n)). - apply eq_f.apply sym_Zplus. - change with (Z_to_ratio (neg n + neg n1) = Z_to_ratio (neg n1 + neg n)). - apply eq_f.apply sym_Zplus. - change with (frac (cons (neg n + z) f) = frac (cons (z + neg n) f)). - rewrite < sym_Zplus.reflexivity. - intros.change with (frac (cons (x1 + pos m) f) = frac (cons (pos m + x1) f)). - rewrite < sym_Zplus.reflexivity. - intros.change with (frac (cons (x1 + neg m) f) = frac (cons (neg m + x1) f)). - rewrite < sym_Zplus.reflexivity. - intros. - change with - (match ftimes f g with - [ one \Rightarrow Z_to_ratio (x1 + y1) - | (frac h) \Rightarrow frac (cons (x1 + y1) h)] = - match ftimes g f with - [ one \Rightarrow Z_to_ratio (y1 + x1) - | (frac h) \Rightarrow frac (cons (y1 + x1) h)]). - rewrite < H.rewrite < sym_Zplus.reflexivity. -qed. - -theorem ftimes_finv : \forall f:fraction. ftimes f (finv f) = one. -intro.elim f. - change with (Z_to_ratio (pos n + - (pos n)) = one). - rewrite > Zplus_Zopp.reflexivity. - change with (Z_to_ratio (neg n + - (neg n)) = one). - rewrite > Zplus_Zopp.reflexivity. -(* again: we would need something to help finding the right change *) - change with - (match ftimes f1 (finv f1) with - [ one \Rightarrow Z_to_ratio (z + - z) - | (frac h) \Rightarrow frac (cons (z + - z) h)] = one). - rewrite > H.rewrite > Zplus_Zopp.reflexivity. -qed. - -definition rtimes : ratio \to ratio \to ratio \def -\lambda r,s:ratio. - match r with - [one \Rightarrow s - | (frac f) \Rightarrow - match s with - [one \Rightarrow frac f - | (frac g) \Rightarrow ftimes f g]]. - -theorem symmetric_rtimes : symmetric ratio rtimes. -change with (\forall r,s:ratio. rtimes r s = rtimes s r). -intros. -elim r. elim s. -reflexivity. -reflexivity. -elim s. -reflexivity. -simplify.apply symmetric2_ftimes. -qed. - -definition rinv : ratio \to ratio \def -\lambda r:ratio. - match r with - [one \Rightarrow one - | (frac f) \Rightarrow frac (finv f)]. - -theorem rtimes_rinv: \forall r:ratio. rtimes r (rinv r) = one. -intro.elim r. -reflexivity. -simplify.apply ftimes_finv. -qed. diff --git a/helm/matita/library/Z/.cvsignore b/helm/matita/library/Z/.cvsignore deleted file mode 100644 index fcd4d925e..000000000 --- a/helm/matita/library/Z/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.moo diff --git a/helm/matita/library/Z/compare.ma b/helm/matita/library/Z/compare.ma deleted file mode 100644 index 4a5025975..000000000 --- a/helm/matita/library/Z/compare.ma +++ /dev/null @@ -1,143 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/Z/compare". - -include "Z/orders.ma". -include "nat/compare.ma". - -(* boolean equality *) -definition eqZb : Z \to Z \to bool \def -\lambda x,y:Z. - match x with - [ OZ \Rightarrow - match y with - [ OZ \Rightarrow true - | (pos q) \Rightarrow false - | (neg q) \Rightarrow false] - | (pos p) \Rightarrow - match y with - [ OZ \Rightarrow false - | (pos q) \Rightarrow eqb p q - | (neg q) \Rightarrow false] - | (neg p) \Rightarrow - match y with - [ OZ \Rightarrow false - | (pos q) \Rightarrow false - | (neg q) \Rightarrow eqb p q]]. - -theorem eqZb_to_Prop: -\forall x,y:Z. -match eqZb x y with -[ true \Rightarrow x=y -| false \Rightarrow x \neq y]. -intros. -elim x. - elim y. - simplify.reflexivity. - simplify.apply not_eq_OZ_pos. - simplify.apply not_eq_OZ_neg. - elim y. - simplify.unfold Not.intro.apply (not_eq_OZ_pos n).apply sym_eq.assumption. - simplify.apply eqb_elim. - intro.simplify.apply eq_f.assumption. - intro.simplify.unfold Not.intro.apply H.apply inj_pos.assumption. - simplify.apply not_eq_pos_neg. - elim y. - simplify.unfold Not.intro.apply (not_eq_OZ_neg n).apply sym_eq.assumption. - simplify.unfold Not.intro.apply (not_eq_pos_neg n1 n).apply sym_eq.assumption. - simplify.apply eqb_elim. - intro.simplify.apply eq_f.assumption. - intro.simplify.unfold Not.intro.apply H.apply inj_neg.assumption. -qed. - -theorem eqZb_elim: \forall x,y:Z.\forall P:bool \to Prop. -(x=y \to (P true)) \to (x \neq y \to (P false)) \to P (eqZb x y). -intros. -cut -(match (eqZb x y) with -[ true \Rightarrow x=y -| false \Rightarrow x \neq y] \to P (eqZb x y)). -apply Hcut. -apply eqZb_to_Prop. -elim (eqZb). -apply (H H2). -apply (H1 H2). -qed. - -definition Z_compare : Z \to Z \to compare \def -\lambda x,y:Z. - match x with - [ OZ \Rightarrow - match y with - [ OZ \Rightarrow EQ - | (pos m) \Rightarrow LT - | (neg m) \Rightarrow GT ] - | (pos n) \Rightarrow - match y with - [ OZ \Rightarrow GT - | (pos m) \Rightarrow (nat_compare n m) - | (neg m) \Rightarrow GT] - | (neg n) \Rightarrow - match y with - [ OZ \Rightarrow LT - | (pos m) \Rightarrow LT - | (neg m) \Rightarrow nat_compare m n ]]. - -theorem Z_compare_to_Prop : -\forall x,y:Z. match (Z_compare x y) with -[ LT \Rightarrow x < y -| EQ \Rightarrow x=y -| GT \Rightarrow y < x]. -intros. -elim x. - elim y. - simplify.apply refl_eq. - simplify.exact I. - simplify.exact I. - elim y. - simplify.exact I. - simplify. - cut (match (nat_compare n n1) with - [ LT \Rightarrow n Zplus_z_OZ.reflexivity. -elim y.simplify.reflexivity. -simplify. -rewrite < plus_n_Sm. rewrite < plus_n_Sm.rewrite < sym_plus.reflexivity. -simplify. -rewrite > nat_compare_n_m_m_n. -simplify.elim nat_compare.simplify.reflexivity. -simplify. reflexivity. -simplify. reflexivity. -elim y.simplify.reflexivity. -simplify.rewrite > nat_compare_n_m_m_n. -simplify.elim nat_compare.simplify.reflexivity. -simplify. reflexivity. -simplify. reflexivity. -simplify.rewrite < plus_n_Sm. rewrite < plus_n_Sm.rewrite < sym_plus.reflexivity. -qed. - -theorem Zpred_Zplus_neg_O : \forall z:Z. Zpred z = (neg O)+z. -intros.elim z. - simplify.reflexivity. - elim n. - simplify.reflexivity. - simplify.reflexivity. - simplify.reflexivity. -qed. - -theorem Zsucc_Zplus_pos_O : \forall z:Z. Zsucc z = (pos O)+z. -intros.elim z. - simplify.reflexivity. - simplify.reflexivity. - elim n. - simplify.reflexivity. - simplify.reflexivity. -qed. - -theorem Zplus_pos_pos: -\forall n,m. (pos n)+(pos m) = (Zsucc (pos n))+(Zpred (pos m)). -intros. -elim n.elim m. -simplify.reflexivity. -simplify.reflexivity. -elim m. -simplify.rewrite < plus_n_Sm. -rewrite < plus_n_O.reflexivity. -simplify.rewrite < plus_n_Sm. -rewrite < plus_n_Sm.reflexivity. -qed. - -theorem Zplus_pos_neg: -\forall n,m. (pos n)+(neg m) = (Zsucc (pos n))+(Zpred (neg m)). -intros.reflexivity. -qed. - -theorem Zplus_neg_pos : -\forall n,m. (neg n)+(pos m) = (Zsucc (neg n))+(Zpred (pos m)). -intros. -elim n.elim m. -simplify.reflexivity. -simplify.reflexivity. -elim m. -simplify.reflexivity. -simplify.reflexivity. -qed. - -theorem Zplus_neg_neg: -\forall n,m. (neg n)+(neg m) = (Zsucc (neg n))+(Zpred (neg m)). -intros. -elim n.elim m. -simplify.reflexivity. -simplify.reflexivity. -elim m. -simplify.rewrite > plus_n_Sm.reflexivity. -simplify.rewrite > plus_n_Sm.reflexivity. -qed. - -theorem Zplus_Zsucc_Zpred: -\forall x,y. x+y = (Zsucc x)+(Zpred y). -intros.elim x. - elim y. - simplify.reflexivity. - rewrite < Zsucc_Zplus_pos_O.rewrite > Zsucc_Zpred.reflexivity. - simplify.reflexivity. - elim y. - simplify.reflexivity. - apply Zplus_pos_pos. - apply Zplus_pos_neg. - elim y. - rewrite < sym_Zplus.rewrite < (sym_Zplus (Zpred OZ)). - rewrite < Zpred_Zplus_neg_O.rewrite > Zpred_Zsucc.simplify.reflexivity. - apply Zplus_neg_pos. - rewrite < Zplus_neg_neg.reflexivity. -qed. - -theorem Zplus_Zsucc_pos_pos : -\forall n,m. (Zsucc (pos n))+(pos m) = Zsucc ((pos n)+(pos m)). -intros.reflexivity. -qed. - -theorem Zplus_Zsucc_pos_neg: -\forall n,m. (Zsucc (pos n))+(neg m) = (Zsucc ((pos n)+(neg m))). -intros. -apply (nat_elim2 -(\lambda n,m. (Zsucc (pos n))+(neg m) = (Zsucc ((pos n)+(neg m))))).intro. -intros.elim n1. -simplify. reflexivity. -elim n2.simplify. reflexivity. -simplify. reflexivity. -intros. elim n1. -simplify. reflexivity. -simplify.reflexivity. -intros. -rewrite < (Zplus_pos_neg ? m1). -elim H.reflexivity. -qed. - -theorem Zplus_Zsucc_neg_neg : -\forall n,m. Zsucc (neg n) + neg m = Zsucc (neg n + neg m). -intros. -apply (nat_elim2 -(\lambda n,m. Zsucc (neg n) + neg m = Zsucc (neg n + neg m))).intro. -intros.elim n1. -simplify. reflexivity. -elim n2.simplify. reflexivity. -simplify. reflexivity. -intros. elim n1. -simplify. reflexivity. -simplify.reflexivity. -intros. -rewrite < (Zplus_neg_neg ? m1). -reflexivity. -qed. - -theorem Zplus_Zsucc_neg_pos: -\forall n,m. Zsucc (neg n)+(pos m) = Zsucc ((neg n)+(pos m)). -intros. -apply (nat_elim2 -(\lambda n,m. Zsucc (neg n) + (pos m) = Zsucc (neg n + pos m))). -intros.elim n1. -simplify. reflexivity. -elim n2.simplify. reflexivity. -simplify. reflexivity. -intros. elim n1. -simplify. reflexivity. -simplify.reflexivity. -intros. -rewrite < H. -rewrite < (Zplus_neg_pos ? (S m1)). -reflexivity. -qed. - -theorem Zplus_Zsucc : \forall x,y:Z. (Zsucc x)+y = Zsucc (x+y). -intros.elim x. - elim y. - simplify. reflexivity. - simplify.reflexivity. - rewrite < Zsucc_Zplus_pos_O.reflexivity. - elim y. - rewrite < (sym_Zplus OZ).reflexivity. - apply Zplus_Zsucc_pos_pos. - apply Zplus_Zsucc_pos_neg. - elim y. - rewrite < sym_Zplus.rewrite < (sym_Zplus OZ).simplify.reflexivity. - apply Zplus_Zsucc_neg_pos. - apply Zplus_Zsucc_neg_neg. -qed. - -theorem Zplus_Zpred: \forall x,y:Z. (Zpred x)+y = Zpred (x+y). -intros. -cut (Zpred (x+y) = Zpred ((Zsucc (Zpred x))+y)). -rewrite > Hcut. -rewrite > Zplus_Zsucc. -rewrite > Zpred_Zsucc. -reflexivity. -rewrite > Zsucc_Zpred. -reflexivity. -qed. - - -theorem associative_Zplus: associative Z Zplus. -change with (\forall x,y,z:Z. (x + y) + z = x + (y + z)). -(* simplify. *) -intros.elim x. - simplify.reflexivity. - elim n. - rewrite < Zsucc_Zplus_pos_O.rewrite < Zsucc_Zplus_pos_O. - rewrite > Zplus_Zsucc.reflexivity. - rewrite > (Zplus_Zsucc (pos n1)).rewrite > (Zplus_Zsucc (pos n1)). - rewrite > (Zplus_Zsucc ((pos n1)+y)).apply eq_f.assumption. - elim n. - rewrite < (Zpred_Zplus_neg_O (y+z)).rewrite < (Zpred_Zplus_neg_O y). - rewrite < Zplus_Zpred.reflexivity. - rewrite > (Zplus_Zpred (neg n1)).rewrite > (Zplus_Zpred (neg n1)). - rewrite > (Zplus_Zpred ((neg n1)+y)).apply eq_f.assumption. -qed. - -variant assoc_Zplus : \forall x,y,z:Z. (x+y)+z = x+(y+z) -\def associative_Zplus. - -(* Zopp *) -definition Zopp : Z \to Z \def -\lambda x:Z. match x with -[ OZ \Rightarrow OZ -| (pos n) \Rightarrow (neg n) -| (neg n) \Rightarrow (pos n) ]. - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "integer unary minus" 'uminus x = (cic:/matita/Z/plus/Zopp.con x). - -theorem Zopp_Zplus: \forall x,y:Z. -(x+y) = -x + -y. -intros. -elim x.elim y. -simplify. reflexivity. -simplify. reflexivity. -simplify. reflexivity. -elim y. -simplify. reflexivity. -simplify. reflexivity. -simplify. apply nat_compare_elim. -intro.simplify.reflexivity. -intro.simplify.reflexivity. -intro.simplify.reflexivity. -elim y. -simplify. reflexivity. -simplify. apply nat_compare_elim. -intro.simplify.reflexivity. -intro.simplify.reflexivity. -intro.simplify.reflexivity. -simplify.reflexivity. -qed. - -theorem Zopp_Zopp: \forall x:Z. --x = x. -intro. elim x. -reflexivity.reflexivity.reflexivity. -qed. - -theorem Zplus_Zopp: \forall x:Z. x+ -x = OZ. -intro.elim x. -apply refl_eq. -simplify. -rewrite > nat_compare_n_n. -simplify.apply refl_eq. -simplify. -rewrite > nat_compare_n_n. -simplify.apply refl_eq. -qed. - diff --git a/helm/matita/library/Z/times.ma b/helm/matita/library/Z/times.ma deleted file mode 100644 index e5e1cdb45..000000000 --- a/helm/matita/library/Z/times.ma +++ /dev/null @@ -1,235 +0,0 @@ -(**************************************************************************) -(* __ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/Z/times". - -include "nat/lt_arith.ma". -include "Z/plus.ma". - -definition Ztimes :Z \to Z \to Z \def -\lambda x,y. - match x with - [ OZ \Rightarrow OZ - | (pos m) \Rightarrow - match y with - [ OZ \Rightarrow OZ - | (pos n) \Rightarrow (pos (pred ((S m) * (S n)))) - | (neg n) \Rightarrow (neg (pred ((S m) * (S n))))] - | (neg m) \Rightarrow - match y with - [ OZ \Rightarrow OZ - | (pos n) \Rightarrow (neg (pred ((S m) * (S n)))) - | (neg n) \Rightarrow (pos (pred ((S m) * (S n))))]]. - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "integer times" 'times x y = (cic:/matita/Z/times/Ztimes.con x y). - -theorem Ztimes_z_OZ: \forall z:Z. z*OZ = OZ. -intro.elim z. -simplify.reflexivity. -simplify.reflexivity. -simplify.reflexivity. -qed. - -theorem Ztimes_neg_Zopp: \forall n:nat.\forall x:Z. -neg n * x = - (pos n * x). -intros.elim x. -simplify.reflexivity. -simplify.reflexivity. -simplify.reflexivity. -qed. -theorem symmetric_Ztimes : symmetric Z Ztimes. -change with (\forall x,y:Z. x*y = y*x). -intros.elim x.rewrite > Ztimes_z_OZ.reflexivity. -elim y.simplify.reflexivity. -change with (pos (pred ((S n) * (S n1))) = pos (pred ((S n1) * (S n)))). -rewrite < sym_times.reflexivity. -change with (neg (pred ((S n) * (S n1))) = neg (pred ((S n1) * (S n)))). -rewrite < sym_times.reflexivity. -elim y.simplify.reflexivity. -change with (neg (pred ((S n) * (S n1))) = neg (pred ((S n1) * (S n)))). -rewrite < sym_times.reflexivity. -change with (pos (pred ((S n) * (S n1))) = pos (pred ((S n1) * (S n)))). -rewrite < sym_times.reflexivity. -qed. - -variant sym_Ztimes : \forall x,y:Z. x*y = y*x -\def symmetric_Ztimes. - -theorem associative_Ztimes: associative Z Ztimes. -change with (\forall x,y,z:Z. (x*y)*z = x*(y*z)). -intros.elim x. - simplify.reflexivity. - elim y. - simplify.reflexivity. - elim z. - simplify.reflexivity. - change with - (pos (pred ((S (pred ((S n) * (S n1)))) * (S n2))) = - pos (pred ((S n) * (S (pred ((S n1) * (S n2))))))). - rewrite < S_pred.rewrite < S_pred.rewrite < assoc_times.reflexivity. - apply lt_O_times_S_S.apply lt_O_times_S_S. - change with - (neg (pred ((S (pred ((S n) * (S n1)))) * (S n2))) = - neg (pred ((S n) * (S (pred ((S n1) * (S n2))))))). - rewrite < S_pred.rewrite < S_pred.rewrite < assoc_times.reflexivity. - apply lt_O_times_S_S.apply lt_O_times_S_S. - elim z. - simplify.reflexivity. - change with - (neg (pred ((S (pred ((S n) * (S n1)))) * (S n2))) = - neg (pred ((S n) * (S (pred ((S n1) * (S n2))))))). - rewrite < S_pred.rewrite < S_pred.rewrite < assoc_times.reflexivity. - apply lt_O_times_S_S.apply lt_O_times_S_S. - change with - (pos (pred ((S (pred ((S n) * (S n1)))) * (S n2))) = - pos(pred ((S n) * (S (pred ((S n1) * (S n2))))))). - rewrite < S_pred.rewrite < S_pred.rewrite < assoc_times.reflexivity. - apply lt_O_times_S_S.apply lt_O_times_S_S. - elim y. - simplify.reflexivity. - elim z. - simplify.reflexivity. - change with - (neg (pred ((S (pred ((S n) * (S n1)))) * (S n2))) = - neg (pred ((S n) * (S (pred ((S n1) * (S n2))))))). - rewrite < S_pred.rewrite < S_pred.rewrite < assoc_times.reflexivity. - apply lt_O_times_S_S.apply lt_O_times_S_S. - change with - (pos (pred ((S (pred ((S n) * (S n1)))) * (S n2))) = - pos (pred ((S n) * (S (pred ((S n1) * (S n2))))))). - rewrite < S_pred.rewrite < S_pred.rewrite < assoc_times.reflexivity. - apply lt_O_times_S_S.apply lt_O_times_S_S. - elim z. - simplify.reflexivity. - change with - (pos (pred ((S (pred ((S n) * (S n1)))) * (S n2))) = - pos (pred ((S n) * (S (pred ((S n1) * (S n2))))))). - rewrite < S_pred.rewrite < S_pred.rewrite < assoc_times.reflexivity. - apply lt_O_times_S_S.apply lt_O_times_S_S. - change with - (neg (pred ((S (pred ((S n) * (S n1)))) * (S n2))) = - neg(pred ((S n) * (S (pred ((S n1) * (S n2))))))). - rewrite < S_pred.rewrite < S_pred.rewrite < assoc_times.reflexivity. - apply lt_O_times_S_S.apply lt_O_times_S_S. -qed. - -variant assoc_Ztimes : \forall x,y,z:Z. -(x * y) * z = x * (y * z) \def -associative_Ztimes. - -lemma times_minus1: \forall n,p,q:nat. lt q p \to -(S n) * (S (pred ((S p) - (S q)))) = -pred ((S n) * (S p)) - pred ((S n) * (S q)). -intros. -rewrite < S_pred. -rewrite > minus_pred_pred. -rewrite < distr_times_minus. -reflexivity. -(* we now close all positivity conditions *) -apply lt_O_times_S_S. -apply lt_O_times_S_S. -simplify.unfold lt. -apply le_SO_minus. exact H. -qed. - -lemma Ztimes_Zplus_pos_neg_pos: \forall n,p,q:nat. -(pos n)*((neg p)+(pos q)) = (pos n)*(neg p)+ (pos n)*(pos q). -intros. -simplify. -change in match (p + n * (S p)) with (pred ((S n) * (S p))). -change in match (q + n * (S q)) with (pred ((S n) * (S q))). -rewrite < nat_compare_pred_pred. -rewrite < nat_compare_times_l. -rewrite < nat_compare_S_S. -apply (nat_compare_elim p q). -intro. -(* uff *) -change with (pos (pred ((S n) * (S (pred ((S q) - (S p)))))) = - pos (pred ((pred ((S n) * (S q))) - (pred ((S n) * (S p)))))). -rewrite < (times_minus1 n q p H).reflexivity. -intro.rewrite < H.simplify.reflexivity. -intro. -change with (neg (pred ((S n) * (S (pred ((S p) - (S q)))))) = - neg (pred ((pred ((S n) * (S p))) - (pred ((S n) * (S q)))))). -rewrite < (times_minus1 n p q H).reflexivity. -(* two more positivity conditions from nat_compare_pred_pred *) -apply lt_O_times_S_S. -apply lt_O_times_S_S. -qed. - -lemma Ztimes_Zplus_pos_pos_neg: \forall n,p,q:nat. -(pos n)*((pos p)+(neg q)) = (pos n)*(pos p)+ (pos n)*(neg q). -intros. -rewrite < sym_Zplus. -rewrite > Ztimes_Zplus_pos_neg_pos. -apply sym_Zplus. -qed. - -lemma distributive2_Ztimes_pos_Zplus: -distributive2 nat Z (\lambda n,z. (pos n) * z) Zplus. -change with (\forall n,y,z. -(pos n) * (y + z) = (pos n) * y + (pos n) * z). -intros.elim y. - reflexivity. - elim z. - reflexivity. - change with - (pos (pred ((S n) * ((S n1) + (S n2)))) = - pos (pred ((S n) * (S n1) + (S n) * (S n2)))). - rewrite < distr_times_plus.reflexivity. - apply Ztimes_Zplus_pos_pos_neg. - elim z. - reflexivity. - apply Ztimes_Zplus_pos_neg_pos. - change with - (neg (pred ((S n) * ((S n1) + (S n2)))) = - neg (pred ((S n) * (S n1) + (S n) * (S n2)))). - rewrite < distr_times_plus.reflexivity. -qed. - -variant distr_Ztimes_Zplus_pos: \forall n,y,z. -(pos n) * (y + z) = ((pos n) * y + (pos n) * z) \def -distributive2_Ztimes_pos_Zplus. - -lemma distributive2_Ztimes_neg_Zplus : -distributive2 nat Z (\lambda n,z. (neg n) * z) Zplus. -change with (\forall n,y,z. -(neg n) * (y + z) = (neg n) * y + (neg n) * z). -intros. -rewrite > Ztimes_neg_Zopp. -rewrite > distr_Ztimes_Zplus_pos. -rewrite > Zopp_Zplus. -rewrite < Ztimes_neg_Zopp. rewrite < Ztimes_neg_Zopp. -reflexivity. -qed. - -variant distr_Ztimes_Zplus_neg: \forall n,y,z. -(neg n) * (y + z) = (neg n) * y + (neg n) * z \def -distributive2_Ztimes_neg_Zplus. - -theorem distributive_Ztimes_Zplus: distributive Z Ztimes Zplus. -change with (\forall x,y,z:Z. x * (y + z) = x*y + x*z). -intros.elim x. -(* case x = OZ *) -simplify.reflexivity. -(* case x = pos n *) -apply distr_Ztimes_Zplus_pos. -(* case x = neg n *) -apply distr_Ztimes_Zplus_neg. -qed. - -variant distr_Ztimes_Zplus: \forall x,y,z. -x * (y + z) = x*y + x*z \def -distributive_Ztimes_Zplus. diff --git a/helm/matita/library/Z/z.ma b/helm/matita/library/Z/z.ma deleted file mode 100644 index d18c80b23..000000000 --- a/helm/matita/library/Z/z.ma +++ /dev/null @@ -1,173 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/Z/z". - -include "datatypes/bool.ma". -include "nat/nat.ma". - -inductive Z : Set \def - OZ : Z -| pos : nat \to Z -| neg : nat \to Z. - -definition Z_of_nat \def -\lambda n. match n with -[ O \Rightarrow OZ -| (S n)\Rightarrow pos n]. - -coercion Z_of_nat. - -definition neg_Z_of_nat \def -\lambda n. match n with -[ O \Rightarrow OZ -| (S n)\Rightarrow neg n]. - -definition abs \def -\lambda z. - match z with -[ OZ \Rightarrow O -| (pos n) \Rightarrow n -| (neg n) \Rightarrow n]. - -definition OZ_test \def -\lambda z. -match z with -[ OZ \Rightarrow true -| (pos n) \Rightarrow false -| (neg n) \Rightarrow false]. - -theorem OZ_test_to_Prop :\forall z:Z. -match OZ_test z with -[true \Rightarrow z=OZ -|false \Rightarrow z \neq OZ]. -intros.elim z. -simplify.reflexivity. -simplify. unfold Not. intros (H). -discriminate H. -simplify. unfold Not. intros (H). -discriminate H. -qed. - -(* discrimination *) -theorem injective_pos: injective nat Z pos. -unfold injective. -intros. -change with (abs (pos x) = abs (pos y)). -apply eq_f.assumption. -qed. - -variant inj_pos : \forall n,m:nat. pos n = pos m \to n = m -\def injective_pos. - -theorem injective_neg: injective nat Z neg. -unfold injective. -intros. -change with (abs (neg x) = abs (neg y)). -apply eq_f.assumption. -qed. - -variant inj_neg : \forall n,m:nat. neg n = neg m \to n = m -\def injective_neg. - -theorem not_eq_OZ_pos: \forall n:nat. OZ \neq pos n. -unfold Not.intros (n H). -discriminate H. -qed. - -theorem not_eq_OZ_neg :\forall n:nat. OZ \neq neg n. -unfold Not.intros (n H). -discriminate H. -qed. - -theorem not_eq_pos_neg :\forall n,m:nat. pos n \neq neg m. -unfold Not.intros (n m H). -discriminate H. -qed. - -theorem decidable_eq_Z : \forall x,y:Z. decidable (x=y). -intros.unfold decidable. -elim x. -(* goal: x=OZ *) - elim y. - (* goal: x=OZ y=OZ *) - left.reflexivity. - (* goal: x=OZ 2=2 *) - right.apply not_eq_OZ_pos. - (* goal: x=OZ 2=3 *) - right.apply not_eq_OZ_neg. -(* goal: x=pos *) - elim y. - (* goal: x=pos y=OZ *) - right.unfold Not.intro. - apply (not_eq_OZ_pos n). symmetry. assumption. - (* goal: x=pos y=pos *) - elim (decidable_eq_nat n n1:((n=n1) \lor ((n=n1) \to False))). - left.apply eq_f.assumption. - right.unfold Not.intros (H_inj).apply H. injection H_inj. assumption. - (* goal: x=pos y=neg *) - right.unfold Not.intro.apply (not_eq_pos_neg n n1). assumption. -(* goal: x=neg *) - elim y. - (* goal: x=neg y=OZ *) - right.unfold Not.intro. - apply (not_eq_OZ_neg n). symmetry. assumption. - (* goal: x=neg y=pos *) - right. unfold Not.intro. apply (not_eq_pos_neg n1 n). symmetry. assumption. - (* goal: x=neg y=neg *) - elim (decidable_eq_nat n n1:((n=n1) \lor ((n=n1) \to False))). - left.apply eq_f.assumption. - right.unfold Not.intro.apply H.apply injective_neg.assumption. -qed. - -(* end discrimination *) - -definition Zsucc \def -\lambda z. match z with -[ OZ \Rightarrow pos O -| (pos n) \Rightarrow pos (S n) -| (neg n) \Rightarrow - match n with - [ O \Rightarrow OZ - | (S p) \Rightarrow neg p]]. - -definition Zpred \def -\lambda z. match z with -[ OZ \Rightarrow neg O -| (pos n) \Rightarrow - match n with - [ O \Rightarrow OZ - | (S p) \Rightarrow pos p] -| (neg n) \Rightarrow neg (S n)]. - -theorem Zpred_Zsucc: \forall z:Z. Zpred (Zsucc z) = z. -intros. -elim z. - reflexivity. - reflexivity. - elim n. - reflexivity. - reflexivity. -qed. - -theorem Zsucc_Zpred: \forall z:Z. Zsucc (Zpred z) = z. -intros. -elim z. - reflexivity. - elim n. - reflexivity. - reflexivity. - reflexivity. -qed. - diff --git a/helm/matita/library/datatypes/.cvsignore b/helm/matita/library/datatypes/.cvsignore deleted file mode 100644 index fcd4d925e..000000000 --- a/helm/matita/library/datatypes/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.moo diff --git a/helm/matita/library/datatypes/bool.ma b/helm/matita/library/datatypes/bool.ma deleted file mode 100644 index 3292e6789..000000000 --- a/helm/matita/library/datatypes/bool.ma +++ /dev/null @@ -1,126 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/datatypes/bool/". - -include "logic/equality.ma". - -inductive bool : Set \def - | true : bool - | false : bool. - -theorem bool_elim: \forall P:bool \to Prop. \forall b:bool. - (b = true \to P true) - \to (b = false \to P false) - \to P b. - intros 2 (P b). - elim b; - [ apply H; reflexivity - | apply H1; reflexivity - ] -qed. - -theorem not_eq_true_false : true \neq false. -unfold Not.intro. -change with -match true with -[ true \Rightarrow False -| flase \Rightarrow True]. -rewrite > H.simplify.exact I. -qed. - -definition notb : bool \to bool \def -\lambda b:bool. - match b with - [ true \Rightarrow false - | false \Rightarrow true ]. - -theorem notb_elim: \forall b:bool.\forall P:bool \to Prop. -match b with -[ true \Rightarrow P false -| false \Rightarrow P true] \to P (notb b). -intros 2.elim b.exact H. exact H. -qed. - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "boolean not" 'not x = (cic:/matita/datatypes/bool/notb.con x). - -definition andb : bool \to bool \to bool\def -\lambda b1,b2:bool. - match b1 with - [ true \Rightarrow b2 - | false \Rightarrow false ]. - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "boolean and" 'and x y = (cic:/matita/datatypes/bool/andb.con x y). - -theorem andb_elim: \forall b1,b2:bool. \forall P:bool \to Prop. -match b1 with -[ true \Rightarrow P b2 -| false \Rightarrow P false] \to P (b1 \land b2). -intros 3.elim b1.exact H. exact H. -qed. - -theorem andb_true_true: \forall b1,b2. (b1 \land b2) = true \to b1 = true. -intro. elim b1. -reflexivity. -assumption. -qed. - -definition orb : bool \to bool \to bool\def -\lambda b1,b2:bool. - match b1 with - [ true \Rightarrow true - | false \Rightarrow b2]. - -theorem orb_elim: \forall b1,b2:bool. \forall P:bool \to Prop. -match b1 with -[ true \Rightarrow P true -| false \Rightarrow P b2] \to P (orb b1 b2). -intros 3.elim b1.exact H. exact H. -qed. - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "boolean or" 'or x y = (cic:/matita/datatypes/bool/orb.con x y). - -definition if_then_else : bool \to Prop \to Prop \to Prop \def -\lambda b:bool.\lambda P,Q:Prop. -match b with -[ true \Rightarrow P -| false \Rightarrow Q]. - -(*CSC: missing notation for if_then_else *) - -theorem bool_to_decidable_eq: - \forall b1,b2:bool. decidable (b1=b2). - intros. - unfold decidable. - elim b1. - elim b2. - left. reflexivity. - right. exact not_eq_true_false. - elim b2. - right. unfold Not. intro. - apply not_eq_true_false. - symmetry. exact H. - left. reflexivity. -qed. - -theorem P_x_to_P_x_to_eq: - \forall A:Set. \forall P: A \to bool. - \forall x:A. \forall p1,p2:P x = true. p1 = p2. - intros. - apply eq_to_eq_to_eq_p_q. - exact bool_to_decidable_eq. -qed. diff --git a/helm/matita/library/datatypes/compare.ma b/helm/matita/library/datatypes/compare.ma deleted file mode 100644 index c4fd119a5..000000000 --- a/helm/matita/library/datatypes/compare.ma +++ /dev/null @@ -1,27 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/datatypes/compare/". - -inductive compare :Set \def -| LT : compare -| EQ : compare -| GT : compare. - -definition compare_invert: compare \to compare \def - \lambda c. - match c with - [ LT \Rightarrow GT - | EQ \Rightarrow EQ - | GT \Rightarrow LT ]. diff --git a/helm/matita/library/datatypes/constructors.ma b/helm/matita/library/datatypes/constructors.ma deleted file mode 100644 index 2ac1cb376..000000000 --- a/helm/matita/library/datatypes/constructors.ma +++ /dev/null @@ -1,38 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/datatypes/constructors/". -include "logic/equality.ma". - -inductive void : Set \def. - -inductive Prod (A,B:Set) : Set \def -pair : A \to B \to Prod A B. - -definition fst \def \lambda A,B:Set.\lambda p: Prod A B. -match p with -[(pair a b) \Rightarrow a]. - -definition snd \def \lambda A,B:Set.\lambda p: Prod A B. -match p with -[(pair a b) \Rightarrow b]. - -theorem eq_pair_fst_snd: \forall A,B:Set.\forall p: Prod A B. -p = pair A B (fst A B p) (snd A B p). -intros.elim p.simplify.reflexivity. -qed. - -inductive Sum (A,B:Set) : Set \def - inl : A \to Sum A B -| inr : B \to Sum A B. diff --git a/helm/matita/library/higher_order_defs/.cvsignore b/helm/matita/library/higher_order_defs/.cvsignore deleted file mode 100644 index fcd4d925e..000000000 --- a/helm/matita/library/higher_order_defs/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.moo diff --git a/helm/matita/library/higher_order_defs/functions.ma b/helm/matita/library/higher_order_defs/functions.ma deleted file mode 100644 index a1b54c80c..000000000 --- a/helm/matita/library/higher_order_defs/functions.ma +++ /dev/null @@ -1,67 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/higher_order_defs/functions/". - -include "logic/equality.ma". - -definition compose \def - \lambda A,B,C:Type.\lambda f:(B\to C).\lambda g:(A\to B).\lambda x:A. - f (g x). - -notation "hvbox(a break \circ b)" - left associative with precedence 70 -for @{ 'compose $a $b }. - -interpretation "function composition" 'compose f g = - (cic:/matita/higher_order_defs/functions/compose.con _ _ _ f g). - -definition injective: \forall A,B:Type.\forall f:A \to B.Prop -\def \lambda A,B.\lambda f. - \forall x,y:A.f x = f y \to x=y. - -definition surjective: \forall A,B:Type.\forall f:A \to B.Prop -\def \lambda A,B.\lambda f. - \forall z:B. \exists x:A.z=f x. - -definition symmetric: \forall A:Type.\forall f:A \to A\to A.Prop -\def \lambda A.\lambda f.\forall x,y.f x y = f y x. - -definition symmetric2: \forall A,B:Type.\forall f:A \to A\to B.Prop -\def \lambda A,B.\lambda f.\forall x,y.f x y = f y x. - -definition associative: \forall A:Type.\forall f:A \to A\to A.Prop -\def \lambda A.\lambda f.\forall x,y,z.f (f x y) z = f x (f y z). - -theorem eq_f_g_h: - \forall A,B,C,D:Type. - \forall f:C \to D.\forall g:B \to C.\forall h:A \to B. - f \circ (g \circ h) = (f \circ g) \circ h. - intros. - reflexivity. -qed. - -(* functions and relations *) -definition monotonic : \forall A:Type.\forall R:A \to A \to Prop. -\forall f:A \to A.Prop \def -\lambda A. \lambda R. \lambda f. \forall x,y:A.R x y \to R (f x) (f y). - -(* functions and functions *) -definition distributive: \forall A:Type.\forall f,g:A \to A \to A.Prop -\def \lambda A.\lambda f,g.\forall x,y,z:A. f x (g y z) = g (f x y) (f x z). - -definition distributive2: \forall A,B:Type.\forall f:A \to B \to B. -\forall g: B\to B\to B. Prop -\def \lambda A,B.\lambda f,g.\forall x:A.\forall y,z:B. f x (g y z) = g (f x y) (f x z). - diff --git a/helm/matita/library/higher_order_defs/ordering.ma b/helm/matita/library/higher_order_defs/ordering.ma deleted file mode 100644 index c2b351d7a..000000000 --- a/helm/matita/library/higher_order_defs/ordering.ma +++ /dev/null @@ -1,22 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/higher_order_defs/ordering/". - -include "logic/equality.ma". - -definition antisymmetric: \forall A:Type.\forall R:A \to A \to Prop.Prop -\def -\lambda A.\lambda R.\forall x,y:A.R x y \to R y x \to x=y. - diff --git a/helm/matita/library/higher_order_defs/relations.ma b/helm/matita/library/higher_order_defs/relations.ma deleted file mode 100644 index 029b229dc..000000000 --- a/helm/matita/library/higher_order_defs/relations.ma +++ /dev/null @@ -1,33 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/higher_order_defs/relations/". - -include "logic/connectives.ma". - -definition reflexive: \forall A:Type.\forall R:A \to A \to Prop.Prop -\def -\lambda A.\lambda R.\forall x:A.R x x. - -definition symmetric: \forall A:Type.\forall R:A \to A \to Prop.Prop -\def -\lambda A.\lambda R.\forall x,y:A.R x y \to R y x. - -definition transitive: \forall A:Type.\forall R:A \to A \to Prop.Prop -\def -\lambda A.\lambda R.\forall x,y,z:A.R x y \to R y z \to R x z. - -definition irreflexive: \forall A:Type.\forall R:A \to A \to Prop.Prop -\def -\lambda A.\lambda R.\forall x:A.\lnot (R x x). diff --git a/helm/matita/library/list/list.ma b/helm/matita/library/list/list.ma deleted file mode 100644 index d5664f416..000000000 --- a/helm/matita/library/list/list.ma +++ /dev/null @@ -1,108 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/list/". -include "logic/equality.ma". -include "higher_order_defs/functions.ma". - -notation "hvbox(hd break :: tl)" - right associative with precedence 46 - for @{'cons $hd $tl}. - -notation "[ list0 x sep ; ]" - non associative with precedence 90 - for ${fold right @'nil rec acc @{'cons $x $acc}}. - -notation "hvbox(l1 break @ l2)" - right associative with precedence 47 - for @{'append $l1 $l2 }. - -inductive list (A:Set) : Set := - | nil: list A - | cons: A -> list A -> list A. - -interpretation "nil" 'nil = (cic:/matita/list/list.ind#xpointer(1/1/1) _). -interpretation "cons" 'cons hd tl = - (cic:/matita/list/list.ind#xpointer(1/1/2) _ hd tl). - -(* theorem test_notation: [O; S O; S (S O)] = O :: S O :: S (S O) :: []. *) - -theorem nil_cons: - \forall A:Set.\forall l:list A.\forall a:A. - a::l <> []. - intros. - unfold; intros. - discriminate H. -qed. - -let rec id_list A (l: list A) on l := - match l with - [ nil => [] - | (cons hd tl) => hd :: id_list A tl ]. - -let rec append A (l1: list A) l2 on l1 := - match l1 with - [ nil => l2 - | (cons hd tl) => hd :: append A tl l2 ]. - -definition tail := \lambda A:Set. \lambda l: list A. - match l with - [ nil => [] - | (cons hd tl) => tl]. - -interpretation "append" 'append l1 l2 = (cic:/matita/list/append.con _ l1 l2). - -theorem append_nil: \forall A:Set.\forall l:list A.l @ [] = l. - intros. - elim l. - reflexivity. - simplify. - rewrite > H. - reflexivity. -qed. - -theorem associative_append: \forall A:Set.associative (list A) (append A). - intros; unfold; intros. - elim x. - simplify; reflexivity. - simplify. - rewrite > H. - reflexivity. -qed. - -theorem cons_append_commute: - \forall A:Set.\forall l1,l2:list A.\forall a:A. - a :: (l1 @ l2) = (a :: l1) @ l2. - intros. - reflexivity. -qed. - -(* -theorem nil_append_nil_both: - \forall A:Set.\forall l1,l2:list A. - l1 @ l2 = [] \to l1 = [] \land l2 = []. -*) - -(* -include "nat/nat.ma". - -theorem test_notation: [O; S O; S (S O)] = O :: S O :: S (S O) :: []. -reflexivity. -qed. - -theorem test_append: [O;O;O;O;O;O] = [O;O;O] @ [O;O] @ [O]. -simplify. -reflexivity. -qed. -*) diff --git a/helm/matita/library/list/sort.ma b/helm/matita/library/list/sort.ma deleted file mode 100644 index 939cecede..000000000 --- a/helm/matita/library/list/sort.ma +++ /dev/null @@ -1,172 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/list/sort/". - -include "datatypes/bool.ma". -include "datatypes/constructors.ma". -include "list/list.ma". - -let rec mem (A:Set) (eq: A → A → bool) x (l: list A) on l ≝ - match l with - [ nil ⇒ false - | (cons a l') ⇒ - match eq x a with - [ true ⇒ true - | false ⇒ mem A eq x l' - ] - ]. - -let rec ordered (A:Set) (le: A → A → bool) (l: list A) on l ≝ - match l with - [ nil ⇒ true - | (cons x l') ⇒ - match l' with - [ nil ⇒ true - | (cons y l'') ⇒ - le x y \land ordered A le l' - ] - ]. - -let rec insert (A:Set) (le: A → A → bool) x (l: list A) on l ≝ - match l with - [ nil ⇒ [x] - | (cons he l') ⇒ - match le x he with - [ true ⇒ x::l - | false ⇒ he::(insert A le x l') - ] - ]. - -lemma insert_ind : - ∀A:Set. ∀le: A → A → bool. ∀x. - ∀P:(list A → list A → Prop). - ∀H:(∀l: list A. l=[] → P [] [x]). - ∀H2: - (∀l: list A. ∀he. ∀l'. P l' (insert ? le x l') → - le x he = false → l=he::l' → P (he::l') (he::(insert ? le x l'))). - ∀H3: - (∀l: list A. ∀he. ∀l'. P l' (insert ? le x l') → - le x he = true → l=he::l' → P (he::l') (x::he::l')). - ∀l:list A. P l (insert ? le x l). - intros. - apply ( - let rec insert_ind (l: list A) \def - match l in list - return - λli. - l = li → P li (insert ? le x li) - with - [ nil ⇒ H l - | (cons he l') ⇒ - match le x he - return - λb. le x he = b → l = he::l' → - P (he::l') - (match b with - [ true ⇒ x::he::l' - | false ⇒ he::(insert ? le x l') ]) - with - [ true ⇒ H2 l he l' (insert_ind l') - | false ⇒ H1 l he l' (insert_ind l') - ] - (refl_eq ? (le x he)) - ] (refl_eq ? l) in insert_ind l). -qed. - - -let rec insertionsort (A:Set) (le: A → A → bool) (l: list A) on l ≝ - match l with - [ nil ⇒ [] - | (cons he l') ⇒ - let l'' ≝ insertionsort A le l' in - insert A le he l'' - ]. - -lemma ordered_injective: - ∀A:Set. ∀le:A → A → bool. - ∀l:list A. ordered A le l = true → ordered A le (tail A l) = true. - intros 3 (A le l). - elim l - [ simplify; reflexivity; - | simplify; - generalize in match H1; - clear H1; - elim l1; - [ simplify; reflexivity; - | cut ((le s s1 \land ordered A le (s1::l2)) = true); - [ generalize in match Hcut; - apply andb_elim; - elim (le s s1); - [ simplify; - fold simplify (ordered ? le (s1::l2)); - intros; assumption; - | simplify; - intros (Habsurd); - apply False_ind; - apply (not_eq_true_false); - symmetry; - assumption - ] - | exact H2; - ] - ] - ]. -qed. - -lemma insert_sorted: - \forall A:Set. \forall le:A\to A\to bool. - (\forall a,b:A. le a b = false \to le b a = true) \to - \forall l:list A. \forall x:A. - ordered A le l = true \to ordered A le (insert A le x l) = true. - intros 5 (A le H l x). - apply (insert_ind ? ? ? (λl,il. ordered ? le l = true → ordered ? le il = true)); - clear l; intros; simplify; intros; - [2: rewrite > H1; - [ generalize in match (H ? ? H2); clear H2; intro; - generalize in match H4; clear H4; - elim l'; simplify; - [ rewrite > H5; - reflexivity - | elim (le x s); simplify; - [ rewrite > H5; - reflexivity - | simplify in H4; - rewrite > (andb_true_true ? ? H4); - reflexivity - ] - ] - | apply (ordered_injective ? ? ? H4) - ] - | reflexivity - | rewrite > H2; - rewrite > H4; - reflexivity - ]. -qed. - -theorem insertionsort_sorted: - ∀A:Set. - ∀le:A → A → bool.∀eq:A → A → bool. - (∀a,b:A. le a b = false → le b a = true) \to - ∀l:list A. - ordered A le (insertionsort A le l) = true. - intros 5 (A le eq le_tot l). - elim l; - [ simplify; - reflexivity; - | apply (insert_sorted ? ? le_tot (insertionsort ? le l1) s); - assumption; - ] -qed. \ No newline at end of file diff --git a/helm/matita/library/logic/.cvsignore b/helm/matita/library/logic/.cvsignore deleted file mode 100644 index fcd4d925e..000000000 --- a/helm/matita/library/logic/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.moo diff --git a/helm/matita/library/logic/connectives.ma b/helm/matita/library/logic/connectives.ma deleted file mode 100644 index 4cbea3529..000000000 --- a/helm/matita/library/logic/connectives.ma +++ /dev/null @@ -1,90 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/logic/connectives/". - -inductive True: Prop \def -I : True. - -default "true" cic:/matita/logic/connectives/True.ind. - -inductive False: Prop \def . - -default "false" cic:/matita/logic/connectives/False.ind. - -definition Not: Prop \to Prop \def -\lambda A. (A \to False). - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "logical not" 'not x = (cic:/matita/logic/connectives/Not.con x). - -theorem absurd : \forall A,C:Prop. A \to \lnot A \to C. -intros. elim (H1 H). -qed. - -default "absurd" cic:/matita/logic/connectives/absurd.con. - -inductive And (A,B:Prop) : Prop \def - conj : A \to B \to (And A B). - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "logical and" 'and x y = (cic:/matita/logic/connectives/And.ind#xpointer(1/1) x y). - -theorem proj1: \forall A,B:Prop. A \land B \to A. -intros. elim H. assumption. -qed. - -theorem proj2: \forall A,B:Prop. A \land B \to B. -intros. elim H. assumption. -qed. - -inductive Or (A,B:Prop) : Prop \def - or_introl : A \to (Or A B) - | or_intror : B \to (Or A B). - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "logical or" 'or x y = - (cic:/matita/logic/connectives/Or.ind#xpointer(1/1) x y). - -theorem Or_ind': - \forall A,B:Prop. - \forall P: A \lor B \to Prop. - (\forall p:A. P (or_introl ? ? p)) \to - (\forall q:B. P (or_intror ? ? q)) \to - \forall p:A \lor B. P p. - intros. - apply - (match p return \lambda p.P p with - [(or_introl p) \Rightarrow H p - |(or_intror q) \Rightarrow H1 q]). -qed. - -definition decidable : Prop \to Prop \def \lambda A:Prop. A \lor \lnot A. - -inductive ex (A:Type) (P:A \to Prop) : Prop \def - ex_intro: \forall x:A. P x \to ex A P. - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "exists" 'exists \eta.x = - (cic:/matita/logic/connectives/ex.ind#xpointer(1/1) _ x). - -notation < "hvbox(\exists ident i opt (: ty) break . p)" - right associative with precedence 20 -for @{ 'exists ${default - @{\lambda ${ident i} : $ty. $p)} - @{\lambda ${ident i} . $p}}}. - -inductive ex2 (A:Type) (P,Q:A \to Prop) : Prop \def - ex_intro2: \forall x:A. P x \to Q x \to ex2 A P Q. - diff --git a/helm/matita/library/logic/equality.ma b/helm/matita/library/logic/equality.ma deleted file mode 100644 index b87dc6c95..000000000 --- a/helm/matita/library/logic/equality.ma +++ /dev/null @@ -1,214 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/logic/equality/". - -include "higher_order_defs/relations.ma". - -inductive eq (A:Type) (x:A) : A \to Prop \def - refl_eq : eq A x x. - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "leibnitz's equality" - 'eq x y = (cic:/matita/logic/equality/eq.ind#xpointer(1/1) _ x y). -(*CSC: the URI must disappear: there is a bug now *) -interpretation "leibnitz's non-equality" - 'neq x y = (cic:/matita/logic/connectives/Not.con - (cic:/matita/logic/equality/eq.ind#xpointer(1/1) _ x y)). - -theorem eq_ind': - \forall A. \forall x:A. \forall P: \forall y:A. x=y \to Prop. - P ? (refl_eq ? x) \to \forall y:A. \forall p:x=y. P y p. - intros. - exact - (match p return \lambda y. \lambda p.P y p with - [refl_eq \Rightarrow H]). -qed. - -theorem reflexive_eq : \forall A:Type. reflexive A (eq A). -simplify.intros.apply refl_eq. -qed. - -theorem symmetric_eq: \forall A:Type. symmetric A (eq A). -unfold symmetric.intros.elim H. apply refl_eq. -qed. - -theorem sym_eq : \forall A:Type.\forall x,y:A. x=y \to y=x -\def symmetric_eq. - -theorem transitive_eq : \forall A:Type. transitive A (eq A). -unfold transitive.intros.elim H1.assumption. -qed. - -theorem trans_eq : \forall A:Type.\forall x,y,z:A. x=y \to y=z \to x=z -\def transitive_eq. - -theorem eq_elim_r: - \forall A:Type.\forall x:A. \forall P: A \to Prop. - P x \to \forall y:A. y=x \to P y. -intros. elim (sym_eq ? ? ? H1).assumption. -qed. - -default "equality" - cic:/matita/logic/equality/eq.ind - cic:/matita/logic/equality/sym_eq.con - cic:/matita/logic/equality/trans_eq.con - cic:/matita/logic/equality/eq_ind.con - cic:/matita/logic/equality/eq_elim_r.con. - -theorem eq_f: \forall A,B:Type.\forall f:A\to B. -\forall x,y:A. x=y \to f x = f y. -intros.elim H.reflexivity. -qed. - -theorem eq_f2: \forall A,B,C:Type.\forall f:A\to B \to C. -\forall x1,x2:A. \forall y1,y2:B. -x1=x2 \to y1=y2 \to f x1 y1 = f x2 y2. -intros.elim H1.elim H.reflexivity. -qed. - -definition comp \def - \lambda A. - \lambda x,y,y':A. - \lambda eq1:x=y. - \lambda eq2:x=y'. - eq_ind ? ? (\lambda a.a=y') eq2 ? eq1. - -lemma trans_sym_eq: - \forall A. - \forall x,y:A. - \forall u:x=y. - comp ? ? ? ? u u = refl_eq ? y. - intros. - apply (eq_ind' ? ? ? ? ? u). - reflexivity. -qed. - -definition nu \def - \lambda A. - \lambda H: \forall x,y:A. decidable (x=y). - \lambda x,y. \lambda p:x=y. - match H x y with - [ (or_introl p') \Rightarrow p' - | (or_intror K) \Rightarrow False_ind ? (K p) ]. - -theorem nu_constant: - \forall A. - \forall H: \forall x,y:A. decidable (x=y). - \forall x,y:A. - \forall u,v:x=y. - nu ? H ? ? u = nu ? H ? ? v. - intros. - unfold nu. - unfold decidable in H. - apply (Or_ind' ? ? ? ? ? (H x y)); simplify. - intro; reflexivity. - intro; elim (q u). -qed. - -definition nu_inv \def - \lambda A. - \lambda H: \forall x,y:A. decidable (x=y). - \lambda x,y:A. - \lambda v:x=y. - comp ? ? ? ? (nu ? H ? ? (refl_eq ? x)) v. - -theorem nu_left_inv: - \forall A. - \forall H: \forall x,y:A. decidable (x=y). - \forall x,y:A. - \forall u:x=y. - nu_inv ? H ? ? (nu ? H ? ? u) = u. - intros. - apply (eq_ind' ? ? ? ? ? u). - unfold nu_inv. - apply trans_sym_eq. -qed. - -theorem eq_to_eq_to_eq_p_q: - \forall A. \forall x,y:A. - (\forall x,y:A. decidable (x=y)) \to - \forall p,q:x=y. p=q. - intros. - rewrite < (nu_left_inv ? H ? ? p). - rewrite < (nu_left_inv ? H ? ? q). - elim (nu_constant ? H ? ? q). - reflexivity. -qed. - -(*CSC: alternative proof that does not pollute the environment with - technical lemmata. Unfortunately, it is a pain to do without proper - support for let-ins. -theorem eq_to_eq_to_eq_p_q: - \forall A. \forall x,y:A. - (\forall x,y:A. decidable (x=y)) \to - \forall p,q:x=y. p=q. -intros. -letin nu \def - (\lambda x,y. \lambda p:x=y. - match H x y with - [ (or_introl p') \Rightarrow p' - | (or_intror K) \Rightarrow False_ind ? (K p) ]). -cut - (\forall q:x=y. - eq_ind ? ? (\lambda z. z=y) (nu ? ? q) ? (nu ? ? (refl_eq ? x)) - = q). -focus 8. - clear q; clear p. - intro. - apply (eq_ind' ? ? ? ? ? q); - fold simplify (nu ? ? (refl_eq ? x)). - generalize in match (nu ? ? (refl_eq ? x)); intro. - apply - (eq_ind' A x - (\lambda y. \lambda u. - eq_ind A x (\lambda a.a=y) u y u = refl_eq ? y) - ? x H1). - reflexivity. -unfocus. -rewrite < (Hcut p); fold simplify (nu ? ? p). -rewrite < (Hcut q); fold simplify (nu ? ? q). -apply (Or_ind' (x=x) (x \neq x) - (\lambda p:decidable (x=x). eq_ind A x (\lambda z.z=y) (nu x y p) x - ([\lambda H1.eq A x x] - match p with - [(or_introl p') \Rightarrow p' - |(or_intror K) \Rightarrow False_ind (x=x) (K (refl_eq A x))]) = - eq_ind A x (\lambda z.z=y) (nu x y q) x - ([\lambda H1.eq A x x] - match p with - [(or_introl p') \Rightarrow p' - |(or_intror K) \Rightarrow False_ind (x=x) (K (refl_eq A x))])) - ? ? (H x x)). -intro; simplify; reflexivity. -intro q; elim (q (refl_eq ? x)). -qed. -*) - -(* -theorem a:\forall x.x=x\land True. -[ -2:intros; - split; - [ - exact (refl_eq Prop x); - | - exact I; - ] -1: - skip -] -qed. -*) - diff --git a/helm/matita/library/nat/.cvsignore b/helm/matita/library/nat/.cvsignore deleted file mode 100644 index fcd4d925e..000000000 --- a/helm/matita/library/nat/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.moo diff --git a/helm/matita/library/nat/chinese_reminder.ma b/helm/matita/library/nat/chinese_reminder.ma deleted file mode 100644 index 30cc7440f..000000000 --- a/helm/matita/library/nat/chinese_reminder.ma +++ /dev/null @@ -1,251 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/chinese_reminder". - -include "nat/exp.ma". -include "nat/gcd.ma". -include "nat/permutation.ma". -include "nat/congruence.ma". - -theorem and_congruent_congruent: \forall m,n,a,b:nat. O < n \to O < m \to -gcd n m = (S O) \to ex nat (\lambda x. congruent x a m \land congruent x b n). -intros. -cut (\exists c,d.c*n - d*m = (S O) \lor d*m - c*n = (S O)). -elim Hcut.elim H3.elim H4. -apply (ex_intro nat ? ((a+b*m)*a1*n-b*a2*m)). -split. -(* congruent to a *) -cut (a1*n = a2*m + (S O)). -rewrite > assoc_times. -rewrite > Hcut1. -rewrite < (sym_plus ? (a2*m)). -rewrite > distr_times_plus. -rewrite < times_n_SO. -rewrite > assoc_plus. -rewrite < assoc_times. -rewrite < times_plus_l. -rewrite > eq_minus_plus_plus_minus. -rewrite < times_minus_l. -rewrite > sym_plus. -apply (eq_times_plus_to_congruent ? ? ? ((b+(a+b*m)*a2)-b*a2)). -assumption.reflexivity. -apply le_times_l. -apply (trans_le ? ((a+b*m)*a2)). -apply le_times_l. -apply (trans_le ? (b*m)). -rewrite > times_n_SO in \vdash (? % ?). -apply le_times_r.assumption. -apply le_plus_n. -apply le_plus_n. -apply minus_to_plus. -apply lt_to_le. -change with (O + a2*m < a1*n). -apply lt_minus_to_plus. -rewrite > H5.unfold lt.apply le_n. -assumption. -(* congruent to b *) -cut (a2*m = a1*n - (S O)). -rewrite > (assoc_times b a2). -rewrite > Hcut1. -rewrite > distr_times_minus. -rewrite < assoc_times. -rewrite < eq_plus_minus_minus_minus. -rewrite < times_n_SO. -rewrite < times_minus_l. -rewrite < sym_plus. -apply (eq_times_plus_to_congruent ? ? ? ((a+b*m)*a1-b*a1)). -assumption.reflexivity. -rewrite > assoc_times. -apply le_times_r. -apply (trans_le ? (a1*n - a2*m)). -rewrite > H5.apply le_n. -apply (le_minus_m ? (a2*m)). -apply le_times_l. -apply le_times_l. -apply (trans_le ? (b*m)). -rewrite > times_n_SO in \vdash (? % ?). -apply le_times_r.assumption. -apply le_plus_n. -apply sym_eq. apply plus_to_minus. -rewrite > sym_plus. -apply minus_to_plus. -apply lt_to_le. -change with (O + a2*m < a1*n). -apply lt_minus_to_plus. -rewrite > H5.unfold lt.apply le_n. -assumption. -(* and now the symmetric case; the price to pay for working - in nat instead than Z *) -apply (ex_intro nat ? ((b+a*n)*a2*m-a*a1*n)). -split. -(* congruent to a *) -cut (a1*n = a2*m - (S O)). -rewrite > (assoc_times a a1). -rewrite > Hcut1. -rewrite > distr_times_minus. -rewrite < assoc_times. -rewrite < eq_plus_minus_minus_minus. -rewrite < times_n_SO. -rewrite < times_minus_l. -rewrite < sym_plus. -apply (eq_times_plus_to_congruent ? ? ? ((b+a*n)*a2-a*a2)). -assumption.reflexivity. -rewrite > assoc_times. -apply le_times_r. -apply (trans_le ? (a2*m - a1*n)). -rewrite > H5.apply le_n. -apply (le_minus_m ? (a1*n)). -rewrite > assoc_times.rewrite > assoc_times. -apply le_times_l. -apply (trans_le ? (a*n)). -rewrite > times_n_SO in \vdash (? % ?). -apply le_times_r.assumption. -apply le_plus_n. -apply sym_eq.apply plus_to_minus. -rewrite > sym_plus. -apply minus_to_plus. -apply lt_to_le. -change with (O + a1*n < a2*m). -apply lt_minus_to_plus. -rewrite > H5.unfold lt.apply le_n. -assumption. -(* congruent to a *) -cut (a2*m = a1*n + (S O)). -rewrite > assoc_times. -rewrite > Hcut1. -rewrite > (sym_plus (a1*n)). -rewrite > distr_times_plus. -rewrite < times_n_SO. -rewrite < assoc_times. -rewrite > assoc_plus. -rewrite < times_plus_l. -rewrite > eq_minus_plus_plus_minus. -rewrite < times_minus_l. -rewrite > sym_plus. -apply (eq_times_plus_to_congruent ? ? ? ((a+(b+a*n)*a1)-a*a1)). -assumption.reflexivity. -apply le_times_l. -apply (trans_le ? ((b+a*n)*a1)). -apply le_times_l. -apply (trans_le ? (a*n)). -rewrite > times_n_SO in \vdash (? % ?). -apply le_times_r. -assumption. -apply le_plus_n. -apply le_plus_n. -apply minus_to_plus. -apply lt_to_le. -change with (O + a1*n < a2*m). -apply lt_minus_to_plus. -rewrite > H5.unfold lt.apply le_n. -assumption. -(* proof of the cut *) -rewrite < H2. -apply eq_minus_gcd. -qed. - -theorem and_congruent_congruent_lt: \forall m,n,a,b:nat. O < n \to O < m \to -gcd n m = (S O) \to -ex nat (\lambda x. (congruent x a m \land congruent x b n) \land - (x < m*n)). -intros.elim (and_congruent_congruent m n a b). -elim H3. -apply (ex_intro ? ? (a1 \mod (m*n))). -split.split. -apply (transitive_congruent m ? a1). -unfold congruent. -apply sym_eq. -change with (congruent a1 (a1 \mod (m*n)) m). -rewrite < sym_times. -apply congruent_n_mod_times. -assumption.assumption.assumption. -apply (transitive_congruent n ? a1). -unfold congruent. -apply sym_eq. -change with (congruent a1 (a1 \mod (m*n)) n). -apply congruent_n_mod_times. -assumption.assumption.assumption. -apply lt_mod_m_m. -rewrite > (times_n_O O). -apply lt_times.assumption.assumption. -assumption.assumption.assumption. -qed. - -definition cr_pair : nat \to nat \to nat \to nat \to nat \def -\lambda n,m,a,b. -min (pred (n*m)) (\lambda x. andb (eqb (x \mod n) a) (eqb (x \mod m) b)). - -theorem cr_pair1: cr_pair (S (S O)) (S (S (S O))) O O = O. -reflexivity. -qed. - -theorem cr_pair2: cr_pair (S(S O)) (S(S(S O))) (S O) O = (S(S(S O))). -simplify. -reflexivity. -qed. - -theorem cr_pair3: cr_pair (S(S O)) (S(S(S O))) (S O) (S(S O)) = (S(S(S(S(S O))))). -reflexivity. -qed. - -theorem cr_pair4: cr_pair (S(S(S(S(S O))))) (S(S(S(S(S(S(S O))))))) (S(S(S O))) (S(S O)) = -(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S(S O))))))))))))))))))))))). -reflexivity. -qed. - -theorem mod_cr_pair : \forall m,n,a,b. a \lt m \to b \lt n \to -gcd n m = (S O) \to -(cr_pair m n a b) \mod m = a \land (cr_pair m n a b) \mod n = b. -intros. -cut (andb (eqb ((cr_pair m n a b) \mod m) a) - (eqb ((cr_pair m n a b) \mod n) b) = true). -generalize in match Hcut. -apply andb_elim. -apply eqb_elim.intro. -rewrite > H3. -change with -(eqb ((cr_pair m n a b) \mod n) b = true \to -a = a \land (cr_pair m n a b) \mod n = b). -intro.split.reflexivity. -apply eqb_true_to_eq.assumption. -intro. -change with (false = true \to -(cr_pair m n a b) \mod m = a \land (cr_pair m n a b) \mod n = b). -intro.apply False_ind. -apply not_eq_true_false.apply sym_eq.assumption. -apply (f_min_aux_true -(\lambda x. andb (eqb (x \mod m) a) (eqb (x \mod n) b)) (pred (m*n)) (pred (m*n))). -elim (and_congruent_congruent_lt m n a b). -apply (ex_intro ? ? a1).split.split. -rewrite < minus_n_n.apply le_O_n. -elim H3.apply le_S_S_to_le.apply (trans_le ? (m*n)). -assumption.apply (nat_case (m*n)).apply le_O_n. -intro. -rewrite < pred_Sn.apply le_n. -elim H3.elim H4. -apply andb_elim. -cut (a1 \mod m = a). -cut (a1 \mod n = b). -rewrite > (eq_to_eqb_true ? ? Hcut). -rewrite > (eq_to_eqb_true ? ? Hcut1). -simplify.reflexivity. -rewrite < (lt_to_eq_mod b n).assumption. -assumption. -rewrite < (lt_to_eq_mod a m).assumption. -assumption. -apply (le_to_lt_to_lt ? b).apply le_O_n.assumption. -apply (le_to_lt_to_lt ? a).apply le_O_n.assumption. -assumption. -qed. \ No newline at end of file diff --git a/helm/matita/library/nat/compare.ma b/helm/matita/library/nat/compare.ma deleted file mode 100644 index 264731580..000000000 --- a/helm/matita/library/nat/compare.ma +++ /dev/null @@ -1,227 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/compare". - -include "datatypes/bool.ma". -include "datatypes/compare.ma". -include "nat/orders.ma". - -let rec eqb n m \def -match n with - [ O \Rightarrow - match m with - [ O \Rightarrow true - | (S q) \Rightarrow false] - | (S p) \Rightarrow - match m with - [ O \Rightarrow false - | (S q) \Rightarrow eqb p q]]. - -theorem eqb_to_Prop: \forall n,m:nat. -match (eqb n m) with -[ true \Rightarrow n = m -| false \Rightarrow n \neq m]. -intros. -apply (nat_elim2 -(\lambda n,m:nat.match (eqb n m) with -[ true \Rightarrow n = m -| false \Rightarrow n \neq m])). -intro.elim n1. -simplify.reflexivity. -simplify.apply not_eq_O_S. -intro. -simplify.unfold Not. -intro. apply (not_eq_O_S n1).apply sym_eq.assumption. -intros.simplify. -generalize in match H. -elim ((eqb n1 m1)). -simplify.apply eq_f.apply H1. -simplify.unfold Not.intro.apply H1.apply inj_S.assumption. -qed. - -theorem eqb_elim : \forall n,m:nat.\forall P:bool \to Prop. -(n=m \to (P true)) \to (n \neq m \to (P false)) \to (P (eqb n m)). -intros. -cut -(match (eqb n m) with -[ true \Rightarrow n = m -| false \Rightarrow n \neq m] \to (P (eqb n m))). -apply Hcut.apply eqb_to_Prop. -elim (eqb n m). -apply ((H H2)). -apply ((H1 H2)). -qed. - -theorem eqb_n_n: \forall n. eqb n n = true. -intro.elim n.simplify.reflexivity. -simplify.assumption. -qed. - -theorem eqb_true_to_eq: \forall n,m:nat. -eqb n m = true \to n = m. -intros. -change with -match true with -[ true \Rightarrow n = m -| false \Rightarrow n \neq m]. -rewrite < H. -apply eqb_to_Prop. -qed. - -theorem eqb_false_to_not_eq: \forall n,m:nat. -eqb n m = false \to n \neq m. -intros. -change with -match false with -[ true \Rightarrow n = m -| false \Rightarrow n \neq m]. -rewrite < H. -apply eqb_to_Prop. -qed. - -theorem eq_to_eqb_true: \forall n,m:nat. -n = m \to eqb n m = true. -intros.apply (eqb_elim n m). -intros. reflexivity. -intros.apply False_ind.apply (H1 H). -qed. - -theorem not_eq_to_eqb_false: \forall n,m:nat. -\lnot (n = m) \to eqb n m = false. -intros.apply (eqb_elim n m). -intros. apply False_ind.apply (H H1). -intros.reflexivity. -qed. - -let rec leb n m \def -match n with - [ O \Rightarrow true - | (S p) \Rightarrow - match m with - [ O \Rightarrow false - | (S q) \Rightarrow leb p q]]. - -theorem leb_to_Prop: \forall n,m:nat. -match (leb n m) with -[ true \Rightarrow n \leq m -| false \Rightarrow n \nleq m]. -intros. -apply (nat_elim2 -(\lambda n,m:nat.match (leb n m) with -[ true \Rightarrow n \leq m -| false \Rightarrow n \nleq m])). -simplify.exact le_O_n. -simplify.exact not_le_Sn_O. -intros 2.simplify.elim ((leb n1 m1)). -simplify.apply le_S_S.apply H. -simplify.unfold Not.intros.apply H.apply le_S_S_to_le.assumption. -qed. - -theorem leb_elim: \forall n,m:nat. \forall P:bool \to Prop. -(n \leq m \to (P true)) \to (n \nleq m \to (P false)) \to -P (leb n m). -intros. -cut -(match (leb n m) with -[ true \Rightarrow n \leq m -| false \Rightarrow n \nleq m] \to (P (leb n m))). -apply Hcut.apply leb_to_Prop. -elim (leb n m). -apply ((H H2)). -apply ((H1 H2)). -qed. - -let rec nat_compare n m: compare \def -match n with -[ O \Rightarrow - match m with - [ O \Rightarrow EQ - | (S q) \Rightarrow LT ] -| (S p) \Rightarrow - match m with - [ O \Rightarrow GT - | (S q) \Rightarrow nat_compare p q]]. - -theorem nat_compare_n_n: \forall n:nat. nat_compare n n = EQ. -intro.elim n. -simplify.reflexivity. -simplify.assumption. -qed. - -theorem nat_compare_S_S: \forall n,m:nat. -nat_compare n m = nat_compare (S n) (S m). -intros.simplify.reflexivity. -qed. - -theorem S_pred: \forall n:nat.lt O n \to eq nat n (S (pred n)). -intro.elim n.apply False_ind.exact (not_le_Sn_O O H). -apply eq_f.apply pred_Sn. -qed. - -theorem nat_compare_pred_pred: -\forall n,m:nat.lt O n \to lt O m \to -eq compare (nat_compare n m) (nat_compare (pred n) (pred m)). -intros. -apply (lt_O_n_elim n H). -apply (lt_O_n_elim m H1). -intros. -simplify.reflexivity. -qed. - -theorem nat_compare_to_Prop: \forall n,m:nat. -match (nat_compare n m) with - [ LT \Rightarrow n < m - | EQ \Rightarrow n=m - | GT \Rightarrow m < n ]. -intros. -apply (nat_elim2 (\lambda n,m.match (nat_compare n m) with - [ LT \Rightarrow n < m - | EQ \Rightarrow n=m - | GT \Rightarrow m < n ])). -intro.elim n1.simplify.reflexivity. -simplify.unfold lt.apply le_S_S.apply le_O_n. -intro.simplify.unfold lt.apply le_S_S. apply le_O_n. -intros 2.simplify.elim ((nat_compare n1 m1)). -simplify. unfold lt. apply le_S_S.apply H. -simplify. apply eq_f. apply H. -simplify. unfold lt.apply le_S_S.apply H. -qed. - -theorem nat_compare_n_m_m_n: \forall n,m:nat. -nat_compare n m = compare_invert (nat_compare m n). -intros. -apply (nat_elim2 (\lambda n,m. nat_compare n m = compare_invert (nat_compare m n))). -intros.elim n1.simplify.reflexivity. -simplify.reflexivity. -intro.elim n1.simplify.reflexivity. -simplify.reflexivity. -intros.simplify.elim H.reflexivity. -qed. - -theorem nat_compare_elim : \forall n,m:nat. \forall P:compare \to Prop. -(n < m \to P LT) \to (n=m \to P EQ) \to (m < n \to P GT) \to -(P (nat_compare n m)). -intros. -cut (match (nat_compare n m) with -[ LT \Rightarrow n < m -| EQ \Rightarrow n=m -| GT \Rightarrow m < n] \to -(P (nat_compare n m))). -apply Hcut.apply nat_compare_to_Prop. -elim ((nat_compare n m)). -apply ((H H3)). -apply ((H1 H3)). -apply ((H2 H3)). -qed. diff --git a/helm/matita/library/nat/congruence.ma b/helm/matita/library/nat/congruence.ma deleted file mode 100644 index af744cf34..000000000 --- a/helm/matita/library/nat/congruence.ma +++ /dev/null @@ -1,177 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / Matita is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/congruence". - -include "nat/relevant_equations.ma". -include "nat/primes.ma". - -definition S_mod: nat \to nat \to nat \def -\lambda n,m:nat. (S m) \mod n. - -definition congruent: nat \to nat \to nat \to Prop \def -\lambda n,m,p:nat. mod n p = mod m p. - -theorem congruent_n_n: \forall n,p:nat.congruent n n p. -intros.unfold congruent.reflexivity. -qed. - -theorem transitive_congruent: \forall p:nat. transitive nat -(\lambda n,m. congruent n m p). -intros.unfold transitive.unfold congruent.intros. -whd.apply (trans_eq ? ? (y \mod p)). -apply H.apply H1. -qed. - -theorem le_to_mod: \forall n,m:nat. n \lt m \to n = n \mod m. -intros. -apply (div_mod_spec_to_eq2 n m O n (n/m) (n \mod m)). -constructor 1.assumption.simplify.reflexivity. -apply div_mod_spec_div_mod. -apply (le_to_lt_to_lt O n m).apply le_O_n.assumption. -qed. - -theorem mod_mod : \forall n,p:nat. O

(div_mod (n \mod p) p) in \vdash (? ? % ?). -rewrite > (eq_div_O ? p).reflexivity. -(* uffa: hint non lo trova lt vs. le*) -apply lt_mod_m_m. -assumption. -assumption. -qed. - -theorem mod_times_mod : \forall n,m,p:nat. O

times_plus_l. -rewrite > assoc_plus. -rewrite < div_mod. -rewrite > assoc_times. -rewrite < div_mod. -reflexivity. -rewrite > (times_n_O O). -apply lt_times. -assumption.assumption.assumption. -qed. - -theorem congruent_n_mod_n : -\forall n,p:nat. O < p \to congruent n (n \mod p) p. -intros.unfold congruent. -apply mod_mod.assumption. -qed. - -theorem congruent_n_mod_times : -\forall n,m,p:nat. O < p \to O < m \to congruent n (n \mod (m*p)) p. -intros.unfold congruent. -apply mod_times_mod.assumption.assumption. -qed. - -theorem eq_times_plus_to_congruent: \forall n,m,p,r:nat. O< p \to -n = r*p+m \to congruent n m p. -intros.unfold congruent. -apply (div_mod_spec_to_eq2 n p (div n p) (mod n p) (r +(div m p)) (mod m p)). -apply div_mod_spec_div_mod.assumption. -constructor 1. -apply lt_mod_m_m.assumption. -rewrite > sym_times. -rewrite > distr_times_plus. -rewrite > sym_times. -rewrite > (sym_times p). -rewrite > assoc_plus. -rewrite < div_mod. -assumption.assumption. -qed. - -theorem divides_to_congruent: \forall n,m,p:nat. O < p \to m \le n \to -divides p (n - m) \to congruent n m p. -intros.elim H2. -apply (eq_times_plus_to_congruent n m p n2). -assumption. -rewrite < sym_plus. -apply minus_to_plus.assumption. -rewrite > sym_times. assumption. -qed. - -theorem congruent_to_divides: \forall n,m,p:nat. -O < p \to congruent n m p \to divides p (n - m). -intros.unfold congruent in H1. -apply (witness ? ? ((n / p)-(m / p))). -rewrite > sym_times. -rewrite > (div_mod n p) in \vdash (? ? % ?). -rewrite > (div_mod m p) in \vdash (? ? % ?). -rewrite < (sym_plus (m \mod p)). -rewrite < H1. -rewrite < (eq_minus_minus_minus_plus ? (n \mod p)). -rewrite < minus_plus_m_m. -apply sym_eq. -apply times_minus_l. -assumption.assumption. -qed. - -theorem mod_times: \forall n,m,p:nat. -O < p \to mod (n*m) p = mod ((mod n p)*(mod m p)) p. -intros. -change with (congruent (n*m) ((mod n p)*(mod m p)) p). -apply (eq_times_plus_to_congruent ? ? p -((n / p)*p*(m / p) + (n / p)*(m \mod p) + (n \mod p)*(m / p))). -assumption. -apply (trans_eq ? ? (((n/p)*p+(n \mod p))*((m/p)*p+(m \mod p)))). -apply eq_f2. -apply div_mod.assumption. -apply div_mod.assumption. -apply (trans_eq ? ? (((n/p)*p)*((m/p)*p) + (n/p)*p*(m \mod p) + -(n \mod p)*((m / p)*p) + (n \mod p)*(m \mod p))). -apply times_plus_plus. -apply eq_f2. -rewrite < assoc_times. -rewrite > (assoc_times (n/p) p (m \mod p)). -rewrite > (sym_times p (m \mod p)). -rewrite < (assoc_times (n/p) (m \mod p) p). -rewrite < times_plus_l. -rewrite < (assoc_times (n \mod p)). -rewrite < times_plus_l. -apply eq_f2. -apply eq_f2.reflexivity. -reflexivity.reflexivity. -reflexivity. -qed. - -theorem congruent_times: \forall n,m,n1,m1,p. O < p \to congruent n n1 p \to -congruent m m1 p \to congruent (n*m) (n1*m1) p. -unfold congruent. -intros. -rewrite > (mod_times n m p H). -rewrite > H1. -rewrite > H2. -apply sym_eq. -apply mod_times.assumption. -qed. - -theorem congruent_pi: \forall f:nat \to nat. \forall n,m,p:nat.O < p \to -congruent (pi n f m) (pi n (\lambda m. mod (f m) p) m) p. -intros. -elim n.change with (congruent (f m) (f m \mod p) p). -apply congruent_n_mod_n.assumption. -change with (congruent ((f (S n1+m))*(pi n1 f m)) -(((f (S n1+m))\mod p)*(pi n1 (\lambda m.(f m) \mod p) m)) p). -apply congruent_times. -assumption. -apply congruent_n_mod_n.assumption. -assumption. -qed. diff --git a/helm/matita/library/nat/count.ma b/helm/matita/library/nat/count.ma deleted file mode 100644 index 20913fa60..000000000 --- a/helm/matita/library/nat/count.ma +++ /dev/null @@ -1,246 +0,0 @@ -(**************************************************************************) -(* __ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/count". - -include "nat/relevant_equations.ma". -include "nat/sigma_and_pi.ma". -include "nat/permutation.ma". - -theorem sigma_f_g : \forall n,m:nat.\forall f,g:nat \to nat. -sigma n (\lambda p.f p + g p) m = sigma n f m + sigma n g m. -intros.elim n. -simplify.reflexivity. -simplify.rewrite > H. -rewrite > assoc_plus. -rewrite < (assoc_plus (g (S (n1+m)))). -rewrite > (sym_plus (g (S (n1+m)))). -rewrite > (assoc_plus (sigma n1 f m)). -rewrite < assoc_plus. -reflexivity. -qed. - -theorem sigma_plus: \forall n,p,m:nat.\forall f:nat \to nat. -sigma (S (p+n)) f m = sigma p (\lambda x.(f ((S n) + x))) m + sigma n f m. -intros. elim p. -simplify. -rewrite < (sym_plus n m).reflexivity. -simplify. -rewrite > assoc_plus in \vdash (? ? ? %). -rewrite < H. -simplify. -rewrite < plus_n_Sm. -rewrite > (sym_plus n). -rewrite > assoc_plus. -rewrite < (sym_plus m). -rewrite < (assoc_plus n1). -reflexivity. -qed. - -theorem sigma_plus1: \forall n,p,m:nat.\forall f:nat \to nat. -sigma (p+(S n)) f m = sigma p (\lambda x.(f ((S n) + x))) m + sigma n f m. -intros. elim p. -simplify.reflexivity. -simplify. -rewrite > assoc_plus in \vdash (? ? ? %). -rewrite < H. -rewrite < plus_n_Sm. -rewrite < plus_n_Sm.simplify. -rewrite < (sym_plus n). -rewrite > assoc_plus. -rewrite < (sym_plus m). -rewrite < (assoc_plus n). -reflexivity. -qed. - -theorem eq_sigma_sigma : \forall n,m:nat.\forall f:nat \to nat. -sigma (pred ((S n)*(S m))) f O = -sigma m (\lambda a.(sigma n (\lambda b.f (b*(S m) + a)) O)) O. -intro.elim n.simplify. -rewrite < plus_n_O. -apply eq_sigma.intros.reflexivity. -change with -(sigma (m+(S n1)*(S m)) f O = -sigma m (\lambda a.(f ((S(n1+O))*(S m)+a)) + (sigma n1 (\lambda b.f (b*(S m)+a)) O)) O). -rewrite > sigma_f_g. -rewrite < plus_n_O. -rewrite < H. -rewrite > (S_pred ((S n1)*(S m))). -apply sigma_plus1. -simplify.unfold lt.apply le_S_S.apply le_O_n. -qed. - -theorem eq_sigma_sigma1 : \forall n,m:nat.\forall f:nat \to nat. -sigma (pred ((S n)*(S m))) f O = -sigma n (\lambda a.(sigma m (\lambda b.f (b*(S n) + a)) O)) O. -intros. -rewrite > sym_times. -apply eq_sigma_sigma. -qed. - -theorem sigma_times: \forall n,m,p:nat.\forall f:nat \to nat. -(sigma n f m)*p = sigma n (\lambda i.(f i) * p) m. -intro. elim n.simplify.reflexivity. -simplify.rewrite < H. -apply times_plus_l. -qed. - -definition bool_to_nat: bool \to nat \def -\lambda b. match b with -[ true \Rightarrow (S O) -| false \Rightarrow O ]. - -theorem bool_to_nat_andb: \forall a,b:bool. -bool_to_nat (andb a b) = (bool_to_nat a)*(bool_to_nat b). -intros. elim a.elim b. -simplify.reflexivity. -reflexivity. -reflexivity. -qed. - -definition count : nat \to (nat \to bool) \to nat \def -\lambda n.\lambda f. sigma (pred n) (\lambda n.(bool_to_nat (f n))) O. - -theorem count_times:\forall n,m:nat. -\forall f,f1,f2:nat \to bool. -\forall g:nat \to nat \to nat. -\forall g1,g2: nat \to nat. -(\forall a,b:nat. a < (S n) \to b < (S m) \to (g b a) < (S n)*(S m)) \to -(\forall a,b:nat. a < (S n) \to b < (S m) \to (g1 (g b a)) = a) \to -(\forall a,b:nat. a < (S n) \to b < (S m) \to (g2 (g b a)) = b) \to -(\forall a,b:nat. a < (S n) \to b < (S m) \to f (g b a) = andb (f2 b) (f1 a)) \to -(count ((S n)*(S m)) f) = (count (S n) f1)*(count (S m) f2). -intros.unfold count. -rewrite < eq_map_iter_i_sigma. -rewrite > (permut_to_eq_map_iter_i plus assoc_plus sym_plus ? ? ? - (\lambda i.g (div i (S n)) (mod i (S n)))). -rewrite > eq_map_iter_i_sigma. -rewrite > eq_sigma_sigma1. -apply (trans_eq ? ? -(sigma n (\lambda a. - sigma m (\lambda b.(bool_to_nat (f2 b))*(bool_to_nat (f1 a))) O) O)). -apply eq_sigma.intros. -apply eq_sigma.intros. -rewrite > (div_mod_spec_to_eq (i1*(S n) + i) (S n) ((i1*(S n) + i)/(S n)) - ((i1*(S n) + i) \mod (S n)) i1 i). -rewrite > (div_mod_spec_to_eq2 (i1*(S n) + i) (S n) ((i1*(S n) + i)/(S n)) - ((i1*(S n) + i) \mod (S n)) i1 i). -rewrite > H3. -apply bool_to_nat_andb. -unfold lt.apply le_S_S.assumption. -unfold lt.apply le_S_S.assumption. -apply div_mod_spec_div_mod. -unfold lt.apply le_S_S.apply le_O_n. -constructor 1.unfold lt.apply le_S_S.assumption. -reflexivity. -apply div_mod_spec_div_mod. -unfold lt.apply le_S_S.apply le_O_n. -constructor 1.unfold lt.apply le_S_S.assumption. -reflexivity. -apply (trans_eq ? ? -(sigma n (\lambda n.((bool_to_nat (f1 n)) * -(sigma m (\lambda n.bool_to_nat (f2 n)) O))) O)). -apply eq_sigma. -intros. -rewrite > sym_times. -apply (trans_eq ? ? -(sigma m (\lambda n.(bool_to_nat (f2 n))*(bool_to_nat (f1 i))) O)). -reflexivity. -apply sym_eq. apply sigma_times. -change in match (pred (S n)) with n. -change in match (pred (S m)) with m. -apply sym_eq. apply sigma_times. -unfold permut. -split. -intros. -rewrite < plus_n_O. -apply le_S_S_to_le. -rewrite < S_pred in \vdash (? ? %). -change with ((g (i/(S n)) (i \mod (S n))) \lt (S n)*(S m)). -apply H. -apply lt_mod_m_m. -unfold lt. apply le_S_S.apply le_O_n. -apply (lt_times_to_lt_l n). -apply (le_to_lt_to_lt ? i). -rewrite > (div_mod i (S n)) in \vdash (? ? %). -rewrite > sym_plus. -apply le_plus_n. -unfold lt. apply le_S_S.apply le_O_n. -unfold lt. -rewrite > S_pred in \vdash (? ? %). -apply le_S_S. -rewrite > plus_n_O in \vdash (? ? %). -rewrite > sym_times. assumption. -rewrite > (times_n_O O). -apply lt_times. -unfold lt. apply le_S_S.apply le_O_n. -unfold lt. apply le_S_S.apply le_O_n. -rewrite > (times_n_O O). -apply lt_times. -unfold lt. apply le_S_S.apply le_O_n. -unfold lt. apply le_S_S.apply le_O_n. -rewrite < plus_n_O. -unfold injn. -intros. -cut (i < (S n)*(S m)). -cut (j < (S n)*(S m)). -cut ((i \mod (S n)) < (S n)). -cut ((i/(S n)) < (S m)). -cut ((j \mod (S n)) < (S n)). -cut ((j/(S n)) < (S m)). -rewrite > (div_mod i (S n)). -rewrite > (div_mod j (S n)). -rewrite < (H1 (i \mod (S n)) (i/(S n)) Hcut2 Hcut3). -rewrite < (H2 (i \mod (S n)) (i/(S n)) Hcut2 Hcut3) in \vdash (? ? (? % ?) ?). -rewrite < (H1 (j \mod (S n)) (j/(S n)) Hcut4 Hcut5). -rewrite < (H2 (j \mod (S n)) (j/(S n)) Hcut4 Hcut5) in \vdash (? ? ? (? % ?)). -rewrite > H6.reflexivity. -unfold lt. apply le_S_S.apply le_O_n. -unfold lt. apply le_S_S.apply le_O_n. -apply (lt_times_to_lt_l n). -apply (le_to_lt_to_lt ? j). -rewrite > (div_mod j (S n)) in \vdash (? ? %). -rewrite > sym_plus. -apply le_plus_n. -unfold lt. apply le_S_S.apply le_O_n. -rewrite < sym_times. assumption. -apply lt_mod_m_m. -unfold lt. apply le_S_S.apply le_O_n. -apply (lt_times_to_lt_l n). -apply (le_to_lt_to_lt ? i). -rewrite > (div_mod i (S n)) in \vdash (? ? %). -rewrite > sym_plus. -apply le_plus_n. -unfold lt. apply le_S_S.apply le_O_n. -rewrite < sym_times. assumption. -apply lt_mod_m_m. -unfold lt. apply le_S_S.apply le_O_n. -unfold lt. -rewrite > S_pred in \vdash (? ? %). -apply le_S_S.assumption. -rewrite > (times_n_O O). -apply lt_times. -unfold lt. apply le_S_S.apply le_O_n. -unfold lt. apply le_S_S.apply le_O_n. -unfold lt. -rewrite > S_pred in \vdash (? ? %). -apply le_S_S.assumption. -rewrite > (times_n_O O). -apply lt_times. -unfold lt. apply le_S_S.apply le_O_n. -unfold lt. apply le_S_S.apply le_O_n. -intros. -apply False_ind. -apply (not_le_Sn_O m1 H4). -qed. diff --git a/helm/matita/library/nat/div_and_mod.ma b/helm/matita/library/nat/div_and_mod.ma deleted file mode 100644 index e9831f82a..000000000 --- a/helm/matita/library/nat/div_and_mod.ma +++ /dev/null @@ -1,298 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / Matita is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/div_and_mod". - -include "nat/minus.ma". - -let rec mod_aux p m n: nat \def -match (leb m n) with -[ true \Rightarrow m -| false \Rightarrow - match p with - [O \Rightarrow m - |(S q) \Rightarrow mod_aux q (m-(S n)) n]]. - -definition mod : nat \to nat \to nat \def -\lambda n,m. -match m with -[O \Rightarrow m -| (S p) \Rightarrow mod_aux n n p]. - -interpretation "natural remainder" 'module x y = - (cic:/matita/nat/div_and_mod/mod.con x y). - -let rec div_aux p m n : nat \def -match (leb m n) with -[ true \Rightarrow O -| false \Rightarrow - match p with - [O \Rightarrow O - |(S q) \Rightarrow S (div_aux q (m-(S n)) n)]]. - -definition div : nat \to nat \to nat \def -\lambda n,m. -match m with -[O \Rightarrow S n -| (S p) \Rightarrow div_aux n n p]. - -interpretation "natural divide" 'divide x y = - (cic:/matita/nat/div_and_mod/div.con x y). - -theorem le_mod_aux_m_m: -\forall p,n,m. n \leq p \to (mod_aux p n m) \leq m. -intro.elim p. -apply (le_n_O_elim n H (\lambda n.(mod_aux O n m) \leq m)). -simplify.apply le_O_n. -simplify. -apply (leb_elim n1 m). -simplify.intro.assumption. -simplify.intro.apply H. -cut (n1 \leq (S n) \to n1-(S m) \leq n). -apply Hcut.assumption. -elim n1. -simplify.apply le_O_n. -simplify.apply (trans_le ? n2 n). -apply le_minus_m.apply le_S_S_to_le.assumption. -qed. - -theorem lt_mod_m_m: \forall n,m. O < m \to (n \mod m) < m. -intros 2.elim m.apply False_ind. -apply (not_le_Sn_O O H). -simplify.unfold lt.apply le_S_S.apply le_mod_aux_m_m. -apply le_n. -qed. - -theorem div_aux_mod_aux: \forall p,n,m:nat. -(n=(div_aux p n m)*(S m) + (mod_aux p n m)). -intro.elim p. -simplify.elim (leb n m). -simplify.apply refl_eq. -simplify.apply refl_eq. -simplify. -apply (leb_elim n1 m). -simplify.intro.apply refl_eq. -simplify.intro. -rewrite > assoc_plus. -elim (H (n1-(S m)) m). -change with (n1=(S m)+(n1-(S m))). -rewrite < sym_plus. -apply plus_minus_m_m. -change with (m < n1). -apply not_le_to_lt.exact H1. -qed. - -theorem div_mod: \forall n,m:nat. O < m \to n=(n / m)*m+(n \mod m). -intros 2.elim m.elim (not_le_Sn_O O H). -simplify. -apply div_aux_mod_aux. -qed. - -inductive div_mod_spec (n,m,q,r:nat) : Prop \def -div_mod_spec_intro: r < m \to n=q*m+r \to (div_mod_spec n m q r). - -(* -definition div_mod_spec : nat \to nat \to nat \to nat \to Prop \def -\lambda n,m,q,r:nat.r < m \land n=q*m+r). -*) - -theorem div_mod_spec_to_not_eq_O: \forall n,m,q,r.(div_mod_spec n m q r) \to m \neq O. -intros 4.unfold Not.intros.elim H.absurd (le (S r) O). -rewrite < H1.assumption. -exact (not_le_Sn_O r). -qed. - -theorem div_mod_spec_div_mod: -\forall n,m. O < m \to (div_mod_spec n m (n / m) (n \mod m)). -intros. -apply div_mod_spec_intro. -apply lt_mod_m_m.assumption. -apply div_mod.assumption. -qed. - -theorem div_mod_spec_to_eq :\forall a,b,q,r,q1,r1. -(div_mod_spec a b q r) \to (div_mod_spec a b q1 r1) \to -(eq nat q q1). -intros.elim H.elim H1. -apply (nat_compare_elim q q1).intro. -apply False_ind. -cut (eq nat ((q1-q)*b+r1) r). -cut (b \leq (q1-q)*b+r1). -cut (b \leq r). -apply (lt_to_not_le r b H2 Hcut2). -elim Hcut.assumption. -apply (trans_le ? ((q1-q)*b)). -apply le_times_n. -apply le_SO_minus.exact H6. -rewrite < sym_plus. -apply le_plus_n. -rewrite < sym_times. -rewrite > distr_times_minus. -rewrite > plus_minus. -rewrite > sym_times. -rewrite < H5. -rewrite < sym_times. -apply plus_to_minus. -apply H3. -apply le_times_r. -apply lt_to_le. -apply H6. -(* eq case *) -intros.assumption. -(* the following case is symmetric *) -intro. -apply False_ind. -cut (eq nat ((q-q1)*b+r) r1). -cut (b \leq (q-q1)*b+r). -cut (b \leq r1). -apply (lt_to_not_le r1 b H4 Hcut2). -elim Hcut.assumption. -apply (trans_le ? ((q-q1)*b)). -apply le_times_n. -apply le_SO_minus.exact H6. -rewrite < sym_plus. -apply le_plus_n. -rewrite < sym_times. -rewrite > distr_times_minus. -rewrite > plus_minus. -rewrite > sym_times. -rewrite < H3. -rewrite < sym_times. -apply plus_to_minus. -apply H5. -apply le_times_r. -apply lt_to_le. -apply H6. -qed. - -theorem div_mod_spec_to_eq2 :\forall a,b,q,r,q1,r1. -(div_mod_spec a b q r) \to (div_mod_spec a b q1 r1) \to -(eq nat r r1). -intros.elim H.elim H1. -apply (inj_plus_r (q*b)). -rewrite < H3. -rewrite > (div_mod_spec_to_eq a b q r q1 r1 H H1). -assumption. -qed. - -theorem div_mod_spec_times : \forall n,m:nat.div_mod_spec ((S n)*m) (S n) m O. -intros.constructor 1. -unfold lt.apply le_S_S.apply le_O_n. -rewrite < plus_n_O.rewrite < sym_times.reflexivity. -qed. - -(* some properties of div and mod *) -theorem div_times: \forall n,m:nat. ((S n)*m) / (S n) = m. -intros. -apply (div_mod_spec_to_eq ((S n)*m) (S n) ? ? ? O). -goal 15. (* ?11 is closed with the following tactics *) -apply div_mod_spec_div_mod. -unfold lt.apply le_S_S.apply le_O_n. -apply div_mod_spec_times. -qed. - -theorem div_n_n: \forall n:nat. O < n \to n / n = S O. -intros. -apply (div_mod_spec_to_eq n n (n / n) (n \mod n) (S O) O). -apply div_mod_spec_div_mod.assumption. -constructor 1.assumption. -rewrite < plus_n_O.simplify.rewrite < plus_n_O.reflexivity. -qed. - -theorem eq_div_O: \forall n,m. n < m \to n / m = O. -intros. -apply (div_mod_spec_to_eq n m (n/m) (n \mod m) O n). -apply div_mod_spec_div_mod. -apply (le_to_lt_to_lt O n m). -apply le_O_n.assumption. -constructor 1.assumption.reflexivity. -qed. - -theorem mod_n_n: \forall n:nat. O < n \to n \mod n = O. -intros. -apply (div_mod_spec_to_eq2 n n (n / n) (n \mod n) (S O) O). -apply div_mod_spec_div_mod.assumption. -constructor 1.assumption. -rewrite < plus_n_O.simplify.rewrite < plus_n_O.reflexivity. -qed. - -theorem mod_S: \forall n,m:nat. O < m \to S (n \mod m) < m \to -((S n) \mod m) = S (n \mod m). -intros. -apply (div_mod_spec_to_eq2 (S n) m ((S n) / m) ((S n) \mod m) (n / m) (S (n \mod m))). -apply div_mod_spec_div_mod.assumption. -constructor 1.assumption.rewrite < plus_n_Sm. -apply eq_f. -apply div_mod. -assumption. -qed. - -theorem mod_O_n: \forall n:nat.O \mod n = O. -intro.elim n.simplify.reflexivity. -simplify.reflexivity. -qed. - -theorem lt_to_eq_mod:\forall n,m:nat. n < m \to n \mod m = n. -intros. -apply (div_mod_spec_to_eq2 n m (n/m) (n \mod m) O n). -apply div_mod_spec_div_mod. -apply (le_to_lt_to_lt O n m).apply le_O_n.assumption. -constructor 1. -assumption.reflexivity. -qed. - -(* injectivity *) -theorem injective_times_r: \forall n:nat.injective nat nat (\lambda m:nat.(S n)*m). -change with (\forall n,p,q:nat.(S n)*p = (S n)*q \to p=q). -intros. -rewrite < (div_times n). -rewrite < (div_times n q). -apply eq_f2.assumption. -reflexivity. -qed. - -variant inj_times_r : \forall n,p,q:nat.(S n)*p = (S n)*q \to p=q \def -injective_times_r. - -theorem lt_O_to_injective_times_r: \forall n:nat. O < n \to injective nat nat (\lambda m:nat.n*m). -change with (\forall n. O < n \to \forall p,q:nat.n*p = n*q \to p=q). -intros 4. -apply (lt_O_n_elim n H).intros. -apply (inj_times_r m).assumption. -qed. - -variant inj_times_r1:\forall n. O < n \to \forall p,q:nat.n*p = n*q \to p=q -\def lt_O_to_injective_times_r. - -theorem injective_times_l: \forall n:nat.injective nat nat (\lambda m:nat.m*(S n)). -change with (\forall n,p,q:nat.p*(S n) = q*(S n) \to p=q). -intros. -apply (inj_times_r n p q). -rewrite < sym_times. -rewrite < (sym_times q). -assumption. -qed. - -variant inj_times_l : \forall n,p,q:nat. p*(S n) = q*(S n) \to p=q \def -injective_times_l. - -theorem lt_O_to_injective_times_l: \forall n:nat. O < n \to injective nat nat (\lambda m:nat.m*n). -change with (\forall n. O < n \to \forall p,q:nat.p*n = q*n \to p=q). -intros 4. -apply (lt_O_n_elim n H).intros. -apply (inj_times_l m).assumption. -qed. - -variant inj_times_l1:\forall n. O < n \to \forall p,q:nat.p*n = q*n \to p=q -\def lt_O_to_injective_times_l. diff --git a/helm/matita/library/nat/exp.ma b/helm/matita/library/nat/exp.ma deleted file mode 100644 index 11d84f74c..000000000 --- a/helm/matita/library/nat/exp.ma +++ /dev/null @@ -1,97 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/exp". - -include "nat/div_and_mod.ma". - -let rec exp n m on m\def - match m with - [ O \Rightarrow (S O) - | (S p) \Rightarrow (times n (exp n p)) ]. - -interpretation "natural exponent" 'exp a b = (cic:/matita/nat/exp/exp.con a b). - -theorem exp_plus_times : \forall n,p,q:nat. -n \sup (p + q) = (n \sup p) * (n \sup q). -intros.elim p. -simplify.rewrite < plus_n_O.reflexivity. -simplify.rewrite > H.symmetry. -apply assoc_times. -qed. - -theorem exp_n_O : \forall n:nat. S O = n \sup O. -intro.simplify.reflexivity. -qed. - -theorem exp_n_SO : \forall n:nat. n = n \sup (S O). -intro.simplify.rewrite < times_n_SO.reflexivity. -qed. - -theorem exp_exp_times : \forall n,p,q:nat. -(n \sup p) \sup q = n \sup (p * q). -intros. -elim q.simplify.rewrite < times_n_O.simplify.reflexivity. -simplify.rewrite > H.rewrite < exp_plus_times. -rewrite < times_n_Sm.reflexivity. -qed. - -theorem lt_O_exp: \forall n,m:nat. O < n \to O < n \sup m. -intros.elim m.simplify.unfold lt.apply le_n. -simplify.unfold lt.rewrite > times_n_SO. -apply le_times.assumption.assumption. -qed. - -theorem lt_m_exp_nm: \forall n,m:nat. (S O) < n \to m < n \sup m. -intros.elim m.simplify.unfold lt.reflexivity. -simplify.unfold lt. -apply (trans_le ? ((S(S O))*(S n1))). -simplify. -rewrite < plus_n_Sm.apply le_S_S.apply le_S_S. -rewrite < sym_plus. -apply le_plus_n. -apply le_times.assumption.assumption. -qed. - -theorem exp_to_eq_O: \forall n,m:nat. (S O) < n -\to n \sup m = (S O) \to m = O. -intros.apply antisym_le.apply le_S_S_to_le. -rewrite < H1.change with (m < n \sup m). -apply lt_m_exp_nm.assumption. -apply le_O_n. -qed. - -theorem injective_exp_r: \forall n:nat. (S O) < n \to -injective nat nat (\lambda m:nat. n \sup m). -simplify.intros 4. -apply (nat_elim2 (\lambda x,y.n \sup x = n \sup y \to x = y)). -intros.apply sym_eq.apply (exp_to_eq_O n).assumption. -rewrite < H1.reflexivity. -intros.apply (exp_to_eq_O n).assumption.assumption. -intros.apply eq_f. -apply H1. -(* esprimere inj_times senza S *) -cut (\forall a,b:nat.O < n \to n*a=n*b \to a=b). -apply Hcut.simplify.unfold lt.apply le_S_S_to_le. apply le_S. assumption. -assumption. -intros 2. -apply (nat_case n). -intros.apply False_ind.apply (not_le_Sn_O O H3). -intros. -apply (inj_times_r m1).assumption. -qed. - -variant inj_exp_r: \forall p:nat. (S O) < p \to \forall n,m:nat. -p \sup n = p \sup m \to n = m \def -injective_exp_r. diff --git a/helm/matita/library/nat/factorial.ma b/helm/matita/library/nat/factorial.ma deleted file mode 100644 index 14217bbcb..000000000 --- a/helm/matita/library/nat/factorial.ma +++ /dev/null @@ -1,61 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / Matita is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/factorial". - -include "nat/le_arith.ma". - -let rec fact n \def - match n with - [ O \Rightarrow (S O) - | (S m) \Rightarrow (S m)*(fact m)]. - -interpretation "factorial" 'fact n = (cic:/matita/nat/factorial/fact.con n). - -theorem le_SO_fact : \forall n. (S O) \le n!. -intro.elim n.simplify.apply le_n. -change with ((S O) \le (S n1)*n1!). -apply (trans_le ? ((S n1)*(S O))).simplify. -apply le_S_S.apply le_O_n. -apply le_times_r.assumption. -qed. - -theorem le_SSO_fact : \forall n. (S O) < n \to (S(S O)) \le n!. -intro.apply (nat_case n).intro.apply False_ind.apply (not_le_Sn_O (S O) H). -intros.change with ((S (S O)) \le (S m)*m!). -apply (trans_le ? ((S(S O))*(S O))).apply le_n. -apply le_times.exact H.apply le_SO_fact. -qed. - -theorem le_n_fact_n: \forall n. n \le n!. -intro. elim n.apply le_O_n. -change with (S n1 \le (S n1)*n1!). -apply (trans_le ? ((S n1)*(S O))). -rewrite < times_n_SO.apply le_n. -apply le_times.apply le_n. -apply le_SO_fact. -qed. - -theorem lt_n_fact_n: \forall n. (S(S O)) < n \to n < n!. -intro.apply (nat_case n).intro.apply False_ind.apply (not_le_Sn_O (S(S O)) H). -intros.change with ((S m) < (S m)*m!). -apply (lt_to_le_to_lt ? ((S m)*(S (S O)))). -rewrite < sym_times. -simplify.unfold lt. -apply le_S_S.rewrite < plus_n_O. -apply le_plus_n. -apply le_times_r.apply le_SSO_fact. -simplify.unfold lt.apply le_S_S_to_le.exact H. -qed. - diff --git a/helm/matita/library/nat/factorization.ma b/helm/matita/library/nat/factorization.ma deleted file mode 100644 index 6a3094303..000000000 --- a/helm/matita/library/nat/factorization.ma +++ /dev/null @@ -1,613 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / Matita is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/factorization". - -include "nat/ord.ma". -include "nat/gcd.ma". -include "nat/nth_prime.ma". - -(* the following factorization algorithm looks for the largest prime - factor. *) -definition max_prime_factor \def \lambda n:nat. -(max n (\lambda p:nat.eqb (n \mod (nth_prime p)) O)). - -(* max_prime_factor is indeed a factor *) -theorem divides_max_prime_factor_n: \forall n:nat. (S O) < n \to -nth_prime (max_prime_factor n) \divides n. -intros.apply divides_b_true_to_divides. -apply lt_O_nth_prime_n. -apply (f_max_true (\lambda p:nat.eqb (n \mod (nth_prime p)) O) n). -cut (\exists i. nth_prime i = smallest_factor n). -elim Hcut. -apply (ex_intro nat ? a). -split. -apply (trans_le a (nth_prime a)). -apply le_n_fn. -exact lt_nth_prime_n_nth_prime_Sn. -rewrite > H1. apply le_smallest_factor_n. -rewrite > H1. -change with (divides_b (smallest_factor n) n = true). -apply divides_to_divides_b_true. -apply (trans_lt ? (S O)).unfold lt. apply le_n. -apply lt_SO_smallest_factor.assumption. -apply divides_smallest_factor_n. -apply (trans_lt ? (S O)). unfold lt. apply le_n. assumption. -apply prime_to_nth_prime. -apply prime_smallest_factor_n.assumption. -qed. - -theorem divides_to_max_prime_factor : \forall n,m. (S O) < n \to O < m \to n \divides m \to -max_prime_factor n \le max_prime_factor m. -intros.change with -((max n (\lambda p:nat.eqb (n \mod (nth_prime p)) O)) \le -(max m (\lambda p:nat.eqb (m \mod (nth_prime p)) O))). -apply f_m_to_le_max. -apply (trans_le ? n). -apply le_max_n.apply divides_to_le.assumption.assumption. -change with (divides_b (nth_prime (max_prime_factor n)) m = true). -apply divides_to_divides_b_true. -cut (prime (nth_prime (max_prime_factor n))). -apply lt_O_nth_prime_n.apply prime_nth_prime. -cut (nth_prime (max_prime_factor n) \divides n). -apply (transitive_divides ? n). -apply divides_max_prime_factor_n. -assumption.assumption. -apply divides_b_true_to_divides. -apply lt_O_nth_prime_n. -apply divides_to_divides_b_true. -apply lt_O_nth_prime_n. -apply divides_max_prime_factor_n. -assumption. -qed. - -theorem p_ord_to_lt_max_prime_factor: \forall n,p,q,r. O < n \to -p = max_prime_factor n \to -(pair nat nat q r) = p_ord n (nth_prime p) \to -(S O) < r \to max_prime_factor r < p. -intros. -rewrite > H1. -cut (max_prime_factor r \lt max_prime_factor n \lor - max_prime_factor r = max_prime_factor n). -elim Hcut.assumption. -absurd (nth_prime (max_prime_factor n) \divides r). -rewrite < H4. -apply divides_max_prime_factor_n. -assumption. -change with (nth_prime (max_prime_factor n) \divides r \to False). -intro. -cut (r \mod (nth_prime (max_prime_factor n)) \neq O). -apply Hcut1.apply divides_to_mod_O. -apply lt_O_nth_prime_n.assumption. -apply (p_ord_aux_to_not_mod_O n n ? q r). -apply lt_SO_nth_prime_n.assumption. -apply le_n. -rewrite < H1.assumption. -apply (le_to_or_lt_eq (max_prime_factor r) (max_prime_factor n)). -apply divides_to_max_prime_factor. -assumption.assumption. -apply (witness r n ((nth_prime p) \sup q)). -rewrite < sym_times. -apply (p_ord_aux_to_exp n n ? q r). -apply lt_O_nth_prime_n.assumption. -qed. - -theorem p_ord_to_lt_max_prime_factor1: \forall n,p,q,r. O < n \to -max_prime_factor n \le p \to -(pair nat nat q r) = p_ord n (nth_prime p) \to -(S O) < r \to max_prime_factor r < p. -intros. -cut (max_prime_factor n < p \lor max_prime_factor n = p). -elim Hcut.apply (le_to_lt_to_lt ? (max_prime_factor n)). -apply divides_to_max_prime_factor.assumption.assumption. -apply (witness r n ((nth_prime p) \sup q)). -rewrite > sym_times. -apply (p_ord_aux_to_exp n n). -apply lt_O_nth_prime_n. -assumption.assumption. -apply (p_ord_to_lt_max_prime_factor n ? q). -assumption.apply sym_eq.assumption.assumption.assumption. -apply (le_to_or_lt_eq ? p H1). -qed. - -(* datatypes and functions *) - -inductive nat_fact : Set \def - nf_last : nat \to nat_fact - | nf_cons : nat \to nat_fact \to nat_fact. - -inductive nat_fact_all : Set \def - nfa_zero : nat_fact_all - | nfa_one : nat_fact_all - | nfa_proper : nat_fact \to nat_fact_all. - -let rec factorize_aux p n acc \def - match p with - [ O \Rightarrow acc - | (S p1) \Rightarrow - match p_ord n (nth_prime p1) with - [ (pair q r) \Rightarrow - factorize_aux p1 r (nf_cons q acc)]]. - -definition factorize : nat \to nat_fact_all \def \lambda n:nat. - match n with - [ O \Rightarrow nfa_zero - | (S n1) \Rightarrow - match n1 with - [ O \Rightarrow nfa_one - | (S n2) \Rightarrow - let p \def (max (S(S n2)) (\lambda p:nat.eqb ((S(S n2)) \mod (nth_prime p)) O)) in - match p_ord (S(S n2)) (nth_prime p) with - [ (pair q r) \Rightarrow - nfa_proper (factorize_aux p r (nf_last (pred q)))]]]. - -let rec defactorize_aux f i \def - match f with - [ (nf_last n) \Rightarrow (nth_prime i) \sup (S n) - | (nf_cons n g) \Rightarrow - (nth_prime i) \sup n *(defactorize_aux g (S i))]. - -definition defactorize : nat_fact_all \to nat \def -\lambda f : nat_fact_all. -match f with -[ nfa_zero \Rightarrow O -| nfa_one \Rightarrow (S O) -| (nfa_proper g) \Rightarrow defactorize_aux g O]. - -theorem lt_O_defactorize_aux: \forall f:nat_fact.\forall i:nat. -O < defactorize_aux f i. -intro.elim f.simplify.unfold lt. -rewrite > times_n_SO. -apply le_times. -change with (O < nth_prime i). -apply lt_O_nth_prime_n. -change with (O < exp (nth_prime i) n). -apply lt_O_exp. -apply lt_O_nth_prime_n. -simplify.unfold lt. -rewrite > times_n_SO. -apply le_times. -change with (O < exp (nth_prime i) n). -apply lt_O_exp. -apply lt_O_nth_prime_n. -change with (O < defactorize_aux n1 (S i)). -apply H. -qed. - -theorem lt_SO_defactorize_aux: \forall f:nat_fact.\forall i:nat. -S O < defactorize_aux f i. -intro.elim f.simplify.unfold lt. -rewrite > times_n_SO. -apply le_times. -change with (S O < nth_prime i). -apply lt_SO_nth_prime_n. -change with (O < exp (nth_prime i) n). -apply lt_O_exp. -apply lt_O_nth_prime_n. -simplify.unfold lt. -rewrite > times_n_SO. -rewrite > sym_times. -apply le_times. -change with (O < exp (nth_prime i) n). -apply lt_O_exp. -apply lt_O_nth_prime_n. -change with (S O < defactorize_aux n1 (S i)). -apply H. -qed. - -theorem defactorize_aux_factorize_aux : -\forall p,n:nat.\forall acc:nat_fact.O < n \to -((n=(S O) \land p=O) \lor max_prime_factor n < p) \to -defactorize_aux (factorize_aux p n acc) O = n*(defactorize_aux acc p). -intro.elim p.simplify. -elim H1.elim H2.rewrite > H3. -rewrite > sym_times. apply times_n_SO. -apply False_ind.apply (not_le_Sn_O (max_prime_factor n) H2). -simplify. -(* generalizing the goal: I guess there exists a better way *) -cut (\forall q,r.(pair nat nat q r) = (p_ord_aux n1 n1 (nth_prime n)) \to -defactorize_aux match (p_ord_aux n1 n1 (nth_prime n)) with -[(pair q r) \Rightarrow (factorize_aux n r (nf_cons q acc))] O = -n1*defactorize_aux acc (S n)). -apply (Hcut (fst ? ? (p_ord_aux n1 n1 (nth_prime n))) -(snd ? ? (p_ord_aux n1 n1 (nth_prime n)))). -apply sym_eq.apply eq_pair_fst_snd. -intros. -rewrite < H3. -simplify. -cut (n1 = r * (nth_prime n) \sup q). -rewrite > H. -simplify.rewrite < assoc_times. -rewrite < Hcut.reflexivity. -cut (O < r \lor O = r). -elim Hcut1.assumption.absurd (n1 = O). -rewrite > Hcut.rewrite < H4.reflexivity. -unfold Not. intro.apply (not_le_Sn_O O). -rewrite < H5 in \vdash (? ? %).assumption. -apply le_to_or_lt_eq.apply le_O_n. -cut ((S O) < r \lor (S O) \nlt r). -elim Hcut1. -right. -apply (p_ord_to_lt_max_prime_factor1 n1 ? q r). -assumption.elim H2. -elim H5. -apply False_ind. -apply (not_eq_O_S n).apply sym_eq.assumption. -apply le_S_S_to_le. -exact H5. -assumption.assumption. -cut (r=(S O)). -apply (nat_case n). -left.split.assumption.reflexivity. -intro.right.rewrite > Hcut2. -simplify.unfold lt.apply le_S_S.apply le_O_n. -cut (r \lt (S O) \or r=(S O)). -elim Hcut2.absurd (O=r). -apply le_n_O_to_eq.apply le_S_S_to_le.exact H5. -unfold Not.intro. -cut (O=n1). -apply (not_le_Sn_O O). -rewrite > Hcut3 in \vdash (? ? %). -assumption.rewrite > Hcut. -rewrite < H6.reflexivity. -assumption. -apply (le_to_or_lt_eq r (S O)). -apply not_lt_to_le.assumption. -apply (decidable_lt (S O) r). -rewrite > sym_times. -apply (p_ord_aux_to_exp n1 n1). -apply lt_O_nth_prime_n.assumption. -qed. - -theorem defactorize_factorize: \forall n:nat.defactorize (factorize n) = n. -intro. -apply (nat_case n).reflexivity. -intro.apply (nat_case m).reflexivity. -intro.change with -(let p \def (max (S(S m1)) (\lambda p:nat.eqb ((S(S m1)) \mod (nth_prime p)) O)) in -defactorize (match p_ord (S(S m1)) (nth_prime p) with -[ (pair q r) \Rightarrow - nfa_proper (factorize_aux p r (nf_last (pred q)))])=(S(S m1))). -intro. -(* generalizing the goal; find a better way *) -cut (\forall q,r.(pair nat nat q r) = (p_ord (S(S m1)) (nth_prime p)) \to -defactorize (match p_ord (S(S m1)) (nth_prime p) with -[ (pair q r) \Rightarrow - nfa_proper (factorize_aux p r (nf_last (pred q)))])=(S(S m1))). -apply (Hcut (fst ? ? (p_ord (S(S m1)) (nth_prime p))) -(snd ? ? (p_ord (S(S m1)) (nth_prime p)))). -apply sym_eq.apply eq_pair_fst_snd. -intros. -rewrite < H. -change with -(defactorize_aux (factorize_aux p r (nf_last (pred q))) O = (S(S m1))). -cut ((S(S m1)) = (nth_prime p) \sup q *r). -cut (O defactorize_aux_factorize_aux. -change with (r*(nth_prime p) \sup (S (pred q)) = (S(S m1))). -cut ((S (pred q)) = q). -rewrite > Hcut2. -rewrite > sym_times. -apply sym_eq. -apply (p_ord_aux_to_exp (S(S m1))). -apply lt_O_nth_prime_n. -assumption. -(* O < q *) -apply sym_eq. apply S_pred. -cut (O < q \lor O = q). -elim Hcut2.assumption. -absurd (nth_prime p \divides S (S m1)). -apply (divides_max_prime_factor_n (S (S m1))). -unfold lt.apply le_S_S.apply le_S_S. apply le_O_n. -cut ((S(S m1)) = r). -rewrite > Hcut3 in \vdash (? (? ? %)). -change with (nth_prime p \divides r \to False). -intro. -apply (p_ord_aux_to_not_mod_O (S(S m1)) (S(S m1)) (nth_prime p) q r). -apply lt_SO_nth_prime_n. -unfold lt.apply le_S_S.apply le_O_n.apply le_n. -assumption. -apply divides_to_mod_O.apply lt_O_nth_prime_n.assumption. -rewrite > times_n_SO in \vdash (? ? ? %). -rewrite < sym_times. -rewrite > (exp_n_O (nth_prime p)). -rewrite > H1 in \vdash (? ? ? (? (? ? %) ?)). -assumption. -apply le_to_or_lt_eq.apply le_O_n.assumption. -(* e adesso l'ultimo goal. TASSI: che ora non e' piu' l'ultimo :P *) -cut ((S O) < r \lor S O \nlt r). -elim Hcut2. -right. -apply (p_ord_to_lt_max_prime_factor1 (S(S m1)) ? q r). -unfold lt.apply le_S_S. apply le_O_n. -apply le_n. -assumption.assumption. -cut (r=(S O)). -apply (nat_case p). -left.split.assumption.reflexivity. -intro.right.rewrite > Hcut3. -simplify.unfold lt.apply le_S_S.apply le_O_n. -cut (r \lt (S O) \or r=(S O)). -elim Hcut3.absurd (O=r). -apply le_n_O_to_eq.apply le_S_S_to_le.exact H2. -unfold Not.intro. -apply (not_le_Sn_O O). -rewrite > H3 in \vdash (? ? %).assumption.assumption. -apply (le_to_or_lt_eq r (S O)). -apply not_lt_to_le.assumption. -apply (decidable_lt (S O) r). -(* O < r *) -cut (O < r \lor O = r). -elim Hcut1.assumption. -apply False_ind. -apply (not_eq_O_S (S m1)). -rewrite > Hcut.rewrite < H1.rewrite < times_n_O.reflexivity. -apply le_to_or_lt_eq.apply le_O_n. -(* prova del cut *) -goal 20. -apply (p_ord_aux_to_exp (S(S m1))). -apply lt_O_nth_prime_n. -assumption. -(* fine prova cut *) -qed. - -let rec max_p f \def -match f with -[ (nf_last n) \Rightarrow O -| (nf_cons n g) \Rightarrow S (max_p g)]. - -let rec max_p_exponent f \def -match f with -[ (nf_last n) \Rightarrow n -| (nf_cons n g) \Rightarrow max_p_exponent g]. - -theorem divides_max_p_defactorize: \forall f:nat_fact.\forall i:nat. -nth_prime ((max_p f)+i) \divides defactorize_aux f i. -intro. -elim f.simplify.apply (witness ? ? ((nth_prime i) \sup n)). -reflexivity. -change with -(nth_prime (S(max_p n1)+i) \divides -(nth_prime i) \sup n *(defactorize_aux n1 (S i))). -elim (H (S i)). -rewrite > H1. -rewrite < sym_times. -rewrite > assoc_times. -rewrite < plus_n_Sm. -apply (witness ? ? (n2* (nth_prime i) \sup n)). -reflexivity. -qed. - -theorem divides_exp_to_divides: -\forall p,n,m:nat. prime p \to -p \divides n \sup m \to p \divides n. -intros 3.elim m.simplify in H1. -apply (transitive_divides p (S O)).assumption. -apply divides_SO_n. -cut (p \divides n \lor p \divides n \sup n1). -elim Hcut.assumption. -apply H.assumption.assumption. -apply divides_times_to_divides.assumption. -exact H2. -qed. - -theorem divides_exp_to_eq: -\forall p,q,m:nat. prime p \to prime q \to -p \divides q \sup m \to p = q. -intros. -unfold prime in H1. -elim H1.apply H4. -apply (divides_exp_to_divides p q m). -assumption.assumption. -unfold prime in H.elim H.assumption. -qed. - -theorem not_divides_defactorize_aux: \forall f:nat_fact. \forall i,j:nat. -i < j \to nth_prime i \ndivides defactorize_aux f j. -intro.elim f. -change with -(nth_prime i \divides (nth_prime j) \sup (S n) \to False). -intro.absurd ((nth_prime i) = (nth_prime j)). -apply (divides_exp_to_eq ? ? (S n)). -apply prime_nth_prime.apply prime_nth_prime. -assumption. -change with ((nth_prime i) = (nth_prime j) \to False). -intro.cut (i = j). -apply (not_le_Sn_n i).rewrite > Hcut in \vdash (? ? %).assumption. -apply (injective_nth_prime ? ? H2). -change with -(nth_prime i \divides (nth_prime j) \sup n *(defactorize_aux n1 (S j)) \to False). -intro. -cut (nth_prime i \divides (nth_prime j) \sup n -\lor nth_prime i \divides defactorize_aux n1 (S j)). -elim Hcut. -absurd ((nth_prime i) = (nth_prime j)). -apply (divides_exp_to_eq ? ? n). -apply prime_nth_prime.apply prime_nth_prime. -assumption. -change with ((nth_prime i) = (nth_prime j) \to False). -intro. -cut (i = j). -apply (not_le_Sn_n i).rewrite > Hcut1 in \vdash (? ? %).assumption. -apply (injective_nth_prime ? ? H4). -apply (H i (S j)). -apply (trans_lt ? j).assumption.unfold lt.apply le_n. -assumption. -apply divides_times_to_divides. -apply prime_nth_prime.assumption. -qed. - -lemma not_eq_nf_last_nf_cons: \forall g:nat_fact.\forall n,m,i:nat. -\lnot (defactorize_aux (nf_last n) i= defactorize_aux (nf_cons m g) i). -intros. -change with -(exp (nth_prime i) (S n) = defactorize_aux (nf_cons m g) i \to False). -intro. -cut (S(max_p g)+i= i). -apply (not_le_Sn_n i). -rewrite < Hcut in \vdash (? ? %). -simplify.apply le_S_S. -apply le_plus_n. -apply injective_nth_prime. -(* uffa, perche' semplifica ? *) -change with (nth_prime (S(max_p g)+i)= nth_prime i). -apply (divides_exp_to_eq ? ? (S n)). -apply prime_nth_prime.apply prime_nth_prime. -rewrite > H. -change with (divides (nth_prime ((max_p (nf_cons m g))+i)) -(defactorize_aux (nf_cons m g) i)). -apply divides_max_p_defactorize. -qed. - -lemma not_eq_nf_cons_O_nf_cons: \forall f,g:nat_fact.\forall n,i:nat. -\lnot (defactorize_aux (nf_cons O f) i= defactorize_aux (nf_cons (S n) g) i). -intros. -simplify.unfold Not.rewrite < plus_n_O. -intro. -apply (not_divides_defactorize_aux f i (S i) ?). -unfold lt.apply le_n. -rewrite > H. -rewrite > assoc_times. -apply (witness ? ? ((exp (nth_prime i) n)*(defactorize_aux g (S i)))). -reflexivity. -qed. - -theorem eq_defactorize_aux_to_eq: \forall f,g:nat_fact.\forall i:nat. -defactorize_aux f i = defactorize_aux g i \to f = g. -intro. -elim f. -generalize in match H. -elim g. -apply eq_f. -apply inj_S. apply (inj_exp_r (nth_prime i)). -apply lt_SO_nth_prime_n. -assumption. -apply False_ind. -apply (not_eq_nf_last_nf_cons n2 n n1 i H2). -generalize in match H1. -elim g. -apply False_ind. -apply (not_eq_nf_last_nf_cons n1 n2 n i). -apply sym_eq. assumption. -simplify in H3. -generalize in match H3. -apply (nat_elim2 (\lambda n,n2. -((nth_prime i) \sup n)*(defactorize_aux n1 (S i)) = -((nth_prime i) \sup n2)*(defactorize_aux n3 (S i)) \to -nf_cons n n1 = nf_cons n2 n3)). -intro. -elim n4. apply eq_f. -apply (H n3 (S i)). -simplify in H4. -rewrite > plus_n_O. -rewrite > (plus_n_O (defactorize_aux n3 (S i))).assumption. -apply False_ind. -apply (not_eq_nf_cons_O_nf_cons n1 n3 n5 i).assumption. -intros. -apply False_ind. -apply (not_eq_nf_cons_O_nf_cons n3 n1 n4 i). -apply sym_eq.assumption. -intros. -cut (nf_cons n4 n1 = nf_cons m n3). -cut (n4=m). -cut (n1=n3). -rewrite > Hcut1.rewrite > Hcut2.reflexivity. -change with -(match nf_cons n4 n1 with -[ (nf_last m) \Rightarrow n1 -| (nf_cons m g) \Rightarrow g ] = n3). -rewrite > Hcut.simplify.reflexivity. -change with -(match nf_cons n4 n1 with -[ (nf_last m) \Rightarrow m -| (nf_cons m g) \Rightarrow m ] = m). -rewrite > Hcut.simplify.reflexivity. -apply H4.simplify in H5. -apply (inj_times_r1 (nth_prime i)). -apply lt_O_nth_prime_n. -rewrite < assoc_times.rewrite < assoc_times.assumption. -qed. - -theorem injective_defactorize_aux: \forall i:nat. -injective nat_fact nat (\lambda f.defactorize_aux f i). -change with (\forall i:nat.\forall f,g:nat_fact. -defactorize_aux f i = defactorize_aux g i \to f = g). -intros. -apply (eq_defactorize_aux_to_eq f g i H). -qed. - -theorem injective_defactorize: -injective nat_fact_all nat defactorize. -change with (\forall f,g:nat_fact_all. -defactorize f = defactorize g \to f = g). -intro.elim f. -generalize in match H.elim g. -(* zero - zero *) -reflexivity. -(* zero - one *) -simplify in H1. -apply False_ind. -apply (not_eq_O_S O H1). -(* zero - proper *) -simplify in H1. -apply False_ind. -apply (not_le_Sn_n O). -rewrite > H1 in \vdash (? ? %). -change with (O < defactorize_aux n O). -apply lt_O_defactorize_aux. -generalize in match H. -elim g. -(* one - zero *) -simplify in H1. -apply False_ind. -apply (not_eq_O_S O).apply sym_eq. assumption. -(* one - one *) -reflexivity. -(* one - proper *) -simplify in H1. -apply False_ind. -apply (not_le_Sn_n (S O)). -rewrite > H1 in \vdash (? ? %). -change with ((S O) < defactorize_aux n O). -apply lt_SO_defactorize_aux. -generalize in match H.elim g. -(* proper - zero *) -simplify in H1. -apply False_ind. -apply (not_le_Sn_n O). -rewrite < H1 in \vdash (? ? %). -change with (O < defactorize_aux n O). -apply lt_O_defactorize_aux. -(* proper - one *) -simplify in H1. -apply False_ind. -apply (not_le_Sn_n (S O)). -rewrite < H1 in \vdash (? ? %). -change with ((S O) < defactorize_aux n O). -apply lt_SO_defactorize_aux. -(* proper - proper *) -apply eq_f. -apply (injective_defactorize_aux O). -exact H1. -qed. - -theorem factorize_defactorize: -\forall f,g: nat_fact_all. factorize (defactorize f) = f. -intros. -apply injective_defactorize. -(* uffa: perche' semplifica ??? *) -change with (defactorize(factorize (defactorize f)) = (defactorize f)). -apply defactorize_factorize. -qed. - diff --git a/helm/matita/library/nat/fermat_little_theorem.ma b/helm/matita/library/nat/fermat_little_theorem.ma deleted file mode 100644 index cc18a8bb9..000000000 --- a/helm/matita/library/nat/fermat_little_theorem.ma +++ /dev/null @@ -1,250 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/fermat_little_theorem". - -include "nat/exp.ma". -include "nat/gcd.ma". -include "nat/permutation.ma". -include "nat/congruence.ma". - -theorem permut_S_mod: \forall n:nat. permut (S_mod (S n)) n. -intro.unfold permut.split.intros. -unfold S_mod. -apply le_S_S_to_le. -change with ((S i) \mod (S n) < S n). -apply lt_mod_m_m. -unfold lt.apply le_S_S.apply le_O_n. -unfold injn.intros. -apply inj_S. -rewrite < (lt_to_eq_mod i (S n)). -rewrite < (lt_to_eq_mod j (S n)). -cut (i < n \lor i = n). -cut (j < n \lor j = n). -elim Hcut. -elim Hcut1. -(* i < n, j< n *) -rewrite < mod_S. -rewrite < mod_S. -apply H2.unfold lt.apply le_S_S.apply le_O_n. -rewrite > lt_to_eq_mod. -unfold lt.apply le_S_S.assumption. -unfold lt.apply le_S_S.assumption. -unfold lt.apply le_S_S.apply le_O_n. -rewrite > lt_to_eq_mod. -unfold lt.apply le_S_S.assumption. -unfold lt.apply le_S_S.assumption. -(* i < n, j=n *) -unfold S_mod in H2. -simplify. -apply False_ind. -apply (not_eq_O_S (i \mod (S n))). -apply sym_eq. -rewrite < (mod_n_n (S n)). -rewrite < H4 in \vdash (? ? ? (? %?)). -rewrite < mod_S.assumption. -unfold lt.apply le_S_S.apply le_O_n. -rewrite > lt_to_eq_mod. -unfold lt.apply le_S_S.assumption. -unfold lt.apply le_S_S.assumption. -unfold lt.apply le_S_S.apply le_O_n. -(* i = n, j < n *) -elim Hcut1. -apply False_ind. -apply (not_eq_O_S (j \mod (S n))). -rewrite < (mod_n_n (S n)). -rewrite < H3 in \vdash (? ? (? %?) ?). -rewrite < mod_S.assumption. -unfold lt.apply le_S_S.apply le_O_n. -rewrite > lt_to_eq_mod. -unfold lt.apply le_S_S.assumption. -unfold lt.apply le_S_S.assumption. -unfold lt.apply le_S_S.apply le_O_n. -(* i = n, j= n*) -rewrite > H3. -rewrite > H4. -reflexivity. -apply le_to_or_lt_eq.assumption. -apply le_to_or_lt_eq.assumption. -unfold lt.apply le_S_S.assumption. -unfold lt.apply le_S_S.assumption. -qed. - -(* -theorem eq_fact_pi: \forall n,m:nat. n < m \to n! = pi n (S_mod m). -intro.elim n. -simplify.reflexivity. -change with (S n1)*n1!=(S_mod m n1)*(pi n1 (S_mod m)). -unfold S_mod in \vdash (? ? ? (? % ?)). -rewrite > lt_to_eq_mod. -apply eq_f.apply H.apply (trans_lt ? (S n1)). -simplify. apply le_n.assumption.assumption. -qed. -*) - -theorem prime_to_not_divides_fact: \forall p:nat. prime p \to \forall n:nat. -n \lt p \to \not divides p n!. -intros 3.elim n.unfold Not.intros. -apply (lt_to_not_le (S O) p). -unfold prime in H.elim H. -assumption.apply divides_to_le.unfold lt.apply le_n. -assumption. -change with (divides p ((S n1)*n1!) \to False). -intro. -cut (divides p (S n1) \lor divides p n1!). -elim Hcut.apply (lt_to_not_le (S n1) p). -assumption. -apply divides_to_le.unfold lt.apply le_S_S.apply le_O_n. -assumption.apply H1. -apply (trans_lt ? (S n1)).unfold lt. apply le_n. -assumption.assumption. -apply divides_times_to_divides. -assumption.assumption. -qed. - -theorem permut_mod: \forall p,a:nat. prime p \to -\lnot divides p a\to permut (\lambda n.(mod (a*n) p)) (pred p). -unfold permut.intros. -split.intros.apply le_S_S_to_le. -apply (trans_le ? p). -change with (mod (a*i) p < p). -apply lt_mod_m_m. -unfold prime in H.elim H. -unfold lt.apply (trans_le ? (S (S O))). -apply le_n_Sn.assumption. -rewrite < S_pred.apply le_n. -unfold prime in H. -elim H. -apply (trans_lt ? (S O)).unfold lt.apply le_n.assumption. -unfold injn.intros. -apply (nat_compare_elim i j). -(* i < j *) -intro. -absurd (j-i \lt p). -unfold lt. -rewrite > (S_pred p). -apply le_S_S. -apply le_plus_to_minus. -apply (trans_le ? (pred p)).assumption. -rewrite > sym_plus. -apply le_plus_n. -unfold prime in H. -elim H. -apply (trans_lt ? (S O)).unfold lt.apply le_n.assumption. -apply (le_to_not_lt p (j-i)). -apply divides_to_le.unfold lt. -apply le_SO_minus.assumption. -cut (divides p a \lor divides p (j-i)). -elim Hcut.apply False_ind.apply H1.assumption.assumption. -apply divides_times_to_divides.assumption. -rewrite > distr_times_minus. -apply eq_mod_to_divides. -unfold prime in H. -elim H. -apply (trans_lt ? (S O)).unfold lt.apply le_n.assumption. -apply sym_eq. -apply H4. -(* i = j *) -intro. assumption. -(* j < i *) -intro. -absurd (i-j \lt p). -unfold lt. -rewrite > (S_pred p). -apply le_S_S. -apply le_plus_to_minus. -apply (trans_le ? (pred p)).assumption. -rewrite > sym_plus. -apply le_plus_n. -unfold prime in H. -elim H. -apply (trans_lt ? (S O)).unfold lt.apply le_n.assumption. -apply (le_to_not_lt p (i-j)). -apply divides_to_le.unfold lt. -apply le_SO_minus.assumption. -cut (divides p a \lor divides p (i-j)). -elim Hcut.apply False_ind.apply H1.assumption.assumption. -apply divides_times_to_divides.assumption. -rewrite > distr_times_minus. -apply eq_mod_to_divides. -unfold prime in H. -elim H. -apply (trans_lt ? (S O)).unfold lt.apply le_n.assumption. -apply H4. -qed. - -theorem congruent_exp_pred_SO: \forall p,a:nat. prime p \to \lnot divides p a \to -congruent (exp a (pred p)) (S O) p. -intros. -cut (O < a). -cut (O < p). -cut (O < pred p). -apply divides_to_congruent. -assumption. -change with (O < exp a (pred p)). -apply lt_O_exp.assumption. -cut (divides p (exp a (pred p)-(S O)) \lor divides p (pred p)!). -elim Hcut3. -assumption. -apply False_ind. -apply (prime_to_not_divides_fact p H (pred p)). -change with (S (pred p) \le p). -rewrite < S_pred.apply le_n. -assumption.assumption. -apply divides_times_to_divides. -assumption. -rewrite > times_minus_l. -rewrite > (sym_times (S O)). -rewrite < times_n_SO. -rewrite > (S_pred (pred p)). -rewrite > eq_fact_pi. -(* in \vdash (? ? (? % ?)). *) -rewrite > exp_pi_l. -apply congruent_to_divides. -assumption. -apply (transitive_congruent p ? -(pi (pred (pred p)) (\lambda m. a*m \mod p) (S O))). -apply (congruent_pi (\lambda m. a*m)). -assumption. -cut (pi (pred(pred p)) (\lambda m.m) (S O) -= pi (pred(pred p)) (\lambda m.a*m \mod p) (S O)). -rewrite > Hcut3.apply congruent_n_n. -rewrite < eq_map_iter_i_pi. -rewrite < eq_map_iter_i_pi. -apply permut_to_eq_map_iter_i. -apply assoc_times. -apply sym_times. -rewrite < plus_n_Sm.rewrite < plus_n_O. -rewrite < S_pred. -apply permut_mod.assumption. -assumption.assumption. -intros.cut (m=O). -rewrite > Hcut3.rewrite < times_n_O. -apply mod_O_n.apply sym_eq.apply le_n_O_to_eq. -apply le_S_S_to_le.assumption. -assumption. -change with ((S O) \le pred p). -apply le_S_S_to_le.rewrite < S_pred. -unfold prime in H.elim H.assumption.assumption. -unfold prime in H.elim H.apply (trans_lt ? (S O)). -unfold lt.apply le_n.assumption. -cut (O < a \lor O = a). -elim Hcut.assumption. -apply False_ind.apply H1. -rewrite < H2. -apply (witness ? ? O).apply times_n_O. -apply le_to_or_lt_eq. -apply le_O_n. -qed. - diff --git a/helm/matita/library/nat/gcd.ma b/helm/matita/library/nat/gcd.ma deleted file mode 100644 index 65f61b581..000000000 --- a/helm/matita/library/nat/gcd.ma +++ /dev/null @@ -1,608 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / Matita is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/gcd". - -include "nat/primes.ma". - -let rec gcd_aux p m n: nat \def -match divides_b n m with -[ true \Rightarrow n -| false \Rightarrow - match p with - [O \Rightarrow n - |(S q) \Rightarrow gcd_aux q n (m \mod n)]]. - -definition gcd : nat \to nat \to nat \def -\lambda n,m:nat. - match leb n m with - [ true \Rightarrow - match n with - [ O \Rightarrow m - | (S p) \Rightarrow gcd_aux (S p) m (S p) ] - | false \Rightarrow - match m with - [ O \Rightarrow n - | (S p) \Rightarrow gcd_aux (S p) n (S p) ]]. - -theorem divides_mod: \forall p,m,n:nat. O < n \to p \divides m \to p \divides n \to -p \divides (m \mod n). -intros.elim H1.elim H2. -apply (witness ? ? (n2 - n1*(m / n))). -rewrite > distr_times_minus. -rewrite < H3. -rewrite < assoc_times. -rewrite < H4. -apply sym_eq. -apply plus_to_minus. -rewrite > sym_times. -apply div_mod. -assumption. -qed. - -theorem divides_mod_to_divides: \forall p,m,n:nat. O < n \to -p \divides (m \mod n) \to p \divides n \to p \divides m. -intros.elim H1.elim H2. -apply (witness p m ((n1*(m / n))+n2)). -rewrite > distr_times_plus. -rewrite < H3. -rewrite < assoc_times. -rewrite < H4.rewrite < sym_times. -apply div_mod.assumption. -qed. - -theorem divides_gcd_aux_mn: \forall p,m,n. O < n \to n \le m \to n \le p \to -gcd_aux p m n \divides m \land gcd_aux p m n \divides n. -intro.elim p. -absurd (O < n).assumption.apply le_to_not_lt.assumption. -cut ((n1 \divides m) \lor (n1 \ndivides m)). -change with -((match divides_b n1 m with -[ true \Rightarrow n1 -| false \Rightarrow gcd_aux n n1 (m \mod n1)]) \divides m \land -(match divides_b n1 m with -[ true \Rightarrow n1 -| false \Rightarrow gcd_aux n n1 (m \mod n1)]) \divides n1). -elim Hcut.rewrite > divides_to_divides_b_true. -simplify. -split.assumption.apply (witness n1 n1 (S O)).apply times_n_SO. -assumption.assumption. -rewrite > not_divides_to_divides_b_false. -change with -(gcd_aux n n1 (m \mod n1) \divides m \land -gcd_aux n n1 (m \mod n1) \divides n1). -cut (gcd_aux n n1 (m \mod n1) \divides n1 \land -gcd_aux n n1 (m \mod n1) \divides mod m n1). -elim Hcut1. -split.apply (divides_mod_to_divides ? ? n1). -assumption.assumption.assumption.assumption. -apply H. -cut (O \lt m \mod n1 \lor O = mod m n1). -elim Hcut1.assumption. -apply False_ind.apply H4.apply mod_O_to_divides. -assumption.apply sym_eq.assumption. -apply le_to_or_lt_eq.apply le_O_n. -apply lt_to_le. -apply lt_mod_m_m.assumption. -apply le_S_S_to_le. -apply (trans_le ? n1). -change with (m \mod n1 < n1). -apply lt_mod_m_m.assumption.assumption. -assumption.assumption. -apply (decidable_divides n1 m).assumption. -qed. - -theorem divides_gcd_nm: \forall n,m. -gcd n m \divides m \land gcd n m \divides n. -intros. -change with -(match leb n m with - [ true \Rightarrow - match n with - [ O \Rightarrow m - | (S p) \Rightarrow gcd_aux (S p) m (S p) ] - | false \Rightarrow - match m with - [ O \Rightarrow n - | (S p) \Rightarrow gcd_aux (S p) n (S p) ] ] \divides m -\land -match leb n m with - [ true \Rightarrow - match n with - [ O \Rightarrow m - | (S p) \Rightarrow gcd_aux (S p) m (S p) ] - | false \Rightarrow - match m with - [ O \Rightarrow n - | (S p) \Rightarrow gcd_aux (S p) n (S p) ] ] \divides n). -apply (leb_elim n m). -apply (nat_case1 n). -simplify.intros.split. -apply (witness m m (S O)).apply times_n_SO. -apply (witness m O O).apply times_n_O. -intros.change with -(gcd_aux (S m1) m (S m1) \divides m -\land -gcd_aux (S m1) m (S m1) \divides (S m1)). -apply divides_gcd_aux_mn. -unfold lt.apply le_S_S.apply le_O_n. -assumption.apply le_n. -simplify.intro. -apply (nat_case1 m). -simplify.intros.split. -apply (witness n O O).apply times_n_O. -apply (witness n n (S O)).apply times_n_SO. -intros.change with -(gcd_aux (S m1) n (S m1) \divides (S m1) -\land -gcd_aux (S m1) n (S m1) \divides n). -cut (gcd_aux (S m1) n (S m1) \divides n -\land -gcd_aux (S m1) n (S m1) \divides S m1). -elim Hcut.split.assumption.assumption. -apply divides_gcd_aux_mn. -unfold lt.apply le_S_S.apply le_O_n. -apply not_lt_to_le.unfold Not. unfold lt.intro.apply H. -rewrite > H1.apply (trans_le ? (S n)). -apply le_n_Sn.assumption.apply le_n. -qed. - -theorem divides_gcd_n: \forall n,m. gcd n m \divides n. -intros. -exact (proj2 ? ? (divides_gcd_nm n m)). -qed. - -theorem divides_gcd_m: \forall n,m. gcd n m \divides m. -intros. -exact (proj1 ? ? (divides_gcd_nm n m)). -qed. - -theorem divides_gcd_aux: \forall p,m,n,d. O < n \to n \le m \to n \le p \to -d \divides m \to d \divides n \to d \divides gcd_aux p m n. -intro.elim p. -absurd (O < n).assumption.apply le_to_not_lt.assumption. -change with -(d \divides -(match divides_b n1 m with -[ true \Rightarrow n1 -| false \Rightarrow gcd_aux n n1 (m \mod n1)])). -cut (n1 \divides m \lor n1 \ndivides m). -elim Hcut. -rewrite > divides_to_divides_b_true. -simplify.assumption. -assumption.assumption. -rewrite > not_divides_to_divides_b_false. -change with (d \divides gcd_aux n n1 (m \mod n1)). -apply H. -cut (O \lt m \mod n1 \lor O = m \mod n1). -elim Hcut1.assumption. -absurd (n1 \divides m).apply mod_O_to_divides. -assumption.apply sym_eq.assumption.assumption. -apply le_to_or_lt_eq.apply le_O_n. -apply lt_to_le. -apply lt_mod_m_m.assumption. -apply le_S_S_to_le. -apply (trans_le ? n1). -change with (m \mod n1 < n1). -apply lt_mod_m_m.assumption.assumption. -assumption. -apply divides_mod.assumption.assumption.assumption. -assumption.assumption. -apply (decidable_divides n1 m).assumption. -qed. - -theorem divides_d_gcd: \forall m,n,d. -d \divides m \to d \divides n \to d \divides gcd n m. -intros. -change with -(d \divides -match leb n m with - [ true \Rightarrow - match n with - [ O \Rightarrow m - | (S p) \Rightarrow gcd_aux (S p) m (S p) ] - | false \Rightarrow - match m with - [ O \Rightarrow n - | (S p) \Rightarrow gcd_aux (S p) n (S p) ]]). -apply (leb_elim n m). -apply (nat_case1 n).simplify.intros.assumption. -intros. -change with (d \divides gcd_aux (S m1) m (S m1)). -apply divides_gcd_aux. -unfold lt.apply le_S_S.apply le_O_n.assumption.apply le_n.assumption. -rewrite < H2.assumption. -apply (nat_case1 m).simplify.intros.assumption. -intros. -change with (d \divides gcd_aux (S m1) n (S m1)). -apply divides_gcd_aux. -unfold lt.apply le_S_S.apply le_O_n. -apply lt_to_le.apply not_le_to_lt.assumption.apply le_n.assumption. -rewrite < H2.assumption. -qed. - -theorem eq_minus_gcd_aux: \forall p,m,n.O < n \to n \le m \to n \le p \to -\exists a,b. a*n - b*m = gcd_aux p m n \lor b*m - a*n = gcd_aux p m n. -intro. -elim p. -absurd (O < n).assumption.apply le_to_not_lt.assumption. -cut (O < m). -cut (n1 \divides m \lor n1 \ndivides m). -change with -(\exists a,b. -a*n1 - b*m = match divides_b n1 m with -[ true \Rightarrow n1 -| false \Rightarrow gcd_aux n n1 (m \mod n1)] -\lor -b*m - a*n1 = match divides_b n1 m with -[ true \Rightarrow n1 -| false \Rightarrow gcd_aux n n1 (m \mod n1)]). -elim Hcut1. -rewrite > divides_to_divides_b_true. -simplify. -apply (ex_intro ? ? (S O)). -apply (ex_intro ? ? O). -left.simplify.rewrite < plus_n_O. -apply sym_eq.apply minus_n_O. -assumption.assumption. -rewrite > not_divides_to_divides_b_false. -change with -(\exists a,b. -a*n1 - b*m = gcd_aux n n1 (m \mod n1) -\lor -b*m - a*n1 = gcd_aux n n1 (m \mod n1)). -cut -(\exists a,b. -a*(m \mod n1) - b*n1= gcd_aux n n1 (m \mod n1) -\lor -b*n1 - a*(m \mod n1) = gcd_aux n n1 (m \mod n1)). -elim Hcut2.elim H5.elim H6. -(* first case *) -rewrite < H7. -apply (ex_intro ? ? (a1+a*(m / n1))). -apply (ex_intro ? ? a). -right. -rewrite < sym_plus. -rewrite < (sym_times n1). -rewrite > distr_times_plus. -rewrite > (sym_times n1). -rewrite > (sym_times n1). -rewrite > (div_mod m n1) in \vdash (? ? (? % ?) ?). -rewrite > assoc_times. -rewrite < sym_plus. -rewrite > distr_times_plus. -rewrite < eq_minus_minus_minus_plus. -rewrite < sym_plus. -rewrite < plus_minus. -rewrite < minus_n_n.reflexivity. -apply le_n. -assumption. -(* second case *) -rewrite < H7. -apply (ex_intro ? ? (a1+a*(m / n1))). -apply (ex_intro ? ? a). -left. -(* clear Hcut2.clear H5.clear H6.clear H. *) -rewrite > sym_times. -rewrite > distr_times_plus. -rewrite > sym_times. -rewrite > (sym_times n1). -rewrite > (div_mod m n1) in \vdash (? ? (? ? %) ?). -rewrite > distr_times_plus. -rewrite > assoc_times. -rewrite < eq_minus_minus_minus_plus. -rewrite < sym_plus. -rewrite < plus_minus. -rewrite < minus_n_n.reflexivity. -apply le_n. -assumption. -apply (H n1 (m \mod n1)). -cut (O \lt m \mod n1 \lor O = m \mod n1). -elim Hcut2.assumption. -absurd (n1 \divides m).apply mod_O_to_divides. -assumption. -symmetry.assumption.assumption. -apply le_to_or_lt_eq.apply le_O_n. -apply lt_to_le. -apply lt_mod_m_m.assumption. -apply le_S_S_to_le. -apply (trans_le ? n1). -change with (m \mod n1 < n1). -apply lt_mod_m_m. -assumption.assumption.assumption.assumption. -apply (decidable_divides n1 m).assumption. -apply (lt_to_le_to_lt ? n1).assumption.assumption. -qed. - -theorem eq_minus_gcd: - \forall m,n.\exists a,b.a*n - b*m = (gcd n m) \lor b*m - a*n = (gcd n m). -intros. -unfold gcd. -apply (leb_elim n m). -apply (nat_case1 n). -simplify.intros. -apply (ex_intro ? ? O). -apply (ex_intro ? ? (S O)). -right.simplify. -rewrite < plus_n_O. -apply sym_eq.apply minus_n_O. -intros. -change with -(\exists a,b. -a*(S m1) - b*m = (gcd_aux (S m1) m (S m1)) -\lor b*m - a*(S m1) = (gcd_aux (S m1) m (S m1))). -apply eq_minus_gcd_aux. -unfold lt. apply le_S_S.apply le_O_n. -assumption.apply le_n. -apply (nat_case1 m). -simplify.intros. -apply (ex_intro ? ? (S O)). -apply (ex_intro ? ? O). -left.simplify. -rewrite < plus_n_O. -apply sym_eq.apply minus_n_O. -intros. -change with -(\exists a,b. -a*n - b*(S m1) = (gcd_aux (S m1) n (S m1)) -\lor b*(S m1) - a*n = (gcd_aux (S m1) n (S m1))). -cut -(\exists a,b. -a*(S m1) - b*n = (gcd_aux (S m1) n (S m1)) -\lor -b*n - a*(S m1) = (gcd_aux (S m1) n (S m1))). -elim Hcut.elim H2.elim H3. -apply (ex_intro ? ? a1). -apply (ex_intro ? ? a). -right.assumption. -apply (ex_intro ? ? a1). -apply (ex_intro ? ? a). -left.assumption. -apply eq_minus_gcd_aux. -unfold lt. apply le_S_S.apply le_O_n. -apply lt_to_le.apply not_le_to_lt.assumption. -apply le_n. -qed. - -(* some properties of gcd *) - -theorem gcd_O_n: \forall n:nat. gcd O n = n. -intro.simplify.reflexivity. -qed. - -theorem gcd_O_to_eq_O:\forall m,n:nat. (gcd m n) = O \to -m = O \land n = O. -intros.cut (O \divides n \land O \divides m). -elim Hcut.elim H2.split. -assumption.elim H1.assumption. -rewrite < H. -apply divides_gcd_nm. -qed. - -theorem lt_O_gcd:\forall m,n:nat. O < n \to O < gcd m n. -intros. -apply (nat_case1 (gcd m n)). -intros. -generalize in match (gcd_O_to_eq_O m n H1). -intros.elim H2. -rewrite < H4 in \vdash (? ? %).assumption. -intros.unfold lt.apply le_S_S.apply le_O_n. -qed. - -theorem symmetric_gcd: symmetric nat gcd. -change with -(\forall n,m:nat. gcd n m = gcd m n). -intros. -cut (O < (gcd n m) \lor O = (gcd n m)). -elim Hcut. -cut (O < (gcd m n) \lor O = (gcd m n)). -elim Hcut1. -apply antisym_le. -apply divides_to_le.assumption. -apply divides_d_gcd.apply divides_gcd_n.apply divides_gcd_m. -apply divides_to_le.assumption. -apply divides_d_gcd.apply divides_gcd_n.apply divides_gcd_m. -rewrite < H1. -cut (m=O \land n=O). -elim Hcut2.rewrite > H2.rewrite > H3.reflexivity. -apply gcd_O_to_eq_O.apply sym_eq.assumption. -apply le_to_or_lt_eq.apply le_O_n. -rewrite < H. -cut (n=O \land m=O). -elim Hcut1.rewrite > H1.rewrite > H2.reflexivity. -apply gcd_O_to_eq_O.apply sym_eq.assumption. -apply le_to_or_lt_eq.apply le_O_n. -qed. - -variant sym_gcd: \forall n,m:nat. gcd n m = gcd m n \def -symmetric_gcd. - -theorem le_gcd_times: \forall m,n,p:nat. O< p \to gcd m n \le gcd m (n*p). -intros. -apply (nat_case n).reflexivity. -intro. -apply divides_to_le. -apply lt_O_gcd. -rewrite > (times_n_O O). -apply lt_times.unfold lt.apply le_S_S.apply le_O_n.assumption. -apply divides_d_gcd. -apply (transitive_divides ? (S m1)). -apply divides_gcd_m. -apply (witness ? ? p).reflexivity. -apply divides_gcd_n. -qed. - -theorem gcd_times_SO_to_gcd_SO: \forall m,n,p:nat. O < n \to O < p \to -gcd m (n*p) = (S O) \to gcd m n = (S O). -intros. -apply antisymmetric_le. -rewrite < H2. -apply le_gcd_times.assumption. -change with (O < gcd m n). -apply lt_O_gcd.assumption. -qed. - -(* for the "converse" of the previous result see the end of this development *) - -theorem gcd_SO_n: \forall n:nat. gcd (S O) n = (S O). -intro. -apply antisym_le.apply divides_to_le.unfold lt.apply le_n. -apply divides_gcd_n. -cut (O < gcd (S O) n \lor O = gcd (S O) n). -elim Hcut.assumption. -apply False_ind. -apply (not_eq_O_S O). -cut ((S O)=O \land n=O). -elim Hcut1.apply sym_eq.assumption. -apply gcd_O_to_eq_O.apply sym_eq.assumption. -apply le_to_or_lt_eq.apply le_O_n. -qed. - -theorem divides_gcd_mod: \forall m,n:nat. O < n \to -divides (gcd m n) (gcd n (m \mod n)). -intros. -apply divides_d_gcd. -apply divides_mod.assumption. -apply divides_gcd_n. -apply divides_gcd_m. -apply divides_gcd_m. -qed. - -theorem divides_mod_gcd: \forall m,n:nat. O < n \to -divides (gcd n (m \mod n)) (gcd m n) . -intros. -apply divides_d_gcd. -apply divides_gcd_n. -apply (divides_mod_to_divides ? ? n). -assumption. -apply divides_gcd_m. -apply divides_gcd_n. -qed. - -theorem gcd_mod: \forall m,n:nat. O < n \to -(gcd n (m \mod n)) = (gcd m n) . -intros. -apply antisymmetric_divides. -apply divides_mod_gcd.assumption. -apply divides_gcd_mod.assumption. -qed. - -(* gcd and primes *) - -theorem prime_to_gcd_SO: \forall n,m:nat. prime n \to n \ndivides m \to -gcd n m = (S O). -intros.unfold prime in H.change with (gcd n m = (S O)). -elim H. -apply antisym_le. -apply not_lt_to_le. -change with ((S (S O)) \le gcd n m \to False).intro. -apply H1.rewrite < (H3 (gcd n m)). -apply divides_gcd_m. -apply divides_gcd_n.assumption. -cut (O < gcd n m \lor O = gcd n m). -elim Hcut.assumption. -apply False_ind. -apply (not_le_Sn_O (S O)). -cut (n=O \land m=O). -elim Hcut1.rewrite < H5 in \vdash (? ? %).assumption. -apply gcd_O_to_eq_O.apply sym_eq.assumption. -apply le_to_or_lt_eq.apply le_O_n. -qed. - -theorem divides_times_to_divides: \forall n,p,q:nat.prime n \to n \divides p*q \to -n \divides p \lor n \divides q. -intros. -cut (n \divides p \lor n \ndivides p). -elim Hcut. -left.assumption. -right. -cut (\exists a,b. a*n - b*p = (S O) \lor b*p - a*n = (S O)). -elim Hcut1.elim H3.elim H4. -(* first case *) -rewrite > (times_n_SO q).rewrite < H5. -rewrite > distr_times_minus. -rewrite > (sym_times q (a1*p)). -rewrite > (assoc_times a1). -elim H1.rewrite > H6. -rewrite < (sym_times n).rewrite < assoc_times. -rewrite > (sym_times q).rewrite > assoc_times. -rewrite < (assoc_times a1).rewrite < (sym_times n). -rewrite > (assoc_times n). -rewrite < distr_times_minus. -apply (witness ? ? (q*a-a1*n2)).reflexivity. -(* second case *) -rewrite > (times_n_SO q).rewrite < H5. -rewrite > distr_times_minus. -rewrite > (sym_times q (a1*p)). -rewrite > (assoc_times a1). -elim H1.rewrite > H6. -rewrite < sym_times.rewrite > assoc_times. -rewrite < (assoc_times q). -rewrite < (sym_times n). -rewrite < distr_times_minus. -apply (witness ? ? (n2*a1-q*a)).reflexivity. -(* end second case *) -rewrite < (prime_to_gcd_SO n p). -apply eq_minus_gcd. -assumption.assumption. -apply (decidable_divides n p). -apply (trans_lt ? (S O)).unfold lt.apply le_n. -unfold prime in H.elim H. assumption. -qed. - -theorem eq_gcd_times_SO: \forall m,n,p:nat. O < n \to O < p \to -gcd m n = (S O) \to gcd m p = (S O) \to gcd m (n*p) = (S O). -intros. -apply antisymmetric_le. -apply not_lt_to_le. -unfold Not.intro. -cut (divides (smallest_factor (gcd m (n*p))) n \lor - divides (smallest_factor (gcd m (n*p))) p). -elim Hcut. -apply (not_le_Sn_n (S O)). -change with ((S O) < (S O)). -rewrite < H2 in \vdash (? ? %). -apply (lt_to_le_to_lt ? (smallest_factor (gcd m (n*p)))). -apply lt_SO_smallest_factor.assumption. -apply divides_to_le. -rewrite > H2.unfold lt.apply le_n. -apply divides_d_gcd.assumption. -apply (transitive_divides ? (gcd m (n*p))). -apply divides_smallest_factor_n. -apply (trans_lt ? (S O)). unfold lt. apply le_n. assumption. -apply divides_gcd_n. -apply (not_le_Sn_n (S O)). -change with ((S O) < (S O)). -rewrite < H3 in \vdash (? ? %). -apply (lt_to_le_to_lt ? (smallest_factor (gcd m (n*p)))). -apply lt_SO_smallest_factor.assumption. -apply divides_to_le. -rewrite > H3.unfold lt.apply le_n. -apply divides_d_gcd.assumption. -apply (transitive_divides ? (gcd m (n*p))). -apply divides_smallest_factor_n. -apply (trans_lt ? (S O)). unfold lt. apply le_n. assumption. -apply divides_gcd_n. -apply divides_times_to_divides. -apply prime_smallest_factor_n. -assumption. -apply (transitive_divides ? (gcd m (n*p))). -apply divides_smallest_factor_n. -apply (trans_lt ? (S O)).unfold lt. apply le_n. assumption. -apply divides_gcd_m. -change with (O < gcd m (n*p)). -apply lt_O_gcd. -rewrite > (times_n_O O). -apply lt_times.assumption.assumption. -qed. diff --git a/helm/matita/library/nat/le_arith.ma b/helm/matita/library/nat/le_arith.ma deleted file mode 100644 index a76183063..000000000 --- a/helm/matita/library/nat/le_arith.ma +++ /dev/null @@ -1,95 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/le_arith". - -include "nat/times.ma". -include "nat/orders.ma". - -(* plus *) -theorem monotonic_le_plus_r: -\forall n:nat.monotonic nat le (\lambda m.n + m). -simplify.intros.elim n. -simplify.assumption. -simplify.apply le_S_S.assumption. -qed. - -theorem le_plus_r: \forall p,n,m:nat. n \le m \to p + n \le p + m -\def monotonic_le_plus_r. - -theorem monotonic_le_plus_l: -\forall m:nat.monotonic nat le (\lambda n.n + m). -simplify.intros. -rewrite < sym_plus.rewrite < (sym_plus m). -apply le_plus_r.assumption. -qed. - -theorem le_plus_l: \forall p,n,m:nat. n \le m \to n + p \le m + p -\def monotonic_le_plus_l. - -theorem le_plus: \forall n1,n2,m1,m2:nat. n1 \le n2 \to m1 \le m2 -\to n1 + m1 \le n2 + m2. -intros. -apply (trans_le ? (n2 + m1)). -apply le_plus_l.assumption. -apply le_plus_r.assumption. -qed. - -theorem le_plus_n :\forall n,m:nat. m \le n + m. -intros.change with (O+m \le n+m). -apply le_plus_l.apply le_O_n. -qed. - -theorem eq_plus_to_le: \forall n,m,p:nat.n=m+p \to m \le n. -intros.rewrite > H. -rewrite < sym_plus. -apply le_plus_n. -qed. - -(* times *) -theorem monotonic_le_times_r: -\forall n:nat.monotonic nat le (\lambda m. n * m). -simplify.intros.elim n. -simplify.apply le_O_n. -simplify.apply le_plus. -assumption. -assumption. -qed. - -theorem le_times_r: \forall p,n,m:nat. n \le m \to p*n \le p*m -\def monotonic_le_times_r. - -theorem monotonic_le_times_l: -\forall m:nat.monotonic nat le (\lambda n.n*m). -simplify.intros. -rewrite < sym_times.rewrite < (sym_times m). -apply le_times_r.assumption. -qed. - -theorem le_times_l: \forall p,n,m:nat. n \le m \to n*p \le m*p -\def monotonic_le_times_l. - -theorem le_times: \forall n1,n2,m1,m2:nat. n1 \le n2 \to m1 \le m2 -\to n1*m1 \le n2*m2. -intros. -apply (trans_le ? (n2*m1)). -apply le_times_l.assumption. -apply le_times_r.assumption. -qed. - -theorem le_times_n: \forall n,m:nat.(S O) \le n \to m \le n*m. -intros.elim H.simplify. -elim (plus_n_O ?).apply le_n. -simplify.rewrite < sym_plus.apply le_plus_n. -qed. diff --git a/helm/matita/library/nat/lt_arith.ma b/helm/matita/library/nat/lt_arith.ma deleted file mode 100644 index b8339f374..000000000 --- a/helm/matita/library/nat/lt_arith.ma +++ /dev/null @@ -1,217 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/lt_arith". - -include "nat/div_and_mod.ma". - -(* plus *) -theorem monotonic_lt_plus_r: -\forall n:nat.monotonic nat lt (\lambda m.n+m). -simplify.intros. -elim n.simplify.assumption. -simplify.unfold lt. -apply le_S_S.assumption. -qed. - -variant lt_plus_r: \forall n,p,q:nat. p < q \to n + p < n + q \def -monotonic_lt_plus_r. - -theorem monotonic_lt_plus_l: -\forall n:nat.monotonic nat lt (\lambda m.m+n). -change with (\forall n,p,q:nat. p < q \to p + n < q + n). -intros. -rewrite < sym_plus. rewrite < (sym_plus n). -apply lt_plus_r.assumption. -qed. - -variant lt_plus_l: \forall n,p,q:nat. p < q \to p + n < q + n \def -monotonic_lt_plus_l. - -theorem lt_plus: \forall n,m,p,q:nat. n < m \to p < q \to n + p < m + q. -intros. -apply (trans_lt ? (n + q)). -apply lt_plus_r.assumption. -apply lt_plus_l.assumption. -qed. - -theorem lt_plus_to_lt_l :\forall n,p,q:nat. p+n < q+n \to p plus_n_O. -rewrite > (plus_n_O q).assumption. -apply H. -unfold lt.apply le_S_S_to_le. -rewrite > plus_n_Sm. -rewrite > (plus_n_Sm q). -exact H1. -qed. - -theorem lt_plus_to_lt_r :\forall n,p,q:nat. n+p < n+q \to p sym_plus. -rewrite > (sym_plus q).assumption. -qed. - -(* times and zero *) -theorem lt_O_times_S_S: \forall n,m:nat.O < (S n)*(S m). -intros.simplify.unfold lt.apply le_S_S.apply le_O_n. -qed. - -(* times *) -theorem monotonic_lt_times_r: -\forall n:nat.monotonic nat lt (\lambda m.(S n)*m). -change with (\forall n,p,q:nat. p < q \to (S n) * p < (S n) * q). -intros.elim n. -simplify.rewrite < plus_n_O.rewrite < plus_n_O.assumption. -change with (p + (S n1) * p < q + (S n1) * q). -apply lt_plus.assumption.assumption. -qed. - -theorem lt_times_r: \forall n,p,q:nat. p < q \to (S n) * p < (S n) * q -\def monotonic_lt_times_r. - -theorem monotonic_lt_times_l: -\forall m:nat.monotonic nat lt (\lambda n.n * (S m)). -change with -(\forall n,p,q:nat. p < q \to p*(S n) < q*(S n)). -intros. -rewrite < sym_times.rewrite < (sym_times (S n)). -apply lt_times_r.assumption. -qed. - -variant lt_times_l: \forall n,p,q:nat. p nat_compare_n_n.reflexivity. -intro.apply nat_compare_elim.intro. -absurd (p (plus_n_O ((S m1)*(n / (S m1)))). -rewrite < H2. -rewrite < sym_times. -rewrite < div_mod. -rewrite > H2. -assumption. -unfold lt.apply le_S_S.apply le_O_n. -qed. - -theorem lt_div_n_m_n: \forall n,m:nat. (S O) < m \to O < n \to n / m \lt n. -intros. -apply (nat_case1 (n / m)).intro. -assumption.intros.rewrite < H2. -rewrite > (div_mod n m) in \vdash (? ? %). -apply (lt_to_le_to_lt ? ((n / m)*m)). -apply (lt_to_le_to_lt ? ((n / m)*(S (S O)))). -rewrite < sym_times. -rewrite > H2. -simplify.unfold lt. -rewrite < plus_n_O. -rewrite < plus_n_Sm. -apply le_S_S. -apply le_S_S. -apply le_plus_n. -apply le_times_r. -assumption. -rewrite < sym_plus. -apply le_plus_n. -apply (trans_lt ? (S O)). -unfold lt. apply le_n.assumption. -qed. - -(* general properties of functions *) -theorem monotonic_to_injective: \forall f:nat\to nat. -monotonic nat lt f \to injective nat nat f. -unfold injective.intros. -apply (nat_compare_elim x y). -intro.apply False_ind.apply (not_le_Sn_n (f x)). -rewrite > H1 in \vdash (? ? %).apply H.apply H2. -intros.assumption. -intro.apply False_ind.apply (not_le_Sn_n (f y)). -rewrite < H1 in \vdash (? ? %).apply H.apply H2. -qed. - -theorem increasing_to_injective: \forall f:nat\to nat. -increasing f \to injective nat nat f. -intros.apply monotonic_to_injective. -apply increasing_to_monotonic.assumption. -qed. diff --git a/helm/matita/library/nat/minimization.ma b/helm/matita/library/nat/minimization.ma deleted file mode 100644 index 0abed5ad3..000000000 --- a/helm/matita/library/nat/minimization.ma +++ /dev/null @@ -1,222 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / Matita is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/minimization". - -include "nat/minus.ma". - -let rec max i f \def - match (f i) with - [ true \Rightarrow i - | false \Rightarrow - match i with - [ O \Rightarrow O - | (S j) \Rightarrow max j f ]]. - -theorem max_O_f : \forall f: nat \to bool. max O f = O. -intro. simplify. -elim (f O). -simplify.reflexivity. -simplify.reflexivity. -qed. - -theorem max_S_max : \forall f: nat \to bool. \forall n:nat. -(f (S n) = true \land max (S n) f = (S n)) \lor -(f (S n) = false \land max (S n) f = max n f). -intros.simplify.elim (f (S n)). -simplify.left.split.reflexivity.reflexivity. -simplify.right.split.reflexivity.reflexivity. -qed. - -theorem le_max_n : \forall f: nat \to bool. \forall n:nat. -max n f \le n. -intros.elim n.rewrite > max_O_f.apply le_n. -simplify.elim (f (S n1)).simplify.apply le_n. -simplify.apply le_S.assumption. -qed. - -theorem le_to_le_max : \forall f: nat \to bool. \forall n,m:nat. -n\le m \to max n f \le max m f. -intros.elim H. -apply le_n. -apply (trans_le ? (max n1 f)).apply H2. -cut ((f (S n1) = true \land max (S n1) f = (S n1)) \lor -(f (S n1) = false \land max (S n1) f = max n1 f)). -elim Hcut.elim H3. -rewrite > H5. -apply le_S.apply le_max_n. -elim H3.rewrite > H5.apply le_n. -apply max_S_max. -qed. - -theorem f_m_to_le_max: \forall f: nat \to bool. \forall n,m:nat. -m\le n \to f m = true \to m \le max n f. -intros 3.elim n.apply (le_n_O_elim m H). -apply le_O_n. -apply (le_n_Sm_elim m n1 H1). -intro.apply (trans_le ? (max n1 f)). -apply H.apply le_S_S_to_le.assumption.assumption. -apply le_to_le_max.apply le_n_Sn. -intro.simplify.rewrite < H3. -rewrite > H2.simplify.apply le_n. -qed. - - -definition max_spec \def \lambda f:nat \to bool.\lambda n: nat. -\exists i. (le i n) \land (f i = true) \to -(f n) = true \land (\forall i. i < n \to (f i = false)). - -theorem f_max_true : \forall f:nat \to bool. \forall n:nat. -(\exists i:nat. le i n \land f i = true) \to f (max n f) = true. -intros 2. -elim n.elim H.elim H1.generalize in match H3. -apply (le_n_O_elim a H2).intro.simplify.rewrite > H4. -simplify.assumption. -simplify. -apply (bool_ind (\lambda b:bool. -(f (S n1) = b) \to (f (match b in bool with -[ true \Rightarrow (S n1) -| false \Rightarrow (max n1 f)])) = true)). -simplify.intro.assumption. -simplify.intro.apply H. -elim H1.elim H3.generalize in match H5. -apply (le_n_Sm_elim a n1 H4). -intros. -apply (ex_intro nat ? a). -split.apply le_S_S_to_le.assumption.assumption. -intros.apply False_ind.apply not_eq_true_false. -rewrite < H2.rewrite < H7.rewrite > H6. reflexivity. -reflexivity. -qed. - -theorem lt_max_to_false : \forall f:nat \to bool. -\forall n,m:nat. (max n f) < m \to m \leq n \to f m = false. -intros 2. -elim n.absurd (le m O).assumption. -cut (O < m).apply (lt_O_n_elim m Hcut).exact not_le_Sn_O. -rewrite < (max_O_f f).assumption. -generalize in match H1. -elim (max_S_max f n1). -elim H3. -absurd (m \le S n1).assumption. -apply lt_to_not_le.rewrite < H6.assumption. -elim H3. -apply (le_n_Sm_elim m n1 H2). -intro. -apply H.rewrite < H6.assumption. -apply le_S_S_to_le.assumption. -intro.rewrite > H7.assumption. -qed. - -let rec min_aux off n f \def - match f (n-off) with - [ true \Rightarrow (n-off) - | false \Rightarrow - match off with - [ O \Rightarrow n - | (S p) \Rightarrow min_aux p n f]]. - -definition min : nat \to (nat \to bool) \to nat \def -\lambda n.\lambda f. min_aux n n f. - -theorem min_aux_O_f: \forall f:nat \to bool. \forall i :nat. -min_aux O i f = i. -intros.simplify.rewrite < minus_n_O. -elim (f i).reflexivity. -simplify.reflexivity. -qed. - -theorem min_O_f : \forall f:nat \to bool. -min O f = O. -intro.apply (min_aux_O_f f O). -qed. - -theorem min_aux_S : \forall f: nat \to bool. \forall i,n:nat. -(f (n -(S i)) = true \land min_aux (S i) n f = (n - (S i))) \lor -(f (n -(S i)) = false \land min_aux (S i) n f = min_aux i n f). -intros.simplify.elim (f (n - (S i))). -simplify.left.split.reflexivity.reflexivity. -simplify.right.split.reflexivity.reflexivity. -qed. - -theorem f_min_aux_true: \forall f:nat \to bool. \forall off,m:nat. -(\exists i. le (m-off) i \land le i m \land f i = true) \to -f (min_aux off m f) = true. -intros 2. -elim off.elim H.elim H1.elim H2. -cut (a = m). -rewrite > (min_aux_O_f f).rewrite < Hcut.assumption. -apply (antisym_le a m).assumption.rewrite > (minus_n_O m).assumption. -simplify. -apply (bool_ind (\lambda b:bool. -(f (m-(S n)) = b) \to (f (match b in bool with -[ true \Rightarrow m-(S n) -| false \Rightarrow (min_aux n m f)])) = true)). -simplify.intro.assumption. -simplify.intro.apply H. -elim H1.elim H3.elim H4. -elim (le_to_or_lt_eq (m-(S n)) a H6). -apply (ex_intro nat ? a). -split.split. -apply lt_minus_S_n_to_le_minus_n.assumption. -assumption.assumption. -absurd (f a = false).rewrite < H8.assumption. -rewrite > H5. -apply not_eq_true_false. -reflexivity. -qed. - -theorem lt_min_aux_to_false : \forall f:nat \to bool. -\forall n,off,m:nat. (n-off) \leq m \to m < (min_aux off n f) \to f m = false. -intros 3. -elim off.absurd (le n m).rewrite > minus_n_O.assumption. -apply lt_to_not_le.rewrite < (min_aux_O_f f n).assumption. -generalize in match H1. -elim (min_aux_S f n1 n). -elim H3. -absurd (n - S n1 \le m).assumption. -apply lt_to_not_le.rewrite < H6.assumption. -elim H3. -elim (le_to_or_lt_eq (n -(S n1)) m). -apply H.apply lt_minus_S_n_to_le_minus_n.assumption. -rewrite < H6.assumption. -rewrite < H7.assumption. -assumption. -qed. - -theorem le_min_aux : \forall f:nat \to bool. -\forall n,off:nat. (n-off) \leq (min_aux off n f). -intros 3. -elim off.rewrite < minus_n_O. -rewrite > (min_aux_O_f f n).apply le_n. -elim (min_aux_S f n1 n). -elim H1.rewrite > H3.apply le_n. -elim H1.rewrite > H3. -apply (trans_le (n-(S n1)) (n-n1)). -apply monotonic_le_minus_r. -apply le_n_Sn. -assumption. -qed. - -theorem le_min_aux_r : \forall f:nat \to bool. -\forall n,off:nat. (min_aux off n f) \le n. -intros. -elim off.simplify.rewrite < minus_n_O. -elim (f n).simplify.apply le_n. -simplify.apply le_n. -simplify.elim (f (n -(S n1))). -simplify.apply le_plus_to_minus. -rewrite < sym_plus.apply le_plus_n. -simplify.assumption. -qed. diff --git a/helm/matita/library/nat/minus.ma b/helm/matita/library/nat/minus.ma deleted file mode 100644 index 710418d72..000000000 --- a/helm/matita/library/nat/minus.ma +++ /dev/null @@ -1,300 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - - -set "baseuri" "cic:/matita/nat/minus". - -include "nat/le_arith.ma". -include "nat/compare.ma". - -let rec minus n m \def - match n with - [ O \Rightarrow O - | (S p) \Rightarrow - match m with - [O \Rightarrow (S p) - | (S q) \Rightarrow minus p q ]]. - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "natural minus" 'minus x y = (cic:/matita/nat/minus/minus.con x y). - -theorem minus_n_O: \forall n:nat.n=n-O. -intros.elim n.simplify.reflexivity. -simplify.reflexivity. -qed. - -theorem minus_n_n: \forall n:nat.O=n-n. -intros.elim n.simplify. -reflexivity. -simplify.apply H. -qed. - -theorem minus_Sn_n: \forall n:nat. S O = (S n)-n. -intro.elim n. -simplify.reflexivity. -elim H.reflexivity. -qed. - -theorem minus_Sn_m: \forall n,m:nat. m \leq n \to (S n)-m = S (n-m). -intros 2. -apply (nat_elim2 -(\lambda n,m.m \leq n \to (S n)-m = S (n-m))). -intros.apply (le_n_O_elim n1 H). -simplify.reflexivity. -intros.simplify.reflexivity. -intros.rewrite < H.reflexivity. -apply le_S_S_to_le. assumption. -qed. - -theorem plus_minus: -\forall n,m,p:nat. m \leq n \to (n-m)+p = (n+p)-m. -intros 2. -apply (nat_elim2 -(\lambda n,m.\forall p:nat.m \leq n \to (n-m)+p = (n+p)-m)). -intros.apply (le_n_O_elim ? H). -simplify.rewrite < minus_n_O.reflexivity. -intros.simplify.reflexivity. -intros.simplify.apply H.apply le_S_S_to_le.assumption. -qed. - -theorem minus_plus_m_m: \forall n,m:nat.n = (n+m)-m. -intros 2. -generalize in match n. -elim m. -rewrite < minus_n_O.apply plus_n_O. -elim n2.simplify. -apply minus_n_n. -rewrite < plus_n_Sm. -change with (S n3 = (S n3 + n1)-n1). -apply H. -qed. - -theorem plus_minus_m_m: \forall n,m:nat. -m \leq n \to n = (n-m)+m. -intros 2. -apply (nat_elim2 (\lambda n,m.m \leq n \to n = (n-m)+m)). -intros.apply (le_n_O_elim n1 H). -reflexivity. -intros.simplify.rewrite < plus_n_O.reflexivity. -intros.simplify.rewrite < sym_plus.simplify. -apply eq_f.rewrite < sym_plus.apply H. -apply le_S_S_to_le.assumption. -qed. - -theorem minus_to_plus :\forall n,m,p:nat.m \leq n \to n-m = p \to -n = m+p. -intros.apply (trans_eq ? ? ((n-m)+m)). -apply plus_minus_m_m. -apply H.elim H1. -apply sym_plus. -qed. - -theorem plus_to_minus :\forall n,m,p:nat. -n = m+p \to n-m = p. -intros. -apply (inj_plus_r m). -rewrite < H. -rewrite < sym_plus. -symmetry. -apply plus_minus_m_m.rewrite > H. -rewrite > sym_plus. -apply le_plus_n. -qed. - -theorem minus_S_S : \forall n,m:nat. -eq nat (minus (S n) (S m)) (minus n m). -intros. -reflexivity. -qed. - -theorem minus_pred_pred : \forall n,m:nat. lt O n \to lt O m \to -eq nat (minus (pred n) (pred m)) (minus n m). -intros. -apply (lt_O_n_elim n H).intro. -apply (lt_O_n_elim m H1).intro. -simplify.reflexivity. -qed. - -theorem eq_minus_n_m_O: \forall n,m:nat. -n \leq m \to n-m = O. -intros 2. -apply (nat_elim2 (\lambda n,m.n \leq m \to n-m = O)). -intros.simplify.reflexivity. -intros.apply False_ind. -apply not_le_Sn_O. -goal 13.apply H. -intros. -simplify.apply H.apply le_S_S_to_le. apply H1. -qed. - -theorem le_SO_minus: \forall n,m:nat.S n \leq m \to S O \leq m-n. -intros.elim H.elim (minus_Sn_n n).apply le_n. -rewrite > minus_Sn_m. -apply le_S.assumption. -apply lt_to_le.assumption. -qed. - -theorem minus_le_S_minus_S: \forall n,m:nat. m-n \leq S (m-(S n)). -intros.apply (nat_elim2 (\lambda n,m.m-n \leq S (m-(S n)))). -intro.elim n1.simplify.apply le_n_Sn. -simplify.rewrite < minus_n_O.apply le_n. -intros.simplify.apply le_n_Sn. -intros.simplify.apply H. -qed. - -theorem lt_minus_S_n_to_le_minus_n : \forall n,m,p:nat. m-(S n) < p \to m-n \leq p. -intros 3.simplify.intro. -apply (trans_le (m-n) (S (m-(S n))) p). -apply minus_le_S_minus_S. -assumption. -qed. - -theorem le_minus_m: \forall n,m:nat. n-m \leq n. -intros.apply (nat_elim2 (\lambda m,n. n-m \leq n)). -intros.rewrite < minus_n_O.apply le_n. -intros.simplify.apply le_n. -intros.simplify.apply le_S.assumption. -qed. - -theorem lt_minus_m: \forall n,m:nat. O < n \to O < m \to n-m \lt n. -intros.apply (lt_O_n_elim n H).intro. -apply (lt_O_n_elim m H1).intro. -simplify.unfold lt.apply le_S_S.apply le_minus_m. -qed. - -theorem minus_le_O_to_le: \forall n,m:nat. n-m \leq O \to n \leq m. -intros 2. -apply (nat_elim2 (\lambda n,m:nat.n-m \leq O \to n \leq m)). -intros.apply le_O_n. -simplify.intros. assumption. -simplify.intros.apply le_S_S.apply H.assumption. -qed. - -(* galois *) -theorem monotonic_le_minus_r: -\forall p,q,n:nat. q \leq p \to n-p \le n-q. -simplify.intros 2.apply (nat_elim2 -(\lambda p,q.\forall a.q \leq p \to a-p \leq a-q)). -intros.apply (le_n_O_elim n H).apply le_n. -intros.rewrite < minus_n_O. -apply le_minus_m. -intros.elim a.simplify.apply le_n. -simplify.apply H.apply le_S_S_to_le.assumption. -qed. - -theorem le_minus_to_plus: \forall n,m,p. (le (n-m) p) \to (le n (p+m)). -intros 2.apply (nat_elim2 (\lambda n,m.\forall p.(le (n-m) p) \to (le n (p+m)))). -intros.apply le_O_n. -simplify.intros.rewrite < plus_n_O.assumption. -intros. -rewrite < plus_n_Sm. -apply le_S_S.apply H. -exact H1. -qed. - -theorem le_plus_to_minus: \forall n,m,p. (le n (p+m)) \to (le (n-m) p). -intros 2.apply (nat_elim2 (\lambda n,m.\forall p.(le n (p+m)) \to (le (n-m) p))). -intros.simplify.apply le_O_n. -intros 2.rewrite < plus_n_O.intro.simplify.assumption. -intros.simplify.apply H. -apply le_S_S_to_le.rewrite > plus_n_Sm.assumption. -qed. - -(* the converse of le_plus_to_minus does not hold *) -theorem le_plus_to_minus_r: \forall n,m,p. (le (n+m) p) \to (le n (p-m)). -intros 3.apply (nat_elim2 (\lambda m,p.(le (n+m) p) \to (le n (p-m)))). -intro.rewrite < plus_n_O.rewrite < minus_n_O.intro.assumption. -intro.intro.cut (n=O).rewrite > Hcut.apply le_O_n. -apply sym_eq. apply le_n_O_to_eq. -apply (trans_le ? (n+(S n1))). -rewrite < sym_plus. -apply le_plus_n.assumption. -intros.simplify. -apply H.apply le_S_S_to_le. -rewrite > plus_n_Sm.assumption. -qed. - -(* minus and lt - to be completed *) -theorem lt_minus_to_plus: \forall n,m,p. (lt n (p-m)) \to (lt (n+m) p). -intros 3.apply (nat_elim2 (\lambda m,p.(lt n (p-m)) \to (lt (n+m) p))). -intro.rewrite < plus_n_O.rewrite < minus_n_O.intro.assumption. -simplify.intros.apply False_ind.apply (not_le_Sn_O n H). -simplify.intros.unfold lt. -apply le_S_S. -rewrite < plus_n_Sm. -apply H.apply H1. -qed. - -theorem distributive_times_minus: distributive nat times minus. -unfold distributive. -intros. -apply ((leb_elim z y)). - intro.cut (x*(y-z)+x*z = (x*y-x*z)+x*z). - apply (inj_plus_l (x*z)).assumption. - apply (trans_eq nat ? (x*y)). - rewrite < distr_times_plus.rewrite < (plus_minus_m_m ? ? H).reflexivity. - rewrite < plus_minus_m_m. - reflexivity. - apply le_times_r.assumption. - intro.rewrite > eq_minus_n_m_O. - rewrite > (eq_minus_n_m_O (x*y)). - rewrite < sym_times.simplify.reflexivity. - apply le_times_r.apply lt_to_le.apply not_le_to_lt.assumption. - apply lt_to_le.apply not_le_to_lt.assumption. -qed. - -theorem distr_times_minus: \forall n,m,p:nat. n*(m-p) = n*m-n*p -\def distributive_times_minus. - -theorem eq_minus_plus_plus_minus: \forall n,m,p:nat. p \le m \to (n+m)-p = n+(m-p). -intros. -apply plus_to_minus. -rewrite > sym_plus in \vdash (? ? ? %). -rewrite > assoc_plus. -rewrite < plus_minus_m_m. -reflexivity.assumption. -qed. - -theorem eq_minus_minus_minus_plus: \forall n,m,p:nat. (n-m)-p = n-(m+p). -intros. -cut (m+p \le n \or m+p \nleq n). - elim Hcut. - symmetry.apply plus_to_minus. - rewrite > assoc_plus.rewrite > (sym_plus p).rewrite < plus_minus_m_m. - rewrite > sym_plus.rewrite < plus_minus_m_m. - reflexivity. - apply (trans_le ? (m+p)). - rewrite < sym_plus.apply le_plus_n. - assumption. - apply le_plus_to_minus_r.rewrite > sym_plus.assumption. - rewrite > (eq_minus_n_m_O n (m+p)). - rewrite > (eq_minus_n_m_O (n-m) p). - reflexivity. - apply le_plus_to_minus.apply lt_to_le. rewrite < sym_plus. - apply not_le_to_lt. assumption. - apply lt_to_le.apply not_le_to_lt.assumption. - apply (decidable_le (m+p) n). -qed. - -theorem eq_plus_minus_minus_minus: \forall n,m,p:nat. p \le m \to m \le n \to -p+(n-m) = n-(m-p). -intros. -apply sym_eq. -apply plus_to_minus. -rewrite < assoc_plus. -rewrite < plus_minus_m_m. -rewrite < sym_plus. -rewrite < plus_minus_m_m.reflexivity. -assumption.assumption. -qed. diff --git a/helm/matita/library/nat/nat.ma b/helm/matita/library/nat/nat.ma deleted file mode 100644 index a75032d71..000000000 --- a/helm/matita/library/nat/nat.ma +++ /dev/null @@ -1,106 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/nat". - -include "higher_order_defs/functions.ma". - -inductive nat : Set \def - | O : nat - | S : nat \to nat. - -definition pred: nat \to nat \def -\lambda n:nat. match n with -[ O \Rightarrow O -| (S p) \Rightarrow p ]. - -theorem pred_Sn : \forall n:nat.n=(pred (S n)). -intros. reflexivity. -qed. - -theorem injective_S : injective nat nat S. -unfold injective. -intros. -rewrite > pred_Sn. -rewrite > (pred_Sn y). -apply eq_f. assumption. -qed. - -theorem inj_S : \forall n,m:nat.(S n)=(S m) \to n=m -\def injective_S. - -theorem not_eq_S : \forall n,m:nat. -\lnot n=m \to S n \neq S m. -intros. unfold Not. intros. -apply H. apply injective_S. assumption. -qed. - -definition not_zero : nat \to Prop \def -\lambda n: nat. - match n with - [ O \Rightarrow False - | (S p) \Rightarrow True ]. - -theorem not_eq_O_S : \forall n:nat. O \neq S n. -intros. unfold Not. intros. -cut (not_zero O). -exact Hcut. -rewrite > H.exact I. -qed. - -theorem not_eq_n_Sn : \forall n:nat. n \neq S n. -intros.elim n. -apply not_eq_O_S. -apply not_eq_S.assumption. -qed. - -theorem nat_case: -\forall n:nat.\forall P:nat \to Prop. -P O \to (\forall m:nat. P (S m)) \to P n. -intros.elim n.assumption.apply H1. -qed. - -theorem nat_case1: -\forall n:nat.\forall P:nat \to Prop. -(n=O \to P O) \to (\forall m:nat. (n=(S m) \to P (S m))) \to P n. -intros 2.elim n. -apply H.reflexivity. -apply H2.reflexivity. -qed. - -theorem nat_elim2 : -\forall R:nat \to nat \to Prop. -(\forall n:nat. R O n) \to -(\forall n:nat. R (S n) O) \to -(\forall n,m:nat. R n m \to R (S n) (S m)) \to \forall n,m:nat. R n m. -intros 5.elim n. -apply H. -apply (nat_case m).apply H1. -intros.apply H2. apply H3. -qed. - -theorem decidable_eq_nat : \forall n,m:nat.decidable (n=m). -intros.unfold decidable. -apply (nat_elim2 (\lambda n,m.(Or (n=m) ((n=m) \to False)))). -intro.elim n1. -left.reflexivity. -right.apply not_eq_O_S. -intro.right.intro. -apply (not_eq_O_S n1). -apply sym_eq.assumption. -intros.elim H. -left.apply eq_f. assumption. -right.intro.apply H1.apply inj_S.assumption. -qed. - diff --git a/helm/matita/library/nat/nth_prime.ma b/helm/matita/library/nat/nth_prime.ma deleted file mode 100644 index 5330f52ad..000000000 --- a/helm/matita/library/nat/nth_prime.ma +++ /dev/null @@ -1,200 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / Matita is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/nth_prime". - -include "nat/primes.ma". -include "nat/lt_arith.ma". - -(* upper bound by Bertrand's conjecture. *) -(* Too difficult to prove. -let rec nth_prime n \def -match n with - [ O \Rightarrow (S(S O)) - | (S p) \Rightarrow - let previous_prime \def S (nth_prime p) in - min_aux previous_prime ((S(S O))*previous_prime) primeb]. - -theorem example8 : nth_prime (S(S O)) = (S(S(S(S(S O))))). -normalize.reflexivity. -qed. - -theorem example9 : nth_prime (S(S(S O))) = (S(S(S(S(S(S(S O))))))). -normalize.reflexivity. -qed. - -theorem example10 : nth_prime (S(S(S(S O)))) = (S(S(S(S(S(S(S(S(S(S(S O))))))))))). -normalize.reflexivity. -qed. *) - -theorem smallest_factor_fact: \forall n:nat. -n < smallest_factor (S n!). -intros. -apply not_le_to_lt. -change with (smallest_factor (S n!) \le n \to False).intro. -apply (not_divides_S_fact n (smallest_factor(S n!))). -apply lt_SO_smallest_factor. -unfold lt.apply le_S_S.apply le_SO_fact. -assumption. -apply divides_smallest_factor_n. -unfold lt.apply le_S_S.apply le_O_n. -qed. - -theorem ex_prime: \forall n. (S O) \le n \to \exists m. -n < m \land m \le S n! \land (prime m). -intros. -elim H. -apply (ex_intro nat ? (S(S O))). -split.split.apply (le_n (S(S O))). -apply (le_n (S(S O))).apply (primeb_to_Prop (S(S O))). -apply (ex_intro nat ? (smallest_factor (S (S n1)!))). -split.split. -apply smallest_factor_fact. -apply le_smallest_factor_n. -(* Andrea: ancora hint non lo trova *) -apply prime_smallest_factor_n. -change with ((S(S O)) \le S (S n1)!). -apply le_S.apply le_SSO_fact. -unfold lt.apply le_S_S.assumption. -qed. - -let rec nth_prime n \def -match n with - [ O \Rightarrow (S(S O)) - | (S p) \Rightarrow - let previous_prime \def (nth_prime p) in - let upper_bound \def S previous_prime! in - min_aux (upper_bound - (S previous_prime)) upper_bound primeb]. - -(* it works, but nth_prime 4 takes already a few minutes - -it must compute factorial of 7 ... - -theorem example11 : nth_prime (S(S O)) = (S(S(S(S(S O))))). -normalize.reflexivity. -qed. - -theorem example12: nth_prime (S(S(S O))) = (S(S(S(S(S(S(S O))))))). -normalize.reflexivity. -qed. - -theorem example13 : nth_prime (S(S(S(S O)))) = (S(S(S(S(S(S(S(S(S(S(S O))))))))))). -normalize.reflexivity. -*) - -theorem prime_nth_prime : \forall n:nat.prime (nth_prime n). -intro. -apply (nat_case n). -change with (prime (S(S O))). -apply (primeb_to_Prop (S(S O))). -intro. -change with -(let previous_prime \def (nth_prime m) in -let upper_bound \def S previous_prime! in -prime (min_aux (upper_bound - (S previous_prime)) upper_bound primeb)). -apply primeb_true_to_prime. -apply f_min_aux_true. -apply (ex_intro nat ? (smallest_factor (S (nth_prime m)!))). -split.split. -cut (S (nth_prime m)!-(S (nth_prime m)! - (S (nth_prime m))) = (S (nth_prime m))). -rewrite > Hcut.exact (smallest_factor_fact (nth_prime m)). -(* maybe we could factorize this proof *) -apply plus_to_minus. -apply plus_minus_m_m. -apply le_S_S. -apply le_n_fact_n. -apply le_smallest_factor_n. -apply prime_to_primeb_true. -apply prime_smallest_factor_n. -change with ((S(S O)) \le S (nth_prime m)!). -apply le_S_S.apply le_SO_fact. -qed. - -(* properties of nth_prime *) -theorem increasing_nth_prime: increasing nth_prime. -change with (\forall n:nat. (nth_prime n) < (nth_prime (S n))). -intros. -change with -(let previous_prime \def (nth_prime n) in -let upper_bound \def S previous_prime! in -(S previous_prime) \le min_aux (upper_bound - (S previous_prime)) upper_bound primeb). -intros. -cut (upper_bound - (upper_bound -(S previous_prime)) = (S previous_prime)). -rewrite < Hcut in \vdash (? % ?). -apply le_min_aux. -apply plus_to_minus. -apply plus_minus_m_m. -apply le_S_S. -apply le_n_fact_n. -qed. - -variant lt_nth_prime_n_nth_prime_Sn :\forall n:nat. -(nth_prime n) < (nth_prime (S n)) \def increasing_nth_prime. - -theorem injective_nth_prime: injective nat nat nth_prime. -apply increasing_to_injective. -apply increasing_nth_prime. -qed. - -theorem lt_SO_nth_prime_n : \forall n:nat. (S O) \lt nth_prime n. -intros. elim n.unfold lt.apply le_n. -apply (trans_lt ? (nth_prime n1)). -assumption.apply lt_nth_prime_n_nth_prime_Sn. -qed. - -theorem lt_O_nth_prime_n : \forall n:nat. O \lt nth_prime n. -intros.apply (trans_lt O (S O)). -unfold lt. apply le_n.apply lt_SO_nth_prime_n. -qed. - -theorem ex_m_le_n_nth_prime_m: -\forall n: nat. nth_prime O \le n \to -\exists m. nth_prime m \le n \land n < nth_prime (S m). -intros. -apply increasing_to_le2. -exact lt_nth_prime_n_nth_prime_Sn.assumption. -qed. - -theorem lt_nth_prime_to_not_prime: \forall n,m. nth_prime n < m \to m < nth_prime (S n) -\to \lnot (prime m). -intros. -apply primeb_false_to_not_prime. -letin previous_prime \def (nth_prime n). -letin upper_bound \def (S previous_prime!). -apply (lt_min_aux_to_false primeb upper_bound (upper_bound - (S previous_prime)) m). -cut (S (nth_prime n)!-(S (nth_prime n)! - (S (nth_prime n))) = (S (nth_prime n))). -rewrite > Hcut.assumption. -apply plus_to_minus. -apply plus_minus_m_m. -apply le_S_S. -apply le_n_fact_n. -assumption. -qed. - -(* nth_prime enumerates all primes *) -theorem prime_to_nth_prime : \forall p:nat. prime p \to -\exists i. nth_prime i = p. -intros. -cut (\exists m. nth_prime m \le p \land p < nth_prime (S m)). -elim Hcut.elim H1. -cut (nth_prime a < p \lor nth_prime a = p). -elim Hcut1. -absurd (prime p). -assumption. -apply (lt_nth_prime_to_not_prime a).assumption.assumption. -apply (ex_intro nat ? a).assumption. -apply le_to_or_lt_eq.assumption. -apply ex_m_le_n_nth_prime_m. -simplify.unfold prime in H.elim H.assumption. -qed. - diff --git a/helm/matita/library/nat/ord.ma b/helm/matita/library/nat/ord.ma deleted file mode 100644 index 24874c08a..000000000 --- a/helm/matita/library/nat/ord.ma +++ /dev/null @@ -1,193 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / Matita is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/log". - -include "datatypes/constructors.ma". -include "nat/exp.ma". -include "nat/lt_arith.ma". -include "nat/primes.ma". - -(* this definition of log is based on pairs, with a remainder *) - -let rec p_ord_aux p n m \def - match n \mod m with - [ O \Rightarrow - match p with - [ O \Rightarrow pair nat nat O n - | (S p) \Rightarrow - match (p_ord_aux p (n / m) m) with - [ (pair q r) \Rightarrow pair nat nat (S q) r] ] - | (S a) \Rightarrow pair nat nat O n]. - -(* p_ord n m = if m divides n q times, with remainder r *) -definition p_ord \def \lambda n,m:nat.p_ord_aux n n m. - -theorem p_ord_aux_to_Prop: \forall p,n,m. O < m \to - match p_ord_aux p n m with - [ (pair q r) \Rightarrow n = m \sup q *r ]. -intro. -elim p. -change with -match ( -match n \mod m with - [ O \Rightarrow pair nat nat O n - | (S a) \Rightarrow pair nat nat O n] ) -with - [ (pair q r) \Rightarrow n = m \sup q * r ]. -apply (nat_case (n \mod m)). -simplify.apply plus_n_O. -intros. -simplify.apply plus_n_O. -change with -match ( -match n1 \mod m with - [ O \Rightarrow - match (p_ord_aux n (n1 / m) m) with - [ (pair q r) \Rightarrow pair nat nat (S q) r] - | (S a) \Rightarrow pair nat nat O n1] ) -with - [ (pair q r) \Rightarrow n1 = m \sup q * r]. -apply (nat_case1 (n1 \mod m)).intro. -change with -match ( - match (p_ord_aux n (n1 / m) m) with - [ (pair q r) \Rightarrow pair nat nat (S q) r]) -with - [ (pair q r) \Rightarrow n1 = m \sup q * r]. -generalize in match (H (n1 / m) m). -elim (p_ord_aux n (n1 / m) m). -simplify. -rewrite > assoc_times. -rewrite < H3.rewrite > (plus_n_O (m*(n1 / m))). -rewrite < H2. -rewrite > sym_times. -rewrite < div_mod.reflexivity. -assumption.assumption. -intros.simplify.apply plus_n_O. -qed. - -theorem p_ord_aux_to_exp: \forall p,n,m,q,r. O < m \to - (pair nat nat q r) = p_ord_aux p n m \to n = m \sup q * r. -intros. -change with -match (pair nat nat q r) with - [ (pair q r) \Rightarrow n = m \sup q * r ]. -rewrite > H1. -apply p_ord_aux_to_Prop. -assumption. -qed. -(* questo va spostato in primes1.ma *) -theorem p_ord_exp: \forall n,m,i. O < m \to n \mod m \neq O \to -\forall p. i \le p \to p_ord_aux p (m \sup i * n) m = pair nat nat i n. -intros 5. -elim i. -simplify. -rewrite < plus_n_O. -apply (nat_case p). -change with - (match n \mod m with - [ O \Rightarrow pair nat nat O n - | (S a) \Rightarrow pair nat nat O n] - = pair nat nat O n). -elim (n \mod m).simplify.reflexivity.simplify.reflexivity. -intro. -change with - (match n \mod m with - [ O \Rightarrow - match (p_ord_aux m1 (n / m) m) with - [ (pair q r) \Rightarrow pair nat nat (S q) r] - | (S a) \Rightarrow pair nat nat O n] - = pair nat nat O n). -cut (O < n \mod m \lor O = n \mod m). -elim Hcut.apply (lt_O_n_elim (n \mod m) H3). -intros. simplify.reflexivity. -apply False_ind. -apply H1.apply sym_eq.assumption. -apply le_to_or_lt_eq.apply le_O_n. -generalize in match H3. -apply (nat_case p).intro.apply False_ind.apply (not_le_Sn_O n1 H4). -intros. -change with - (match ((m \sup (S n1) *n) \mod m) with - [ O \Rightarrow - match (p_ord_aux m1 ((m \sup (S n1) *n) / m) m) with - [ (pair q r) \Rightarrow pair nat nat (S q) r] - | (S a) \Rightarrow pair nat nat O (m \sup (S n1) *n)] - = pair nat nat (S n1) n). -cut (((m \sup (S n1)*n) \mod m) = O). -rewrite > Hcut. -change with -(match (p_ord_aux m1 ((m \sup (S n1)*n) / m) m) with - [ (pair q r) \Rightarrow pair nat nat (S q) r] - = pair nat nat (S n1) n). -cut ((m \sup (S n1) *n) / m = m \sup n1 *n). -rewrite > Hcut1. -rewrite > (H2 m1). simplify.reflexivity. -apply le_S_S_to_le.assumption. -(* div_exp *) -change with ((m* m \sup n1 *n) / m = m \sup n1 * n). -rewrite > assoc_times. -apply (lt_O_n_elim m H). -intro.apply div_times. -(* mod_exp = O *) -apply divides_to_mod_O. -assumption. -simplify.rewrite > assoc_times. -apply (witness ? ? (m \sup n1 *n)).reflexivity. -qed. - -theorem p_ord_aux_to_Prop1: \forall p,n,m. (S O) < m \to O < n \to n \le p \to - match p_ord_aux p n m with - [ (pair q r) \Rightarrow r \mod m \neq O]. -intro.elim p.absurd (O < n).assumption. -apply le_to_not_lt.assumption. -change with -match - (match n1 \mod m with - [ O \Rightarrow - match (p_ord_aux n(n1 / m) m) with - [ (pair q r) \Rightarrow pair nat nat (S q) r] - | (S a) \Rightarrow pair nat nat O n1]) -with - [ (pair q r) \Rightarrow r \mod m \neq O]. -apply (nat_case1 (n1 \mod m)).intro. -generalize in match (H (n1 / m) m). -elim (p_ord_aux n (n1 / m) m). -apply H5.assumption. -apply eq_mod_O_to_lt_O_div. -apply (trans_lt ? (S O)).unfold lt.apply le_n. -assumption.assumption.assumption. -apply le_S_S_to_le. -apply (trans_le ? n1).change with (n1 / m < n1). -apply lt_div_n_m_n.assumption.assumption.assumption. -intros. -change with (n1 \mod m \neq O). -rewrite > H4. -unfold Not.intro. -apply (not_eq_O_S m1). -rewrite > H5.reflexivity. -qed. - -theorem p_ord_aux_to_not_mod_O: \forall p,n,m,q,r. (S O) < m \to O < n \to n \le p \to - pair nat nat q r = p_ord_aux p n m \to r \mod m \neq O. -intros. -change with - match (pair nat nat q r) with - [ (pair q r) \Rightarrow r \mod m \neq O]. -rewrite > H3. -apply p_ord_aux_to_Prop1. -assumption.assumption.assumption. -qed. - diff --git a/helm/matita/library/nat/orders.ma b/helm/matita/library/nat/orders.ma deleted file mode 100644 index 6ec0c9992..000000000 --- a/helm/matita/library/nat/orders.ma +++ /dev/null @@ -1,312 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/orders". - -include "nat/nat.ma". -include "higher_order_defs/ordering.ma". - -(* definitions *) -inductive le (n:nat) : nat \to Prop \def - | le_n : le n n - | le_S : \forall m:nat. le n m \to le n (S m). - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "natural 'less or equal to'" 'leq x y = (cic:/matita/nat/orders/le.ind#xpointer(1/1) x y). -(*CSC: the URI must disappear: there is a bug now *) -interpretation "natural 'neither less nor equal to'" 'nleq x y = - (cic:/matita/logic/connectives/Not.con - (cic:/matita/nat/orders/le.ind#xpointer(1/1) x y)). - -definition lt: nat \to nat \to Prop \def -\lambda n,m:nat.(S n) \leq m. - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "natural 'less than'" 'lt x y = (cic:/matita/nat/orders/lt.con x y). -(*CSC: the URI must disappear: there is a bug now *) -interpretation "natural 'not less than'" 'nless x y = - (cic:/matita/logic/connectives/Not.con (cic:/matita/nat/orders/lt.con x y)). - -definition ge: nat \to nat \to Prop \def -\lambda n,m:nat.m \leq n. - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "natural 'greater or equal to'" 'geq x y = (cic:/matita/nat/orders/ge.con x y). - -definition gt: nat \to nat \to Prop \def -\lambda n,m:nat.m H7. -apply H. -apply le_to_or_lt_eq.apply H6. -qed. diff --git a/helm/matita/library/nat/permutation.ma b/helm/matita/library/nat/permutation.ma deleted file mode 100644 index 3e987e9e8..000000000 --- a/helm/matita/library/nat/permutation.ma +++ /dev/null @@ -1,740 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/permutation". - -include "nat/compare.ma". -include "nat/sigma_and_pi.ma". - -definition injn: (nat \to nat) \to nat \to Prop \def -\lambda f:nat \to nat.\lambda n:nat.\forall i,j:nat. -i \le n \to j \le n \to f i = f j \to i = j. - -theorem injn_Sn_n: \forall f:nat \to nat. \forall n:nat. -injn f (S n) \to injn f n.unfold injn. -intros.apply H. -apply le_S.assumption. -apply le_S.assumption. -assumption. -qed. - -theorem injective_to_injn: \forall f:nat \to nat. \forall n:nat. -injective nat nat f \to injn f n. -unfold injective.unfold injn.intros.apply H.assumption. -qed. - -definition permut : (nat \to nat) \to nat \to Prop -\def \lambda f:nat \to nat. \lambda m:nat. -(\forall i:nat. i \le m \to f i \le m )\land injn f m. - -theorem permut_O_to_eq_O: \forall h:nat \to nat. -permut h O \to (h O) = O. -intros.unfold permut in H. -elim H.apply sym_eq.apply le_n_O_to_eq. -apply H1.apply le_n. -qed. - -theorem permut_S_to_permut: \forall f:nat \to nat. \forall m:nat. -permut f (S m) \to f (S m) = (S m) \to permut f m. -unfold permut.intros. -elim H. -split.intros. -cut (f i < S m \lor f i = S m). -elim Hcut. -apply le_S_S_to_le.assumption. -apply False_ind. -apply (not_le_Sn_n m). -cut ((S m) = i). -rewrite > Hcut1.assumption. -apply H3.apply le_n.apply le_S.assumption. -rewrite > H5.assumption. -apply le_to_or_lt_eq.apply H2.apply le_S.assumption. -apply (injn_Sn_n f m H3). -qed. - -(* transpositions *) - -definition transpose : nat \to nat \to nat \to nat \def -\lambda i,j,n:nat. -match eqb n i with - [ true \Rightarrow j - | false \Rightarrow - match eqb n j with - [ true \Rightarrow i - | false \Rightarrow n]]. - -lemma transpose_i_j_i: \forall i,j:nat. transpose i j i = j. -intros.unfold transpose. -rewrite > (eqb_n_n i).simplify. reflexivity. -qed. - -lemma transpose_i_j_j: \forall i,j:nat. transpose i j j = i. -intros.unfold transpose. -apply (eqb_elim j i).simplify.intro.assumption. -rewrite > (eqb_n_n j).simplify. -intros. reflexivity. -qed. - -theorem transpose_i_i: \forall i,n:nat. (transpose i i n) = n. -intros.unfold transpose. -apply (eqb_elim n i). -intro.simplify.apply sym_eq. assumption. -intro.simplify.reflexivity. -qed. - -theorem transpose_i_j_j_i: \forall i,j,n:nat. -transpose i j n = transpose j i n. -intros.unfold transpose. -apply (eqb_elim n i). -apply (eqb_elim n j). -intros. simplify.rewrite < H. rewrite < H1. -reflexivity. -intros.simplify.reflexivity. -apply (eqb_elim n j). -intros.simplify.reflexivity. -intros.simplify.reflexivity. -qed. - -theorem transpose_transpose: \forall i,j,n:nat. -(transpose i j (transpose i j n)) = n. -intros.unfold transpose. unfold transpose. -apply (eqb_elim n i).simplify. -intro. -apply (eqb_elim j i). -simplify.intros.rewrite > H. rewrite > H1.reflexivity. -rewrite > (eqb_n_n j).simplify.intros. -apply sym_eq. -assumption. -apply (eqb_elim n j).simplify. -rewrite > (eqb_n_n i).intros.simplify. -apply sym_eq. assumption. -simplify.intros. -rewrite > (not_eq_to_eqb_false n i H1). -rewrite > (not_eq_to_eqb_false n j H). -simplify.reflexivity. -qed. - -theorem injective_transpose : \forall i,j:nat. -injective nat nat (transpose i j). -unfold injective. -intros. -rewrite < (transpose_transpose i j x). -rewrite < (transpose_transpose i j y). -apply eq_f.assumption. -qed. - -variant inj_transpose: \forall i,j,n,m:nat. -transpose i j n = transpose i j m \to n = m \def -injective_transpose. - -theorem permut_transpose: \forall i,j,n:nat. i \le n \to j \le n \to -permut (transpose i j) n. -unfold permut.intros. -split.unfold transpose. -intros. -elim (eqb i1 i).simplify.assumption. -elim (eqb i1 j).simplify.assumption. -simplify.assumption. -apply (injective_to_injn (transpose i j) n). -apply injective_transpose. -qed. - -theorem permut_fg: \forall f,g:nat \to nat. \forall n:nat. -permut f n \to permut g n \to permut (\lambda m.(f(g m))) n. -unfold permut. intros. -elim H.elim H1. -split.intros.simplify.apply H2. -apply H4.assumption. -simplify.intros. -apply H5.assumption.assumption. -apply H3.apply H4.assumption.apply H4.assumption. -assumption. -qed. - -theorem permut_transpose_l: -\forall f:nat \to nat. \forall m,i,j:nat. -i \le m \to j \le m \to permut f m \to permut (\lambda n.transpose i j (f n)) m. -intros.apply (permut_fg (transpose i j) f m ? ?). -apply permut_transpose.assumption.assumption. -assumption. -qed. - -theorem permut_transpose_r: -\forall f:nat \to nat. \forall m,i,j:nat. -i \le m \to j \le m \to permut f m \to permut (\lambda n.f (transpose i j n)) m. -intros.apply (permut_fg f (transpose i j) m ? ?). -assumption.apply permut_transpose.assumption.assumption. -qed. - -theorem eq_transpose : \forall i,j,k,n:nat. \lnot j=i \to - \lnot i=k \to \lnot j=k \to -transpose i j n = transpose i k (transpose k j (transpose i k n)). -(* uffa: triplo unfold? *) -intros.unfold transpose.unfold transpose.unfold transpose. -apply (eqb_elim n i).intro. -simplify.rewrite > (eqb_n_n k). -simplify.rewrite > (not_eq_to_eqb_false j i H). -rewrite > (not_eq_to_eqb_false j k H2). -reflexivity. -intro.apply (eqb_elim n j). -intro. -cut (\lnot n = k). -cut (\lnot n = i). -rewrite > (not_eq_to_eqb_false n k Hcut). -simplify. -rewrite > (not_eq_to_eqb_false n k Hcut). -rewrite > (eq_to_eqb_true n j H4). -simplify. -rewrite > (not_eq_to_eqb_false k i). -rewrite > (eqb_n_n k). -simplify.reflexivity. -unfold Not.intro.apply H1.apply sym_eq.assumption. -assumption. -unfold Not.intro.apply H2.apply (trans_eq ? ? n). -apply sym_eq.assumption.assumption. -intro.apply (eqb_elim n k).intro. -simplify. -rewrite > (not_eq_to_eqb_false i k H1). -rewrite > (not_eq_to_eqb_false i j). -simplify. -rewrite > (eqb_n_n i). -simplify.assumption. -unfold Not.intro.apply H.apply sym_eq.assumption. -intro.simplify. -rewrite > (not_eq_to_eqb_false n k H5). -rewrite > (not_eq_to_eqb_false n j H4). -simplify. -rewrite > (not_eq_to_eqb_false n i H3). -rewrite > (not_eq_to_eqb_false n k H5). -simplify.reflexivity. -qed. - -theorem permut_S_to_permut_transpose: \forall f:nat \to nat. -\forall m:nat. permut f (S m) \to permut (\lambda n.transpose (f (S m)) (S m) -(f n)) m. -unfold permut.intros. -elim H. -split.intros.simplify.unfold transpose. -apply (eqb_elim (f i) (f (S m))). -intro.apply False_ind. -cut (i = (S m)). -apply (not_le_Sn_n m). -rewrite < Hcut.assumption. -apply H2.apply le_S.assumption.apply le_n.assumption. -intro.simplify. -apply (eqb_elim (f i) (S m)). -intro. -cut (f (S m) \lt (S m) \lor f (S m) = (S m)). -elim Hcut.apply le_S_S_to_le.assumption. -apply False_ind.apply H4.rewrite > H6.assumption. -apply le_to_or_lt_eq.apply H1.apply le_n. -intro.simplify. -cut (f i \lt (S m) \lor f i = (S m)). -elim Hcut.apply le_S_S_to_le.assumption. -apply False_ind.apply H5.assumption. -apply le_to_or_lt_eq.apply H1.apply le_S.assumption. -unfold injn.intros. -apply H2.apply le_S.assumption.apply le_S.assumption. -apply (inj_transpose (f (S m)) (S m)). -apply H5. -qed. - -(* bounded bijectivity *) - -definition bijn : (nat \to nat) \to nat \to Prop \def -\lambda f:nat \to nat. \lambda n. \forall m:nat. m \le n \to -ex nat (\lambda p. p \le n \land f p = m). - -theorem eq_to_bijn: \forall f,g:nat\to nat. \forall n:nat. -(\forall i:nat. i \le n \to (f i) = (g i)) \to -bijn f n \to bijn g n. -intros 4.unfold bijn. -intros.elim (H1 m). -apply (ex_intro ? ? a). -rewrite < (H a).assumption. -elim H3.assumption.assumption. -qed. - -theorem bijn_Sn_n: \forall f:nat \to nat. \forall n:nat. -bijn f (S n) \to f (S n) = (S n) \to bijn f n. -unfold bijn.intros.elim (H m). -elim H3. -apply (ex_intro ? ? a).split. -cut (a < S n \lor a = S n). -elim Hcut.apply le_S_S_to_le.assumption. -apply False_ind. -apply (not_le_Sn_n n). -rewrite < H1.rewrite < H6.rewrite > H5.assumption. -apply le_to_or_lt_eq.assumption.assumption. -apply le_S.assumption. -qed. - -theorem bijn_n_Sn: \forall f:nat \to nat. \forall n:nat. -bijn f n \to f (S n) = (S n) \to bijn f (S n). -unfold bijn.intros. -cut (m < S n \lor m = S n). -elim Hcut. -elim (H m). -elim H4. -apply (ex_intro ? ? a).split. -apply le_S.assumption.assumption. -apply le_S_S_to_le.assumption. -apply (ex_intro ? ? (S n)). -split.apply le_n. -rewrite > H3.assumption. -apply le_to_or_lt_eq.assumption. -qed. - -theorem bijn_fg: \forall f,g:nat\to nat. \forall n:nat. -bijn f n \to bijn g n \to bijn (\lambda p.f(g p)) n. -unfold bijn. -intros.simplify. -elim (H m).elim H3. -elim (H1 a).elim H6. -apply (ex_intro ? ? a1). -split.assumption. -rewrite > H8.assumption. -assumption.assumption. -qed. - -theorem bijn_transpose : \forall n,i,j. i \le n \to j \le n \to -bijn (transpose i j) n. -intros.unfold bijn.unfold transpose.intros. -cut (m = i \lor \lnot m = i). -elim Hcut. -apply (ex_intro ? ? j). -split.assumption. -apply (eqb_elim j i). -intro.simplify.rewrite > H3.rewrite > H4.reflexivity. -rewrite > (eqb_n_n j).simplify. -intros. apply sym_eq.assumption. -cut (m = j \lor \lnot m = j). -elim Hcut1. -apply (ex_intro ? ? i). -split.assumption. -rewrite > (eqb_n_n i).simplify. -apply sym_eq. assumption. -apply (ex_intro ? ? m). -split.assumption. -rewrite > (not_eq_to_eqb_false m i). -rewrite > (not_eq_to_eqb_false m j). -simplify. reflexivity. -assumption. -assumption. -apply (decidable_eq_nat m j). -apply (decidable_eq_nat m i). -qed. - -theorem bijn_transpose_r: \forall f:nat\to nat.\forall n,i,j. i \le n \to j \le n \to -bijn f n \to bijn (\lambda p.f (transpose i j p)) n. -intros. -apply (bijn_fg f ?).assumption. -apply (bijn_transpose n i j).assumption.assumption. -qed. - -theorem bijn_transpose_l: \forall f:nat\to nat.\forall n,i,j. i \le n \to j \le n \to -bijn f n \to bijn (\lambda p.transpose i j (f p)) n. -intros. -apply (bijn_fg ? f). -apply (bijn_transpose n i j).assumption.assumption. -assumption. -qed. - -theorem permut_to_bijn: \forall n:nat.\forall f:nat\to nat. -permut f n \to bijn f n. -intro. -elim n.unfold bijn.intros. -apply (ex_intro ? ? m). -split.assumption. -apply (le_n_O_elim m ? (\lambda p. f p = p)). -assumption.unfold permut in H. -elim H.apply sym_eq. apply le_n_O_to_eq.apply H2.apply le_n. -apply (eq_to_bijn (\lambda p. -(transpose (f (S n1)) (S n1)) (transpose (f (S n1)) (S n1) (f p))) f). -intros.apply transpose_transpose. -apply (bijn_fg (transpose (f (S n1)) (S n1))). -apply bijn_transpose. -unfold permut in H1. -elim H1.apply H2.apply le_n.apply le_n. -apply bijn_n_Sn. -apply H. -apply permut_S_to_permut_transpose. -assumption.unfold transpose. -rewrite > (eqb_n_n (f (S n1))).simplify.reflexivity. -qed. - -let rec invert_permut n f m \def - match eqb m (f n) with - [true \Rightarrow n - |false \Rightarrow - match n with - [O \Rightarrow O - |(S p) \Rightarrow invert_permut p f m]]. - -theorem invert_permut_f: \forall f:nat \to nat. \forall n,m:nat. -m \le n \to injn f n\to invert_permut n f (f m) = m. -intros 4. -elim H. -apply (nat_case1 m). -intro.simplify. -rewrite > (eqb_n_n (f O)).simplify.reflexivity. -intros.simplify. -rewrite > (eqb_n_n (f (S m1))).simplify.reflexivity. -simplify. -rewrite > (not_eq_to_eqb_false (f m) (f (S n1))). -simplify.apply H2. -apply injn_Sn_n. assumption. -unfold Not.intro.absurd (m = S n1). -apply H3.apply le_S.assumption.apply le_n.assumption. -unfold Not.intro. -apply (not_le_Sn_n n1).rewrite < H5.assumption. -qed. - -theorem injective_invert_permut: \forall f:nat \to nat. \forall n:nat. -permut f n \to injn (invert_permut n f) n. -intros. -unfold injn.intros. -cut (bijn f n). -unfold bijn in Hcut. -generalize in match (Hcut i H1).intro. -generalize in match (Hcut j H2).intro. -elim H4.elim H6. -elim H5.elim H9. -rewrite < H8. -rewrite < H11. -apply eq_f. -rewrite < (invert_permut_f f n a). -rewrite < (invert_permut_f f n a1). -rewrite > H8. -rewrite > H11. -assumption.assumption. -unfold permut in H.elim H. assumption. -assumption. -unfold permut in H.elim H. assumption. -apply permut_to_bijn.assumption. -qed. - -theorem permut_invert_permut: \forall f:nat \to nat. \forall n:nat. -permut f n \to permut (invert_permut n f) n. -intros.unfold permut.split. -intros.simplify.elim n. -simplify.elim (eqb i (f O)).simplify.apply le_n.simplify.apply le_n. -simplify.elim (eqb i (f (S n1))).simplify.apply le_n. -simplify.apply le_S. assumption. -apply injective_invert_permut.assumption. -qed. - -theorem f_invert_permut: \forall f:nat \to nat. \forall n,m:nat. -m \le n \to permut f n\to f (invert_permut n f m) = m. -intros. -apply (injective_invert_permut f n H1). -unfold permut in H1.elim H1. -apply H2. -cut (permut (invert_permut n f) n).unfold permut in Hcut. -elim Hcut.apply H4.assumption. -apply permut_invert_permut.assumption.assumption. -(* uffa: lo ha espanso troppo *) -change with (invert_permut n f (f (invert_permut n f m)) = invert_permut n f m). -apply invert_permut_f. -cut (permut (invert_permut n f) n).unfold permut in Hcut. -elim Hcut.apply H2.assumption. -apply permut_invert_permut.assumption. -unfold permut in H1.elim H1.assumption. -qed. - -theorem permut_n_to_eq_n: \forall h:nat \to nat.\forall n:nat. -permut h n \to (\forall m:nat. m < n \to h m = m) \to h n = n. -intros.unfold permut in H.elim H. -cut (invert_permut n h n < n \lor invert_permut n h n = n). -elim Hcut. -rewrite < (f_invert_permut h n n) in \vdash (? ? ? %). -apply eq_f. -rewrite < (f_invert_permut h n n) in \vdash (? ? % ?). -apply H1.assumption.apply le_n.assumption.apply le_n.assumption. -rewrite < H4 in \vdash (? ? % ?). -apply (f_invert_permut h).apply le_n.assumption. -apply le_to_or_lt_eq. -cut (permut (invert_permut n h) n). -unfold permut in Hcut.elim Hcut. -apply H4.apply le_n. -apply permut_invert_permut.assumption. -qed. - -theorem permut_n_to_le: \forall h:nat \to nat.\forall k,n:nat. -k \le n \to permut h n \to (\forall m:nat. m < k \to h m = m) \to -\forall j. k \le j \to j \le n \to k \le h j. -intros.unfold permut in H1.elim H1. -cut (h j < k \lor \not(h j < k)). -elim Hcut.absurd (k \le j).assumption. -apply lt_to_not_le. -cut (h j = j).rewrite < Hcut1.assumption. -apply H6.apply H5.assumption.assumption. -apply H2.assumption. -apply not_lt_to_le.assumption. -apply (decidable_lt (h j) k). -qed. - -(* applications *) - -let rec map_iter_i k (g:nat \to nat) f (i:nat) \def - match k with - [ O \Rightarrow g i - | (S k) \Rightarrow f (g (S (k+i))) (map_iter_i k g f i)]. - -theorem eq_map_iter_i: \forall g1,g2:nat \to nat. -\forall f:nat \to nat \to nat. \forall n,i:nat. -(\forall m:nat. i\le m \to m \le n+i \to g1 m = g2 m) \to -map_iter_i n g1 f i = map_iter_i n g2 f i. -intros 5.elim n.simplify.apply H.apply le_n. -apply le_n.simplify.apply eq_f2.apply H1.simplify. -apply le_S.apply le_plus_n.simplify.apply le_n. -apply H.intros.apply H1.assumption.simplify.apply le_S.assumption. -qed. - -(* map_iter examples *) - -theorem eq_map_iter_i_sigma: \forall g:nat \to nat. \forall n,m:nat. -map_iter_i n g plus m = sigma n g m. -intros.elim n.simplify.reflexivity. -simplify. -apply eq_f.assumption. -qed. - -theorem eq_map_iter_i_pi: \forall g:nat \to nat. \forall n,m:nat. -map_iter_i n g times m = pi n g m. -intros.elim n.simplify.reflexivity. -simplify. -apply eq_f.assumption. -qed. - -theorem eq_map_iter_i_fact: \forall n:nat. -map_iter_i n (\lambda m.m) times (S O) = (S n)!. -intros.elim n. -simplify.reflexivity. -change with -(((S n1)+(S O))*(map_iter_i n1 (\lambda m.m) times (S O)) = (S(S n1))*(S n1)!). -rewrite < plus_n_Sm.rewrite < plus_n_O. -apply eq_f.assumption. -qed. - -theorem eq_map_iter_i_transpose_l : \forall f:nat\to nat \to nat.associative nat f \to -symmetric2 nat nat f \to \forall g:nat \to nat. \forall n,k:nat. -map_iter_i (S k) g f n = map_iter_i (S k) (\lambda m. g (transpose (k+n) (S k+n) m)) f n. -intros.apply (nat_case1 k). -intros.simplify. -change with -(f (g (S n)) (g n) = -f (g (transpose n (S n) (S n))) (g (transpose n (S n) n))). -rewrite > transpose_i_j_i. -rewrite > transpose_i_j_j. -apply H1. -intros. -change with -(f (g (S (S (m+n)))) (f (g (S (m+n))) (map_iter_i m g f n)) = -f (g (transpose (S m + n) (S (S m) + n) (S (S m)+n))) -(f (g (transpose (S m + n) (S (S m) + n) (S m+n))) -(map_iter_i m (\lambda m1. g (transpose (S m+n) (S (S m)+n) m1)) f n))). -rewrite > transpose_i_j_i. -rewrite > transpose_i_j_j. -rewrite < H. -rewrite < H. -rewrite < (H1 (g (S m + n))). -apply eq_f. -apply eq_map_iter_i. -intros.simplify.unfold transpose. -rewrite > (not_eq_to_eqb_false m1 (S m+n)). -rewrite > (not_eq_to_eqb_false m1 (S (S m)+n)). -simplify. -reflexivity. -apply (lt_to_not_eq m1 (S ((S m)+n))). -unfold lt.apply le_S_S.change with (m1 \leq S (m+n)).apply le_S.assumption. -apply (lt_to_not_eq m1 (S m+n)). -simplify.unfold lt.apply le_S_S.assumption. -qed. - -theorem eq_map_iter_i_transpose_i_Si : \forall f:nat\to nat \to nat.associative nat f \to -symmetric2 nat nat f \to \forall g:nat \to nat. \forall n,k,i:nat. n \le i \to i \le k+n \to -map_iter_i (S k) g f n = map_iter_i (S k) (\lambda m. g (transpose i (S i) m)) f n. -intros 6.elim k.cut (i=n). -rewrite > Hcut. -apply (eq_map_iter_i_transpose_l f H H1 g n O). -apply antisymmetric_le.assumption.assumption. -cut (i < S n1 + n \lor i = S n1 + n). -elim Hcut. -change with -(f (g (S (S n1)+n)) (map_iter_i (S n1) g f n) = -f (g (transpose i (S i) (S (S n1)+n))) (map_iter_i (S n1) (\lambda m. g (transpose i (S i) m)) f n)). -apply eq_f2.unfold transpose. -rewrite > (not_eq_to_eqb_false (S (S n1)+n) i). -rewrite > (not_eq_to_eqb_false (S (S n1)+n) (S i)). -simplify.reflexivity. -simplify.unfold Not.intro. -apply (lt_to_not_eq i (S n1+n)).assumption. -apply inj_S.apply sym_eq. assumption. -simplify.unfold Not.intro. -apply (lt_to_not_eq i (S (S n1+n))).simplify.unfold lt. -apply le_S_S.assumption. -apply sym_eq. assumption. -apply H2.assumption.apply le_S_S_to_le. -assumption. -rewrite > H5. -apply (eq_map_iter_i_transpose_l f H H1 g n (S n1)). -apply le_to_or_lt_eq.assumption. -qed. - -theorem eq_map_iter_i_transpose: -\forall f:nat\to nat \to nat. -associative nat f \to symmetric2 nat nat f \to \forall n,k,o:nat. -\forall g:nat \to nat. \forall i:nat. n \le i \to S (o + i) \le S k+n \to -map_iter_i (S k) g f n = map_iter_i (S k) (\lambda m. g (transpose i (S(o + i)) m)) f n. -intros 6. -apply (nat_elim1 o). -intro. -apply (nat_case m ?). -intros. -apply (eq_map_iter_i_transpose_i_Si ? H H1). -exact H3.apply le_S_S_to_le.assumption. -intros. -apply (trans_eq ? ? (map_iter_i (S k) (\lambda m. g (transpose i (S(m1 + i)) m)) f n)). -apply H2. -unfold lt. apply le_n.assumption. -apply (trans_le ? (S(S (m1+i)))). -apply le_S.apply le_n.assumption. -apply (trans_eq ? ? (map_iter_i (S k) (\lambda m. g -(transpose i (S(m1 + i)) (transpose (S(m1 + i)) (S(S(m1 + i))) m))) f n)). -apply (H2 O ? ? (S(m1+i))). -unfold lt.apply le_S_S.apply le_O_n. -apply (trans_le ? i).assumption. -change with (i \le (S m1)+i).apply le_plus_n. -exact H4. -apply (trans_eq ? ? (map_iter_i (S k) (\lambda m. g -(transpose i (S(m1 + i)) -(transpose (S(m1 + i)) (S(S(m1 + i))) -(transpose i (S(m1 + i)) m)))) f n)). -apply (H2 m1). -unfold lt. apply le_n.assumption. -apply (trans_le ? (S(S (m1+i)))). -apply le_S.apply le_n.assumption. -apply eq_map_iter_i. -intros.apply eq_f. -apply sym_eq. apply eq_transpose. -unfold Not. intro. -apply (not_le_Sn_n i). -rewrite < H7 in \vdash (? ? %). -apply le_S_S.apply le_S. -apply le_plus_n. -unfold Not. intro. -apply (not_le_Sn_n i). -rewrite > H7 in \vdash (? ? %). -apply le_S_S. -apply le_plus_n. -unfold Not. intro. -apply (not_eq_n_Sn (S m1+i)). -apply sym_eq.assumption. -qed. - -theorem eq_map_iter_i_transpose1: \forall f:nat\to nat \to nat.associative nat f \to -symmetric2 nat nat f \to \forall n,k,i,j:nat. -\forall g:nat \to nat. n \le i \to i < j \to j \le S k+n \to -map_iter_i (S k) g f n = map_iter_i (S k) (\lambda m. g (transpose i j m)) f n. -intros. -simplify in H3. -cut ((S i) < j \lor (S i) = j). -elim Hcut. -cut (j = S ((j - (S i)) + i)). -rewrite > Hcut1. -apply (eq_map_iter_i_transpose f H H1 n k (j - (S i)) g i). -assumption. -rewrite < Hcut1.assumption. -rewrite > plus_n_Sm. -apply plus_minus_m_m.apply lt_to_le.assumption. -rewrite < H5. -apply (eq_map_iter_i_transpose_i_Si f H H1 g). -simplify. -assumption.apply le_S_S_to_le. -apply (trans_le ? j).assumption.assumption. -apply le_to_or_lt_eq.assumption. -qed. - -theorem eq_map_iter_i_transpose2: \forall f:nat\to nat \to nat.associative nat f \to -symmetric2 nat nat f \to \forall n,k,i,j:nat. -\forall g:nat \to nat. n \le i \to i \le (S k+n) \to n \le j \to j \le (S k+n) \to -map_iter_i (S k) g f n = map_iter_i (S k) (\lambda m. g (transpose i j m)) f n. -intros. -apply (nat_compare_elim i j). -intro.apply (eq_map_iter_i_transpose1 f H H1 n k i j g H2 H6 H5). -intro.rewrite > H6. -apply eq_map_iter_i.intros. -rewrite > (transpose_i_i j).reflexivity. -intro. -apply (trans_eq ? ? (map_iter_i (S k) (\lambda m:nat.g (transpose j i m)) f n)). -apply (eq_map_iter_i_transpose1 f H H1 n k j i g H4 H6 H3). -apply eq_map_iter_i. -intros.apply eq_f.apply transpose_i_j_j_i. -qed. - -theorem permut_to_eq_map_iter_i:\forall f:nat\to nat \to nat.associative nat f \to -symmetric2 nat nat f \to \forall k,n:nat.\forall g,h:nat \to nat. -permut h (k+n) \to (\forall m:nat. m \lt n \to h m = m) \to -map_iter_i k g f n = map_iter_i k (\lambda m.g(h m)) f n. -intros 4.elim k. -simplify.rewrite > (permut_n_to_eq_n h).reflexivity.assumption.assumption. -apply (trans_eq ? ? (map_iter_i (S n) (\lambda m.g ((transpose (h (S n+n1)) (S n+n1)) m)) f n1)). -unfold permut in H3. -elim H3. -apply (eq_map_iter_i_transpose2 f H H1 n1 n ? ? g). -apply (permut_n_to_le h n1 (S n+n1)). -apply le_plus_n.assumption.assumption.apply le_plus_n.apply le_n. -apply H5.apply le_n.apply le_plus_n.apply le_n. -apply (trans_eq ? ? (map_iter_i (S n) (\lambda m. -(g(transpose (h (S n+n1)) (S n+n1) -(transpose (h (S n+n1)) (S n+n1) (h m)))) )f n1)). -change with -(f (g (transpose (h (S n+n1)) (S n+n1) (S n+n1))) -(map_iter_i n (\lambda m. -g (transpose (h (S n+n1)) (S n+n1) m)) f n1) -= -f -(g(transpose (h (S n+n1)) (S n+n1) -(transpose (h (S n+n1)) (S n+n1) (h (S n+n1))))) -(map_iter_i n -(\lambda m. -(g(transpose (h (S n+n1)) (S n+n1) -(transpose (h (S n+n1)) (S n+n1) (h m))))) f n1)). -apply eq_f2.apply eq_f. -rewrite > transpose_i_j_j. -rewrite > transpose_i_j_i. -rewrite > transpose_i_j_j.reflexivity. -apply (H2 n1 (\lambda m.(g(transpose (h (S n+n1)) (S n+n1) m)))). -apply permut_S_to_permut_transpose. -assumption. -intros. -unfold transpose. -rewrite > (not_eq_to_eqb_false (h m) (h (S n+n1))). -rewrite > (not_eq_to_eqb_false (h m) (S n+n1)). -simplify.apply H4.assumption. -rewrite > H4. -apply lt_to_not_eq.apply (trans_lt ? n1).assumption. -simplify.unfold lt.apply le_S_S.apply le_plus_n.assumption. -unfold permut in H3.elim H3. -simplify.unfold Not.intro. -apply (lt_to_not_eq m (S n+n1)).apply (trans_lt ? n1).assumption. -simplify.unfold lt.apply le_S_S.apply le_plus_n. -unfold injn in H7. -apply (H7 m (S n+n1)).apply (trans_le ? n1). -apply lt_to_le.assumption.apply le_plus_n.apply le_n. -assumption. -apply eq_map_iter_i.intros. -rewrite > transpose_transpose.reflexivity. -qed. \ No newline at end of file diff --git a/helm/matita/library/nat/plus.ma b/helm/matita/library/nat/plus.ma deleted file mode 100644 index d595dad19..000000000 --- a/helm/matita/library/nat/plus.ma +++ /dev/null @@ -1,72 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/plus". - -include "nat/nat.ma". - -let rec plus n m \def - match n with - [ O \Rightarrow m - | (S p) \Rightarrow S (plus p m) ]. - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "natural plus" 'plus x y = (cic:/matita/nat/plus/plus.con x y). - -theorem plus_n_O: \forall n:nat. n = n+O. -intros.elim n. -simplify.reflexivity. -simplify.apply eq_f.assumption. -qed. - -theorem plus_n_Sm : \forall n,m:nat. S (n+m) = n+(S m). -intros.elim n. -simplify.reflexivity. -simplify.apply eq_f.assumption. -qed. - -theorem sym_plus: \forall n,m:nat. n+m = m+n. -intros.elim n. -simplify.apply plus_n_O. -simplify.rewrite > H.apply plus_n_Sm. -qed. - -theorem associative_plus : associative nat plus. -unfold associative.intros.elim x. -simplify.reflexivity. -simplify.apply eq_f.assumption. -qed. - -theorem assoc_plus : \forall n,m,p:nat. (n+m)+p = n+(m+p) -\def associative_plus. - -theorem injective_plus_r: \forall n:nat.injective nat nat (\lambda m.n+m). -intro.simplify.intros 2.elim n. -exact H. -apply H.apply inj_S.apply H1. -qed. - -theorem inj_plus_r: \forall p,n,m:nat. p+n = p+m \to n=m -\def injective_plus_r. - -theorem injective_plus_l: \forall m:nat.injective nat nat (\lambda n.n+m). -intro.simplify.intros. -apply (injective_plus_r m). -rewrite < sym_plus. -rewrite < (sym_plus y). -assumption. -qed. - -theorem inj_plus_l: \forall p,n,m:nat. n+p = m+p \to n=m -\def injective_plus_l. diff --git a/helm/matita/library/nat/primes.ma b/helm/matita/library/nat/primes.ma deleted file mode 100644 index 50b7d1221..000000000 --- a/helm/matita/library/nat/primes.ma +++ /dev/null @@ -1,591 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / Matita is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/primes". - -include "nat/div_and_mod.ma". -include "nat/minimization.ma". -include "nat/sigma_and_pi.ma". -include "nat/factorial.ma". - -inductive divides (n,m:nat) : Prop \def -witness : \forall p:nat.m = times n p \to divides n m. - -interpretation "divides" 'divides n m = (cic:/matita/nat/primes/divides.ind#xpointer(1/1) n m). -interpretation "not divides" 'ndivides n m = - (cic:/matita/logic/connectives/Not.con (cic:/matita/nat/primes/divides.ind#xpointer(1/1) n m)). - -theorem reflexive_divides : reflexive nat divides. -unfold reflexive. -intros. -exact (witness x x (S O) (times_n_SO x)). -qed. - -theorem divides_to_div_mod_spec : -\forall n,m. O < n \to n \divides m \to div_mod_spec m n (m / n) O. -intros.elim H1.rewrite > H2. -constructor 1.assumption. -apply (lt_O_n_elim n H).intros. -rewrite < plus_n_O. -rewrite > div_times.apply sym_times. -qed. - -theorem div_mod_spec_to_divides : -\forall n,m,p. div_mod_spec m n p O \to n \divides m. -intros.elim H. -apply (witness n m p). -rewrite < sym_times. -rewrite > (plus_n_O (p*n)).assumption. -qed. - -theorem divides_to_mod_O: -\forall n,m. O < n \to n \divides m \to (m \mod n) = O. -intros.apply (div_mod_spec_to_eq2 m n (m / n) (m \mod n) (m / n) O). -apply div_mod_spec_div_mod.assumption. -apply divides_to_div_mod_spec.assumption.assumption. -qed. - -theorem mod_O_to_divides: -\forall n,m. O< n \to (m \mod n) = O \to n \divides m. -intros. -apply (witness n m (m / n)). -rewrite > (plus_n_O (n * (m / n))). -rewrite < H1. -rewrite < sym_times. -(* Andrea: perche' hint non lo trova ?*) -apply div_mod. -assumption. -qed. - -theorem divides_n_O: \forall n:nat. n \divides O. -intro. apply (witness n O O).apply times_n_O. -qed. - -theorem divides_n_n: \forall n:nat. n \divides n. -intro. apply (witness n n (S O)).apply times_n_SO. -qed. - -theorem divides_SO_n: \forall n:nat. (S O) \divides n. -intro. apply (witness (S O) n n). simplify.apply plus_n_O. -qed. - -theorem divides_plus: \forall n,p,q:nat. -n \divides p \to n \divides q \to n \divides p+q. -intros. -elim H.elim H1. apply (witness n (p+q) (n2+n1)). -rewrite > H2.rewrite > H3.apply sym_eq.apply distr_times_plus. -qed. - -theorem divides_minus: \forall n,p,q:nat. -divides n p \to divides n q \to divides n (p-q). -intros. -elim H.elim H1. apply (witness n (p-q) (n2-n1)). -rewrite > H2.rewrite > H3.apply sym_eq.apply distr_times_minus. -qed. - -theorem divides_times: \forall n,m,p,q:nat. -n \divides p \to m \divides q \to n*m \divides p*q. -intros. -elim H.elim H1. apply (witness (n*m) (p*q) (n2*n1)). -rewrite > H2.rewrite > H3. -apply (trans_eq nat ? (n*(m*(n2*n1)))). -apply (trans_eq nat ? (n*(n2*(m*n1)))). -apply assoc_times. -apply eq_f. -apply (trans_eq nat ? ((n2*m)*n1)). -apply sym_eq. apply assoc_times. -rewrite > (sym_times n2 m).apply assoc_times. -apply sym_eq. apply assoc_times. -qed. - -theorem transitive_divides: transitive ? divides. -unfold. -intros. -elim H.elim H1. apply (witness x z (n2*n)). -rewrite > H3.rewrite > H2. -apply assoc_times. -qed. - -variant trans_divides: \forall n,m,p. - n \divides m \to m \divides p \to n \divides p \def transitive_divides. - -theorem eq_mod_to_divides:\forall n,m,p. O< p \to -mod n p = mod m p \to divides p (n-m). -intros. -cut (n \le m \or \not n \le m). -elim Hcut. -cut (n-m=O). -rewrite > Hcut1. -apply (witness p O O). -apply times_n_O. -apply eq_minus_n_m_O. -assumption. -apply (witness p (n-m) ((div n p)-(div m p))). -rewrite > distr_times_minus. -rewrite > sym_times. -rewrite > (sym_times p). -cut ((div n p)*p = n - (mod n p)). -rewrite > Hcut1. -rewrite > eq_minus_minus_minus_plus. -rewrite > sym_plus. -rewrite > H1. -rewrite < div_mod.reflexivity. -assumption. -apply sym_eq. -apply plus_to_minus. -rewrite > sym_plus. -apply div_mod. -assumption. -apply (decidable_le n m). -qed. - -theorem antisymmetric_divides: antisymmetric nat divides. -unfold antisymmetric.intros.elim H. elim H1. -apply (nat_case1 n2).intro. -rewrite > H3.rewrite > H2.rewrite > H4. -rewrite < times_n_O.reflexivity. -intros. -apply (nat_case1 n).intro. -rewrite > H2.rewrite > H3.rewrite > H5. -rewrite < times_n_O.reflexivity. -intros. -apply antisymmetric_le. -rewrite > H2.rewrite > times_n_SO in \vdash (? % ?). -apply le_times_r.rewrite > H4.apply le_S_S.apply le_O_n. -rewrite > H3.rewrite > times_n_SO in \vdash (? % ?). -apply le_times_r.rewrite > H5.apply le_S_S.apply le_O_n. -qed. - -(* divides le *) -theorem divides_to_le : \forall n,m. O < m \to n \divides m \to n \le m. -intros. elim H1.rewrite > H2.cut (O < n2). -apply (lt_O_n_elim n2 Hcut).intro.rewrite < sym_times. -simplify.rewrite < sym_plus. -apply le_plus_n. -elim (le_to_or_lt_eq O n2). -assumption. -absurd (O H2.rewrite < H3.rewrite < times_n_O. -apply (not_le_Sn_n O). -apply le_O_n. -qed. - -theorem divides_to_lt_O : \forall n,m. O < m \to n \divides m \to O < n. -intros.elim H1. -elim (le_to_or_lt_eq O n (le_O_n n)). -assumption. -rewrite < H3.absurd (O < m).assumption. -rewrite > H2.rewrite < H3. -simplify.exact (not_le_Sn_n O). -qed. - -(* boolean divides *) -definition divides_b : nat \to nat \to bool \def -\lambda n,m :nat. (eqb (m \mod n) O). - -theorem divides_b_to_Prop : -\forall n,m:nat. O < n \to -match divides_b n m with -[ true \Rightarrow n \divides m -| false \Rightarrow n \ndivides m]. -intros. -change with -match eqb (m \mod n) O with -[ true \Rightarrow n \divides m -| false \Rightarrow n \ndivides m]. -apply eqb_elim. -intro.simplify.apply mod_O_to_divides.assumption.assumption. -intro.simplify.unfold Not.intro.apply H1.apply divides_to_mod_O.assumption.assumption. -qed. - -theorem divides_b_true_to_divides : -\forall n,m:nat. O < n \to -(divides_b n m = true ) \to n \divides m. -intros. -change with -match true with -[ true \Rightarrow n \divides m -| false \Rightarrow n \ndivides m]. -rewrite < H1.apply divides_b_to_Prop. -assumption. -qed. - -theorem divides_b_false_to_not_divides : -\forall n,m:nat. O < n \to -(divides_b n m = false ) \to n \ndivides m. -intros. -change with -match false with -[ true \Rightarrow n \divides m -| false \Rightarrow n \ndivides m]. -rewrite < H1.apply divides_b_to_Prop. -assumption. -qed. - -theorem decidable_divides: \forall n,m:nat.O < n \to -decidable (n \divides m). -intros.change with ((n \divides m) \lor n \ndivides m). -cut -(match divides_b n m with -[ true \Rightarrow n \divides m -| false \Rightarrow n \ndivides m] \to n \divides m \lor n \ndivides m). -apply Hcut.apply divides_b_to_Prop.assumption. -elim (divides_b n m).left.apply H1.right.apply H1. -qed. - -theorem divides_to_divides_b_true : \forall n,m:nat. O < n \to -n \divides m \to divides_b n m = true. -intros. -cut (match (divides_b n m) with -[ true \Rightarrow n \divides m -| false \Rightarrow n \ndivides m] \to ((divides_b n m) = true)). -apply Hcut.apply divides_b_to_Prop.assumption. -elim (divides_b n m).reflexivity. -absurd (n \divides m).assumption.assumption. -qed. - -theorem not_divides_to_divides_b_false: \forall n,m:nat. O < n \to -\lnot(n \divides m) \to (divides_b n m) = false. -intros. -cut (match (divides_b n m) with -[ true \Rightarrow n \divides m -| false \Rightarrow n \ndivides m] \to ((divides_b n m) = false)). -apply Hcut.apply divides_b_to_Prop.assumption. -elim (divides_b n m). -absurd (n \divides m).assumption.assumption. -reflexivity. -qed. - -(* divides and pi *) -theorem divides_f_pi_f : \forall f:nat \to nat.\forall n,m,i:nat. -m \le i \to i \le n+m \to f i \divides pi n f m. -intros 5.elim n.simplify. -cut (i = m).rewrite < Hcut.apply divides_n_n. -apply antisymmetric_le.assumption.assumption. -simplify. -cut (i < S n1+m \lor i = S n1 + m). -elim Hcut. -apply (transitive_divides ? (pi n1 f m)). -apply H1.apply le_S_S_to_le. assumption. -apply (witness ? ? (f (S n1+m))).apply sym_times. -rewrite > H3. -apply (witness ? ? (pi n1 f m)).reflexivity. -apply le_to_or_lt_eq.assumption. -qed. - -(* -theorem mod_S_pi: \forall f:nat \to nat.\forall n,i:nat. -i < n \to (S O) < (f i) \to (S (pi n f)) \mod (f i) = (S O). -intros.cut (pi n f) \mod (f i) = O. -rewrite < Hcut. -apply mod_S.apply trans_lt O (S O).apply le_n (S O).assumption. -rewrite > Hcut.assumption. -apply divides_to_mod_O.apply trans_lt O (S O).apply le_n (S O).assumption. -apply divides_f_pi_f.assumption. -qed. -*) - -(* divides and fact *) -theorem divides_fact : \forall n,i:nat. -O < i \to i \le n \to i \divides n!. -intros 3.elim n.absurd (O H3. -apply (witness ? ? n1!).reflexivity. -qed. - -theorem mod_S_fact: \forall n,i:nat. -(S O) < i \to i \le n \to (S n!) \mod i = (S O). -intros.cut (n! \mod i = O). -rewrite < Hcut. -apply mod_S.apply (trans_lt O (S O)).apply (le_n (S O)).assumption. -rewrite > Hcut.assumption. -apply divides_to_mod_O.apply (trans_lt O (S O)).apply (le_n (S O)).assumption. -apply divides_fact.apply (trans_lt O (S O)).apply (le_n (S O)).assumption. -assumption. -qed. - -theorem not_divides_S_fact: \forall n,i:nat. -(S O) < i \to i \le n \to i \ndivides S n!. -intros. -apply divides_b_false_to_not_divides. -apply (trans_lt O (S O)).apply (le_n (S O)).assumption. -change with ((eqb ((S n!) \mod i) O) = false). -rewrite > mod_S_fact.simplify.reflexivity. -assumption.assumption. -qed. - -(* prime *) -definition prime : nat \to Prop \def -\lambda n:nat. (S O) < n \land -(\forall m:nat. m \divides n \to (S O) < m \to m = n). - -theorem not_prime_O: \lnot (prime O). -unfold Not.unfold prime.intro.elim H.apply (not_le_Sn_O (S O) H1). -qed. - -theorem not_prime_SO: \lnot (prime (S O)). -unfold Not.unfold prime.intro.elim H.apply (not_le_Sn_n (S O) H1). -qed. - -(* smallest factor *) -definition smallest_factor : nat \to nat \def -\lambda n:nat. -match n with -[ O \Rightarrow O -| (S p) \Rightarrow - match p with - [ O \Rightarrow (S O) - | (S q) \Rightarrow min_aux q (S(S q)) (\lambda m.(eqb ((S(S q)) \mod m) O))]]. - -(* it works ! -theorem example1 : smallest_prime_factor (S(S(S O))) = (S(S(S O))). -normalize.reflexivity. -qed. - -theorem example2: smallest_prime_factor (S(S(S(S O)))) = (S(S O)). -normalize.reflexivity. -qed. - -theorem example3 : smallest_prime_factor (S(S(S(S(S(S(S O))))))) = (S(S(S(S(S(S(S O))))))). -simplify.reflexivity. -qed. *) - -theorem lt_SO_smallest_factor: -\forall n:nat. (S O) < n \to (S O) < (smallest_factor n). -intro. -apply (nat_case n).intro.apply False_ind.apply (not_le_Sn_O (S O) H). -intro.apply (nat_case m).intro. apply False_ind.apply (not_le_Sn_n (S O) H). -intros. -change with -(S O < min_aux m1 (S(S m1)) (\lambda m.(eqb ((S(S m1)) \mod m) O))). -apply (lt_to_le_to_lt ? (S (S O))). -apply (le_n (S(S O))). -cut ((S(S O)) = (S(S m1)) - m1). -rewrite > Hcut. -apply le_min_aux. -apply sym_eq.apply plus_to_minus. -rewrite < sym_plus.simplify.reflexivity. -qed. - -theorem lt_O_smallest_factor: \forall n:nat. O < n \to O < (smallest_factor n). -intro. -apply (nat_case n).intro.apply False_ind.apply (not_le_Sn_n O H). -intro.apply (nat_case m).intro. -simplify.unfold lt.apply le_n. -intros.apply (trans_lt ? (S O)). -unfold lt.apply le_n. -apply lt_SO_smallest_factor.unfold lt. apply le_S_S. -apply le_S_S.apply le_O_n. -qed. - -theorem divides_smallest_factor_n : -\forall n:nat. O < n \to smallest_factor n \divides n. -intro. -apply (nat_case n).intro.apply False_ind.apply (not_le_Sn_O O H). -intro.apply (nat_case m).intro. simplify. -apply (witness ? ? (S O)). simplify.reflexivity. -intros. -apply divides_b_true_to_divides. -apply (lt_O_smallest_factor ? H). -change with -(eqb ((S(S m1)) \mod (min_aux m1 (S(S m1)) - (\lambda m.(eqb ((S(S m1)) \mod m) O)))) O = true). -apply f_min_aux_true. -apply (ex_intro nat ? (S(S m1))). -split.split. -apply le_minus_m.apply le_n. -rewrite > mod_n_n.reflexivity. -apply (trans_lt ? (S O)).apply (le_n (S O)).unfold lt. -apply le_S_S.apply le_S_S.apply le_O_n. -qed. - -theorem le_smallest_factor_n : -\forall n:nat. smallest_factor n \le n. -intro.apply (nat_case n).simplify.reflexivity. -intro.apply (nat_case m).simplify.reflexivity. -intro.apply divides_to_le. -unfold lt.apply le_S_S.apply le_O_n. -apply divides_smallest_factor_n. -unfold lt.apply le_S_S.apply le_O_n. -qed. - -theorem lt_smallest_factor_to_not_divides: \forall n,i:nat. -(S O) < n \to (S O) < i \to i < (smallest_factor n) \to i \ndivides n. -intros 2. -apply (nat_case n).intro.apply False_ind.apply (not_le_Sn_O (S O) H). -intro.apply (nat_case m).intro. apply False_ind.apply (not_le_Sn_n (S O) H). -intros. -apply divides_b_false_to_not_divides. -apply (trans_lt O (S O)).apply (le_n (S O)).assumption. -change with ((eqb ((S(S m1)) \mod i) O) = false). -apply (lt_min_aux_to_false -(\lambda i:nat.eqb ((S(S m1)) \mod i) O) (S(S m1)) m1 i). -cut ((S(S O)) = (S(S m1)-m1)). -rewrite < Hcut.exact H1. -apply sym_eq. apply plus_to_minus. -rewrite < sym_plus.simplify.reflexivity. -exact H2. -qed. - -theorem prime_smallest_factor_n : -\forall n:nat. (S O) < n \to prime (smallest_factor n). -intro. change with ((S(S O)) \le n \to (S O) < (smallest_factor n) \land -(\forall m:nat. m \divides smallest_factor n \to (S O) < m \to m = (smallest_factor n))). -intro.split. -apply lt_SO_smallest_factor.assumption. -intros. -cut (le m (smallest_factor n)). -elim (le_to_or_lt_eq m (smallest_factor n) Hcut). -absurd (m \divides n). -apply (transitive_divides m (smallest_factor n)). -assumption. -apply divides_smallest_factor_n. -apply (trans_lt ? (S O)). unfold lt. apply le_n. exact H. -apply lt_smallest_factor_to_not_divides. -exact H.assumption.assumption.assumption. -apply divides_to_le. -apply (trans_lt O (S O)). -apply (le_n (S O)). -apply lt_SO_smallest_factor. -exact H. -assumption. -qed. - -theorem prime_to_smallest_factor: \forall n. prime n \to -smallest_factor n = n. -intro.apply (nat_case n).intro.apply False_ind.apply (not_prime_O H). -intro.apply (nat_case m).intro.apply False_ind.apply (not_prime_SO H). -intro. -change with -((S O) < (S(S m1)) \land -(\forall m:nat. m \divides S(S m1) \to (S O) < m \to m = (S(S m1))) \to -smallest_factor (S(S m1)) = (S(S m1))). -intro.elim H.apply H2. -apply divides_smallest_factor_n. -apply (trans_lt ? (S O)).unfold lt. apply le_n.assumption. -apply lt_SO_smallest_factor. -assumption. -qed. - -(* a number n > O is prime iff its smallest factor is n *) -definition primeb \def \lambda n:nat. -match n with -[ O \Rightarrow false -| (S p) \Rightarrow - match p with - [ O \Rightarrow false - | (S q) \Rightarrow eqb (smallest_factor (S(S q))) (S(S q))]]. - -(* it works! -theorem example4 : primeb (S(S(S O))) = true. -normalize.reflexivity. -qed. - -theorem example5 : primeb (S(S(S(S(S(S O)))))) = false. -normalize.reflexivity. -qed. - -theorem example6 : primeb (S(S(S(S((S(S(S(S(S(S(S O)))))))))))) = true. -normalize.reflexivity. -qed. - -theorem example7 : primeb (S(S(S(S(S(S((S(S(S(S((S(S(S(S(S(S(S O))))))))))))))))))) = true. -normalize.reflexivity. -qed. *) - -theorem primeb_to_Prop: \forall n. -match primeb n with -[ true \Rightarrow prime n -| false \Rightarrow \lnot (prime n)]. -intro. -apply (nat_case n).simplify.unfold Not.unfold prime.intro.elim H.apply (not_le_Sn_O (S O) H1). -intro.apply (nat_case m).simplify.unfold Not.unfold prime.intro.elim H.apply (not_le_Sn_n (S O) H1). -intro. -change with -match eqb (smallest_factor (S(S m1))) (S(S m1)) with -[ true \Rightarrow prime (S(S m1)) -| false \Rightarrow \lnot (prime (S(S m1)))]. -apply (eqb_elim (smallest_factor (S(S m1))) (S(S m1))). -intro.change with (prime (S(S m1))). -rewrite < H. -apply prime_smallest_factor_n. -unfold lt.apply le_S_S.apply le_S_S.apply le_O_n. -intro.change with (\lnot (prime (S(S m1)))). -change with (prime (S(S m1)) \to False). -intro.apply H. -apply prime_to_smallest_factor. -assumption. -qed. - -theorem primeb_true_to_prime : \forall n:nat. -primeb n = true \to prime n. -intros.change with -match true with -[ true \Rightarrow prime n -| false \Rightarrow \lnot (prime n)]. -rewrite < H. -apply primeb_to_Prop. -qed. - -theorem primeb_false_to_not_prime : \forall n:nat. -primeb n = false \to \lnot (prime n). -intros.change with -match false with -[ true \Rightarrow prime n -| false \Rightarrow \lnot (prime n)]. -rewrite < H. -apply primeb_to_Prop. -qed. - -theorem decidable_prime : \forall n:nat.decidable (prime n). -intro.change with ((prime n) \lor \lnot (prime n)). -cut -(match primeb n with -[ true \Rightarrow prime n -| false \Rightarrow \lnot (prime n)] \to (prime n) \lor \lnot (prime n)). -apply Hcut.apply primeb_to_Prop. -elim (primeb n).left.apply H.right.apply H. -qed. - -theorem prime_to_primeb_true: \forall n:nat. -prime n \to primeb n = true. -intros. -cut (match (primeb n) with -[ true \Rightarrow prime n -| false \Rightarrow \lnot (prime n)] \to ((primeb n) = true)). -apply Hcut.apply primeb_to_Prop. -elim (primeb n).reflexivity. -absurd (prime n).assumption.assumption. -qed. - -theorem not_prime_to_primeb_false: \forall n:nat. -\lnot(prime n) \to primeb n = false. -intros. -cut (match (primeb n) with -[ true \Rightarrow prime n -| false \Rightarrow \lnot (prime n)] \to ((primeb n) = false)). -apply Hcut.apply primeb_to_Prop. -elim (primeb n). -absurd (prime n).assumption.assumption. -reflexivity. -qed. - diff --git a/helm/matita/library/nat/primes1.ma b/helm/matita/library/nat/primes1.ma deleted file mode 100644 index 3ec61ee4a..000000000 --- a/helm/matita/library/nat/primes1.ma +++ /dev/null @@ -1,38 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / Matita is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/primes1". - -include "datatypes/constructors.ma". -include "nat/primes.ma". - -(* p is just an upper bound, acc is an accumulator *) -let rec n_divides_aux p n m acc \def - match n \mod m with - [ O \Rightarrow - match p with - [ O \Rightarrow pair nat nat acc n - | (S p) \Rightarrow n_divides_aux p (n / m) m (S acc)] - | (S a) \Rightarrow pair nat nat acc n]. - -(* n_divides n m = if m divides n q times, with remainder r *) -definition n_divides \def \lambda n,m:nat.n_divides_aux n n m O. - -(* -theorem n_divides_to_Prop: \forall n,m,p,a. - match n_divides_aux p n m a with - [ (pair q r) \Rightarrow n = m \sup a *r]. -intros. -apply nat_case (n \mod m). *) - diff --git a/helm/matita/library/nat/relevant_equations.ma b/helm/matita/library/nat/relevant_equations.ma deleted file mode 100644 index f4cf43775..000000000 --- a/helm/matita/library/nat/relevant_equations.ma +++ /dev/null @@ -1,50 +0,0 @@ -(**************************************************************************) -(* __ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/relevant_equations.ma". - -include "nat/times.ma". -include "nat/minus.ma". - -theorem times_plus_l: \forall n,m,p:nat. (n+m)*p = n*p + m*p. -intros. -apply (trans_eq ? ? (p*(n+m))). -apply sym_times. -apply (trans_eq ? ? (p*n+p*m)). -apply distr_times_plus. -apply eq_f2. -apply sym_times. -apply sym_times. -qed. - -theorem times_minus_l: \forall n,m,p:nat. (n-m)*p = n*p - m*p. -intros. -apply (trans_eq ? ? (p*(n-m))). -apply sym_times. -apply (trans_eq ? ? (p*n-p*m)). -apply distr_times_minus. -apply eq_f2. -apply sym_times. -apply sym_times. -qed. - -theorem times_plus_plus: \forall n,m,p,q:nat. (n + m)*(p + q) = -n*p + n*q + m*p + m*q. -intros. -apply (trans_eq nat ? ((n*(p+q) + m*(p+q)))). -apply times_plus_l. -rewrite > distr_times_plus. -rewrite > distr_times_plus. -rewrite < assoc_plus.reflexivity. -qed. diff --git a/helm/matita/library/nat/sigma_and_pi.ma b/helm/matita/library/nat/sigma_and_pi.ma deleted file mode 100644 index 4f5f6cba0..000000000 --- a/helm/matita/library/nat/sigma_and_pi.ma +++ /dev/null @@ -1,79 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / Matita is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/sigma_and_pi". - -include "nat/factorial.ma". -include "nat/lt_arith.ma". -include "nat/exp.ma". - -let rec sigma n f m \def - match n with - [ O \Rightarrow (f m) - | (S p) \Rightarrow (f (S p+m))+(sigma p f m)]. - -let rec pi n f m \def - match n with - [ O \Rightarrow f m - | (S p) \Rightarrow (f (S p+m))*(pi p f m)]. - -theorem eq_sigma: \forall f,g:nat \to nat. -\forall n,m:nat. -(\forall i:nat. m \le i \to i \le m+n \to f i = g i) \to -(sigma n f m) = (sigma n g m). -intros 3.elim n. -simplify.apply H.apply le_n.rewrite < plus_n_O.apply le_n. -simplify. -apply eq_f2.apply H1. -change with (m \le (S n1)+m).apply le_plus_n. -rewrite > (sym_plus m).apply le_n. -apply H.intros.apply H1.assumption. -rewrite < plus_n_Sm. -apply le_S.assumption. -qed. - -theorem eq_pi: \forall f,g:nat \to nat. -\forall n,m:nat. -(\forall i:nat. m \le i \to i \le m+n \to f i = g i) \to -(pi n f m) = (pi n g m). -intros 3.elim n. -simplify.apply H.apply le_n.rewrite < plus_n_O.apply le_n. -simplify. -apply eq_f2.apply H1. -change with (m \le (S n1)+m).apply le_plus_n. -rewrite > (sym_plus m).apply le_n. -apply H.intros.apply H1.assumption. -rewrite < plus_n_Sm. -apply le_S.assumption. -qed. - -theorem eq_fact_pi: \forall n. (S n)! = pi n (\lambda m.m) (S O). -intro.elim n. -simplify.reflexivity. -change with ((S(S n1))*(S n1)! = ((S n1)+(S O))*(pi n1 (\lambda m.m) (S O))). -rewrite < plus_n_Sm.rewrite < plus_n_O. -apply eq_f.assumption. -qed. - -theorem exp_pi_l: \forall f:nat\to nat.\forall n,m,a:nat. -(exp a (S n))*pi n f m= pi n (\lambda p.a*(f p)) m. -intros.elim n.simplify.rewrite < times_n_SO.reflexivity. -simplify. -rewrite < H. -rewrite > assoc_times. -rewrite > assoc_times in\vdash (? ? ? %). -apply eq_f.rewrite < assoc_times. -rewrite < assoc_times. -apply eq_f2.apply sym_times.reflexivity. -qed. diff --git a/helm/matita/library/nat/times.ma b/helm/matita/library/nat/times.ma deleted file mode 100644 index 2ae5ffd74..000000000 --- a/helm/matita/library/nat/times.ma +++ /dev/null @@ -1,87 +0,0 @@ -(**************************************************************************) -(* __ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/times". - -include "nat/plus.ma". - -let rec times n m \def - match n with - [ O \Rightarrow O - | (S p) \Rightarrow m+(times p m) ]. - -(*CSC: the URI must disappear: there is a bug now *) -interpretation "natural times" 'times x y = (cic:/matita/nat/times/times.con x y). - -theorem times_n_O: \forall n:nat. O = n*O. -intros.elim n. -simplify.reflexivity. -simplify.assumption. -qed. - -theorem times_n_Sm : -\forall n,m:nat. n+(n*m) = n*(S m). -intros.elim n. -simplify.reflexivity. -simplify.apply eq_f.rewrite < H. -transitivity ((n1+m)+n1*m).symmetry.apply assoc_plus. -transitivity ((m+n1)+n1*m). -apply eq_f2. -apply sym_plus. -reflexivity. -apply assoc_plus. -qed. - -theorem times_n_SO : \forall n:nat. n = n * S O. -intros. -rewrite < times_n_Sm. -rewrite < times_n_O. -rewrite < plus_n_O. -reflexivity. -qed. - -theorem symmetric_times : symmetric nat times. -unfold symmetric. -intros.elim x. -simplify.apply times_n_O. -simplify.rewrite > H.apply times_n_Sm. -qed. - -variant sym_times : \forall n,m:nat. n*m = m*n \def -symmetric_times. - -theorem distributive_times_plus : distributive nat times plus. -unfold distributive. -intros.elim x. -simplify.reflexivity. -simplify.rewrite > H. rewrite > assoc_plus.rewrite > assoc_plus. -apply eq_f.rewrite < assoc_plus. rewrite < (sym_plus ? z). -rewrite > assoc_plus.reflexivity. -qed. - -variant distr_times_plus: \forall n,m,p:nat. n*(m+p) = n*m + n*p -\def distributive_times_plus. - -theorem associative_times: associative nat times. -unfold associative.intros. -elim x.simplify.apply refl_eq. -simplify.rewrite < sym_times. -rewrite > distr_times_plus. -rewrite < sym_times. -rewrite < (sym_times (times n y) z). -rewrite < H.apply refl_eq. -qed. - -variant assoc_times: \forall n,m,p:nat. (n*m)*p = n*(m*p) \def -associative_times. diff --git a/helm/matita/library/nat/totient.ma b/helm/matita/library/nat/totient.ma deleted file mode 100644 index 24c3920ed..000000000 --- a/helm/matita/library/nat/totient.ma +++ /dev/null @@ -1,102 +0,0 @@ -(**************************************************************************) -(* __ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| A.Asperti, C.Sacerdoti Coen, *) -(* ||A|| E.Tassi, S.Zacchiroli *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU Lesser General Public License Version 2.1 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/nat/totient". - -include "nat/count.ma". -include "nat/chinese_reminder.ma". - -definition totient : nat \to nat \def -\lambda n. count n (\lambda m. eqb (gcd m n) (S O)). - -theorem totient3: totient (S(S(S O))) = (S(S O)). -reflexivity. -qed. - -theorem totient6: totient (S(S(S(S(S(S O)))))) = (S(S O)). -reflexivity. -qed. - -theorem totient_times: \forall n,m:nat. (gcd m n) = (S O) \to -totient (n*m) = (totient n)*(totient m). -intro. -apply (nat_case n). -intro.simplify.intro.reflexivity. -intros 2.apply (nat_case m1). -rewrite < sym_times. -rewrite < (sym_times (totient O)). -simplify.intro.reflexivity. -intros. -unfold totient. -apply (count_times m m2 ? ? ? -(\lambda b,a. cr_pair (S m) (S m2) a b) (\lambda x. x \mod (S m)) (\lambda x. x \mod (S m2))). -intros.unfold cr_pair. -apply (le_to_lt_to_lt ? (pred ((S m)*(S m2)))). -unfold min. -apply le_min_aux_r. -change with ((S (pred ((S m)*(S m2)))) \le ((S m)*(S m2))). -apply (nat_case ((S m)*(S m2))).apply le_n. -intro.apply le_n. -intros. -generalize in match (mod_cr_pair (S m) (S m2) a b H1 H2 H). -intro.elim H3. -apply H4. -intros. -generalize in match (mod_cr_pair (S m) (S m2) a b H1 H2 H). -intro.elim H3. -apply H5. -intros. -generalize in match (mod_cr_pair (S m) (S m2) a b H1 H2 H). -intro.elim H3. -apply eqb_elim. -intro. -rewrite > eq_to_eqb_true. -rewrite > eq_to_eqb_true. -reflexivity. -rewrite < H4. -rewrite > sym_gcd. -rewrite > gcd_mod. -apply (gcd_times_SO_to_gcd_SO ? ? (S m2)). -unfold lt.apply le_S_S.apply le_O_n. -unfold lt.apply le_S_S.apply le_O_n. -assumption. -unfold lt.apply le_S_S.apply le_O_n. -rewrite < H5. -rewrite > sym_gcd. -rewrite > gcd_mod. -apply (gcd_times_SO_to_gcd_SO ? ? (S m)). -unfold lt.apply le_S_S.apply le_O_n. -unfold lt.apply le_S_S.apply le_O_n. -rewrite > sym_times. -assumption. -unfold lt.apply le_S_S.apply le_O_n. -intro. -apply eqb_elim. -intro.apply eqb_elim. -intro.apply False_ind. -apply H6. -apply eq_gcd_times_SO. -unfold lt.apply le_S_S.apply le_O_n. -unfold lt.apply le_S_S.apply le_O_n. -rewrite < gcd_mod. -rewrite > H4. -rewrite > sym_gcd.assumption. -unfold lt.apply le_S_S.apply le_O_n. -rewrite < gcd_mod. -rewrite > H5. -rewrite > sym_gcd.assumption. -unfold lt.apply le_S_S.apply le_O_n. -intro.reflexivity. -intro.reflexivity. -qed. \ No newline at end of file diff --git a/helm/matita/matita.conf.xml.sample.in b/helm/matita/matita.conf.xml.sample.in deleted file mode 100644 index b932b7ca9..000000000 --- a/helm/matita/matita.conf.xml.sample.in +++ /dev/null @@ -1,35 +0,0 @@ - - -

- ~ - - -
-
- true - true - cic:/matita/ - $(user.home)/.matita - $(user.name) - - false -
-
- - mowgli.cs.unibo.it - helm - matita -
-
- $(user.home)/.matita/getter/cache - /projects/helm/xml/dtd - - cic:/ - file:///projects/helm/library/coq_contribs/ - - - cic:/matita/ - file://$(user.home)/.matita/xml/matita/ - -
- diff --git a/helm/matita/matita.glade b/helm/matita/matita.glade deleted file mode 100644 index 6ddd786b9..000000000 --- a/helm/matita/matita.glade +++ /dev/null @@ -1,3944 +0,0 @@ - - - - - - - True - Cic browser - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - False - 500 - 500 - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_NORMAL - GDK_GRAVITY_NORTH_WEST - True - - - - True - True - False - - - - True - False - 0 - - - - True - 0 - 0 - GTK_SHADOW_NONE - - - - True - False - 0 - - - - True - True - GTK_RELIEF_NONE - True - - - - True - gtk-new - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NONE - True - - - - True - gtk-go-back - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NONE - True - - - - True - gtk-go-forward - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - - True - refresh - True - True - GTK_RELIEF_NONE - True - - - - True - gtk-refresh - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - - True - home - True - True - GTK_RELIEF_NONE - True - - - - True - gtk-home - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - - True - gtk-jump-to - 2 - 0.5 - 0.5 - 0 - 0 - - - 3 - False - False - - - - - - True - False - 0 - - - - - - - 0 - True - True - - - - - - - 0 - False - True - - - - - - 3 - True - False - 6 - - - - True - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - - True - True - True - True - 0 - - True - * - False - - - 0 - True - True - - - - - - True - False - 0 - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 0 - 0 - - - - - - - 0 - False - False - - - - - 0 - False - True - - - - - 0 - False - True - - - - - - True - True - True - True - GTK_POS_TOP - False - False - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - - - - False - True - - - - - - True - MathView - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - False - False - True - False - False - False - - - - - False - True - - - - - - True - WhelpResults - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - True - 0.5 - 0.5 - 0 - 0 - - - False - True - - - - - - True - WhelpEasterEgg - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - 0 - True - True - - - - - - - - - - DUMMY - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER - True - False - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - DUMMY - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - - - True - DUMMY - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - DUMMY - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - - - - - - - 10 - Select File - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER - True - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - True - - - - True - True - True - GTK_RELIEF_NORMAL - True - - - - - - True - True - True - GTK_RELIEF_NORMAL - True - - - - - - 350 - 250 - title - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - True - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NORMAL - True - -11 - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - some informative message here ... - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - False - False - True - False - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - Matita - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_NORMAL - GDK_GRAVITY_NORTH_WEST - True - - - - True - True - False - - - - True - False - 0 - - - - True - GTK_SHADOW_OUT - GTK_POS_LEFT - GTK_POS_TOP - - - - True - - - - True - _File - True - - - - - - - True - _New - True - - - - - True - gtk-new - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Open... - True - - - - - True - gtk-open - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Save - True - - - - - True - gtk-save - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - Save _As ... - True - - - - - True - gtk-save-as - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Developments... - True - - - - - True - gtk-execute - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - - - - - - True - _Quit - True - - - - - True - gtk-quit - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - - - - - True - _Edit - True - - - - - - - True - False - _Undo - True - - - - - True - gtk-undo - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - False - _Redo - True - - - - - True - gtk-redo - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - - - - - - True - Cu_t - True - - - - - True - gtk-cut - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Copy - True - - - - - True - gtk-copy - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Paste - True - - - - - True - gtk-paste - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Delete - True - - - - True - gtk-delete - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - - - - - - True - Select _All - True - - - - - - True - - - - - - True - _Find & Replace ... - True - - - - - True - gtk-find-and-replace - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - - - - - - True - Next ligature - True - - - - - - - True - Edit with E_xternal Editor - True - - - - - - - - - - True - _Script - True - - - - - - - True - Execute 1 phrase - True - - - - - - - True - Retract 1 phrase - True - - - - - - - True - - - - - - True - Execute all - True - - - - - - - True - Restart - True - - - - - - - True - - - - - - True - Execute until cursor - True - - - - - - - - - - - True - _View - True - - - - - - - True - Show _Tactics Bar - True - True - - - - - - - True - New Cic _Browser - True - - - - - - - True - - - - - - True - _Fullscreen - True - False - - - - - - - True - - - - - - True - Zoom _In - True - - - - - - True - gtk-zoom-in - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - Zoom _Out - True - - - - - - True - gtk-zoom-out - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Normal Size - True - - - - - True - gtk-zoom-100 - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - - - - - True - _Debug - True - - - - - - - True - - - - - - - - - - True - _Help - True - - - - - - - True - _About - True - - - - True - gtk-about - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - - - - - - 0 - False - False - - - - - - True - False - 0 - - - - True - True - - - - True - False - 0 - - - - True - GTK_SHADOW_OUT - GTK_POS_TOP - GTK_POS_TOP - - - - True - 17 - 2 - False - 4 - 0 - - - - True - Apply - True - apply - True - GTK_RELIEF_NORMAL - True - - - 1 - 2 - 0 - 1 - fill - - - - - - - True - Intros - True - intro - True - GTK_RELIEF_NORMAL - True - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - Exact - True - exact - True - GTK_RELIEF_NORMAL - True - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - Elim - True - elim - True - GTK_RELIEF_NORMAL - True - - - 0 - 1 - 4 - 5 - fill - - - - - - - True - Reflexivity - True - refl - True - GTK_RELIEF_NORMAL - True - - - 0 - 1 - 8 - 9 - fill - - - - - - - True - Symmetry - True - sym - True - GTK_RELIEF_NORMAL - True - - - 1 - 2 - 8 - 9 - fill - - - - - - - True - Transitivity - True - trans - True - GTK_RELIEF_NORMAL - True - - - 0 - 1 - 9 - 10 - fill - - - - - - - True - Simplify - True - simpl - True - GTK_RELIEF_NORMAL - True - - - 0 - 1 - 11 - 12 - fill - - - - - - - True - Reduce - True - red - True - GTK_RELIEF_NORMAL - True - - - 1 - 2 - 11 - 12 - fill - - - - - - - True - Whd - True - whd - True - GTK_RELIEF_NORMAL - True - - - 0 - 1 - 12 - 13 - fill - - - - - - - True - Assumption - True - assum - True - GTK_RELIEF_NORMAL - True - - - 0 - 1 - 14 - 15 - fill - - - - - - - True - Auto - True - auto - True - GTK_RELIEF_NORMAL - True - - - 1 - 2 - 14 - 15 - fill - - - - - - - True - Cut - True - cut - True - GTK_RELIEF_NORMAL - True - - - 0 - 1 - 16 - 17 - fill - - - - - - - True - Replace - True - repl - True - GTK_RELIEF_NORMAL - True - - - 1 - 2 - 16 - 17 - fill - - - - - - - True - ElimType - True - elimTy - True - GTK_RELIEF_NORMAL - True - - - 1 - 2 - 4 - 5 - fill - - - - - - - True - True - 0 - - - - True - Right - True - R - True - GTK_RELIEF_NORMAL - True - - - 0 - True - True - - - - - - True - Exists - True - ∃ - True - GTK_RELIEF_NORMAL - True - - - 0 - True - True - - - - - 1 - 2 - 6 - 7 - fill - fill - - - - - - True - True - 0 - - - - True - Split - True - ∧ - True - GTK_RELIEF_NORMAL - True - - - 0 - True - True - - - - - - True - Left - True - L - True - GTK_RELIEF_NORMAL - True - - - 0 - True - True - - - - - 0 - 1 - 6 - 7 - fill - fill - - - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 0 - 0 - - - - - - - 0 - 1 - 1 - 2 - fill - - - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 0 - 0 - - - - - - - 0 - 1 - 3 - 4 - fill - - - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 0 - 0 - - - - - - - 0 - 1 - 5 - 6 - fill - - - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 0 - 0 - - - - - - - 0 - 1 - 7 - 8 - fill - - - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 0 - 0 - - - - - - - 0 - 1 - 10 - 11 - fill - - - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 0 - 0 - - - - - - - 0 - 1 - 13 - 14 - fill - - - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 0 - 0 - - - - - - - 0 - 1 - 15 - 16 - fill - - - - - - - 0 - False - True - - - - - - 400 - True - False - 0 - - - - True - GTK_ORIENTATION_HORIZONTAL - GTK_TOOLBAR_BOTH - True - True - - - - True - True - True - False - - - - True - Restart - True - GTK_RELIEF_NONE - True - - - - True - gtk-goto-top - 4 - 0.5 - 0.5 - 0 - 0 - - - - - - - False - False - - - - - - True - True - True - False - - - - True - Retract 1 phrase - True - GTK_RELIEF_NONE - True - - - - True - gtk-go-up - 4 - 0.5 - 0.5 - 0 - 0 - - - - - - - False - False - - - - - - True - True - True - False - - - - True - Execute until point - True - GTK_RELIEF_NONE - True - - - - True - gtk-jump-to - 4 - 0.5 - 0.5 - 0 - 0 - - - - - - - False - False - - - - - - True - True - True - False - - - - True - Execute 1 phrase - True - GTK_RELIEF_NONE - True - - - - True - gtk-go-down - 4 - 0.5 - 0.5 - 0 - 0 - - - - - - - False - False - - - - - - True - True - True - False - - - - True - Execute all - True - GTK_RELIEF_NONE - True - - - - True - gtk-goto-bottom - 4 - 0.5 - 0.5 - 0 - 0 - - - - - - - False - False - - - - - 0 - False - False - - - - - - True - True - True - True - GTK_POS_BOTTOM - False - False - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - - - - False - True - - - - - - True - script - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - True - True - False - False - False - True - False - False - False - - - - - False - True - - - - - - True - outline - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - 0 - True - True - - - - - 0 - True - True - - - - - True - False - - - - - - 250 - 500 - True - True - 380 - - - - True - True - True - True - GTK_POS_TOP - False - False - - - True - False - - - - - - True - False - 0 - - - - True - True - GTK_POLICY_NEVER - GTK_POLICY_ALWAYS - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - False - True - GTK_JUSTIFY_LEFT - GTK_WRAP_CHAR - False - 0 - 0 - 0 - 0 - 0 - 0 - - - - - - 0 - True - True - - - - - True - True - - - - - True - True - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - True - False - 0 - - - - True - False - - - 0 - True - True - - - - - - True - False - True - GTK_POS_TOP - False - False - - - - True - 0.5 - 0.5 - 0 - 0 - - - False - True - - - - - - True - label14 - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - True - 0.5 - 0.5 - 0 - 0 - - - False - True - - - - - - True - label15 - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - True - 0.5 - 0.5 - 0 - 0 - - - False - True - - - - - - True - label16 - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - 0 - False - True - - - - - 0 - False - False - - - - - - - - - - DUMMY - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - DUMMY - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - False - True - GTK_JUSTIFY_LEFT - GTK_WRAP_NONE - True - 0 - 0 - 0 - 0 - 0 - 0 - - - - - - 0 - True - True - - - - - - - - 280 - Uri choice - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER - True - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - True - - - - True - False - 4 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - True - True - True - GTK_RELIEF_NORMAL - True - 0 - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-index - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - Try _Selected - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - - - - - - - True - False - True - True - Try Constants - True - GTK_RELIEF_NORMAL - True - 0 - - - - - - True - True - gtk-copy - True - GTK_RELIEF_NORMAL - True - 0 - - - - - - True - True - True - GTK_RELIEF_NORMAL - True - 0 - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-ok - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - bla bla bla - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 3 - - - - True - some informative message here ... - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 400 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - True - True - False - False - False - True - False - False - False - - - - - 0 - True - True - - - - - - True - False - 0 - - - - True - URI: - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - True - True - 0 - - True - * - False - - - 0 - True - True - - - - - 0 - False - True - - - - - 0 - True - True - - - - - - - - 5 - Find & Replace - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_MOUSE - False - False - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - - - - True - 3 - 2 - False - 5 - 0 - - - - True - Find: - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - Replace with: - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - True - True - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 0 - 1 - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 1 - 2 - - - - - - - True - False - 5 - - - - True - False - 0 - - - - - - - - - - - 0 - True - True - - - - - - True - True - gtk-find - True - GTK_RELIEF_NORMAL - True - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-find-and-replace - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - _Replace - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - - - - 0 - False - False - - - - - - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - - - 0 - False - False - - - - - 0 - 2 - 2 - 3 - 5 - - - - - - - - Create development - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ALWAYS - True - False - False - True - False - False - GDK_WINDOW_TYPE_HINT_UTILITY - GDK_GRAVITY_NORTH_WEST - True - - - - True - False - 0 - - - - 3 - True - 2 - 3 - False - 5 - 5 - - - - True - Name - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - Root directory - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 0 - 1 - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 1 - 2 - - - - - - - True - True - ... - True - GTK_RELIEF_NORMAL - True - - - 2 - 3 - 1 - 2 - fill - - - - - - 0 - False - True - - - - - - True - - - 2 - False - True - - - - - - 3 - True - False - 5 - - - - True - False - 0 - - - - - - - - - - - 0 - True - True - - - - - - True - True - gtk-add - True - GTK_RELIEF_NORMAL - True - - - 0 - False - False - - - - - - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - - - 0 - False - False - - - - - 0 - False - True - - - - - - - - Developments - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER - False - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_NORMAL - GDK_GRAVITY_NORTH_WEST - True - - - - True - False - 0 - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - False - False - True - False - False - False - - - - - 0 - True - True - - - - - - True - - - 2 - False - True - - - - - - 3 - True - False - 4 - - - - True - False - 0 - - - - - - - - - - - 0 - True - True - - - - - - True - True - gtk-new - True - GTK_RELIEF_NORMAL - True - - - 0 - False - False - - - - - - True - True - gtk-delete - True - GTK_RELIEF_NORMAL - True - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-execute - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - _Build - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-clear - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - C_lean - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - - - - 0 - False - False - - - - - - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - - - 0 - False - False - - - - - 0 - False - True - - - - - - - diff --git a/helm/matita/matita.gtkrc b/helm/matita/matita.gtkrc deleted file mode 100644 index 91081c311..000000000 --- a/helm/matita/matita.gtkrc +++ /dev/null @@ -1,80 +0,0 @@ -# Based on /usr/share/themes/Emacs/gtk-2.0-key/, -# modified by Zack for matita - -# -# A keybinding set implementing emacs-like keybindings -# - -# -# Bindings for GtkTextView and GtkEntry -# -binding "gtk-emacs-text-entry" -{ - bind "b" { "move-cursor" (logical-positions, -1, 0) } - bind "b" { "move-cursor" (logical-positions, -1, 1) } - bind "f" { "move-cursor" (logical-positions, 1, 0) } - bind "f" { "move-cursor" (logical-positions, 1, 1) } - - bind "b" { "move-cursor" (words, -1, 0) } - bind "b" { "move-cursor" (words, -1, 1) } - bind "f" { "move-cursor" (words, 1, 0) } - bind "f" { "move-cursor" (words, 1, 1) } - - bind "a" { "move-cursor" (paragraph-ends, -1, 0) } - bind "a" { "move-cursor" (paragraph-ends, -1, 1) } - bind "e" { "move-cursor" (paragraph-ends, 1, 0) } - bind "e" { "move-cursor" (paragraph-ends, 1, 1) } - - bind "w" { "cut-clipboard" () } - bind "y" { "paste-clipboard" () } - - bind "d" { "delete-from-cursor" (chars, 1) } - bind "d" { "delete-from-cursor" (word-ends, 1) } - bind "k" { "delete-from-cursor" (paragraph-ends, 1) } - bind "backslash" { "delete-from-cursor" (whitespace, 1) } - - bind "space" { "delete-from-cursor" (whitespace, 1) - "insert-at-cursor" (" ") } - bind "KP_Space" { "delete-from-cursor" (whitespace, 1) - "insert-at-cursor" (" ") } - - # - # Some non-Emacs keybindings people are attached to - # - bind "u" { - "move-cursor" (paragraph-ends, -1, 0) - "delete-from-cursor" (paragraph-ends, 1) - } - bind "h" { "delete-from-cursor" (chars, -1) } - bind "w" { "delete-from-cursor" (word-ends, -1) } -} - -# -# Bindings for GtkTextView -# -binding "gtk-emacs-text-view" -{ -# bind "p" { "move-cursor" (display-lines, -1, 0) } - bind "p" { "move-cursor" (display-lines, -1, 1) } -# bind "n" { "move-cursor" (display-lines, 1, 0) } - bind "n" { "move-cursor" (display-lines, 1, 1) } - - bind "space" { "set-anchor" () } - bind "KP_Space" { "set-anchor" () } -} - -# -# Bindings for GtkTreeView -# -binding "gtk-emacs-tree-view" -{ - bind "s" { "start-interactive-search" () } - bind "f" { "move-cursor" (logical-positions, 1) } - bind "b" { "move-cursor" (logical-positions, -1) } -} - -class "GtkEntry" binding "gtk-emacs-text-entry" -class "GtkTextView" binding "gtk-emacs-text-entry" -class "GtkTextView" binding "gtk-emacs-text-view" -class "GtkTreeView" binding "gtk-emacs-tree-view" - diff --git a/helm/matita/matita.lang b/helm/matita/matita.lang deleted file mode 100644 index e99672a35..000000000 --- a/helm/matita/matita.lang +++ /dev/null @@ -1,184 +0,0 @@ - - - - - \ - - - \(\* - \*\) - - - - \(\*\* - \*\*\) - - - - theorem - definition - lemma - fact - remark - variant - - - - alias - and - as - coercion - coinductive - corec - default - for - include - inductive - in - interpretation - let - match - names - notation - on - qed - rec - record - return - to - using - with - - - - \[ - - - \| - - - \] - - - \{ - - - \} - - - @ - - - \$ - - - - Set - Prop - Type - - - - absurd - apply - assumption - auto - paramodulation - clear - clearbody - change - compare - constructor - contradiction - cut - decide equality - decompose - discriminate - elim - elimType - exact - exists - fail - fold - fourier - fwd - generalize - goal - id - injection - intro - intros - lapply - left - letin - normalize - reduce - reflexivity - replace - rewrite - ring - right - symmetry - simplify - split - to - transitivity - unfold - whd - - - - try - solve - do - repeat - first - - - - - print - check - hint - quit - set - - - - elim - hint - instance - locate - match - - - - def - forall - lambda - to - exists - Rightarrow - Assign - land - lor - subst - vdash - iforall - iexists - - - - " - " - - - diff --git a/helm/matita/matita.ma.templ b/helm/matita/matita.ma.templ deleted file mode 100644 index ec1bc8006..000000000 --- a/helm/matita/matita.ma.templ +++ /dev/null @@ -1,16 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/test/". - diff --git a/helm/matita/matita.ml b/helm/matita/matita.ml deleted file mode 100644 index 11ae70642..000000000 --- a/helm/matita/matita.ml +++ /dev/null @@ -1,208 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -open MatitaGtkMisc -open MatitaTypes - -(** {2 Initialization} *) - -let _ = MatitaInit.initialize_all () -let _ = Paramodulation.Saturation.init () (* ALB to link paramodulation *) - -(** {2 GUI callbacks} *) - -let gui = MatitaGui.instance () - -let script = - let s = - MatitaScript.script - ~source_view:gui#sourceView - ~init:(Lazy.force MatitaEngine.initial_status) - ~mathviewer:(MatitaMathView.mathViewer ()) - ~urichooser:(fun uris -> - try - MatitaGui.interactive_uri_choice ~selection_mode:`SINGLE - ~title:"Matita: URI chooser" - ~msg:"Select the URI" ~hide_uri_entry:true - ~hide_try:true ~ok_label:"_Apply" ~ok_action:`SELECT - ~copy_cb:(fun s -> gui#sourceView#buffer#insert ("\n"^s^"\n")) - () ~id:"boh?" uris - with MatitaTypes.Cancel -> []) - ~set_star:gui#setStar - ~ask_confirmation: - (fun ~title ~message -> - MatitaGtkMisc.ask_confirmation ~title ~message - ~parent:gui#main#toplevel ()) - ~develcreator:gui#createDevelopment - () - in - gui#sourceView#source_buffer#begin_not_undoable_action (); - s#reset (); - s#template (); - gui#sourceView#source_buffer#end_not_undoable_action (); - s - - (* math viewers *) -let _ = - let cic_math_view = MatitaMathView.cicMathView_instance () in - let sequents_viewer = MatitaMathView.sequentsViewer_instance () in - sequents_viewer#load_logo; - cic_math_view#set_href_callback - (Some (fun uri -> (MatitaMathView.cicBrowser ())#load - (`Uri (UriManager.uri_of_string uri)))); - let browser_observer _ = MatitaMathView.refresh_all_browsers () in - let sequents_observer status = - sequents_viewer#reset; - match status.proof_status with - | Incomplete_proof ({ stack = stack } as incomplete_proof) -> - sequents_viewer#load_sequents incomplete_proof; - (try - script#setGoal (Continuationals.Stack.find_goal stack); - sequents_viewer#goto_sequent script#goal - with Failure _ -> script#setGoal ~-1); - | Proof proof -> sequents_viewer#load_logo_with_qed - | No_proof -> sequents_viewer#load_logo - | Intermediate _ -> assert false (* only the engine may be in this state *) - in - script#addObserver sequents_observer; - script#addObserver browser_observer - - (** {{{ Debugging *) -let _ = - if BuildTimeConf.debug then begin - gui#main#debugMenu#misc#show (); - let addDebugItem ~label callback = - let item = - GMenu.menu_item ~packing:gui#main#debugMenu_menu#append ~label () - in - ignore (item#connect#activate callback) - in - addDebugItem "dump environment to \"env.dump\"" (fun _ -> - let oc = open_out "env.dump" in - CicEnvironment.dump_to_channel oc; - close_out oc); - addDebugItem "load environment from \"env.dump\"" (fun _ -> - let ic = open_in "env.dump" in - CicEnvironment.restore_from_channel ic; - close_in ic); - addDebugItem "dump universes" (fun _ -> - List.iter (fun (u,_,g) -> - prerr_endline (UriManager.string_of_uri u); - CicUniv.print_ugraph g) (CicEnvironment.list_obj ()) - ); - addDebugItem "dump environment content" (fun _ -> - List.iter (fun (u,_,_) -> - prerr_endline (UriManager.string_of_uri u)) - (CicEnvironment.list_obj ())); - addDebugItem "print selections" (fun () -> - let cicMathView = MatitaMathView.cicMathView_instance () in - List.iter MatitaLog.debug (cicMathView#string_of_selections)); - addDebugItem "dump script status" script#dump; - addDebugItem "dump configuration file to ./foo.conf.xml" (fun _ -> - Helm_registry.save_to "./foo.conf.xml"); - addDebugItem "dump metasenv" - (fun _ -> - if script#onGoingProof () then - MatitaLog.debug (CicMetaSubst.ppmetasenv [] script#proofMetasenv)); - addDebugItem "dump coercions Db" (fun _ -> - List.iter - (fun (s,t,u) -> - MatitaLog.debug - (UriManager.name_of_uri u ^ ":" - ^ CoercDb.name_of_carr s ^ " -> " ^ CoercDb.name_of_carr t)) - (CoercDb.to_list ())); - addDebugItem "print top-level grammar entries" - CicNotationParser.print_l2_pattern; - addDebugItem "dump moo to stderr" (fun _ -> - let status = (MatitaScript.current ())#status in - let moo, metadata = status.moo_content_rev in - List.iter (fun cmd -> prerr_endline - (GrafiteAstPp.pp_command cmd)) (List.rev moo); - List.iter (fun m -> prerr_endline - (GrafiteAstPp.pp_metadata m)) metadata); - addDebugItem "print metasenv goals and stack to stderr" - (fun _ -> - prerr_endline ("metasenv goals: " ^ String.concat " " - (List.map (fun (g, _, _) -> string_of_int g) - (MatitaScript.current ())#proofMetasenv)); - prerr_endline ("stack: " ^ Continuationals.Stack.pp - (MatitaTypes.get_stack (MatitaScript.current ())#status))); -(* addDebugItem "ask record choice" - (fun _ -> - MatitaLog.debug (string_of_int - (MatitaGtkMisc.ask_record_choice ~gui ~title:"title" ~message:"msg" - ~fields:["a"; "b"; "c"] - ~records:[ - ["0"; "0"; "0"]; ["0"; "0"; "1"]; ["0"; "1"; "0"]; ["0"; "1"; "1"]; - ["1"; "0"; "0"]; ["1"; "0"; "1"]; ["1"; "1"; "0"]; ["1"; "1"; "1"]] - ()))); *) - addDebugItem "rotate light bulbs" - (fun _ -> - let nb = gui#main#hintNotebook in - nb#goto_page ((nb#current_page + 1) mod 3)); - addDebugItem "print runtime dir" - (fun _ -> - prerr_endline BuildTimeConf.runtime_base_dir); - addDebugItem "disable all (pretty printing) notations" - (fun _ -> CicNotation.set_active_notations []); - addDebugItem "enable all (pretty printing) notations" - (fun _ -> - CicNotation.set_active_notations - (List.map fst (CicNotation.get_all_notations ()))); - end - (** Debugging }}} *) - - (** {2 Command line parsing} *) - -let set_matita_mode () = - let matita_mode = - if Filename.basename Sys.argv.(0) = "cicbrowser" - then "cicbrowser" - else "matita" - in - Helm_registry.set "matita.mode" matita_mode - - (** {2 Main} *) - -let _ = - set_matita_mode (); - at_exit (fun () -> print_endline "\nThanks for using Matita!\n"); - Sys.catch_break true; - let args = Helm_registry.get_list Helm_registry.string "matita.args" in - if Helm_registry.get "matita.mode" = "cicbrowser" then (* cicbrowser *) - let browser = MatitaMathView.cicBrowser () in - let uri = match args with [] -> "cic:/" | _ -> String.concat " " args in - browser#loadInput uri - else begin (* matita *) - (try gui#loadScript (List.hd args) with Failure _ -> ()); - gui#main#mainWin#show (); - end; - try - GtkThread.main () - with Sys.Break -> () - -(* vim:set foldmethod=marker: *) diff --git a/helm/matita/matita.txt b/helm/matita/matita.txt deleted file mode 100644 index e660a763f..000000000 --- a/helm/matita/matita.txt +++ /dev/null @@ -1,411 +0,0 @@ -TODO - NUCLEO - - i files di coq non hanno gli universi e hanno Type senza l'id numerico - per ora vengono considerati come con grafo vuoto... - - limit_mul non compila (usare test_library per testare l'intera libreria) - (15:06:07) Zack: http://www.cs.unibo.it/cgi-bin/viewcvs.cgi/helm/gTopLevel/testlibrary.ml?rev=1.20&hideattic=0&content-type=text/vnd.viewcvs-markup - - PREOCCUPANTE: per - inductive i : Prop := K : True (*-> i*) -> i. - noi generiamo i_rec e i_rect con e senza il commento qui sopra; Coq NON - genera i_rec e i_rect quando c'e' un argomento ricorsivo. - (CSC: manca vincolo aggiuntivo non dipendente dalla sorta per il caso in - questione) -> Gares - - bug universi e tipi induttivi (anche in cicElim.ml!!!) - - Set predicativo - - - TATTICHE - - generazione di principi di co-induzione per co-induttivi - - ARGOMENTI IMPLICIT: li vogliamo? come? come disabilitarli localmente? - - in generale: invece di spiegare gli errori nel momento in cui si sollevano - le eccezioni, farlo quando vengono presentate all'utente. Motivo: il calcolo - del messaggio di errore puo' essere estremamente costoso (e' gia' successo!) - quando poi il messaggio non serve!!! - - verificare il comportamento di tutte le tattiche con il parsing lazy -> CSC - - file elim.ma: vengono creati lambda dummy e referenziati nell'outtype di - un case - - tattiche e fallimenti: una tattica che non progredisce dovrebbe fallire - - comportamento di tutte le tattiche nei confronti dei let-in - - elim con pattern - - assiomi (manca sintassi concreta e AST). - - Dare errore significativo al posto di NotWellTypedInterpreation -> CSC - - elim_intros_simpl e rewrite_simpl: ora non viene usata dal - ^^^^^^ ^^^^^^ - toplevel la variante che semplifica. Capire quali sono i problemi - e/o cosa fare delle varianti con semplificazione. - (con sintassi concreta alla \section*, analogamente cut e similia che fanno - intros... ) -> CSC - - eta_expand non usata da nessuno? (ask Andrea?) - - eliminare eta_fix? (aspettare notazione) (correlato con sopra?) - - bug di ferruccio: fare un refresh dei nomi dopo l'applicazione - di una tattica. Di quali nomi fare refresh? (Andrea) di quelli - veramente ambigui, ovvero dell'ultimo binder tale che sotto di - esso un nome viene usato in maniera ambigua. Esempio: - \lambda x. \lambda x. (x x) (dove una x e' -2) ==> fare refresh - \lambda x. \lambda x. (x x) (dove entrambe sono -1) ==> non fare refresh - Capita quando un tipo dall'environment (e.g. \lambda x.T) - viene inserito in un contesto (e.g. x:nat) dove le variabili - sono gia' state legate in precedenza. - - supportare l'apertura di piu' script contemporaneamente in tab/finestre - diversi/e - - - GUI GRAFICA - - keybinding globali: CTRL-{su,giu,...} devono fungere anche quando altre - finestre hanno il focus (e.g. cicBrowser). C'e' gia' da qualche parte il - codice che aggiunge i keybinding a tutte le eventBox, e' da ripristinare - - la finestrella per i development ha i pulsanti non sensitive. - (* non capisco cosa vuol dire: Gares *) - - l'entry "Save" da menu non e' context sensitive (ti fa salvare anche - quando il file non e' stato modificato) - - finire e rendere piu' compliant (e.g. tags gestiti in maniera anomala) - il Cic Browser - - non semplificherebbe le cose fare in modo che matitaScript sia un widget - (cosi' come lo e' matitaMathView) che eredita da GtkSourceView e mantiene - internamente lo status di matita etc. Appositi segnali permetterebbero di - evitare tutte le chiamate al singleton #instance di matitaScript, che - verrebbe creato dentro a matitaGui (o forse meglio dentro a matita e passato - a matitaGui). Si semplificherebbe forse anche la gestione di script - multipli? Forse no, perche' comunque ci puo' essere sempre solamente uno - ed un solo matitaScript (da spostare da un tab a un altro). - - la barra di stato: c'e' ma non funziona? - - - menu contestuale (tasto dx) nel sequent viewer - - feedback su hyperlink nei sequenti e nel browser: rendere visibili gli - hyperlink (cursore a "manina"? hyperlink evidenziati?). La maction che - collassa la prova e' fastidiosa: la prova si chiude se non si clicca - correttamente su un hyperlink (anche tooltip sui bottoni) - - - che farne della palette delle tattiche? - - script outline -> Zack - - riattaccare hbugs (brrr...) -> Zack - - GUI LOGICA - - generazione di dipendenze verso .moo di Coq (non esistenti!) - - proposta di Zack: NON calcolare (ed esportare) per default gli inner-types; - aggiungere un'opzione per questo a matitac (riduce drasticamente il tempo - di qed) - - la funzione alias_diff e' lentissima (anche se CSC l'ha accellerata di - un fattore 3x) e puo' essere evitata: chi vuole aggiungere alias (la - disambiguazione, il comando "alias" e l'add_obj) deve indicare - esplicitamente quali sono i nuovi alias, evitando cosi' la diff per - scoprirlo - - matitac deve fallire quando matita vuole aggiungere un alias! - - default equality e famiglia non e' undo-aware - - nuovo pretty-printer testuale: non stampa usando la notazione - (e.g. guardare output di matitac) - - fattorizzare codice fra MatitaEngine e DisambiguatePp (dove, fra l'altro, - ora io (=CSC) ho messo anche un parser!!!) - - bug "Warn: baseuri cic:/matita/higher_order_defs/ordering is not empty" - mentre si compila Z/times.ma. Il bug sembra essere transiente. - - in MatitaEngine unificare/rimuovere eval_string, eval_from_stream e - eval_from_stream_greedy - - matitamake foo/a.ma non funziona; bisogna chiamarlo con - matitamake /x/y/z/foo/a.ma - - notazione -> Luca e Zack - - non chiudere transitivamente i moo ?? - - DEMONI E ALTRO - -DONE -- matitaclean all (non troglie i moo?) -> Gares -- matitaclean (e famiglia) non cancellano le directory vuote - (e per giunta il cicbrowser le mostra :-) -> Gares -- missing feature unification: applicazione di teoremi (~A) quando il goal - e' False o di teoremi $symmetric R P$ quando il goal e' $P(x,y)$. - Fare un passo di delta[-beta?][-iota-etc.] quando da una parte c'e' una - testa rigida (che si espande in una freccia)? Ma il punto e' che il bug - non e' di unificazione, bensi' nella fase di preparazione del goal per - la apply -> CSC, Gares -- Guardare il commento - (*CSC: this code is suspect and/or bugged: we try first without reduction - and then using whd. However, the saturate_term always tries with full - reduction without delta. *) - in primitiveTactics.ml. Potrebbe essere causa di rallentamento della apply - oltre che di bug! -> CSC, Gares -- codice di inizializzazione di matita, matitac, matitatop replicato e non - in sync -> Gares -- tutte gli script che parsano (e.g. matitaclean, matitadep) debbono - processare la notazione per evitare errori di parsing (visibili ora - che e' stata committata la contrib list)! -> Gares -- E' possibile fare "Build" senza selezionare nulla, ottenendo un - assert false -> Gares -- disambiguazione: attualmente io (CSC) ho committato la versione di - disambiguate.ml che NON ricorda gli alias in caso di disambiguazione - univoca (senza scelte per l'utente). [ cercare commento "Experimental" ] - Il problema di questa soluzione e' che rallenta in maniera significativa - l'esecuzione degli script. DOMANDA: quanto costano le fasi di - fetch/decode/execute delle linee dello script? - Una possibile alternativa e' avere alias "soft": se la disambiguazione - fallisce gli alias soft vengono ripuliti e si riprova. - Altra soluzione (Gares): avere alias multipli e provare tutti gli alias - multipli. Da combinare con il "ritenta con istanze multiple in caso di - fallimento". - SOLUZIONE PENSATA CON ANDREA: 1. la interpretate aggiunge un alias - implicito; 2. gli alias vengono ricordati come nella soluzione originale - (e veloce); 3. se la disambiguazione fallisce, allora gli alias vengono - dimenticati (quali? tutti? tutti tranne quelli chiesti all'utente?) - e si ritenta; se fallisce ancora si generano - istanze differenti e si ritenta; 4. ritentare anche senza e poi con - coercions? oppure ordinare preferendo la soluzione che non ha introdotto - coercions?; 5. che fare se alla fine restano piu' scelte? se si mettono - gli alias nello script viene un paciugo, credo! in particolare quando - vengono usate n istanze -> Zack, CSC -- theorem t: True. elim O. ==> BOOM! unificazione di una testa flessibile con - True -> Gares -- parsing contestuale (tattiche replace, change e forse altre) - capire dove fare la select per avere i contesti in cui disambiguare gli - altri argomenti. -> Zack -- tattica unfold su rel a let-in bound variables: c'e' ancora un bug - aperto: "unfold x in H:..." la x passata alla unfold vive nel contesto - del goal e non in quello del pattern. Pertanto invece di cercare di - fare unfolding di x viene fatto unfolding di altro. - Soluzione: la funzione ProofEngineHelpers.select deve tornare una - funzione per rilocare i termini nel contesto giusto. - Esempio: - theorem t: let uno \def S O in uno + uno = S uno \to uno=uno. - intros. unfold uno in H. - NOTA: questo bug e' legato a quello di parsing in presenza di tattiche - con pattern, visto che in tal caso e' l'intero parsing a dover essere - fatto in un contesto differente. Risolvendo quel bug si risolve - automaticamente anche questo. - -> Zack -- Usare il cicbrowser per fare "Whelp instance": lui riscrive la barra - con la notazione alla Coq V7.0 che non riesce piu' a riparsare! -> Zack -- implementare inclusione file di configurazione (perche' ora tutti - i demoni scopiazzano venti righe per via del getter embedded :-( -> Zack -- simplify non debbono zeta-espandere i let-in -> CSC, Gares -- integrare nuova contrib ferruccio nel bench notturno e rilocarla in - contribs o qualcosa del genere -> CSC -- CRITICO: quando l'environment non e' trusted non compila la library di - matita!!! -> Gares, CSC -- bug di unsharing -> CSC -- CRITICO (trovato anche da Ferruccio): typechecking di - cic:/Coq/ring/Quote/index_eq_prop.con - asserzione del nucleo (applicazione senza argomenti). -> CSC -- verificare se tutte le query sono ora ottimizzate (usando il comando - explain) e usano gli indici in maniera ottimale; inoltre migliorare gli - indici sulle tabelle hits and count -> CSC -- ???????????? Perche'? - mowgli:~# du -s /var/lib/mysql/mowgli/ - 250696 /var/lib/mysql/mowgli/ - mowgli:~# du -s /var/lib/mysql/matita/ - 455096 /var/lib/mysql/matita/ -> CSC -- library/nat/primes.ma: ex_prime ci mette un secolo il db (binding) a fare - la Mysql.exec che ritorna una lista vuota di risultati. Investigare. - Anche peggio in library/nat/minimization/f_max_true. -> CSC -- integrare il famoso logo mancante (anche nell'About dialog) -> CSC -- invertibilita' dell'inserimento automatico di alias: quando si torna - su bisognerebbe tornare su di un passo e non fare undo degli alias - (Zack: nella history ci sono anche gli offset per sapere a che pezzo di - script uno stato appartiene) -> CSC -- bug di refresh del widget quando si avanza ("swap" tra la finestra dei - sequenti e la finestra dello script) -> CSC -- sensitiveness per goto begin/end/etc. (???) -> Gares -- cut&paste stile "X": rimane la parte blu e lockata! -> CSC -- highlight degli errori di parsing nello script -> CSC -- quando si fa una locate nel cicbrowser viene mangiato un pezzo di testo - dalla finestra principale!!! -> CSC -- sensitiveness per copy/paste/cut/delete nel menu Edit -> CSC -- fare "matita foo" (dove foo non esiste), cambiare qualcosa e uscire senza - salvare. In verita' foo e' stato scritto lo stesso! -> CSC -- matitaclean deve rimuovere anche i .moo; in alternativa il makefile - non deve basarsi sui .moo per decidere se qualcosa e' stato compilato o meno - -> CSC, Gares -- matitaclean all (o matitamake cleanall) dovrebbe radere al suolo la - directory .matita -> CSC, Gares -- icone standard per zoom-in/out/= e piu' aderenza alle Gnome Interface - Guidelines (e.g. about dialog) -> CSC -- salvare la parte di testo lockata dagli effetti di undo/redo con - (shift-)ctrl-Z e anche usando il menu che si apre con il tasto destro -> CSC -- fare in modo che il testo caricato inizialmente da matita non sia - undoable (usando i metodi begin/end_not_undoable_action di gtk_source_view) - -> Gares -- Implementare menu edit: cut/copy/undo/etc. -> CSC -- gestione dei path per include: il path deve essere assoluto? da decidere ... - ( -I ?? o chiedere a matitamake la root e farci una find? ) -> Gares -- freeze durante avanzamento -> Gares, CSC -- tornare indietro (verso il cursore) in matita dovrebbe essere O(1) e non un - Undo passo passo (sembra che il collo di bottiglia sia fare iterare su ogni - uri da togliere (accorpare almeno il lavoro sul db magari aiuta) -> Gares, CSC -- quando si sposta il punto di esecuzione dello script cambiare la parte di - script visibile nella finestra dello script -> Gares, CSC -- find & replace -> Gares -- Bug di cut&paste: se si fa cut&paste di testo lockato si ottiene testo - lockato! -> Gares -- Bug: non disambigua - inductive i (x:nat) : bool \to Prop \def K : bool \to (i x true) \to (i x false). - perche' non inserisce nat nel domain di disambiguazione. Deve esserci un bug - stupido da qualche parte -> CSC -- Bug vari nella generazione dei principi di eliminazione: - 1. generazione nomi (usa ref incrementata localmente) -> Andrea - 2. prodotti dipendenti come non-dipendenti (visibili eseguendo passo - passo il test inversion.ma) -> CSC, Gares - 3. usato trucco outtype non dipendenti per il case -> CSC, Gares -- controllo per script modificato o meno prima di uscire -> Gares -- LApply deve prendere in input gli identificatori che va a generare; - lascio a Ferruccio la scelta della sintassi concreta -> Ferruccio -- fare tornare a matitac -1 quando lo stato finale e' - diverso da No_proof, non eseguire comandi quando lo - stato e' diverso da No_proof -> CSC -- uri_of_term and term_of_uri: cambiare il tipo per far - tornare delle uri!!! -> CSC -- intro = intros 1 -> Gares -- timetravel (urimanager) -> Gares -- implementare macro in matitaScript.ml -> Gares -- history deve aggiornare anche la whelp bar -> Gares -- commenti exeguibili (forse devono essere una lista e non - un singolo executable e forse devono contenere anche Note - e non solo Executable) -> Gares -- spostare il codice di creazione delle tabelle da - MatitaDb, al momento quelle create da matita possono - andare out of sync con quelle create dai file .sql -> Gares -- tree update in background -> Gares -- update del getter in background -> Zack -- agganciare href_callback del sequent_viewer -> Zack -- shortcut varie per script handling -> Zack -- operazioni rimanenti su script (top, bottom, jump) -> Zack -- lighting-ls-getter in matita -> Gares -- riagganciare toolbar -> Zack -- evitare che n-mila tattiche Goal siano nello script - (una per ogni cambio di tab) -> Zack -- implementazione comandi rimanenti in matitaEngine.ml -> Gares -- sintassi per gli alias -> Gares -- implementazione script handling (sopra engine) -> Zack -- matitaSync all'indietro -> Gares -- riagganciare GUI -> Zack - -(**********************************************************************) - -comandi: - - interattivi (solo da gui) - - Macro/Comandi (check, print, hint, undo, locate, match) - potrebbero anche non avere sintassi concreta, del tipo che - check e' solo un bottone che apre una finetra in cui puoi - scrivere un termine o selezionarlo dalla prova corrente - - batch (sono gli unici che stanno nel .ma) - - Tattiche, theorem, alias (cambiano la prova) - - - MOUSE --------------------------------------------+ - gui (macro: hint) | SHELL - (disambiguatore) | - +-----------------+---------------+----------------------------------- - | matita (status) | | matitac - | (log) (sync) | but2log | fold ( fun s l -> engine l s) file - +-----------------+---------------+----------------------------------- - | lingua:/sintassi concreta non ambigua delle tattiche+Qed,Thm,alias/ - +---------------------------------------------------------- - | engine: TacticAst (cic) -> status -> status - | ma non usa il campo alias dello status ----------+---------------------------------------------------------- - ocaml --------------------------------------------------------------------- - - -engine: - - accetta solo linee non ambigue - - alias: - alias ident nat = "cic:/matita/gares/nat.ind#(1/1)". - alias number = (natural|real|positive|integer). - - - -matita: - - mantiene uno stack di stati - - mantiene un log sync con gli stati - - offre delle api per generare la sintassi concreta che puo' servire - alla gui (la gui fa una chiamata a funzione e matita genera "auto." - cosi' la sintassi la gui non la vede mai e la tratta al massimo come un - testo semplice e basta (insomma, metterei in matita il generatore di - sintassi concreta) but2log - - ha il controllo... ovvero anche la gui viene usata da matita, o per sapere - la prossima azione o per chidere di scegliere il termine tra una lista - - (stato :: tl) (log , (start,end) :: tl) - - +----------+ - | | - +----------+ - -gui: - - step - - choose - -stato: - - alias - - proof status option - - metadati relativi allo script per il sync - - settings "baseuri/url/" eccc - - - -alias - - sintassi concreta - -engine prende in input - - AST di Cic (tactic ast) - -sync: - - presi 2 stati fa il diff e lo somma/sottrae al DB - -(**********************************************************************) - -script handling -- ad ogni script sul quale l'utente sta lavorando corrispondono - - un modello (vedi sotto) - - un buffer di testo gtk + attributi (usati principalmente per distinguere la - parte di testo immodificabile da quella modificabile) - - una lista di observer che vengono notificati ad ogni cambiamento di stato -- un modello di script e' composto da: - - una lista di stringhe (inizialmente vuota) detta "statement list". Ogni - elemento della lista corrisponde ad uno statement (nel senso di - TacticAst.statement) gia' valutato dall'engine. La parte immodificabile del - buffer di testo corrisponde con le stringhe contenute nella lista - - una lista di stati (inizialmente contenente lo stato vuoto) detta "state - list". Si ha l'invariante che la lunghezza di tale lista e' uguale alla - lunghezza della statements list + 1. Lo stato i-esimo della lista di stati - e' lo stato di matita _prima_ dell'esecuzione dell i-esimo statement - - una stringa, detta "future text", corrispondente alla parte di testo dello - script non ancora valutata. L'ultimo stato della state list e' lo stato - corrente di matita -- relazione tra modello e buffer di testo gtk - - le modifiche al testo del buffer sono possibili solo nella parta non ancora - valutata. Ognuna di esse viene apportata _anche_ al future text - - invariante: e' sempre possibile riscrivere ("redraw") l'intero contenuto del - buffer di testo a partire dal modello, attributi compresi -- oggetto script - - metodi - - new: gtk_text_buffer -> script - - redraw: unit (* ridisegna il contenuto del buffer di testo *) - - advance: ?statement:string -> unit -> unit - (* valuta il primo statement del future text (usando eval_statement - (puo' fallire con una eccezione)), rimuove il testo corrispondente dal - future text, aggiunge alla statement list una entry per ogni statement - ritornato da eval_statement, aggiunge il nuovo stato alla state list, - invoka tutti gli observer - Se c'e' l'argomento opzionale statement, quello e' il testo che viene - passato ad eval_statement, se ha successo nessuna rimozione dal future - text viene effettuata *) - - retract: unit -> unit - (* sposta l'ultimo statement della statement list al future text, toglie - l'ultimo stato della state list, MatitaSync.time_travel - ~present:ultimo_stato ~past:stato_precedente *) - - private eval_statement: string -> MatitaTypes.status * string list - (* parsa lo statement - - se e' un Command o un Tactical (vedi TacticAst) invoca MatitaEngine - passando lo stato corrente - - se e' una Macro la gestisce (= tutte le Macro sono implementate qua) - Ritorna una lista di coppie . La proiezione sulla - prima componente rappresenta gli stati da aggiungere alla state list; - quella sulla seconda gli statement da aggiungere alla statement list. - *) - (* gestione degli observer *) - - add_observer: (MatitaTypes.status -> unit) -> observer_id - - remove_observer: observer_id -> unit - (* gestione del salvataggio *) - - save_to: string -> unit (* ridisegna su file *) - - load_from: string -> unit - (* retract fino allo stato zero, nuovo stato con future text pari al - contenuto del file passato *) - diff --git a/helm/matita/matitaDb.ml b/helm/matita/matitaDb.ml deleted file mode 100644 index e3c7041dd..000000000 --- a/helm/matita/matitaDb.ml +++ /dev/null @@ -1,166 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf ;; - -let instance = - let dbd = lazy ( - HMysql.quick_connect - ~host:(Helm_registry.get "db.host") - ~user:(Helm_registry.get "db.user") - ~database:(Helm_registry.get "db.database") - ()) - in - fun () -> Lazy.force dbd - - -let xpointer_RE = Pcre.regexp "#.*$" -let file_scheme_RE = Pcre.regexp "^file://" - -let clean_owner_environment () = - let dbd = instance () in - let owner = (Helm_registry.get "matita.owner") in - let obj_tbl = MetadataTypes.obj_tbl () in - let sort_tbl = MetadataTypes.sort_tbl () in - let rel_tbl = MetadataTypes.rel_tbl () in - let name_tbl = MetadataTypes.name_tbl () in - let count_tbl = MetadataTypes.count_tbl () in - let tbls = [ - (obj_tbl,`RefObj) ; (sort_tbl,`RefSort) ; (rel_tbl,`RefRel) ; - (name_tbl,`ObjectName) ; (count_tbl,`Count) ] - in - let statements = - (SqlStatements.drop_tables tbls) @ (SqlStatements.drop_indexes tbls) - in - let owned_uris = - try - MetadataDb.clean ~dbd - with Mysql.Error _ as exn -> - match HMysql.errno dbd with - | Mysql.No_such_table -> [] - | _ -> raise exn - in - List.iter - (fun uri -> - let uri = Pcre.replace ~rex:xpointer_RE ~templ:"" uri in - List.iter - (fun suffix -> - try - MatitaMisc.safe_remove (Http_getter.resolve (uri ^ suffix)) - with Http_getter_types.Key_not_found _ -> ()) - [""; ".body"; ".types"]) - owned_uris; - List.iter (fun statement -> - try - ignore (HMysql.exec dbd statement) - with Mysql.Error _ as exn -> - match HMysql.errno dbd with - | Mysql.Bad_table_error - | Mysql.No_such_index | Mysql.No_such_table -> () - | _ -> raise exn - ) statements; -;; - -let create_owner_environment () = - let dbd = instance () in - let obj_tbl = MetadataTypes.obj_tbl () in - let sort_tbl = MetadataTypes.sort_tbl () in - let rel_tbl = MetadataTypes.rel_tbl () in - let name_tbl = MetadataTypes.name_tbl () in - let count_tbl = MetadataTypes.count_tbl () in - let tbls = [ - (obj_tbl,`RefObj) ; (sort_tbl,`RefSort) ; (rel_tbl,`RefRel) ; - (name_tbl,`ObjectName) ; (count_tbl,`Count) ] - in - let statements = - (SqlStatements.create_tables tbls) @ (SqlStatements.create_indexes tbls) - in - List.iter (fun statement -> - try - ignore (HMysql.exec dbd statement) - with - exn -> - let status = HMysql.status dbd in - match status with - | Mysql.StatusError Mysql.Table_exists_error -> () - | Mysql.StatusError Mysql.Dup_keyname -> () - | Mysql.StatusError _ -> raise exn - | _ -> () - ) statements -;; - -(* removes uri from the ownerized tables, and returns the list of other objects - * (theyr uris) that ref the one removed. - * AFAIK there is no need to return it, since the MatitaTypes.staus should - * contain all defined objects. but to double check we do not garbage the - * metadata... - *) -let remove_uri uri = - let obj_tbl = MetadataTypes.obj_tbl () in - let sort_tbl = MetadataTypes.sort_tbl () in - let rel_tbl = MetadataTypes.rel_tbl () in - let name_tbl = MetadataTypes.name_tbl () in - (*let conclno_tbl = MetadataTypes.conclno_tbl () in - let conclno_hyp_tbl = MetadataTypes.fullno_tbl () in*) - let count_tbl = MetadataTypes.count_tbl () in - - let dbd = instance () in - let suri = UriManager.string_of_uri uri in - let query table suri = sprintf - "DELETE FROM %s WHERE source LIKE '%s%%'" table (HMysql.escape suri) - in - List.iter (fun t -> - try - ignore (HMysql.exec dbd (query t suri)) - with - exn -> raise exn (* no errors should be accepted *) - ) - [obj_tbl;sort_tbl;rel_tbl;name_tbl;(*conclno_tbl;conclno_hyp_tbl*)count_tbl]; - (* and now the debug job *) - let dbg_q = - sprintf "SELECT source FROM %s WHERE h_occurrence LIKE '%s%%'" obj_tbl - (HMysql.escape suri) - in - try - let rc = HMysql.exec dbd dbg_q in - let l = ref [] in - HMysql.iter rc (fun a -> match a.(0) with None ->()|Some a -> l := a:: !l); - let l = List.sort Pervasives.compare !l in - HExtlib.list_uniq l - with - exn -> raise exn (* no errors should be accepted *) - -let xpointers_of_ind uri = - let dbd = instance () in - let name_tbl = MetadataTypes.name_tbl () in - let query = sprintf - "SELECT source FROM %s WHERE source LIKE '%s#xpointer%%'" name_tbl - (HMysql.escape (UriManager.string_of_uri uri)) - in - let rc = HMysql.exec dbd query in - let l = ref [] in - HMysql.iter rc (fun a -> match a.(0) with None ->()|Some a -> l := a:: !l); - List.map UriManager.uri_of_string !l - diff --git a/helm/matita/matitaDb.mli b/helm/matita/matitaDb.mli deleted file mode 100644 index 0d5811eba..000000000 --- a/helm/matita/matitaDb.mli +++ /dev/null @@ -1,32 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -val instance: unit -> HMysql.dbd - -val create_owner_environment: unit -> unit -val clean_owner_environment: unit -> unit - -val remove_uri: UriManager.uri -> string list -val xpointers_of_ind: UriManager.uri -> UriManager.uri list diff --git a/helm/matita/matitaDisambiguator.ml b/helm/matita/matitaDisambiguator.ml deleted file mode 100644 index 24a835523..000000000 --- a/helm/matita/matitaDisambiguator.ml +++ /dev/null @@ -1,174 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -open MatitaTypes - -exception Ambiguous_input -exception DisambiguationError of string Lazy.t list list - -type choose_uris_callback = - id:string -> UriManager.uri list -> UriManager.uri list - -type choose_interp_callback = (string * string) list list -> int list - -let mono_uris_callback ~id = - if Helm_registry.get_bool "matita.auto_disambiguation" then - function l -> l - else - raise Ambiguous_input - -let mono_interp_callback _ = raise Ambiguous_input - -let _choose_uris_callback = ref mono_uris_callback -let _choose_interp_callback = ref mono_interp_callback -let set_choose_uris_callback f = _choose_uris_callback := f -let set_choose_interp_callback f = _choose_interp_callback := f - -module Callbacks = - struct - let interactive_user_uri_choice ~selection_mode ?ok - ?(enable_button_for_non_vars = true) ~title ~msg ~id uris = - !_choose_uris_callback ~id uris - - let interactive_interpretation_choice interp = - !_choose_interp_callback interp - - let input_or_locate_uri ~(title:string) ?id = - (* Zack: I try to avoid using this callback. I therefore assume that - * the presence of an identifier that can't be resolved via "locate" - * query is a syntax error *) - let msg = match id with Some id -> id | _ -> "_" in - raise (Unbound_identifier msg) - end - -module Disambiguator = Disambiguate.Make (Callbacks) - -(* implement module's API *) - -let disambiguate_thing ~aliases ~universe - ~(f:?fresh_instances:bool -> - aliases:DisambiguateTypes.environment -> - universe:DisambiguateTypes.multiple_environment option -> - 'a -> 'b) - ~(drop_aliases: 'b -> 'b) - ~(drop_aliases_and_clear_diff: 'b -> 'b) - (thing: 'a) -= - assert (universe <> None); - let library = false, DisambiguateTypes.Environment.empty, None in - let multi_aliases=false, DisambiguateTypes.Environment.empty, universe in - let mono_aliases = true, aliases, None in - let passes = (* *) - [ (false, mono_aliases, false); - (false, multi_aliases, false); - (true, mono_aliases, false); - (true, multi_aliases, false); - (true, mono_aliases, true); - (true, multi_aliases, true); - (true, library, true); - ] - in - let try_pass (fresh_instances, (_, aliases, universe), use_coercions) = - CoercDb.use_coercions := use_coercions; - f ~fresh_instances ~aliases ~universe thing - in - let set_aliases (instances,(use_mono_aliases,_,_),_) (_, user_asked as res) = - if use_mono_aliases && not instances then - drop_aliases res - else if user_asked then - drop_aliases res (* one shot aliases *) - else - drop_aliases_and_clear_diff res - in - let rec aux errors = - function - | [ pass ] -> - (try - set_aliases pass (try_pass pass) - with Disambiguate.NoWellTypedInterpretation newerrors -> - raise (DisambiguationError (errors @ [newerrors]))) - | hd :: tl -> - (try - set_aliases hd (try_pass hd) - with Disambiguate.NoWellTypedInterpretation newerrors -> - aux (errors @ [newerrors]) tl) - | [] -> assert false - in - let saved_use_coercions = !CoercDb.use_coercions in - try - let res = aux [] passes in - CoercDb.use_coercions := saved_use_coercions; - res - with exn -> - CoercDb.use_coercions := saved_use_coercions; - raise exn - -type disambiguator_thing = - { do_it : - 'a 'b. - aliases:DisambiguateTypes.environment -> - universe:DisambiguateTypes.multiple_environment option -> - f:(?fresh_instances:bool -> - aliases:DisambiguateTypes.environment -> - universe:DisambiguateTypes.multiple_environment option -> - 'a -> 'b * bool) -> - drop_aliases:('b * bool -> 'b * bool) -> - drop_aliases_and_clear_diff:('b * bool -> 'b * bool) -> 'a -> 'b * bool - } - -let disambiguate_thing = - let profiler = HExtlib.profile "disambiguate_thing" in - { do_it = - fun ~aliases ~universe ~f ~drop_aliases ~drop_aliases_and_clear_diff thing - -> profiler.HExtlib.profile - (disambiguate_thing ~aliases ~universe ~f ~drop_aliases - ~drop_aliases_and_clear_diff) thing - } - -let drop_aliases (choices, user_asked) = - (List.map (fun (d, a, b, c) -> d, a, b, c) choices), - user_asked - -let drop_aliases_and_clear_diff (choices, user_asked) = - (List.map (fun (_, a, b, c) -> [], a, b, c) choices), - user_asked - -let disambiguate_term ?fresh_instances ~dbd ~context ~metasenv ?initial_ugraph - ~aliases ~universe term - = - assert (fresh_instances = None); - let f = - Disambiguator.disambiguate_term ~dbd ~context ~metasenv ?initial_ugraph - in - disambiguate_thing.do_it ~aliases ~universe ~f ~drop_aliases - ~drop_aliases_and_clear_diff term - -let disambiguate_obj ?fresh_instances ~dbd ~aliases ~universe ~uri obj = - assert (fresh_instances = None); - let f = Disambiguator.disambiguate_obj ~dbd ~uri in - disambiguate_thing.do_it ~aliases ~universe ~f ~drop_aliases - ~drop_aliases_and_clear_diff obj diff --git a/helm/matita/matitaDisambiguator.mli b/helm/matita/matitaDisambiguator.mli deleted file mode 100644 index 7e207e12f..000000000 --- a/helm/matita/matitaDisambiguator.mli +++ /dev/null @@ -1,51 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open MatitaTypes - -(** raised when ambiguous input is found but not expected (e.g. in the batch - * compiler) *) -exception Ambiguous_input -exception DisambiguationError of string Lazy.t list list - -type choose_uris_callback = id:string -> UriManager.uri list -> UriManager.uri list -type choose_interp_callback = (string * string) list list -> int list - -val set_choose_uris_callback: choose_uris_callback -> unit -val set_choose_interp_callback: choose_interp_callback -> unit - -(** @raise Ambiguous_input if called, default value for internal - * choose_uris_callback if not set otherwise with set_choose_uris_callback - * above *) -val mono_uris_callback: choose_uris_callback - -(** @raise Ambiguous_input if called, default value for internal - * choose_interp_callback if not set otherwise with set_choose_interp_callback - * above *) -val mono_interp_callback: choose_interp_callback - -(** for GUI callbacks see MatitaGui.interactive_{interp,user_uri}_choice *) - -include Disambiguate.Disambiguator diff --git a/helm/matita/matitaEngine.ml b/helm/matita/matitaEngine.ml deleted file mode 100644 index bf39a1cac..000000000 --- a/helm/matita/matitaEngine.ml +++ /dev/null @@ -1,1024 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -open MatitaTypes - -exception Drop;; -exception UnableToInclude of string -exception IncludedFileNotCompiled of string - -let debug = false ;; -let debug_print = if debug then prerr_endline else ignore ;; - -type options = { - do_heavy_checks: bool ; - include_paths: string list ; - clean_baseuri: bool -} - -(** create a ProofEngineTypes.mk_fresh_name_type function which uses given - * names as long as they are available, then it fallbacks to name generation - * using FreshNamesGenerator module *) -let namer_of names = - let len = List.length names in - let count = ref 0 in - fun metasenv context name ~typ -> - if !count < len then begin - let name = Cic.Name (List.nth names !count) in - incr count; - name - end else - FreshNamesGenerator.mk_fresh_name ~subst:[] metasenv context name ~typ - -let tactic_of_ast ast = - let module PET = ProofEngineTypes in - match ast with - | GrafiteAst.Absurd (_, term) -> Tactics.absurd term - | GrafiteAst.Apply (_, term) -> Tactics.apply term - | GrafiteAst.Assumption _ -> Tactics.assumption - | GrafiteAst.Auto (_,depth,width,paramodulation,full) -> - AutoTactic.auto_tac ?depth ?width ?paramodulation ?full - ~dbd:(MatitaDb.instance ()) () - | GrafiteAst.Change (_, pattern, with_what) -> - Tactics.change ~pattern with_what - | GrafiteAst.Clear (_,id) -> Tactics.clear id - | GrafiteAst.ClearBody (_,id) -> Tactics.clearbody id - | GrafiteAst.Contradiction _ -> Tactics.contradiction - | GrafiteAst.Compare (_, term) -> Tactics.compare term - | GrafiteAst.Constructor (_, n) -> Tactics.constructor n - | GrafiteAst.Cut (_, ident, term) -> - let names = match ident with None -> [] | Some id -> [id] in - Tactics.cut ~mk_fresh_name_callback:(namer_of names) term - | GrafiteAst.DecideEquality _ -> Tactics.decide_equality - | GrafiteAst.Decompose (_, types, what, names) -> - let to_type = function - | GrafiteAst.Type (uri, typeno) -> uri, typeno - | GrafiteAst.Ident _ -> assert false - in - let user_types = List.rev_map to_type types in - let dbd = MatitaDb.instance () in - let mk_fresh_name_callback = namer_of names in - Tactics.decompose ~mk_fresh_name_callback ~dbd ~user_types what - | GrafiteAst.Discriminate (_,term) -> Tactics.discriminate term - | GrafiteAst.Elim (_, what, using, depth, names) -> - Tactics.elim_intros ?using ?depth ~mk_fresh_name_callback:(namer_of names) - what - | GrafiteAst.ElimType (_, what, using, depth, names) -> - Tactics.elim_type ?using ?depth ~mk_fresh_name_callback:(namer_of names) - what - | GrafiteAst.Exact (_, term) -> Tactics.exact term - | GrafiteAst.Exists _ -> Tactics.exists - | GrafiteAst.Fail _ -> Tactics.fail - | GrafiteAst.Fold (_, reduction_kind, term, pattern) -> - let reduction = - match reduction_kind with - | `Normalize -> - PET.const_lazy_reduction - (CicReduction.normalize ~delta:false ~subst:[]) - | `Reduce -> PET.const_lazy_reduction ProofEngineReduction.reduce - | `Simpl -> PET.const_lazy_reduction ProofEngineReduction.simpl - | `Unfold None -> - PET.const_lazy_reduction (ProofEngineReduction.unfold ?what:None) - | `Unfold (Some lazy_term) -> - (fun context metasenv ugraph -> - let what, metasenv, ugraph = lazy_term context metasenv ugraph in - ProofEngineReduction.unfold ~what, metasenv, ugraph) - | `Whd -> - PET.const_lazy_reduction (CicReduction.whd ~delta:false ~subst:[]) - in - Tactics.fold ~reduction ~term ~pattern - | GrafiteAst.Fourier _ -> Tactics.fourier - | GrafiteAst.FwdSimpl (_, hyp, names) -> - Tactics.fwd_simpl ~mk_fresh_name_callback:(namer_of names) - ~dbd:(MatitaDb.instance ()) hyp - | GrafiteAst.Generalize (_,pattern,ident) -> - let names = match ident with None -> [] | Some id -> [id] in - Tactics.generalize ~mk_fresh_name_callback:(namer_of names) pattern - | GrafiteAst.Goal (_, n) -> Tactics.set_goal n - | GrafiteAst.IdTac _ -> Tactics.id - | GrafiteAst.Injection (_,term) -> Tactics.injection term - | GrafiteAst.Intros (_, None, names) -> - PrimitiveTactics.intros_tac ~mk_fresh_name_callback:(namer_of names) () - | GrafiteAst.Intros (_, Some num, names) -> - PrimitiveTactics.intros_tac ~howmany:num - ~mk_fresh_name_callback:(namer_of names) () - | GrafiteAst.LApply (_, how_many, to_what, what, ident) -> - let names = match ident with None -> [] | Some id -> [id] in - Tactics.lapply ~mk_fresh_name_callback:(namer_of names) ?how_many - ~to_what what - | GrafiteAst.Left _ -> Tactics.left - | GrafiteAst.LetIn (loc,term,name) -> - Tactics.letin term ~mk_fresh_name_callback:(namer_of [name]) - | GrafiteAst.Reduce (_, reduction_kind, pattern) -> - (match reduction_kind with - | `Normalize -> Tactics.normalize ~pattern - | `Reduce -> Tactics.reduce ~pattern - | `Simpl -> Tactics.simpl ~pattern - | `Unfold what -> Tactics.unfold ~pattern what - | `Whd -> Tactics.whd ~pattern) - | GrafiteAst.Reflexivity _ -> Tactics.reflexivity - | GrafiteAst.Replace (_, pattern, with_what) -> - Tactics.replace ~pattern ~with_what - | GrafiteAst.Rewrite (_, direction, t, pattern) -> - EqualityTactics.rewrite_tac ~direction ~pattern t - | GrafiteAst.Right _ -> Tactics.right - | GrafiteAst.Ring _ -> Tactics.ring - | GrafiteAst.Split _ -> Tactics.split - | GrafiteAst.Symmetry _ -> Tactics.symmetry - | GrafiteAst.Transitivity (_, term) -> Tactics.transitivity term - -let singleton = function - | [x], _ -> x - | _ -> assert false - - (** @param term not meaningful when context is given *) -let disambiguate_term ?context status_ref goal term = - let status = !status_ref in - let context = - match context with - | Some c -> c - | None -> MatitaTypes.get_proof_context status goal - in - let (diff, metasenv, cic, _) = - singleton - (MatitaDisambiguator.disambiguate_term ~dbd:(MatitaDb.instance ()) - ~aliases:status.aliases ~universe:(Some status.multi_aliases) - ~context ~metasenv:(MatitaTypes.get_proof_metasenv status) term) - in - let status = MatitaTypes.set_metasenv metasenv status in - let status = MatitaSync.set_proof_aliases status diff in - status_ref := status; - cic - - (** disambiguate_lazy_term (circa): term -> (unit -> status) * lazy_term - * rationale: lazy_term will be invoked in different context to obtain a term, - * each invocation will disambiguate the term and can add aliases. Once all - * disambiguations have been performed, the first returned function can be - * used to obtain the resulting aliases *) -let disambiguate_lazy_term status_ref term = - (fun context metasenv ugraph -> - let status = !status_ref in - let (diff, metasenv, cic, ugraph) = - singleton - (MatitaDisambiguator.disambiguate_term ~dbd:(MatitaDb.instance ()) - ~initial_ugraph:ugraph ~aliases:status.aliases - ~universe:(Some status.multi_aliases) ~context ~metasenv term) - in - let status = MatitaTypes.set_metasenv metasenv status in - let status = MatitaSync.set_proof_aliases status diff in - status_ref := status; - cic, metasenv, ugraph) - -let disambiguate_pattern status_ref (wanted, hyp_paths, goal_path) = - let interp path = Disambiguate.interpretate_path [] path in - let goal_path = interp goal_path in - let hyp_paths = List.map (fun (name, path) -> name, interp path) hyp_paths in - let wanted = - match wanted with - None -> None - | Some wanted -> - let wanted = disambiguate_lazy_term status_ref wanted in - Some wanted - in - (wanted, hyp_paths ,goal_path) - -let disambiguate_reduction_kind aliases_ref = function - | `Unfold (Some t) -> - let t = disambiguate_lazy_term aliases_ref t in - `Unfold (Some t) - | `Normalize - | `Reduce - | `Simpl - | `Unfold None - | `Whd as kind -> kind - -let disambiguate_tactic status goal tactic = - let status_ref = ref status in - let tactic = - match tactic with - | GrafiteAst.Absurd (loc, term) -> - let cic = disambiguate_term status_ref goal term in - GrafiteAst.Absurd (loc, cic) - | GrafiteAst.Apply (loc, term) -> - let cic = disambiguate_term status_ref goal term in - GrafiteAst.Apply (loc, cic) - | GrafiteAst.Assumption loc -> GrafiteAst.Assumption loc - | GrafiteAst.Auto (loc,depth,width,paramodulation,full) -> - GrafiteAst.Auto (loc,depth,width,paramodulation,full) - | GrafiteAst.Change (loc, pattern, with_what) -> - let with_what = disambiguate_lazy_term status_ref with_what in - let pattern = disambiguate_pattern status_ref pattern in - GrafiteAst.Change (loc, pattern, with_what) - | GrafiteAst.Clear (loc,id) -> GrafiteAst.Clear (loc,id) - | GrafiteAst.ClearBody (loc,id) -> GrafiteAst.ClearBody (loc,id) - | GrafiteAst.Compare (loc,term) -> - let term = disambiguate_term status_ref goal term in - GrafiteAst.Compare (loc,term) - | GrafiteAst.Constructor (loc,n) -> GrafiteAst.Constructor (loc,n) - | GrafiteAst.Contradiction loc -> GrafiteAst.Contradiction loc - | GrafiteAst.Cut (loc, ident, term) -> - let cic = disambiguate_term status_ref goal term in - GrafiteAst.Cut (loc, ident, cic) - | GrafiteAst.DecideEquality loc -> GrafiteAst.DecideEquality loc - | GrafiteAst.Decompose (loc, types, what, names) -> - let disambiguate types = function - | GrafiteAst.Type _ -> assert false - | GrafiteAst.Ident id -> - (match disambiguate_term status_ref goal - (CicNotationPt.Ident (id, None)) - with - | Cic.MutInd (uri, tyno, _) -> - (GrafiteAst.Type (uri, tyno) :: types) - | _ -> raise (MatitaDisambiguator.DisambiguationError [[lazy "Decompose works only on inductive types"]])) - in - let types = List.fold_left disambiguate [] types in - GrafiteAst.Decompose (loc, types, what, names) - | GrafiteAst.Discriminate (loc,term) -> - let term = disambiguate_term status_ref goal term in - GrafiteAst.Discriminate(loc,term) - | GrafiteAst.Exact (loc, term) -> - let cic = disambiguate_term status_ref goal term in - GrafiteAst.Exact (loc, cic) - | GrafiteAst.Elim (loc, what, Some using, depth, idents) -> - let what = disambiguate_term status_ref goal what in - let using = disambiguate_term status_ref goal using in - GrafiteAst.Elim (loc, what, Some using, depth, idents) - | GrafiteAst.Elim (loc, what, None, depth, idents) -> - let what = disambiguate_term status_ref goal what in - GrafiteAst.Elim (loc, what, None, depth, idents) - | GrafiteAst.ElimType (loc, what, Some using, depth, idents) -> - let what = disambiguate_term status_ref goal what in - let using = disambiguate_term status_ref goal using in - GrafiteAst.ElimType (loc, what, Some using, depth, idents) - | GrafiteAst.ElimType (loc, what, None, depth, idents) -> - let what = disambiguate_term status_ref goal what in - GrafiteAst.ElimType (loc, what, None, depth, idents) - | GrafiteAst.Exists loc -> GrafiteAst.Exists loc - | GrafiteAst.Fail loc -> GrafiteAst.Fail loc - | GrafiteAst.Fold (loc,red_kind, term, pattern) -> - let pattern = disambiguate_pattern status_ref pattern in - let term = disambiguate_lazy_term status_ref term in - let red_kind = disambiguate_reduction_kind status_ref red_kind in - GrafiteAst.Fold (loc, red_kind, term, pattern) - | GrafiteAst.FwdSimpl (loc, hyp, names) -> - GrafiteAst.FwdSimpl (loc, hyp, names) - | GrafiteAst.Fourier loc -> GrafiteAst.Fourier loc - | GrafiteAst.Generalize (loc,pattern,ident) -> - let pattern = disambiguate_pattern status_ref pattern in - GrafiteAst.Generalize (loc,pattern,ident) - | GrafiteAst.Goal (loc, g) -> GrafiteAst.Goal (loc, g) - | GrafiteAst.IdTac loc -> GrafiteAst.IdTac loc - | GrafiteAst.Injection (loc, term) -> - let term = disambiguate_term status_ref goal term in - GrafiteAst.Injection (loc,term) - | GrafiteAst.Intros (loc, num, names) -> GrafiteAst.Intros (loc, num, names) - | GrafiteAst.LApply (loc, depth, to_what, what, ident) -> - let f term to_what = - let term = disambiguate_term status_ref goal term in - term :: to_what - in - let to_what = List.fold_right f to_what [] in - let what = disambiguate_term status_ref goal what in - GrafiteAst.LApply (loc, depth, to_what, what, ident) - | GrafiteAst.Left loc -> GrafiteAst.Left loc - | GrafiteAst.LetIn (loc, term, name) -> - let term = disambiguate_term status_ref goal term in - GrafiteAst.LetIn (loc,term,name) - | GrafiteAst.Reduce (loc, red_kind, pattern) -> - let pattern = disambiguate_pattern status_ref pattern in - let red_kind = disambiguate_reduction_kind status_ref red_kind in - GrafiteAst.Reduce(loc, red_kind, pattern) - | GrafiteAst.Reflexivity loc -> GrafiteAst.Reflexivity loc - | GrafiteAst.Replace (loc, pattern, with_what) -> - let pattern = disambiguate_pattern status_ref pattern in - let with_what = disambiguate_lazy_term status_ref with_what in - GrafiteAst.Replace (loc, pattern, with_what) - | GrafiteAst.Rewrite (loc, dir, t, pattern) -> - let term = disambiguate_term status_ref goal t in - let pattern = disambiguate_pattern status_ref pattern in - GrafiteAst.Rewrite (loc, dir, term, pattern) - | GrafiteAst.Right loc -> GrafiteAst.Right loc - | GrafiteAst.Ring loc -> GrafiteAst.Ring loc - | GrafiteAst.Split loc -> GrafiteAst.Split loc - | GrafiteAst.Symmetry loc -> GrafiteAst.Symmetry loc - | GrafiteAst.Transitivity (loc, term) -> - let cic = disambiguate_term status_ref goal term in - GrafiteAst.Transitivity (loc, cic) - in - status_ref, tactic - -let reorder_metasenv start refine tactic goals current_goal always_opens_a_goal= - let module PEH = ProofEngineHelpers in -(* let print_m name metasenv = - prerr_endline (">>>>> " ^ name); - prerr_endline (CicMetaSubst.ppmetasenv [] metasenv) - in *) - (* phase one calculates: - * new_goals_from_refine: goals added by refine - * head_goal: the first goal opened by ythe tactic - * other_goals: other goals opened by the tactic - *) - let new_goals_from_refine = PEH.compare_metasenvs start refine in - let new_goals_from_tactic = PEH.compare_metasenvs refine tactic in - let head_goal, other_goals, goals = - match goals with - | [] -> None,[],goals - | hd::tl -> - (* assert (List.mem hd new_goals_from_tactic); - * invalidato dalla goal_tac - * *) - Some hd, List.filter ((<>) hd) new_goals_from_tactic, List.filter ((<>) - hd) goals - in - let produced_goals = - match head_goal with - | None -> new_goals_from_refine @ other_goals - | Some x -> x :: new_goals_from_refine @ other_goals - in - (* extract the metas generated by refine and tactic *) - let metas_for_tactic_head = - match head_goal with - | None -> [] - | Some head_goal -> List.filter (fun (n,_,_) -> n = head_goal) tactic in - let metas_for_tactic_goals = - List.map - (fun x -> List.find (fun (metano,_,_) -> metano = x) tactic) - goals - in - let metas_for_refine_goals = - List.filter (fun (n,_,_) -> List.mem n new_goals_from_refine) tactic in - let produced_metas, goals = - let produced_metas = - if always_opens_a_goal then - metas_for_tactic_head @ metas_for_refine_goals @ - metas_for_tactic_goals - else begin -(* print_m "metas_for_refine_goals" metas_for_refine_goals; - print_m "metas_for_tactic_head" metas_for_tactic_head; - print_m "metas_for_tactic_goals" metas_for_tactic_goals; *) - metas_for_refine_goals @ metas_for_tactic_head @ - metas_for_tactic_goals - end - in - let goals = List.map (fun (metano, _, _) -> metano) produced_metas in - produced_metas, goals - in - (* residual metas, preserving the original order *) - let before, after = - let rec split e = - function - | [] -> [],[] - | (metano, _, _) :: tl when metano = e -> - [], List.map (fun (x,_,_) -> x) tl - | (metano, _, _) :: tl -> let b, a = split e tl in metano :: b, a - in - let find n metasenv = - try - Some (List.find (fun (metano, _, _) -> metano = n) metasenv) - with Not_found -> None - in - let extract l = - List.fold_right - (fun n acc -> - match find n tactic with - | Some x -> x::acc - | None -> acc - ) l [] in - let before_l, after_l = split current_goal start in - let before_l = - List.filter (fun x -> not (List.mem x produced_goals)) before_l in - let after_l = - List.filter (fun x -> not (List.mem x produced_goals)) after_l in - let before = extract before_l in - let after = extract after_l in - before, after - in -(* |+ DEBUG CODE +| - print_m "BEGIN" start; - prerr_endline ("goal was: " ^ string_of_int current_goal); - prerr_endline ("and metas from refine are:"); - List.iter - (fun t -> prerr_string (" " ^ string_of_int t)) - new_goals_from_refine; - prerr_endline ""; - print_m "before" before; - print_m "metas_for_tactic_head" metas_for_tactic_head; - print_m "metas_for_refine_goals" metas_for_refine_goals; - print_m "metas_for_tactic_goals" metas_for_tactic_goals; - print_m "produced_metas" produced_metas; - print_m "after" after; -|+ FINE DEBUG CODE +| *) - before @ produced_metas @ after, goals - -(* maybe we only need special cases for apply and goal *) -let classify_tactic tactic = - match tactic with - (* tactics that can't close the goal (return a goal we want to "select") *) - | GrafiteAst.Rewrite _ - | GrafiteAst.Split _ - | GrafiteAst.Replace _ - | GrafiteAst.Reduce _ - | GrafiteAst.Injection _ - | GrafiteAst.IdTac _ - | GrafiteAst.Generalize _ - | GrafiteAst.Elim _ - | GrafiteAst.Cut _ - | GrafiteAst.Decompose _ -> true, true - (* tactics we don't want to reorder goals. I think only Goal needs this. *) - | GrafiteAst.Goal _ -> false, true - (* tactics like apply *) - | _ -> true, false - -let apply_tactic tactic (status, goal) = -(* prerr_endline "apply_tactic"; *) -(* prerr_endline (Continuationals.Stack.pp (MatitaTypes.get_stack status)); *) - let starting_metasenv = MatitaTypes.get_proof_metasenv status in - let before = List.map (fun g, _, _ -> g) starting_metasenv in -(* prerr_endline "disambiguate"; *) - let status_ref, tactic = disambiguate_tactic status goal tactic in - let metasenv_after_refinement = MatitaTypes.get_proof_metasenv !status_ref in - let proof = MatitaTypes.get_current_proof !status_ref in - let proof_status = proof, goal in - let needs_reordering, always_opens_a_goal = classify_tactic tactic in - let tactic = tactic_of_ast tactic in - (* apply tactic will change the status pointed by status_ref ... *) -(* prerr_endline "apply_tactic bassa"; *) - let (proof, opened) = ProofEngineTypes.apply_tactic tactic proof_status in - let after = ProofEngineTypes.goals_of_proof proof in - let opened_goals, closed_goals = Tacticals.goals_diff ~before ~after ~opened in -(* prerr_endline("before: " ^ String.concat ", " (List.map string_of_int before)); -prerr_endline("after: " ^ String.concat ", " (List.map string_of_int after)); -prerr_endline("opened: " ^ String.concat ", " (List.map string_of_int opened)); *) -(* prerr_endline("opened_goals: " ^ String.concat ", " (List.map string_of_int opened_goals)); -prerr_endline("closed_goals: " ^ String.concat ", " (List.map string_of_int closed_goals)); *) - let proof, opened_goals = - if needs_reordering then begin - let uri, metasenv_after_tactic, t, ty = proof in -(* prerr_endline ("goal prima del riordino: " ^ String.concat " " (List.map string_of_int (ProofEngineTypes.goals_of_proof proof))); *) - let reordered_metasenv, opened_goals = - reorder_metasenv - starting_metasenv - metasenv_after_refinement metasenv_after_tactic - opened goal always_opens_a_goal - in - let proof' = uri, reordered_metasenv, t, ty in -(* prerr_endline ("goal dopo il riordino: " ^ String.concat " " (List.map string_of_int (ProofEngineTypes.goals_of_proof proof'))); *) - proof', opened_goals - end - else - proof, opened_goals - in - let incomplete_proof = - match !status_ref.proof_status with - | Incomplete_proof p -> p - | _ -> assert false - in - { !status_ref with proof_status = - Incomplete_proof { incomplete_proof with proof = proof } }, - opened_goals, closed_goals - -module MatitaStatus = -struct - type input_status = MatitaTypes.status * ProofEngineTypes.goal - - type output_status = - MatitaTypes.status * ProofEngineTypes.goal list * ProofEngineTypes.goal list - - type tactic = input_status -> output_status - - let id_tactic = apply_tactic (GrafiteAst.IdTac DisambiguateTypes.dummy_floc) - let mk_tactic tac = tac - let apply_tactic tac = tac - let goals (_, opened, closed) = opened, closed - let set_goals (opened, closed) (status, _, _) = (status, opened, closed) - let get_stack (status, _) = MatitaTypes.get_stack status - - let set_stack stack (status, opened, closed) = - MatitaTypes.set_stack stack status, opened, closed - - let inject (status, _) = (status, [], []) - let focus goal (status, _, _) = (status, goal) -end - -module MatitaTacticals = Tacticals.Make (MatitaStatus) - -let eval_tactical status tac = - let rec tactical_of_ast l tac = - match tac with - | GrafiteAst.Tactic (loc, tactic) -> - MatitaTacticals.tactic (MatitaStatus.mk_tactic (apply_tactic tactic)) - | GrafiteAst.Seq (loc, tacticals) -> (* tac1; tac2; ... *) - assert (l > 0); - MatitaTacticals.seq ~tactics:(List.map (tactical_of_ast (l+1)) tacticals) - | GrafiteAst.Do (loc, n, tactical) -> - MatitaTacticals.do_tactic ~n ~tactic:(tactical_of_ast (l+1) tactical) - | GrafiteAst.Repeat (loc, tactical) -> - MatitaTacticals.repeat_tactic ~tactic:(tactical_of_ast (l+1) tactical) - | GrafiteAst.Then (loc, tactical, tacticals) -> (* tac; [ tac1 | ... ] *) - assert (l > 0); - MatitaTacticals.thens ~start:(tactical_of_ast (l+1) tactical) - ~continuations:(List.map (tactical_of_ast (l+1)) tacticals) - | GrafiteAst.First (loc, tacticals) -> - MatitaTacticals.first - ~tactics:(List.map (fun t -> "", tactical_of_ast (l+1) t) tacticals) - | GrafiteAst.Try (loc, tactical) -> - MatitaTacticals.try_tactic ~tactic:(tactical_of_ast (l+1) tactical) - | GrafiteAst.Solve (loc, tacticals) -> - MatitaTacticals.solve_tactics - ~tactics:(List.map (fun t -> "", tactical_of_ast (l+1) t) tacticals) - - | GrafiteAst.Skip loc -> MatitaTacticals.skip - | GrafiteAst.Dot loc -> MatitaTacticals.dot - | GrafiteAst.Semicolon loc -> MatitaTacticals.semicolon - | GrafiteAst.Branch loc -> MatitaTacticals.branch - | GrafiteAst.Shift loc -> MatitaTacticals.shift - | GrafiteAst.Pos (loc, i) -> MatitaTacticals.pos i - | GrafiteAst.Merge loc -> MatitaTacticals.merge - | GrafiteAst.Focus (loc, goals) -> MatitaTacticals.focus goals - | GrafiteAst.Unfocus loc -> MatitaTacticals.unfocus - in - let status, _, _ = tactical_of_ast 0 tac (status, ~-1) in - let status = (* is proof completed? *) - match status.proof_status with - | Incomplete_proof { stack = stack; proof = proof } - when Continuationals.Stack.is_empty stack -> - { status with proof_status = Proof proof } - | _ -> status - in - status - -let eval_coercion status coercion = - let coer_uri,coer_ty = - match coercion with - | Cic.Const (uri,_) - | Cic.Var (uri,_) -> - let o,_ = CicEnvironment.get_obj CicUniv.empty_ugraph uri in - (match o with - | Cic.Constant (_,_,ty,_,_) - | Cic.Variable (_,_,ty,_,_) -> - uri,ty - | _ -> assert false) - | Cic.MutConstruct (uri,t,c,_) -> - let o,_ = CicEnvironment.get_obj CicUniv.empty_ugraph uri in - (match o with - | Cic.InductiveDefinition (l,_,_,_) -> - let (_,_,_,cl) = List.nth l t in - let (_,cty) = List.nth cl c in - uri,cty - | _ -> assert false) - | _ -> assert false - in - (* we have to get the source and the tgt type uri - * in Coq syntax we have already their names, but - * since we don't support Funclass and similar I think - * all the coercion should be of the form - * (A:?)(B:?)T1->T2 - * So we should be able to extract them from the coercion type - *) - let extract_last_two_p ty = - let rec aux = function - | Cic.Prod( _, src, Cic.Prod (n,t1,t2)) -> aux (Cic.Prod(n,t1,t2)) - | Cic.Prod( _, src, tgt) -> src, tgt - | _ -> assert false - in - aux ty - in - let ty_src,ty_tgt = extract_last_two_p coer_ty in - let context = [] in - let src_uri = CoercDb.coerc_carr_of_term (CicReduction.whd context ty_src) in - let tgt_uri = CoercDb.coerc_carr_of_term (CicReduction.whd context ty_tgt) in - let new_coercions = - CoercGraph.close_coercion_graph src_uri tgt_uri coer_uri in - let status = - List.fold_left (fun s (uri,o,_) -> - let status = MatitaSync.add_obj uri o status in - {status with coercions = uri :: status.coercions}) - status new_coercions in - let status = {status with coercions = coer_uri :: status.coercions} in - let statement_of name = - GrafiteAst.Coercion (DisambiguateTypes.dummy_floc, - (CicNotationPt.Ident (name, None))) - in - let moo_content = - statement_of (UriManager.name_of_uri coer_uri) :: - (List.map - (fun (uri, _, _) -> - statement_of (UriManager.name_of_uri uri)) - new_coercions) - in - let status = add_moo_content moo_content status in - { status with proof_status = No_proof } - -let generate_elimination_principles uri status = - let status' = ref status in - let elim sort = - try - let uri,obj = CicElim.elim_of ~sort uri 0 in - status' := MatitaSync.add_obj uri obj !status' - with CicElim.Can_t_eliminate -> () - in - try - List.iter elim [ Cic.Prop; Cic.Set; (Cic.Type (CicUniv.fresh ())) ]; - !status' - with exn -> - MatitaSync.time_travel ~present:!status' ~past:status; - raise exn - -let generate_projections uri fields status = - let projections = CicRecord.projections_of uri fields in - List.fold_left - (fun status (uri, name, bo) -> - try - let ty, ugraph = - CicTypeChecker.type_of_aux' [] [] bo CicUniv.empty_ugraph in - let attrs = [`Class `Projection; `Generated] in - let obj = Cic.Constant (name,Some bo,ty,[],attrs) in - MatitaSync.add_obj uri obj status - with - CicTypeChecker.TypeCheckerFailure s -> - MatitaLog.message - ("Unable to create projection " ^ name ^ " cause: " ^ (Lazy.force s)); - status - | CicEnvironment.Object_not_found uri -> - let depend = UriManager.name_of_uri uri in - MatitaLog.message - ("Unable to create projection " ^ name ^ " because it requires " ^ depend); - status - ) status projections - -(* to avoid a long list of recursive functions *) -let eval_from_moo_ref = ref (fun _ _ _ -> assert false);; - -let disambiguate_obj status obj = - let uri = - match obj with - GrafiteAst.Inductive (_,(name,_,_,_)::_) - | GrafiteAst.Record (_,name,_,_) -> - Some (UriManager.uri_of_string (MatitaTypes.qualify status name ^ ".ind")) - | GrafiteAst.Inductive _ -> assert false - | GrafiteAst.Theorem _ -> None in - let (diff, metasenv, cic, _) = - singleton - (MatitaDisambiguator.disambiguate_obj ~dbd:(MatitaDb.instance ()) - ~aliases:status.aliases ~universe:(Some status.multi_aliases) ~uri obj) - in - let proof_status = - match status.proof_status with - | No_proof -> Intermediate metasenv - | Incomplete_proof _ - | Proof _ -> command_error "imbricated proofs not allowed" - | Intermediate _ -> assert false - in - let status = { status with proof_status = proof_status } in - let status = MatitaSync.set_proof_aliases status diff in - status, cic - -let disambiguate_command status = - function - | GrafiteAst.Alias _ - | GrafiteAst.Default _ - | GrafiteAst.Drop _ - | GrafiteAst.Dump _ - | GrafiteAst.Include _ - | GrafiteAst.Interpretation _ - | GrafiteAst.Metadata _ - | GrafiteAst.Notation _ - | GrafiteAst.Qed _ - | GrafiteAst.Render _ - | GrafiteAst.Set _ as cmd -> - status,cmd - | GrafiteAst.Coercion (loc, term) -> - let status_ref = ref status in - let term = disambiguate_term ~context:[] status_ref ~-1 term in - !status_ref, GrafiteAst.Coercion (loc,term) - | GrafiteAst.Obj (loc,obj) -> - let status,obj = disambiguate_obj status obj in - status, GrafiteAst.Obj (loc,obj) - -let make_absolute paths path = - if path = "coq.ma" then path - else - let rec aux = function - | [] -> ignore (Unix.stat path); path - | p :: tl -> - let path = p ^ "/" ^ path in - try - ignore (Unix.stat path); path - with Unix.Unix_error _ -> aux tl - in - try - aux paths - with Unix.Unix_error _ as exc -> raise (UnableToInclude path) -;; - -let eval_command opts status cmd = - let status,cmd = disambiguate_command status cmd in - let cmd,notation_ids' = CicNotation.process_notation cmd in - let status = - { status with notation_ids = notation_ids' @ status.notation_ids } - in - match cmd with - | GrafiteAst.Default (loc, what, uris) as cmd -> - LibraryObjects.set_default what uris; - add_moo_content [cmd] status - | GrafiteAst.Include (loc, path) -> - let absolute_path = make_absolute opts.include_paths path in - let moopath = MatitacleanLib.obj_file_of_script absolute_path in - let status = ref status in - if not (Sys.file_exists moopath) then - raise (IncludedFileNotCompiled moopath); - !eval_from_moo_ref status moopath (fun _ _ -> ()); - !status - | GrafiteAst.Metadata (loc, m) -> - (match m with - | GrafiteAst.Dependency uri -> MatitaTypes.add_moo_metadata [m] status - | GrafiteAst.Baseuri _ -> status) - | GrafiteAst.Set (loc, name, value) -> - let status = - if name = "baseuri" then begin - let value = - let v = MatitaMisc.strip_trailing_slash value in - try - ignore (String.index v ' '); - command_error "baseuri can't contain spaces" - with Not_found -> v - in - if not (MatitaMisc.is_empty value) && opts.clean_baseuri then begin - MatitaLog.warn ("baseuri " ^ value ^ " is not empty"); - MatitaLog.message ("cleaning baseuri " ^ value); - MatitacleanLib.clean_baseuris [value] - end; - add_moo_metadata [GrafiteAst.Baseuri value] status - end else - status - in - set_option status name value - | GrafiteAst.Drop loc -> raise Drop - | GrafiteAst.Qed loc -> - let uri, metasenv, bo, ty = - match status.proof_status with - | Proof (Some uri, metasenv, body, ty) -> - uri, metasenv, body, ty - | Proof (None, metasenv, body, ty) -> - command_error - ("Someone allows to start a thm without giving the "^ - "name/uri. This should be fixed!") - | _-> command_error "You can't Qed an incomplete theorem" - in - let suri = UriManager.string_of_uri uri in - if metasenv <> [] then - command_error "Proof not completed! metasenv is not empty!"; - let name = UriManager.name_of_uri uri in - let obj = Cic.Constant (name,Some bo,ty,[],[]) in - MatitaSync.add_obj uri obj status - | GrafiteAst.Coercion (loc, coercion) -> eval_coercion status coercion - | GrafiteAst.Alias (loc, spec) -> - let diff = - (*CSC: Warning: this code should be factorized with the corresponding - code in DisambiguatePp *) - match spec with - | GrafiteAst.Ident_alias (id,uri) -> - [DisambiguateTypes.Id id, - (uri,(fun _ _ _-> CicUtil.term_of_uri(UriManager.uri_of_string uri)))] - | GrafiteAst.Symbol_alias (symb, instance, desc) -> - [DisambiguateTypes.Symbol (symb,instance), - DisambiguateChoices.lookup_symbol_by_dsc symb desc] - | GrafiteAst.Number_alias (instance,desc) -> - [DisambiguateTypes.Num instance, - DisambiguateChoices.lookup_num_by_dsc desc] - in - MatitaSync.set_proof_aliases status diff - | GrafiteAst.Render _ -> assert false (* ZACK: to be removed *) - | GrafiteAst.Dump _ -> assert false (* ZACK: to be removed *) - | GrafiteAst.Interpretation (_, dsc, (symbol, _), cic_appl_pattern) as stm -> - let status = add_moo_content [stm] status in - let uris = - List.map - (fun uri -> GrafiteAst.Dependency (UriManager.buri_of_uri uri)) - (CicNotationUtil.find_appl_pattern_uris cic_appl_pattern) - in - let diff = - [DisambiguateTypes.Symbol (symbol, 0), - DisambiguateChoices.lookup_symbol_by_dsc symbol dsc] - in - let status = MatitaSync.set_proof_aliases status diff in - let status = MatitaTypes.add_moo_metadata uris status in - status - | GrafiteAst.Notation _ as stm -> add_moo_content [stm] status - | GrafiteAst.Obj (loc,obj) -> - let ext,name = - match obj with - Cic.Constant (name,_,_,_,_) - | Cic.CurrentProof (name,_,_,_,_,_) -> ".con",name - | Cic.InductiveDefinition (types,_,_,_) -> - ".ind", - (match types with (name,_,_,_)::_ -> name | _ -> assert false) - | _ -> assert false in - let uri = - UriManager.uri_of_string (MatitaTypes.qualify status name ^ ext) - in - let metasenv = MatitaTypes.get_proof_metasenv status in - match obj with - | Cic.CurrentProof (_,metasenv',bo,ty,_,_) -> - let name = UriManager.name_of_uri uri in - if not(CicPp.check name ty) then - MatitaLog.error ("Bad name: " ^ name); - if opts.do_heavy_checks then - begin - let dbd = MatitaDb.instance () in - let similar = MetadataQuery.match_term ~dbd ty in - let similar_len = List.length similar in - if similar_len> 30 then - (MatitaLog.message - ("Duplicate check will compare your theorem with " ^ - string_of_int similar_len ^ - " theorems, this may take a while.")); - let convertible = - List.filter ( - fun u -> - let t = CicUtil.term_of_uri u in - let ty',g = - CicTypeChecker.type_of_aux' - metasenv' [] t CicUniv.empty_ugraph - in - fst(CicReduction.are_convertible [] ty' ty g)) - similar - in - (match convertible with - | [] -> () - | x::_ -> - MatitaLog.warn - ("Theorem already proved: " ^ UriManager.string_of_uri x ^ - "\nPlease use a variant.")); - end; - assert (metasenv = metasenv'); - let goalno = - match metasenv' with (goalno,_,_)::_ -> goalno | _ -> assert false - in - let initial_proof = (Some uri, metasenv, bo, ty) in - let initial_stack = Continuationals.Stack.of_metasenv metasenv in - { status with proof_status = - Incomplete_proof { proof = initial_proof; stack = initial_stack } } - | _ -> - if metasenv <> [] then - command_error ( - "metasenv not empty while giving a definition with body: " ^ - CicMetaSubst.ppmetasenv [] metasenv); - let status' = ref status in - (try - status' := MatitaSync.add_obj uri obj !status'; - (match obj with - | Cic.Constant _ -> () - | Cic.InductiveDefinition (_,_,_,attrs) -> - status' := generate_elimination_principles uri !status'; - let rec get_record_attrs = - function - | [] -> None - | (`Class (`Record fields))::_ -> Some fields - | _::tl -> get_record_attrs tl - in - (match get_record_attrs attrs with - | None -> () (* not a record *) - | Some fields -> - status' := generate_projections uri fields !status') - | Cic.CurrentProof _ - | Cic.Variable _ -> assert false); - !status' - with exn -> - MatitaSync.time_travel ~present:!status' ~past:status; - raise exn) - -let eval_executable opts status ex = - match ex with - | GrafiteAst.Tactical (_, tac, None) -> eval_tactical status tac - | GrafiteAst.Tactical (_, tac, Some punct) -> - let status = eval_tactical status tac in - eval_tactical status punct - | GrafiteAst.Command (_, cmd) -> eval_command opts status cmd - | GrafiteAst.Macro (_, mac) -> - command_error (sprintf "The macro %s can't be in a script" - (GrafiteAstPp.pp_macro_ast mac)) - -let eval_comment status c = status - -let eval_ast - ?(do_heavy_checks=false) ?(include_paths=[]) ?(clean_baseuri=true) status st -= - let opts = { - do_heavy_checks = do_heavy_checks ; - include_paths = include_paths; - clean_baseuri = clean_baseuri } - in - match st with - | GrafiteAst.Executable (_,ex) -> eval_executable opts status ex - | GrafiteAst.Comment (_,c) -> eval_comment status c - -let eval_from_moo ?do_heavy_checks ?include_paths ?clean_baseuri status fname cb -= - let ast_of_cmd cmd = - GrafiteAst.Executable (DisambiguateTypes.dummy_floc, - GrafiteAst.Command (DisambiguateTypes.dummy_floc, - (GrafiteAst.reash_cmd_uris cmd))) - in - let moo, metadata = MatitaMoo.load_moo fname in - List.iter - (fun ast -> - let ast = ast_of_cmd ast in - cb !status ast; - status := - eval_ast ?do_heavy_checks ?include_paths ?clean_baseuri !status ast) - moo; - List.iter - (fun m -> - let ast = - ast_of_cmd (GrafiteAst.Metadata (DisambiguateTypes.dummy_floc, m)) - in - cb !status ast; - status := - eval_ast ?do_heavy_checks ?include_paths ?clean_baseuri !status ast) - metadata - -let eval_from_stream - ?do_heavy_checks ?include_paths ?clean_baseuri status str cb -= - try - while true do - let ast = GrafiteParser.parse_statement str in - cb !status ast; - status := - eval_ast ?do_heavy_checks ?include_paths ?clean_baseuri !status ast - done - with End_of_file -> () - -(* to avoid a long list of recursive functions *) -let _ = eval_from_moo_ref := eval_from_moo - -let eval_from_stream_greedy - ?do_heavy_checks ?include_paths ?clean_baseuri status str cb -= - while true do - print_string "matita> "; - flush stdout; - let ast = GrafiteParser.parse_statement str in - cb !status ast; - status := eval_ast ?do_heavy_checks ?include_paths ?clean_baseuri !status ast - done -;; - -let eval_string ?do_heavy_checks ?include_paths ?clean_baseuri status str = - eval_from_stream - ?do_heavy_checks ?include_paths ?clean_baseuri status - (Ulexing.from_utf8_string str) (fun _ _ -> ()) - -let default_options () = -(* - let options = - StringMap.add "baseuri" - (String - (Helm_registry.get "matita.baseuri" ^ Helm_registry.get "matita.owner")) - no_options - in -*) - let options = - StringMap.add "basedir" - (String (Helm_registry.get "matita.basedir")) - no_options - in - options - -let initial_status = - lazy { - aliases = DisambiguateTypes.Environment.empty; - multi_aliases = DisambiguateTypes.Environment.empty; - moo_content_rev = [], []; - proof_status = No_proof; - options = default_options (); - objects = []; - coercions = []; - notation_ids = []; - } - diff --git a/helm/matita/matitaEngine.mli b/helm/matita/matitaEngine.mli deleted file mode 100644 index e8cdbad0e..000000000 --- a/helm/matita/matitaEngine.mli +++ /dev/null @@ -1,63 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -exception Drop -exception UnableToInclude of string -exception IncludedFileNotCompiled of string - -(* heavy checks slow down the compilation process but give you some interesting - * infos like if the theorem is a duplicate *) -val eval_string: - ?do_heavy_checks:bool -> - ?include_paths:string list -> - ?clean_baseuri:bool -> - MatitaTypes.status ref -> string -> unit - -val eval_from_stream: - ?do_heavy_checks:bool -> - ?include_paths:string list -> - ?clean_baseuri:bool -> - MatitaTypes.status ref -> Ulexing.lexbuf -> - (MatitaTypes.status -> GrafiteParser.statement -> unit) -> - unit - -val eval_from_stream_greedy: - ?do_heavy_checks:bool -> - ?include_paths:string list -> - ?clean_baseuri:bool -> - MatitaTypes.status ref-> Ulexing.lexbuf -> - (MatitaTypes.status -> GrafiteParser.statement -> unit) -> - unit - -val eval_ast: - ?do_heavy_checks:bool -> - ?include_paths:string list -> - ?clean_baseuri:bool -> - MatitaTypes.status -> - GrafiteParser.statement -> - MatitaTypes.status - -val initial_status: MatitaTypes.status lazy_t - diff --git a/helm/matita/matitaExcPp.ml b/helm/matita/matitaExcPp.ml deleted file mode 100644 index 3ad6da153..000000000 --- a/helm/matita/matitaExcPp.ml +++ /dev/null @@ -1,72 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -let to_string = - function - | MatitaTypes.Option_error ("baseuri", "not found" ) -> - "Baseuri not set for this script. " - ^ "Use 'set \"baseuri\" \"\".' to set it." - | MatitaTypes.Command_error msg -> "Error: " ^ msg - | CicNotationParser.Parse_error (floc,err) -> - let (x, y) = CicNotationPt.loc_of_floc floc in - sprintf "Parse error at %d-%d: %s" x y err - | UriManager.IllFormedUri uri -> sprintf "invalid uri: %s" uri - | CicEnvironment.Object_not_found uri -> - sprintf "object not found: %s" (UriManager.string_of_uri uri) - | Unix.Unix_error (code, api, param) -> - let err = Unix.error_message code in - "Unix Error (" ^ api ^ "): " ^ err - | MatitaMoo.Corrupt_moo fname -> - sprintf ".moo file '%s' is corrupt (shorter than expected)" fname - | MatitaMoo.Checksum_failure fname -> - sprintf "checksum failed for .moo file '%s', please recompile it'" fname - | MatitaMoo.Version_mismatch fname -> - sprintf - (".moo file '%s' has been compiled by a different version of matita, " - ^^ "please recompile it") - fname - | ProofEngineTypes.Fail msg -> "Tactic error: " ^ Lazy.force msg - | Continuationals.Error s -> "Tactical error: " ^ Lazy.force s - | CicTypeChecker.TypeCheckerFailure msg -> - "Type checking error: " ^ Lazy.force msg - | CicTypeChecker.AssertFailure msg -> - "Type checking assertion failed: " ^ Lazy.force msg - | MatitaDisambiguator.DisambiguationError errorll -> - let rec aux n = - function - [] -> "" - | phase::tl -> - aux (n+1) tl ^ - "***** Errors obtained during phase " ^ string_of_int n ^": *****\n"^ - String.concat "\n\n" - (List.map (fun msg -> "*Error: " ^ Lazy.force msg) phase) ^ - "\n\n\n" - in - "********** DISAMBIGUATION ERRORS: **********\n" ^ - aux 1 errorll - | exn -> "Uncaught exception: " ^ Printexc.to_string exn - diff --git a/helm/matita/matitaExcPp.mli b/helm/matita/matitaExcPp.mli deleted file mode 100644 index 4c4eddc8d..000000000 --- a/helm/matita/matitaExcPp.mli +++ /dev/null @@ -1,27 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -val to_string: exn -> string - diff --git a/helm/matita/matitaGtkMisc.ml b/helm/matita/matitaGtkMisc.ml deleted file mode 100644 index 3c0d1b4c3..000000000 --- a/helm/matita/matitaGtkMisc.ml +++ /dev/null @@ -1,443 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -exception PopupClosed -open Printf - -open MatitaTypes - -let wrap_callback f = f - -let connect_button (button: #GButton.button) callback = - ignore (button#connect#clicked (wrap_callback callback)) - -let connect_toggle_button (button: #GButton.toggle_button) callback = - ignore (button#connect#toggled (wrap_callback callback)) - -let connect_menu_item (menu_item: #GMenu.menu_item) callback = - ignore (menu_item#connect#activate (wrap_callback callback)) - -let connect_key (ev:GObj.event_ops) ?(modifiers = []) ?(stop = false) key - callback -= - ignore (ev#connect#key_press (fun key' -> - let modifiers' = GdkEvent.Key.state key' in - (match key' with - | key' when GdkEvent.Key.keyval key' = key - && List.for_all (fun m -> List.mem m modifiers') modifiers -> - callback (); - stop - | _ -> false))) - -let toggle_widget_visibility ~(widget: GObj.widget) - ~(check: GMenu.check_menu_item) -= - ignore (check#connect#toggled (fun _ -> - if check#active then widget#misc#show () else widget#misc#hide ())) - -let toggle_window_visibility ~(window: GWindow.window) - ~(check: GMenu.check_menu_item) -= - ignore (check#connect#toggled (fun _ -> - if check#active then window#show () else window#misc#hide ())); - ignore (window#event#connect#delete (fun _ -> - window#misc#hide (); - check#set_active false; - true)) - -let toggle_win ?(check: GMenu.check_menu_item option) (win: GWindow.window) () = - if win#is_active then win#misc#hide () else win#show (); - match check with - | None -> () - | Some check -> check#set_active (not check#active) - -let toggle_callback ~callback ~(check: GMenu.check_menu_item) = - ignore (check#connect#toggled (fun _ -> callback check#active)) - -let add_key_binding key callback (evbox: GBin.event_box) = - ignore (evbox#event#connect#key_press (function - | key' when GdkEvent.Key.keyval key' = key -> - callback (); - false - | _ -> false)) - -class multiStringListModel ~cols (tree_view: GTree.view) = - let column_list = new GTree.column_list in - let text_columns = - let rec aux = function - | 0 -> [] - | n -> column_list#add Gobject.Data.string :: aux (n - 1) - in - aux cols - in - let list_store = GTree.list_store column_list in - let renderers = - List.map - (fun text_column -> - (GTree.cell_renderer_text [], ["text", text_column])) - text_columns - in - let view_columns = - List.map - (fun renderer -> GTree.view_column ~renderer ()) - renderers - in - object (self) - val text_columns = text_columns - - initializer - tree_view#set_model (Some (list_store :> GTree.model)); - List.iter - (fun view_column -> ignore (tree_view#append_column view_column)) - view_columns - - method list_store = list_store - - method easy_mappend slist = - let tree_iter = list_store#append () in - List.iter2 - (fun s text_column -> - list_store#set ~row:tree_iter ~column:text_column s) - slist text_columns - - method easy_minsert pos s = - let tree_iter = list_store#insert pos in - List.iter2 - (fun s text_column -> - list_store#set ~row:tree_iter ~column:text_column s) - s text_columns - - method easy_mselection () = - List.map - (fun tree_path -> - let iter = list_store#get_iter tree_path in - List.map - (fun text_column -> - list_store#get ~row:iter ~column:text_column) - text_columns) - tree_view#selection#get_selected_rows - end - -class stringListModel (tree_view: GTree.view) = - object (self) - inherit multiStringListModel ~cols:1 tree_view as multi - - method list_store = multi#list_store - - method easy_append s = - multi#easy_mappend [s] - - method easy_insert pos s = - multi#easy_minsert pos [s] - - method easy_selection () = - let m = List.map - (fun tree_path -> - let iter = self#list_store#get_iter tree_path in - List.map - (fun text_column -> - self#list_store#get ~row:iter ~column:text_column) - text_columns) - tree_view#selection#get_selected_rows - in - List.map (function [x] -> x | _ -> assert false) m - end - -class taggedStringListModel ~(tags:(string * GdkPixbuf.pixbuf) list) - (tree_view: GTree.view) -= - let column_list = new GTree.column_list in - let tag_column = column_list#add Gobject.Data.gobject in - let text_column = column_list#add Gobject.Data.string in - let list_store = GTree.list_store column_list in - let text_renderer = (GTree.cell_renderer_text [], ["text", text_column]) in - let tag_renderer = (GTree.cell_renderer_pixbuf [], ["pixbuf", tag_column]) in - let text_vcolumn = GTree.view_column ~renderer:text_renderer () in - let tag_vcolumn = GTree.view_column ~renderer:tag_renderer () in - let lookup_pixbuf tag = - try List.assoc tag tags with Not_found -> assert false - in - object (self) - initializer - tree_view#set_model (Some (list_store :> GTree.model)); - ignore (tree_view#append_column tag_vcolumn); - ignore (tree_view#append_column text_vcolumn) - - method list_store = list_store - - method easy_append ~tag s = - let tree_iter = list_store#append () in - list_store#set ~row:tree_iter ~column:text_column s; - list_store#set ~row:tree_iter ~column:tag_column (lookup_pixbuf tag) - - method easy_insert pos ~tag s = - let tree_iter = list_store#insert pos in - list_store#set ~row:tree_iter ~column:text_column s; - list_store#set ~row:tree_iter ~column:tag_column (lookup_pixbuf tag) - - method easy_selection () = - List.map - (fun tree_path -> - let iter = list_store#get_iter tree_path in - list_store#get ~row:iter ~column:text_column) - tree_view#selection#get_selected_rows - end - -class recordModel (tree_view:GTree.view) = - let cols_list = new GTree.column_list in - let text_col = cols_list#add Gobject.Data.string in -(* let combo_col = cols_list#add (Gobject.Data.gobject_by_name "GtkListStore") in *) - let combo_col = cols_list#add Gobject.Data.int in - let toggle_col = cols_list#add Gobject.Data.boolean in - let list_store = GTree.list_store cols_list in - let text_rend = (GTree.cell_renderer_text [], ["text", text_col]) in - let combo_rend = GTree.cell_renderer_combo [] in -(* let combo_rend = (GTree.cell_renderer_combo [], [|+"model", combo_col+|]) in *) - let toggle_rend = - (GTree.cell_renderer_toggle [`ACTIVATABLE true], ["active", toggle_col]) - in - let text_vcol = GTree.view_column ~renderer:text_rend () in - let combo_vcol = GTree.view_column ~renderer:(combo_rend, []) () in - let _ = - combo_vcol#set_cell_data_func combo_rend - (fun _ _ -> - prerr_endline "qui"; - let model, col = - GTree.store_of_list Gobject.Data.string ["a"; "b"; "c"] - in - combo_rend#set_properties [ - `MODEL (Some (model :> GTree.model)); - `TEXT_COLUMN col - ]) - in - let toggle_vcol = GTree.view_column ~renderer:toggle_rend () in - object (self) - initializer - tree_view#set_model (Some (list_store :> GTree.model)); - ignore (tree_view#append_column text_vcol); - ignore (tree_view#append_column combo_vcol); - ignore (tree_view#append_column toggle_vcol) - - method list_store = list_store - - method easy_append s (combo:int) (toggle:bool) = - let tree_iter = list_store#append () in - list_store#set ~row:tree_iter ~column:text_col s; - list_store#set ~row:tree_iter ~column:combo_col combo; - list_store#set ~row:tree_iter ~column:toggle_col toggle - end - -class type gui = - object - method newUriDialog: unit -> MatitaGeneratedGui.uriChoiceDialog - method newRecordDialog: unit -> MatitaGeneratedGui.recordChoiceDialog - method newConfirmationDialog: unit -> MatitaGeneratedGui.confirmationDialog - method newEmptyDialog: unit -> MatitaGeneratedGui.emptyDialog - end - -let popup_message - ~title ~message ~buttons ~callback - ?(message_type=`QUESTION) ?parent ?(use_markup=true) - ?(destroy_with_parent=true) ?(allow_grow=false) ?(allow_shrink=false) - ?icon ?(modal=true) ?(resizable=false) ?screen ?type_hint - ?(position=`CENTER_ON_PARENT) ?wm_name ?wm_class ?border_width ?width - ?height ?(show=true) () -= - let m = - GWindow.message_dialog - ~message ~use_markup ~message_type ~buttons ?parent ~destroy_with_parent - ~title ~allow_grow ~allow_shrink ?icon ~modal ~resizable ?screen - ?type_hint ~position ?wm_name ?wm_class ?border_width ?width ?height - ~show () - in - ignore(m#connect#response - ~callback:(fun a -> GMain.Main.quit ();callback a)); - ignore(m#connect#close - ~callback:(fun _ -> GMain.Main.quit ();raise PopupClosed)); - GtkThread.main (); - m#destroy () - -let popup_message_lowlevel - ~title ~message ?(no_separator=true) ~callback ~message_type ~buttons - ?parent ?(destroy_with_parent=true) ?(allow_grow=false) ?(allow_shrink=false) - ?icon ?(modal=true) ?(resizable=false) ?screen ?type_hint - ?(position=`CENTER_ON_PARENT) ?wm_name ?wm_class ?border_width ?width - ?height ?(show=true) () -= - let m = - GWindow.dialog - ~no_separator - ?parent ~destroy_with_parent - ~title ~allow_grow ~allow_shrink ?icon ~modal ~resizable ?screen - ?type_hint ~position ?wm_name ?wm_class ?border_width ?width ?height - ~show:false () - in - let stock = - match message_type with - | `WARNING -> `DIALOG_WARNING - | `INFO -> `DIALOG_INFO - | `ERROR ->`DIALOG_ERROR - | `QUESTION -> `DIALOG_QUESTION - in - let image = GMisc.image ~stock ~icon_size:`DIALOG () in - let label = GMisc.label ~markup:message () in - label#set_line_wrap true; - let hbox = GPack.hbox ~spacing:10 () in - hbox#pack ~from:`START ~expand:true ~fill:true (image:>GObj.widget); - hbox#pack ~from:`START ~expand:true ~fill:true (label:>GObj.widget); - m#vbox#pack ~from:`START - ~padding:20 ~expand:true ~fill:true (hbox:>GObj.widget); - List.iter (fun (x, y) -> - m#add_button_stock x y; - if y = `CANCEL then - m#set_default_response y - ) buttons; - ignore(m#connect#response - ~callback:(fun a -> GMain.Main.quit ();callback a)); - ignore(m#connect#close - ~callback:(fun _ -> GMain.Main.quit ();callback `POPUPCLOSED)); - if show = true then - m#show (); - GtkThread.main (); - m#destroy () - - -let ask_confirmation ~title ~message ?parent () = - let rc = ref `YES in - let callback = - function - | `YES -> rc := `YES - | `NO -> rc := `NO - | `CANCEL -> rc := `CANCEL - | `DELETE_EVENT -> rc := `CANCEL - | `POPUPCLOSED -> rc := `CANCEL - in - let buttons = [`YES,`YES ; `NO,`NO ; `CANCEL,`CANCEL] in - popup_message_lowlevel - ~title ~message ~message_type:`WARNING ~callback ~buttons ?parent (); - !rc - -let report_error ~title ~message ?parent () = - let rc = ref false in - let callback _ = () in - let buttons = GWindow.Buttons.ok in - try - popup_message - ~title ~message ~message_type:`ERROR ~callback ~buttons ?parent () - with - | PopupClosed -> () - - -let ask_text ~(gui:#gui) ?(title = "") ?(message = "") ?(multiline = false) - ?default () -= - let dialog = gui#newEmptyDialog () in - dialog#emptyDialog#set_title title; - dialog#emptyDialogLabel#set_label message; - let result = ref None in - let return r = - result := r; - dialog#emptyDialog#destroy (); - GMain.Main.quit () - in - ignore (dialog#emptyDialog#event#connect#delete (fun _ -> true)); - if multiline then begin (* multiline input required: use a TextView widget *) - let win = - GBin.scrolled_window ~width:400 ~height:150 ~hpolicy:`NEVER - ~vpolicy:`ALWAYS ~packing:dialog#emptyDialogVBox#add () - in - let view = GText.view ~wrap_mode:`CHAR ~packing:win#add () in - let buffer = view#buffer in - (match default with - | None -> () - | Some text -> - buffer#set_text text; - buffer#select_range buffer#start_iter buffer#end_iter); - view#misc#grab_focus (); - connect_button dialog#emptyDialogOkButton (fun _ -> - return (Some (buffer#get_text ()))) - end else begin (* monoline input required: use a TextEntry widget *) - let entry = GEdit.entry ~packing:dialog#emptyDialogVBox#add () in - (match default with - | None -> () - | Some text -> - entry#set_text text; - entry#select_region ~start:0 ~stop:max_int); - entry#misc#grab_focus (); - connect_button dialog#emptyDialogOkButton (fun _ -> - return (Some entry#text)) - end; - connect_button dialog#emptyDialogCancelButton (fun _ ->return None); - dialog#emptyDialog#show (); - GtkThread.main (); - (match !result with None -> raise Cancel | Some r -> r) - -type combo_status = Free of string | Locked of string - -let ask_record_choice ~(gui:#gui) ?(title= "") ?(message = "") - ~fields ~records () -= - let fields = Array.of_list fields in - let fields_no = Array.length fields in - assert (fields_no > 0); - let dialog = gui#newRecordDialog () in - dialog#recordChoiceDialog#set_title title; - dialog#recordChoiceDialogLabel#set_label message; - let model = new recordModel dialog#recordChoiceTreeView in - dialog#recordChoiceTreeView#set_headers_visible true; - let combos = - Array.init fields_no - (fun _ -> GTree.store_of_list Gobject.Data.string ["a"; "b"; "c"]) - in - let (store, col) = combos.(0) in - store#set ~row:(store#append ()) ~column:col "uno"; - store#set ~row:(store#append ()) ~column:col "due"; - let toggles = Array.init fields_no (fun _ -> false) in - Array.iteri - (fun i f -> model#easy_append f i toggles.(i)) - fields; - let status = Array.map (fun s -> Free s) fields in - let record_no = ref None in - let return _ = - dialog#recordChoiceDialog#destroy (); - GMain.Main.quit () - in - let fail _ = record_no := None; return () in - ignore (dialog#recordChoiceDialog#event#connect#delete (fun _ -> true)); - connect_button dialog#recordChoiceOkButton (fun _ -> - match !record_no with None -> () | Some _ -> return ()); - connect_button dialog#recordChoiceCancelButton fail; -(* ignore (dialog#recordChoiceTreeView#connect#row_activated (fun path _ -> - interp_no := Some (model#get_interp_no path); - return ())); - let selection = dialog#recordChoiceTreeView#selection in - ignore (selection#connect#changed (fun _ -> - match selection#get_selected_rows with - | [path] -> interp_no := Some (model#get_interp_no path) - | _ -> assert false)); *) - dialog#recordChoiceDialog#show (); - GtkThread.main (); - (match !record_no with Some n -> n | _ -> raise MatitaTypes.Cancel) - diff --git a/helm/matita/matitaGtkMisc.mli b/helm/matita/matitaGtkMisc.mli deleted file mode 100644 index 1affd2a39..000000000 --- a/helm/matita/matitaGtkMisc.mli +++ /dev/null @@ -1,157 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -(** {2 Gtk helpers} *) - - (** given a window and a check menu item it links the two so that the former - * is only hidden on delete and the latter toggle show/hide of the former *) -val toggle_window_visibility: - window:GWindow.window -> check:GMenu.check_menu_item -> unit - - (** given a window and a check menu item it links the two so that the former - * is only hidden on delete and the latter toggle show/hide of the former *) -val toggle_widget_visibility: - widget:GObj.widget -> check:GMenu.check_menu_item -> unit - -val toggle_callback: - callback:(bool -> unit) -> check:GMenu.check_menu_item -> unit - -val toggle_win: - ?check:GMenu.check_menu_item -> GWindow.window -> unit -> unit - -val add_key_binding: Gdk.keysym -> (unit -> 'a) -> GBin.event_box -> unit - -(** Connect a callback to the clicked signal of a button, ignoring its return - * value *) -val connect_button: #GButton.button -> (unit -> unit) -> unit - - -(** Connect a callback to the toggled signal of a button, ignoring its return - * value *) -val connect_toggle_button: #GButton.toggle_button -> (unit -> unit) -> unit - -(** Like connect_button above, but connects a callback to the activate signal of - * a menu item *) -val connect_menu_item: #GMenu.menu_item -> (unit -> unit) -> unit - - (** connect a unit -> unit callback to a particular key press event. Event can - * be specified using its keysym and a list of modifiers which must be in - * effect for the callback to be executed. Further signal processing of other - * key press events remains unchanged; further signal processing of the - * specified key press depends on the stop parameter *) -val connect_key: - GObj.event_ops -> - ?modifiers:Gdk.Tags.modifier list -> - ?stop:bool -> (* stop signal handling when the given key has been pressed? - * Defaults to false *) - Gdk.keysym -> (* (= int) the key, see GdkKeysyms.ml *) - (unit -> unit) -> (* callback *) - unit - - (** n-ary string column list *) -class multiStringListModel: - cols:int -> - GTree.view -> - object - method list_store: GTree.list_store (** list_store forwarding *) - - method easy_mappend: string list -> unit (** append + set *) - method easy_minsert: int -> string list -> unit (** insert + set *) - method easy_mselection: unit -> string list list - end - - (** single string column list *) -class stringListModel: - GTree.view -> - object - inherit multiStringListModel - - method easy_append: string -> unit (** append + set *) - method easy_insert: int -> string -> unit (** insert + set *) - method easy_selection: unit -> string list - end - - - (** as above with Pixbuf associated to each row. Each time an insert is - * performed a string tag should be specified, the corresponding pixbuf in the - * tags associative list will be shown on the left of the inserted row *) -class taggedStringListModel: - tags:((string * GdkPixbuf.pixbuf) list) -> - GTree.view -> - object - method list_store: GTree.list_store (** list_store forwarding *) - - method easy_append: tag:string -> string -> unit - method easy_insert: int -> tag:string -> string -> unit - method easy_selection: unit -> string list - end - -(** {2 Matita GUI components} *) - -class type gui = - object (* minimal gui object requirements *) - method newUriDialog: unit -> MatitaGeneratedGui.uriChoiceDialog - method newRecordDialog: unit -> MatitaGeneratedGui.recordChoiceDialog - method newConfirmationDialog: unit -> MatitaGeneratedGui.confirmationDialog - method newEmptyDialog: unit -> MatitaGeneratedGui.emptyDialog - end - - (** {3 Dialogs} - * In functions below: - * @param title window title - * @param message content of the text label shown to the user *) - - (** @param parent to center the window on it *) -val ask_confirmation: - title:string -> message:string -> - ?parent:#GWindow.window_skel -> - unit -> - [`YES | `NO | `CANCEL] - - (** @param multiline (default: false) if true a TextView widget will be used - * for prompting the user otherwise a TextEntry widget will be - * @return the string given by the user *) -val ask_text: - gui:#gui -> - ?title:string -> ?message:string -> - ?multiline:bool -> ?default:string -> unit -> - string - - (** @param fields field names - * @param records list of records, each record is a list of [fields] strings - * @return number of the chosen record, 0 for the first one *) -val ask_record_choice: - gui:#gui -> - ?title:string -> ?message:string -> - fields:string list -> records:string list list -> - unit -> - int - -val report_error: - title:string -> message:string -> - ?parent:#GWindow.window_skel -> - unit -> - unit - diff --git a/helm/matita/matitaGui.ml b/helm/matita/matitaGui.ml deleted file mode 100644 index fe113743b..000000000 --- a/helm/matita/matitaGui.ml +++ /dev/null @@ -1,1183 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -open MatitaGeneratedGui -open MatitaGtkMisc -open MatitaMisc - -exception Found of int - -let gui_instance = ref None - -class type browserWin = - (* this class exists only because GEdit.combo_box_entry is not supported by - * lablgladecc :-(((( *) -object - inherit MatitaGeneratedGui.browserWin - method browserUri: GEdit.combo_box_entry -end - -class console ~(buffer: GText.buffer) () = - object (self) - val error_tag = buffer#create_tag [ `FOREGROUND "red" ] - val warning_tag = buffer#create_tag [ `FOREGROUND "orange" ] - val message_tag = buffer#create_tag [] - val debug_tag = buffer#create_tag [ `FOREGROUND "#888888" ] - method message s = buffer#insert ~iter:buffer#end_iter ~tags:[message_tag] s - method error s = buffer#insert ~iter:buffer#end_iter ~tags:[error_tag] s - method warning s = buffer#insert ~iter:buffer#end_iter ~tags:[warning_tag] s - method debug s = buffer#insert ~iter:buffer#end_iter ~tags:[debug_tag] s - method clear () = - buffer#delete ~start:buffer#start_iter ~stop:buffer#end_iter - method log_callback (tag: MatitaLog.log_tag) s = - match tag with - | `Debug -> self#debug (s ^ "\n") - | `Error -> self#error (s ^ "\n") - | `Message -> self#message (s ^ "\n") - | `Warning -> self#warning (s ^ "\n") - end - -let clean_current_baseuri status = - try - let baseuri = MatitaTypes.get_string_option status "baseuri" in - MatitacleanLib.clean_baseuris [baseuri] - with MatitaTypes.Option_error _ -> () - -let ask_and_save_moo_if_needed parent fname status = - let save () = - let moo_fname = MatitacleanLib.obj_file_of_script fname in - MatitaMoo.save_moo moo_fname status.MatitaTypes.moo_content_rev in - if (MatitaScript.current ())#eos && - status.MatitaTypes.proof_status = MatitaTypes.No_proof - then - begin - let mooname = - MatitacleanLib.obj_file_of_script fname - in - let rc = - MatitaGtkMisc.ask_confirmation - ~title:"A .moo can be generated" - ~message:(Printf.sprintf - "%s can be generated for %s.\nShould I generate it?" - (Filename.basename mooname) (Filename.basename fname)) - ~parent () - in - let b = - match rc with - | `YES -> true - | `NO -> false - | `CANCEL -> raise MatitaTypes.Cancel - in - if b then - save () - else - clean_current_baseuri status - end - else - clean_current_baseuri status - -let ask_unsaved parent = - MatitaGtkMisc.ask_confirmation - ~parent ~title:"Unsaved work!" - ~message:("Your work is unsaved!\n\n"^ - "Do you want to save the script before continuing?") - () - -class gui () = - (* creation order _is_ relevant for windows placement *) - let main = new mainWin () in - let fileSel = new fileSelectionWin () in - let findRepl = new findReplWin () in - let develList = new develListWin () in - let newDevel = new newDevelWin () in - let keyBindingBoxes = (* event boxes which should receive global key events *) - [ main#mainWinEventBox ] - in - let console = new console ~buffer:main#logTextView#buffer () in - let (source_view: GSourceView.source_view) = - GSourceView.source_view - ~auto_indent:true - ~insert_spaces_instead_of_tabs:true ~tabs_width:2 - ~margin:80 ~show_margin:true - ~smart_home_end:true - ~packing:main#scriptScrolledWin#add - () - in - let default_font_size = - Helm_registry.get_opt_default Helm_registry.int - ~default:BuildTimeConf.default_font_size "matita.font_size" - in - let source_buffer = source_view#source_buffer in - object (self) - val mutable chosen_file = None - val mutable _ok_not_exists = false - val mutable _only_directory = false - val mutable script_fname = None - val mutable font_size = default_font_size - val mutable next_devel_must_contain = None - val mutable next_ligatures = [] - - initializer - (* glade's check widgets *) - List.iter (fun w -> w#check_widgets ()) - (let c w = (w :> unit>) in - [ c fileSel; c main; c findRepl]); - (* key bindings *) - List.iter (* global key bindings *) - (fun (key, callback) -> self#addKeyBinding key callback) -(* - [ GdkKeysyms._F3, - toggle_win ~check:main#showProofMenuItem proof#proofWin; - GdkKeysyms._F4, - toggle_win ~check:main#showCheckMenuItem check#checkWin; -*) - [ ]; - (* about win *) - let parse_txt_file file = - let ch = open_in (BuildTimeConf.runtime_base_dir ^ "/" ^ file) in - let l_rev = ref [] in - try - while true do - l_rev := input_line ch :: !l_rev; - done; - assert false - with - End_of_file -> - close_in ch; - List.rev !l_rev in - let about_dialog = - GWindow.about_dialog - ~authors:(parse_txt_file "AUTHORS") - (*~comments:"comments"*) - ~copyright:"Copyright (C) 2005, the HELM team" - ~license:(String.concat "\n" (parse_txt_file "LICENSE")) - ~logo:(GdkPixbuf.from_file (MatitaMisc.image_path "/matita_medium.png")) - ~name:"Matita" - ~version:BuildTimeConf.version - ~website:"http://helm.cs.unibo.it" - () - in - connect_menu_item main#aboutMenuItem about_dialog#present; - (* findRepl win *) - let show_find_Repl () = - findRepl#toplevel#misc#show (); - findRepl#toplevel#misc#grab_focus () - in - let hide_find_Repl () = findRepl#toplevel#misc#hide () in - let find_forward _ = - let highlight start end_ = - source_buffer#move_mark `INSERT ~where:start; - source_buffer#move_mark `SEL_BOUND ~where:end_; - source_view#scroll_mark_onscreen `INSERT - in - let text = findRepl#findEntry#text in - let iter = source_buffer#get_iter `SEL_BOUND in - match iter#forward_search text with - | None -> - (match source_buffer#start_iter#forward_search text with - | None -> () - | Some (start,end_) -> highlight start end_) - | Some (start,end_) -> highlight start end_ - in - let replace _ = - let text = findRepl#replaceEntry#text in - let ins = source_buffer#get_iter `INSERT in - let sel = source_buffer#get_iter `SEL_BOUND in - if ins#compare sel < 0 then - begin - ignore(source_buffer#delete_selection ()); - source_buffer#insert text - end - in - connect_button findRepl#findButton find_forward; - connect_button findRepl#findReplButton replace; - connect_button findRepl#cancelButton (fun _ -> hide_find_Repl ()); - ignore(findRepl#toplevel#event#connect#delete - ~callback:(fun _ -> hide_find_Repl ();true)); - let safe_undo = - fun () -> - (* phase 1: we save the actual status of the marks and we undo *) - let locked_mark = `MARK ((MatitaScript.current ())#locked_mark) in - let locked_iter = source_view#buffer#get_iter_at_mark locked_mark in - let locked_iter_offset = locked_iter#offset in - let mark2 = - `MARK - (source_view#buffer#create_mark ~name:"lock_point" - ~left_gravity:true locked_iter) in - source_view#source_buffer#undo (); - (* phase 2: we save the cursor position and we redo, restoring - the previous status of all the marks *) - let cursor_iter = source_view#buffer#get_iter_at_mark `INSERT in - let mark = - `MARK - (source_view#buffer#create_mark ~name:"undo_point" - ~left_gravity:true cursor_iter) - in - source_view#source_buffer#redo (); - let mark_iter = source_view#buffer#get_iter_at_mark mark in - let mark2_iter = source_view#buffer#get_iter_at_mark mark2 in - let mark2_iter = mark2_iter#set_offset locked_iter_offset in - source_view#buffer#move_mark locked_mark ~where:mark2_iter; - source_view#buffer#delete_mark mark; - source_view#buffer#delete_mark mark2; - (* phase 3: if after the undo the cursor was in the locked area, - then we move it there again and we perform a goto *) - if mark_iter#offset < locked_iter_offset then - begin - source_view#buffer#move_mark `INSERT ~where:mark_iter; - (MatitaScript.current ())#goto `Cursor (); - end; - (* phase 4: we perform again the undo. This time we are sure that - the text to undo is not locked *) - source_view#source_buffer#undo (); - source_view#misc#grab_focus () in - let safe_redo = - fun () -> - (* phase 1: we save the actual status of the marks, we redo and - we undo *) - let locked_mark = `MARK ((MatitaScript.current ())#locked_mark) in - let locked_iter = source_view#buffer#get_iter_at_mark locked_mark in - let locked_iter_offset = locked_iter#offset in - let mark2 = - `MARK - (source_view#buffer#create_mark ~name:"lock_point" - ~left_gravity:true locked_iter) in - source_view#source_buffer#redo (); - source_view#source_buffer#undo (); - (* phase 2: we save the cursor position and we restore - the previous status of all the marks *) - let cursor_iter = source_view#buffer#get_iter_at_mark `INSERT in - let mark = - `MARK - (source_view#buffer#create_mark ~name:"undo_point" - ~left_gravity:true cursor_iter) - in - let mark_iter = source_view#buffer#get_iter_at_mark mark in - let mark2_iter = source_view#buffer#get_iter_at_mark mark2 in - let mark2_iter = mark2_iter#set_offset locked_iter_offset in - source_view#buffer#move_mark locked_mark ~where:mark2_iter; - source_view#buffer#delete_mark mark; - source_view#buffer#delete_mark mark2; - (* phase 3: if after the undo the cursor is in the locked area, - then we move it there again and we perform a goto *) - if mark_iter#offset < locked_iter_offset then - begin - source_view#buffer#move_mark `INSERT ~where:mark_iter; - (MatitaScript.current ())#goto `Cursor (); - end; - (* phase 4: we perform again the redo. This time we are sure that - the text to redo is not locked *) - source_view#source_buffer#redo (); - source_view#misc#grab_focus () - in - connect_menu_item main#undoMenuItem safe_undo; - ignore(source_view#source_buffer#connect#can_undo - ~callback:main#undoMenuItem#misc#set_sensitive); - connect_menu_item main#redoMenuItem safe_redo; - ignore(source_view#source_buffer#connect#can_redo - ~callback:main#redoMenuItem#misc#set_sensitive); - ignore(source_view#connect#after#populate_popup - ~callback:(fun pre_menu -> - let menu = new GMenu.menu pre_menu in - let menuItems = menu#children in - let undoMenuItem, redoMenuItem = - match menuItems with - [undo;redo;sep1;cut;copy;paste;delete;sep2; - selectall;sep3;inputmethod;insertunicodecharacter] -> undo,redo - | _ -> assert false in - let new_undoMenuItem = - GMenu.image_menu_item - ~image:(GMisc.image ~stock:`UNDO ()) - ~use_mnemonic:true - ~label:"_Undo" - ~packing:(menu#insert ~pos:0) () in - new_undoMenuItem#misc#set_sensitive - (undoMenuItem#misc#get_flag `SENSITIVE); - menu#remove (undoMenuItem :> GMenu.menu_item); - connect_menu_item new_undoMenuItem safe_undo; - let new_redoMenuItem = - GMenu.image_menu_item - ~image:(GMisc.image ~stock:`REDO ()) - ~use_mnemonic:true - ~label:"_Redo" - ~packing:(menu#insert ~pos:1) () in - new_redoMenuItem#misc#set_sensitive - (redoMenuItem#misc#get_flag `SENSITIVE); - menu#remove (redoMenuItem :> GMenu.menu_item); - connect_menu_item new_redoMenuItem safe_redo)); - let clipboard = GData.clipboard Gdk.Atom.clipboard in - let text_selected () = - (source_buffer#get_iter_at_mark `INSERT)#compare - (source_buffer#get_iter_at_mark `SEL_BOUND) <> 0 - in - let markup_selected () = MatitaMathView.get_selections () <> None in - connect_menu_item main#editMenu (fun () -> - let text_selected = text_selected () in - let markup_selected = markup_selected () in - let something_selected = text_selected || markup_selected in - main#cutMenuItem#misc#set_sensitive text_selected; - main#copyMenuItem#misc#set_sensitive something_selected; - main#deleteMenuItem#misc#set_sensitive text_selected; - main#pasteMenuItem#misc#set_sensitive (clipboard#text <> None)); - connect_menu_item main#cutMenuItem (fun () -> - source_view#buffer#cut_clipboard clipboard); - connect_menu_item main#copyMenuItem (fun () -> - if text_selected () then - source_view#buffer#copy_clipboard clipboard - else if markup_selected () then - match MatitaMathView.get_selections () with - | None - | Some [] -> () - | Some (s :: _) -> clipboard#set_text s); - connect_menu_item main#pasteMenuItem (fun () -> - source_view#buffer#paste_clipboard clipboard; - (MatitaScript.current ())#clean_dirty_lock); - connect_menu_item main#deleteMenuItem (fun () -> - ignore (source_view#buffer#delete_selection ())); - connect_menu_item main#selectAllMenuItem (fun () -> - source_buffer#move_mark `INSERT source_buffer#start_iter; - source_buffer#move_mark `SEL_BOUND source_buffer#end_iter); - connect_menu_item main#findReplMenuItem show_find_Repl; - connect_menu_item main#externalEditorMenuItem self#externalEditor; - connect_menu_item main#ligatureButton self#nextLigature; - ignore (findRepl#findEntry#connect#activate find_forward); - (* interface lockers *) - let lock_world _ = - main#buttonsToolbar#misc#set_sensitive false; - develList#buttonsHbox#misc#set_sensitive false; - source_view#set_editable false - in - let unlock_world _ = - main#buttonsToolbar#misc#set_sensitive true; - develList#buttonsHbox#misc#set_sensitive true; - source_view#set_editable true - in - let locker f = - fun () -> - lock_world (); - try f ();unlock_world () with exc -> unlock_world (); raise exc in - let keep_focus f = - fun () -> - try - f (); source_view#misc#grab_focus () - with - exc -> source_view#misc#grab_focus (); raise exc in - (* developments win *) - let model = - new MatitaGtkMisc.multiStringListModel - ~cols:2 develList#developmentsTreeview - in - let refresh_devels_win () = - model#list_store#clear (); - List.iter - (fun (name, root) -> model#easy_mappend [name;root]) - (MatitamakeLib.list_known_developments ()) - in - let get_devel_selected () = - match model#easy_mselection () with - | [[name;_]] -> MatitamakeLib.development_for_name name - | _ -> None - in - let refresh () = - while Glib.Main.pending () do - ignore(Glib.Main.iteration false); - done - in - connect_button develList#newButton - (fun () -> - next_devel_must_contain <- None; - newDevel#toplevel#misc#show()); - connect_button develList#deleteButton - (locker (fun () -> - (match get_devel_selected () with - | None -> () - | Some d -> MatitamakeLib.destroy_development_in_bg refresh d); - refresh_devels_win ())); - connect_button develList#buildButton - (locker (fun () -> - match get_devel_selected () with - | None -> () - | Some d -> - let build = locker - (fun () -> MatitamakeLib.build_development_in_bg refresh d) - in - ignore(build ()))); - connect_button develList#cleanButton - (locker (fun () -> - match get_devel_selected () with - | None -> () - | Some d -> - let clean = locker - (fun () -> MatitamakeLib.clean_development_in_bg refresh d) - in - ignore(clean ()))); - connect_button develList#closeButton - (fun () -> develList#toplevel#misc#hide()); - ignore(develList#toplevel#event#connect#delete - (fun _ -> develList#toplevel#misc#hide();true)); - let selected_devel = ref None in - connect_menu_item main#developmentsMenuItem - (fun () -> refresh_devels_win ();develList#toplevel#misc#show ()); - - (* add development win *) - let check_if_root_contains root = - match next_devel_must_contain with - | None -> true - | Some path -> - let is_prefix_of d1 d2 = - let len1 = String.length d1 in - let len2 = String.length d2 in - if len2 < len1 then - false - else - let pref = String.sub d2 0 len1 in - pref = d1 - in - is_prefix_of root path - in - connect_button newDevel#addButton - (fun () -> - let name = newDevel#nameEntry#text in - let root = newDevel#rootEntry#text in - if check_if_root_contains root then - begin - ignore (MatitamakeLib.initialize_development name root); - refresh_devels_win (); - newDevel#nameEntry#set_text ""; - newDevel#rootEntry#set_text ""; - newDevel#toplevel#misc#hide() - end - else - MatitaLog.error ("The selected root does not contain " ^ - match next_devel_must_contain with - | Some x -> x - | _ -> assert false)); - connect_button newDevel#chooseRootButton - (fun () -> - let path = self#chooseDir () in - match path with - | Some path -> newDevel#rootEntry#set_text path - | None -> ()); - connect_button newDevel#cancelButton - (fun () -> newDevel#toplevel#misc#hide ()); - ignore(newDevel#toplevel#event#connect#delete - (fun _ -> newDevel#toplevel#misc#hide();true)); - - (* file selection win *) - ignore (fileSel#fileSelectionWin#event#connect#delete (fun _ -> true)); - ignore (fileSel#fileSelectionWin#connect#response (fun event -> - let return r = - chosen_file <- r; - fileSel#fileSelectionWin#misc#hide (); - GMain.Main.quit () - in - match event with - | `OK -> - let fname = fileSel#fileSelectionWin#filename in - if Sys.file_exists fname then - begin - if HExtlib.is_regular fname && not (_only_directory) then - return (Some fname) - else if _only_directory && HExtlib.is_dir fname then - return (Some fname) - end - else - begin - if _ok_not_exists then - return (Some fname) - end - | `CANCEL -> return None - | `HELP -> () - | `DELETE_EVENT -> return None)); - (* menus *) - List.iter (fun w -> w#misc#set_sensitive false) [ main#saveMenuItem ]; - (* console *) - let adj = main#logScrolledWin#vadjustment in - ignore (adj#connect#changed - (fun _ -> adj#set_value (adj#upper -. adj#page_size))); - console#message (sprintf "\tMatita version %s\n" BuildTimeConf.version); - (* toolbar *) - let module A = GrafiteAst in - let hole = CicNotationPt.UserInput in - let loc = DisambiguateTypes.dummy_floc in - let tac ast _ = - if (MatitaScript.current ())#onGoingProof () then - (MatitaScript.current ())#advance - ~statement:("\n" ^ GrafiteAstPp.pp_tactical (A.Tactic (loc, ast))) - () - in - let tac_w_term ast _ = - if (MatitaScript.current ())#onGoingProof () then - let buf = source_buffer in - buf#insert ~iter:(buf#get_iter_at_mark (`NAME "locked")) - ("\n" ^ GrafiteAstPp.pp_tactic ast) - in - let tbar = main in - connect_button tbar#introsButton (tac (A.Intros (loc, None, []))); - connect_button tbar#applyButton (tac_w_term (A.Apply (loc, hole))); - connect_button tbar#exactButton (tac_w_term (A.Exact (loc, hole))); - connect_button tbar#elimButton (tac_w_term - (A.Elim (loc, hole, None, None, []))); - connect_button tbar#elimTypeButton (tac_w_term - (A.ElimType (loc, hole, None, None, []))); - connect_button tbar#splitButton (tac (A.Split loc)); - connect_button tbar#leftButton (tac (A.Left loc)); - connect_button tbar#rightButton (tac (A.Right loc)); - connect_button tbar#existsButton (tac (A.Exists loc)); - connect_button tbar#reflexivityButton (tac (A.Reflexivity loc)); - connect_button tbar#symmetryButton (tac (A.Symmetry loc)); - connect_button tbar#transitivityButton - (tac_w_term (A.Transitivity (loc, hole))); - connect_button tbar#assumptionButton (tac (A.Assumption loc)); - connect_button tbar#cutButton (tac_w_term (A.Cut (loc, None, hole))); - connect_button tbar#autoButton (tac (A.Auto (loc,None,None,None,None))); - MatitaGtkMisc.toggle_widget_visibility - ~widget:(main#tacticsButtonsHandlebox :> GObj.widget) - ~check:main#tacticsBarMenuItem; - let module Hr = Helm_registry in - if - not (Hr.get_opt_default Hr.bool ~default:false "matita.tactics_bar") - then - main#tacticsBarMenuItem#set_active false; - MatitaGtkMisc.toggle_callback - ~callback:(function - | true -> main#toplevel#fullscreen () - | false -> main#toplevel#unfullscreen ()) - ~check:main#fullscreenMenuItem; - main#fullscreenMenuItem#set_active false; - (* log *) - MatitaLog.set_log_callback self#console#log_callback; - GtkSignal.user_handler := - (fun exn -> - if not (Helm_registry.get_bool "matita.debug") then - MatitaLog.error (MatitaExcPp.to_string exn) - else raise exn); - (* script *) - ignore (source_buffer#connect#mark_set (fun _ _ -> next_ligatures <- [])); - let _ = - match GSourceView.source_language_from_file BuildTimeConf.lang_file with - | None -> - MatitaLog.warn (sprintf "can't load language file %s" - BuildTimeConf.lang_file) - | Some matita_lang -> - source_buffer#set_language matita_lang; - source_buffer#set_highlight true - in - let s () = MatitaScript.current () in - let disableSave () = - script_fname <- None; - main#saveMenuItem#misc#set_sensitive false - in - let saveAsScript () = - let script = s () in - match self#chooseFile ~ok_not_exists:true () with - | Some f -> - script#assignFileName f; - script#saveToFile (); - console#message ("'"^f^"' saved.\n"); - self#_enableSaveTo f - | None -> () - in - let saveScript () = - match script_fname with - | None -> saveAsScript () - | Some f -> - (s ())#assignFileName f; - (s ())#saveToFile (); - console#message ("'"^f^"' saved.\n"); - in - let abandon_script () = - let status = (s ())#status in - if source_view#buffer#modified then - (match ask_unsaved main#toplevel with - | `YES -> saveScript () - | `NO -> () - | `CANCEL -> raise MatitaTypes.Cancel); - (match script_fname with - | None -> () - | Some fname -> ask_and_save_moo_if_needed main#toplevel fname status); - in - let loadScript () = - let script = s () in - let status = script#status in - try - match self#chooseFile () with - | Some f -> - abandon_script (); - script#reset (); - script#assignFileName f; - source_view#source_buffer#begin_not_undoable_action (); - script#loadFromFile f; - source_view#source_buffer#end_not_undoable_action (); - console#message ("'"^f^"' loaded.\n"); - self#_enableSaveTo f - | None -> () - with MatitaTypes.Cancel -> () - in - let newScript () = - abandon_script (); - source_view#source_buffer#begin_not_undoable_action (); - (s ())#reset (); - (s ())#template (); - source_view#source_buffer#end_not_undoable_action (); - disableSave (); - script_fname <- None - in - let cursor () = - source_buffer#place_cursor - (source_buffer#get_iter_at_mark (`NAME "locked")) in - let advance _ = (MatitaScript.current ())#advance (); cursor () in - let retract _ = (MatitaScript.current ())#retract (); cursor () in - let top _ = (MatitaScript.current ())#goto `Top (); cursor () in - let bottom _ = (MatitaScript.current ())#goto `Bottom (); cursor () in - let jump _ = (MatitaScript.current ())#goto `Cursor (); cursor () in - let advance = locker (keep_focus advance) in - let retract = locker (keep_focus retract) in - let top = locker (keep_focus top) in - let bottom = locker (keep_focus bottom) in - let jump = locker (keep_focus jump) in - let connect_key sym f = - connect_key main#mainWinEventBox#event - ~modifiers:[`CONTROL] ~stop:true sym f; - connect_key self#sourceView#event - ~modifiers:[`CONTROL] ~stop:true sym f - in - (* quit *) - self#setQuitCallback (fun () -> - let status = (MatitaScript.current ())#status in - if source_view#buffer#modified then - begin - let rc = ask_unsaved main#toplevel in - try - match rc with - | `YES -> saveScript (); - if not source_view#buffer#modified then - begin - (match script_fname with - | None -> () - | Some fname -> - ask_and_save_moo_if_needed - main#toplevel fname status); - GMain.Main.quit () - end - | `NO -> GMain.Main.quit () - | `CANCEL -> raise MatitaTypes.Cancel - with MatitaTypes.Cancel -> () - end - else - begin - (match script_fname with - | None -> clean_current_baseuri status; GMain.Main.quit () - | Some fname -> - try - ask_and_save_moo_if_needed main#toplevel fname status; - GMain.Main.quit () - with MatitaTypes.Cancel -> ()) - end); - connect_button main#scriptAdvanceButton advance; - connect_button main#scriptRetractButton retract; - connect_button main#scriptTopButton top; - connect_button main#scriptBottomButton bottom; - connect_button main#scriptJumpButton jump; - connect_menu_item main#scriptAdvanceMenuItem advance; - connect_menu_item main#scriptRetractMenuItem retract; - connect_menu_item main#scriptTopMenuItem top; - connect_menu_item main#scriptBottomMenuItem bottom; - connect_menu_item main#scriptJumpMenuItem jump; - connect_menu_item main#openMenuItem loadScript; - connect_menu_item main#saveMenuItem saveScript; - connect_menu_item main#saveAsMenuItem saveAsScript; - connect_menu_item main#newMenuItem newScript; - (* script monospace font stuff *) - self#updateFontSize (); - (* debug menu *) - main#debugMenu#misc#hide (); - (* status bar *) - main#hintLowImage#set_file (image_path "matita-bulb-low.png"); - main#hintMediumImage#set_file (image_path "matita-bulb-medium.png"); - main#hintHighImage#set_file (image_path "matita-bulb-high.png"); - (* focus *) - self#sourceView#misc#grab_focus (); - (* main win dimension *) - let width = Gdk.Screen.width () in - let height = Gdk.Screen.height () in - let main_w = width * 90 / 100 in - let main_h = height * 80 / 100 in - let script_w = main_w * 6 / 10 in - main#toplevel#resize ~width:main_w ~height:main_h; - main#hpaneScriptSequent#set_position script_w; - (* source_view *) - ignore(source_view#connect#after#paste_clipboard - ~callback:(fun () -> (MatitaScript.current ())#clean_dirty_lock)); - (* clean_locked is set to true only "during" a PRIMARY paste - operation (i.e. by clicking with the second mouse button) *) - let clean_locked = ref false in - ignore(source_view#event#connect#button_press - ~callback: - (fun button -> - if GdkEvent.Button.button button = 2 then - clean_locked := true; - false - )); - ignore(source_view#event#connect#button_release - ~callback:(fun button -> clean_locked := false; false)); - ignore(source_view#buffer#connect#after#apply_tag - ~callback:( - fun tag ~start:_ ~stop:_ -> - if !clean_locked && - tag#get_oid = (MatitaScript.current ())#locked_tag#get_oid - then - begin - clean_locked := false; - (MatitaScript.current ())#clean_dirty_lock; - clean_locked := true - end)); - (* math view handling *) - connect_menu_item main#newCicBrowserMenuItem (fun () -> - ignore (MatitaMathView.cicBrowser ())); - connect_menu_item main#increaseFontSizeMenuItem (fun () -> - self#increaseFontSize (); - MatitaMathView.increase_font_size (); - MatitaMathView.update_font_sizes ()); - connect_menu_item main#decreaseFontSizeMenuItem (fun () -> - self#decreaseFontSize (); - MatitaMathView.decrease_font_size (); - MatitaMathView.update_font_sizes ()); - connect_menu_item main#normalFontSizeMenuItem (fun () -> - self#resetFontSize (); - MatitaMathView.reset_font_size (); - MatitaMathView.update_font_sizes ()); - MatitaMathView.reset_font_size (); - - method private nextLigature () = - let iter = source_buffer#get_iter_at_mark `INSERT in - let write_ligature len s = - source_buffer#delete ~start:iter ~stop:(iter#copy#backward_chars len); - source_buffer#insert ~iter:(source_buffer#get_iter_at_mark `INSERT) s - in - let get_ligature word = - let len = String.length word in - let aux_tex () = - try - for i = len - 1 downto 0 do - if HExtlib.is_alpha word.[i] then () - else - (if word.[i] = '\\' then raise (Found i) else raise (Found ~-1)) - done; - None - with Found i -> - if i = ~-1 then None else Some (String.sub word i (len - i)) - in - let aux_ligature () = - try - for i = len - 1 downto 0 do - if CicNotationLexer.is_ligature_char word.[i] then () - else raise (Found (i+1)) - done; - raise (Found 0) - with - | Found i -> - (try - Some (String.sub word i (len - i)) - with Invalid_argument _ -> None) - in - match aux_tex () with - | Some macro -> macro - | None -> (match aux_ligature () with Some l -> l | None -> word) - in - (match next_ligatures with - | [] -> (* find ligatures and fill next_ligatures, then try again *) - let last_word = - iter#get_slice - ~stop:(iter#copy#backward_find_char Glib.Unichar.isspace) - in - let ligature = get_ligature last_word in - (match CicNotationLexer.lookup_ligatures ligature with - | [] -> () - | hd :: tl -> - write_ligature (String.length ligature) hd; - next_ligatures <- tl @ [ hd ]) - | hd :: tl -> - write_ligature 1 hd; - next_ligatures <- tl @ [ hd ]) - - method private externalEditor () = - let cmd = Helm_registry.get "matita.external_editor" in -(* ZACK uncomment to enable interactive ask of external editor command *) -(* let cmd = - let msg = - "External editor command: -%f will be substitute for the script name, -%p for the cursor position in bytes, -%l for the execution point in bytes." - in - ask_text ~gui:self ~title:"External editor" ~msg ~multiline:false - ~default:(Helm_registry.get "matita.external_editor") () - in *) - let fname = (MatitaScript.current ())#filename in - let slice mark = - source_buffer#start_iter#get_slice - ~stop:(source_buffer#get_iter_at_mark mark) - in - let script = MatitaScript.current () in - let locked = `MARK script#locked_mark in - let string_pos mark = string_of_int (String.length (slice mark)) in - let cursor_pos = string_pos `INSERT in - let locked_pos = string_pos locked in - let cmd = - Pcre.replace ~pat:"%f" ~templ:fname - (Pcre.replace ~pat:"%p" ~templ:cursor_pos - (Pcre.replace ~pat:"%l" ~templ:locked_pos - cmd)) - in - let locked_before = slice locked in - let locked_offset = (source_buffer#get_iter_at_mark locked)#offset in - ignore (Unix.system cmd); - source_buffer#set_text (HExtlib.input_file fname); - let locked_iter = source_buffer#get_iter (`OFFSET locked_offset) in - source_buffer#move_mark locked locked_iter; - source_buffer#apply_tag script#locked_tag - ~start:source_buffer#start_iter ~stop:locked_iter; - let locked_after = slice locked in - let line = ref 0 in - let col = ref 0 in - try - for i = 0 to String.length locked_before - 1 do - if locked_before.[i] <> locked_after.[i] then begin - source_buffer#place_cursor - ~where:(source_buffer#get_iter (`LINEBYTE (!line, !col))); - script#goto `Cursor (); - raise Exit - end else if locked_before.[i] = '\n' then begin - incr line; - col := 0 - end - done - with - | Exit -> () - | Invalid_argument _ -> script#goto `Bottom () - - method loadScript file = - let script = MatitaScript.current () in - script#reset (); - script#assignFileName file; - let content = - if Sys.file_exists file then file - else BuildTimeConf.script_template - in - source_view#source_buffer#begin_not_undoable_action (); - script#loadFromFile content; - source_view#source_buffer#end_not_undoable_action (); - console#message ("'"^file^"' loaded."); - self#_enableSaveTo file - - method setStar name b = - let l = main#scriptLabel in - if b then - l#set_text (name ^ " *") - else - l#set_text (name) - - method private _enableSaveTo file = - script_fname <- Some file; - self#main#saveMenuItem#misc#set_sensitive true - - method console = console - method sourceView: GSourceView.source_view = - (source_view: GSourceView.source_view) - method fileSel = fileSel - method findRepl = findRepl - method main = main - method develList = develList - method newDevel = newDevel - - method newBrowserWin () = - object (self) - inherit browserWin () - val combo = GEdit.combo_box_entry () - initializer - self#check_widgets (); - let combo_widget = combo#coerce in - uriHBox#pack ~from:`END ~fill:true ~expand:true combo_widget; - combo#entry#misc#grab_focus () - method browserUri = combo - end - - method newUriDialog () = - let dialog = new uriChoiceDialog () in - dialog#check_widgets (); - dialog - - method newRecordDialog () = - let dialog = new recordChoiceDialog () in - dialog#check_widgets (); - dialog - - method newConfirmationDialog () = - let dialog = new confirmationDialog () in - dialog#check_widgets (); - dialog - - method newEmptyDialog () = - let dialog = new emptyDialog () in - dialog#check_widgets (); - dialog - - method private addKeyBinding key callback = - List.iter (fun evbox -> add_key_binding key callback evbox) - keyBindingBoxes - - method setQuitCallback callback = - connect_menu_item main#quitMenuItem callback; - ignore (main#toplevel#event#connect#delete - (fun _ -> callback ();true)); - self#addKeyBinding GdkKeysyms._q callback - - method chooseFile ?(ok_not_exists = false) () = - _ok_not_exists <- ok_not_exists; - _only_directory <- false; - fileSel#fileSelectionWin#show (); - GtkThread.main (); - chosen_file - - method private chooseDir ?(ok_not_exists = false) () = - _ok_not_exists <- ok_not_exists; - _only_directory <- true; - fileSel#fileSelectionWin#show (); - GtkThread.main (); - (* we should check that this is a directory *) - chosen_file - - method createDevelopment ~containing = - next_devel_must_contain <- containing; - newDevel#toplevel#misc#show() - - method askText ?(title = "") ?(msg = "") () = - let dialog = new textDialog () in - dialog#textDialog#set_title title; - dialog#textDialogLabel#set_label msg; - let text = ref None in - let return v = - text := v; - dialog#textDialog#destroy (); - GMain.Main.quit () - in - ignore (dialog#textDialog#event#connect#delete (fun _ -> true)); - connect_button dialog#textDialogCancelButton (fun _ -> return None); - connect_button dialog#textDialogOkButton (fun _ -> - let text = dialog#textDialogTextView#buffer#get_text () in - return (Some text)); - dialog#textDialog#show (); - GtkThread.main (); - !text - - method private updateFontSize () = - self#sourceView#misc#modify_font_by_name - (sprintf "%s %d" BuildTimeConf.script_font font_size) - - method increaseFontSize () = - font_size <- font_size + 1; - self#updateFontSize () - - method decreaseFontSize () = - font_size <- font_size - 1; - self#updateFontSize () - - method resetFontSize () = - font_size <- default_font_size; - self#updateFontSize () - - end - -let gui () = - let g = new gui () in - gui_instance := Some g; - MatitaMathView.set_gui g; - g - -let instance = singleton gui - -let non p x = not (p x) - -(* this is a shit and should be changed :-{ *) -let interactive_uri_choice - ?(selection_mode:[`SINGLE|`MULTIPLE] = `MULTIPLE) ?(title = "") - ?(msg = "") ?(nonvars_button = false) ?(hide_uri_entry=false) - ?(hide_try=false) ?(ok_label="_Auto") ?(ok_action:[`SELECT|`AUTO] = `AUTO) - ?copy_cb () - ~id uris -= - let gui = instance () in - let nonvars_uris = lazy (List.filter (non UriManager.uri_is_var) uris) in - if (selection_mode <> `SINGLE) && - (Helm_registry.get_bool "matita.auto_disambiguation") - then - Lazy.force nonvars_uris - else begin - let dialog = gui#newUriDialog () in - if hide_uri_entry then - dialog#uriEntryHBox#misc#hide (); - if hide_try then - begin - dialog#uriChoiceSelectedButton#misc#hide (); - dialog#uriChoiceConstantsButton#misc#hide (); - end; - dialog#okLabel#set_label ok_label; - dialog#uriChoiceTreeView#selection#set_mode - (selection_mode :> Gtk.Tags.selection_mode); - let model = new stringListModel dialog#uriChoiceTreeView in - let choices = ref None in - let nonvars = ref false in - (match copy_cb with - | None -> () - | Some cb -> - dialog#copyButton#misc#show (); - connect_button dialog#copyButton - (fun _ -> - match model#easy_selection () with - | [u] -> (cb u) - | _ -> ())); - dialog#uriChoiceDialog#set_title title; - dialog#uriChoiceLabel#set_text msg; - List.iter model#easy_append (List.map UriManager.string_of_uri uris); - dialog#uriChoiceConstantsButton#misc#set_sensitive nonvars_button; - let return v = - choices := v; - dialog#uriChoiceDialog#destroy (); - GMain.Main.quit () - in - ignore (dialog#uriChoiceDialog#event#connect#delete (fun _ -> true)); - connect_button dialog#uriChoiceConstantsButton (fun _ -> - return (Some (Lazy.force nonvars_uris))); - if ok_action = `AUTO then - connect_button dialog#uriChoiceAutoButton (fun _ -> - Helm_registry.set_bool "matita.auto_disambiguation" true; - return (Some (Lazy.force nonvars_uris))) - else - connect_button dialog#uriChoiceAutoButton (fun _ -> - match model#easy_selection () with - | [] -> () - | uris -> return (Some (List.map UriManager.uri_of_string uris))); - connect_button dialog#uriChoiceSelectedButton (fun _ -> - match model#easy_selection () with - | [] -> () - | uris -> return (Some (List.map UriManager.uri_of_string uris))); - connect_button dialog#uriChoiceAbortButton (fun _ -> return None); - dialog#uriChoiceDialog#show (); - GtkThread.main (); - (match !choices with - | None -> raise MatitaTypes.Cancel - | Some uris -> uris) - end - -class interpModel = - let cols = new GTree.column_list in - let id_col = cols#add Gobject.Data.string in - let dsc_col = cols#add Gobject.Data.string in - let interp_no_col = cols#add Gobject.Data.int in - let tree_store = GTree.tree_store cols in - let id_renderer = GTree.cell_renderer_text [], ["text", id_col] in - let dsc_renderer = GTree.cell_renderer_text [], ["text", dsc_col] in - let id_view_col = GTree.view_column ~renderer:id_renderer () in - let dsc_view_col = GTree.view_column ~renderer:dsc_renderer () in - fun tree_view choices -> - object - initializer - tree_view#set_model (Some (tree_store :> GTree.model)); - ignore (tree_view#append_column id_view_col); - ignore (tree_view#append_column dsc_view_col); - let name_of_interp = - (* try to find a reasonable name for an interpretation *) - let idx = ref 0 in - fun interp -> - try - List.assoc "0" interp - with Not_found -> - incr idx; string_of_int !idx - in - tree_store#clear (); - let idx = ref ~-1 in - List.iter - (fun interp -> - incr idx; - let interp_row = tree_store#append () in - tree_store#set ~row:interp_row ~column:id_col - (name_of_interp interp); - tree_store#set ~row:interp_row ~column:interp_no_col !idx; - List.iter - (fun (id, dsc) -> - let row = tree_store#append ~parent:interp_row () in - tree_store#set ~row ~column:id_col id; - tree_store#set ~row ~column:dsc_col dsc; - tree_store#set ~row ~column:interp_no_col !idx) - interp) - choices - - method get_interp_no tree_path = - let iter = tree_store#get_iter tree_path in - tree_store#get ~row:iter ~column:interp_no_col - end - -let interactive_interp_choice () choices = - let gui = instance () in - assert (choices <> []); - let dialog = gui#newRecordDialog () in - let model = new interpModel dialog#recordChoiceTreeView choices in - let interp_len = List.length (List.hd choices) in - dialog#recordChoiceDialog#set_title "Interpretation choice"; - dialog#recordChoiceDialogLabel#set_label "Choose an interpretation:"; - let interp_no = ref None in - let return _ = - dialog#recordChoiceDialog#destroy (); - GMain.Main.quit () - in - let fail _ = interp_no := None; return () in - ignore (dialog#recordChoiceDialog#event#connect#delete (fun _ -> true)); - connect_button dialog#recordChoiceOkButton (fun _ -> - match !interp_no with None -> () | Some _ -> return ()); - connect_button dialog#recordChoiceCancelButton fail; - ignore (dialog#recordChoiceTreeView#connect#row_activated (fun path _ -> - interp_no := Some (model#get_interp_no path); - return ())); - let selection = dialog#recordChoiceTreeView#selection in - ignore (selection#connect#changed (fun _ -> - match selection#get_selected_rows with - | [path] -> interp_no := Some (model#get_interp_no path) - | _ -> assert false)); - dialog#recordChoiceDialog#show (); - GtkThread.main (); - (match !interp_no with Some row -> [row] | _ -> raise MatitaTypes.Cancel) - -let _ = - (* disambiguator callbacks *) - MatitaDisambiguator.set_choose_uris_callback (interactive_uri_choice ()); - MatitaDisambiguator.set_choose_interp_callback (interactive_interp_choice ()); - (* gtk initialization *) - GtkMain.Rc.add_default_file BuildTimeConf.gtkrc_file; (* loads gtk rc *) - GMathView.add_configuration_path BuildTimeConf.gtkmathview_conf; - ignore (GMain.Main.init ()) - diff --git a/helm/matita/matitaGui.mli b/helm/matita/matitaGui.mli deleted file mode 100644 index b82cb3947..000000000 --- a/helm/matita/matitaGui.mli +++ /dev/null @@ -1,49 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - - (** singleton instance of the gui *) -val instance: unit -> MatitaGuiTypes.gui - - (** {2 Disambiguation callbacks} - * Use singleton gui instance. *) - - (** @param selection_mode selection mode in uri list, default to `MULTIPLE - * @param title window title, defaults to "" - * @param msg message for the user, defaults to "" - * @param nonvars_button enable button to exclude vars?, defaults to false - * @raise MatitaTypes.Cancel *) -val interactive_uri_choice: - ?selection_mode:([`SINGLE|`MULTIPLE]) -> ?title:string -> - ?msg:string -> ?nonvars_button:bool -> - ?hide_uri_entry:bool -> ?hide_try:bool -> ?ok_label:string -> - ?ok_action:[`AUTO|`SELECT] -> - ?copy_cb:(string -> unit) -> unit -> - MatitaDisambiguator.choose_uris_callback - - (** @raise MatitaTypes.Cancel *) -val interactive_interp_choice: - unit -> - MatitaDisambiguator.choose_interp_callback - diff --git a/helm/matita/matitaGuiTypes.mli b/helm/matita/matitaGuiTypes.mli deleted file mode 100644 index 99b90495f..000000000 --- a/helm/matita/matitaGuiTypes.mli +++ /dev/null @@ -1,131 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -class type console = -object - method message: string -> unit - method error: string -> unit - method warning: string -> unit - method debug: string -> unit - method clear: unit -> unit - - method log_callback: MatitaLog.log_callback -end - -class type browserWin = -object - inherit MatitaGeneratedGui.browserWin - method browserUri: GEdit.combo_box_entry -end - -class type gui = -object - method setQuitCallback : (unit -> unit) -> unit - - (** {2 Access to singleton instances of lower-level GTK widgets} *) - - method fileSel : MatitaGeneratedGui.fileSelectionWin - method main : MatitaGeneratedGui.mainWin - method findRepl : MatitaGeneratedGui.findReplWin - method develList: MatitaGeneratedGui.develListWin - method newDevel: MatitaGeneratedGui.newDevelWin -(* method toolbar : MatitaGeneratedGui.toolBarWin *) - - method console: console - method sourceView: GSourceView.source_view - - (** {2 Dialogs instantiation} - * methods below create a new window on each invocation. You should - * remember to destroy windows after use *) - - method newBrowserWin: unit -> browserWin - method newUriDialog: unit -> MatitaGeneratedGui.uriChoiceDialog - method newRecordDialog: unit -> MatitaGeneratedGui.recordChoiceDialog - method newConfirmationDialog: unit -> MatitaGeneratedGui.confirmationDialog - method newEmptyDialog: unit -> MatitaGeneratedGui.emptyDialog - - (** {2 Utility methods} *) - - (** ask the used to choose a file with the file chooser - * @param ok_not_exists if set to true returns also non existent files - * (useful for save). Defaults to false *) - method chooseFile: ?ok_not_exists:bool -> unit -> string option - method createDevelopment: containing:string option -> unit - - (** prompt the user for a (multiline) text entry *) - method askText: ?title:string -> ?msg:string -> unit -> string option - - method loadScript: string -> unit - method setStar: string -> bool -> unit - - (** {3 Fonts} *) - method increaseFontSize: unit -> unit - method decreaseFontSize: unit -> unit - method resetFontSize: unit -> unit -end - - (** multi selection gtkMathView which handle mactions and hyperlinks. Mactions - * are handled internally. Hyperlinks are handled by calling an user provided - * callback *) -class type clickableMathView = -object - inherit GMathViewAux.multi_selection_math_view - - (** set hyperlink callback. None disable hyperlink handling *) - method set_href_callback: (string -> unit) option -> unit - - method string_of_selections: string list - method string_of_selection: string option (* last selected node *) - - method update_font_size: unit -end - -class type cicMathView = -object - inherit clickableMathView - - (** load a sequent and render it into parent widget *) - method load_sequent: Cic.metasenv -> int -> unit - - method load_object: Cic.obj -> unit -end - -class type sequentsViewer = -object - method reset: unit - method load_logo: unit - method load_logo_with_qed: unit - method load_sequents: MatitaTypes.incomplete_proof -> unit - method goto_sequent: int -> unit (* to be called _after_ load_sequents *) -end - -class type cicBrowser = -object - method load: MatitaTypes.mathViewer_entry -> unit - (* method loadList: string list -> MatitaTypes.mathViewer_entry -> unit *) - method loadInput: string -> unit - method mathView: clickableMathView -end - diff --git a/helm/matita/matitaInit.ml b/helm/matita/matitaInit.ml deleted file mode 100644 index d01275308..000000000 --- a/helm/matita/matitaInit.ml +++ /dev/null @@ -1,234 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -type thingsToInitilaize = - ConfigurationFile | Db | Environment | Getter | Notation | Makelib | CmdLine - -exception FailedToInitialize of thingsToInitilaize - -let wants s l = - List.iter ( - fun item -> - if not (List.exists (fun x -> x = item) l) then - raise (FailedToInitialize item)) - s - -let already_configured s l = - List.for_all (fun item -> List.exists (fun x -> x = item) l) s - -let tilde_expand_key k = - try - Helm_registry.set k (HExtlib.tilde_expand (Helm_registry.get k)) - with Helm_registry.Key_not_found _ -> () - -let load_configuration init_status = - if not (already_configured [ConfigurationFile] init_status) then - begin - Helm_registry.load_from BuildTimeConf.matita_conf; - if not (Helm_registry.has "user.name") then begin - let login = (Unix.getpwuid (Unix.getuid ())).Unix.pw_name in - Helm_registry.set "user.name" login - end; - tilde_expand_key "matita.basedir"; - tilde_expand_key "user.home"; - ConfigurationFile::init_status - end - else - init_status - -let initialize_db init_status = - wants [ ConfigurationFile; CmdLine ] init_status; - if not (already_configured [ Db ] init_status) then - begin - MetadataTypes.ownerize_tables (Helm_registry.get "matita.owner"); - MatitaDb.create_owner_environment (); - Db::init_status - end - else - init_status - -let initialize_makelib init_status = - wants [ConfigurationFile] init_status; - if not (already_configured [Makelib] init_status) then - begin - MatitamakeLib.initialize (); - Makelib::init_status - end - else - init_status - -let initialize_notation init_status = - wants [ConfigurationFile] init_status; - if not (already_configured [Notation] init_status) then - begin - CicNotation.load_notation BuildTimeConf.core_notation_script; - Notation::init_status - end - else - init_status - -let initialize_environment init_status = - wants [ConfigurationFile] init_status; - if not (already_configured [Getter;Environment] init_status) then - begin - Http_getter.init (); - CicEnvironment.set_trust (* environment trust *) - (let trust = Helm_registry.get_bool "matita.environment_trust" in - fun _ -> trust); - Getter::Environment::init_status - end - else - init_status - -let status = ref [] - -let usages = Hashtbl.create 11 -let _ = - List.iter - (fun (name, s) -> Hashtbl.replace usages name s) - [ "matitac", - sprintf "MatitaC v%s -Usage: matitac [ OPTION ... ] FILE -Options:" - BuildTimeConf.version; - "matita", - sprintf "Matita v%s -Usage: matita [ OPTION ... ] [ FILE ... ] -Options:" - BuildTimeConf.version; - "cicbrowser", - sprintf - "CIC Browser v%s -Usage: cicbrowser [ URL | WHELP QUERY ] -Options:" - BuildTimeConf.version; - "matitadep", - sprintf "MatitaDep v%s -Usage: matitadep [ OPTION ... ] FILE ... -Options:" - BuildTimeConf.version; - "matitaclean", - sprintf "MatitaClean v%s -Usage: matitaclean all - matitaclean [ (FILE | URI) ... ] -Options:" - BuildTimeConf.version; - ] -let default_usage = - sprintf "Matita v%s\nUsage: matita [ ARG ]\nOptions:" BuildTimeConf.version - -let usage () = - let basename = Filename.basename Sys.argv.(0) in - let usage_key = - try Filename.chop_extension basename with Invalid_argument _ -> basename - in - try Hashtbl.find usages usage_key with Not_found -> default_usage - -let registry_defaults = - [ - "db.nodb", "false"; - "matita.debug", "false"; - "matita.external_editor", "gvim -f -c 'go %p' %f"; - "matita.preserve", "false"; - "matita.quiet", "false"; - "matita.profile", "true"; - ] - -let set_registry_values = - List.iter (fun key, value -> Helm_registry.set ~key ~value) - -let parse_cmdline init_status = - if not (already_configured [CmdLine] init_status) then begin - let includes = ref [] in - let args = ref [] in - let add_l l = fun s -> l := s :: !l in - let arg_spec = - let std_arg_spec = [ - "-I", Arg.String (add_l includes), - (" Adds path to the list of searched paths for the " - ^ "include command"); - "-q", Arg.Unit (fun () -> Helm_registry.set_bool "matita.quiet" true), - "Turn off verbose compilation"; - "-preserve", - Arg.Unit (fun () -> Helm_registry.set_bool "matita.preserve" true), - "Turns off automatic baseuri cleaning"; - "-nodb", Arg.Unit (fun () -> Helm_registry.set_bool "db.nodb" true), - ("Avoid using external database connection " - ^ "(WARNING: disable many features)"); - "-noprofile", - Arg.Unit (fun () -> Helm_registry.set_bool "matita.profile" false), - "Turns off profiling printings"; - ] in - let debug_arg_spec = - if BuildTimeConf.debug then - [ "-debug", - Arg.Unit (fun () -> Helm_registry.set_bool "matita.debug" true), - ("Do not catch top-level exception " - ^ "(useful for backtrace inspection)"); - ] - else [] - in - std_arg_spec @ debug_arg_spec - in - let set_list ~key l = - Helm_registry.set_list Helm_registry.of_string ~key ~value:(List.rev !l) - in - set_registry_values registry_defaults; - Arg.parse arg_spec (add_l args) (usage ()); - set_list ~key:"matita.includes" includes; - set_list ~key:"matita.args" args; - HExtlib.set_profiling_printings - (fun () -> Helm_registry.get_bool "matita.profile"); - CmdLine :: init_status - end else - init_status - -let die_usage () = - print_endline (usage ()); - exit 1 - -let initialize_all () = - status := - List.fold_left (fun s f -> f s) !status - [ parse_cmdline; load_configuration; initialize_makelib; - initialize_db; initialize_environment; initialize_notation ] -(* initialize_notation - (initialize_environment - (initialize_db - (initialize_makelib - (load_configuration - (parse_cmdline !status))))) *) - -let load_configuration_file () = - status := load_configuration !status - -let initialize_notation () = - status := initialize_notation (load_configuration !status) - -let parse_cmdline () = - status := parse_cmdline !status - diff --git a/helm/matita/matitaInit.mli b/helm/matita/matitaInit.mli deleted file mode 100644 index e8050f9be..000000000 --- a/helm/matita/matitaInit.mli +++ /dev/null @@ -1,38 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - - (** {2 global initialization} *) -val initialize_all: unit -> unit - - (** {2 per-components initialization} *) -val parse_cmdline: unit -> unit (** parse cmdline setting registry keys *) -val load_configuration_file: unit -> unit -val initialize_notation: unit -> unit - - (** {2 Utilities} *) - - (** die nicely: exit with return code 1 printing usage error message *) -val die_usage: unit -> 'a - diff --git a/helm/matita/matitaLog.ml b/helm/matita/matitaLog.ml deleted file mode 100644 index 8d9fbe958..000000000 --- a/helm/matita/matitaLog.ml +++ /dev/null @@ -1,62 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -type log_tag = [ `Debug | `Error | `Message | `Warning ] -type log_callback = log_tag -> string -> unit - -(* -colors=(black red green yellow blue magenta cyan gray white) -ccodes=(30 31 32 33 34 35 36 37 39) -*) - -let blue = "" -let yellow = "" -let green = "" -let red = "" -let black = "" - -let default_callback tag s = - let prefix,ch = - match tag with - | `Message -> green ^ "Info: ", stdout - | `Warning -> yellow ^ "Warn: ", stderr - | `Error -> red ^ "Error: ", stderr - | `Debug -> blue ^ "Debug: ", stderr - in - output_string ch (prefix ^ black ^ s ^ "\n"); - flush ch - -let callback = ref default_callback - -let set_log_callback f = callback := f -let get_log_callback () = !callback - -let message s = !callback `Message s -let warn s = !callback `Warning s -let error s = !callback `Error s -let debug s = !callback `Debug s - diff --git a/helm/matita/matitaLog.mli b/helm/matita/matitaLog.mli deleted file mode 100644 index 6847ce32d..000000000 --- a/helm/matita/matitaLog.mli +++ /dev/null @@ -1,36 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -type log_tag = [ `Debug | `Error | `Message | `Warning ] -type log_callback = log_tag -> string -> unit - -val set_log_callback: log_callback -> unit -val get_log_callback: unit -> log_callback - -val message : string -> unit -val warn : string -> unit -val error : string -> unit -val debug : string -> unit - diff --git a/helm/matita/matitaMathView.ml b/helm/matita/matitaMathView.ml deleted file mode 100644 index 710efdf02..000000000 --- a/helm/matita/matitaMathView.ml +++ /dev/null @@ -1,997 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. - *) - -open Printf - -open MatitaTypes -open MatitaGtkMisc - -module Stack = Continuationals.Stack - -(** inherit from this class if you want to access current script *) -class scriptAccessor = -object (self) - method private script = MatitaScript.current () -end - -let cicBrowsers = ref [] -let gui_instance = ref None -let set_gui gui = gui_instance := Some gui -let get_gui () = - match !gui_instance with - | None -> assert false - | Some gui -> gui - -let default_font_size () = - Helm_registry.get_opt_default Helm_registry.int - ~default:BuildTimeConf.default_font_size "matita.font_size" -let current_font_size = ref ~-1 -let increase_font_size () = incr current_font_size -let decrease_font_size () = decr current_font_size -let reset_font_size () = current_font_size := default_font_size () - - (* is there any lablgtk2 constant corresponding to the various mouse - * buttons??? *) -let left_button = 1 -let middle_button = 2 -let right_button = 3 - -let near (x1, y1) (x2, y2) = - let distance = sqrt (((x2 -. x1) ** 2.) +. ((y2 -. y1) ** 2.)) in - (distance < 4.) - -let xlink_ns = Gdome.domString "http://www.w3.org/1999/xlink" -let helm_ns = Gdome.domString "http://www.cs.unibo.it/helm" -let href_ds = Gdome.domString "href" -let xref_ds = Gdome.domString "xref" - -let domImpl = Gdome.domImplementation () - - (** Gdome.element of a MathML document whose rendering should be blank. Used - * by cicBrowser to render "about:blank" document *) -let empty_mathml = lazy ( - domImpl#createDocument ~namespaceURI:(Some DomMisc.mathml_ns) - ~qualifiedName:(Gdome.domString "math") ~doctype:None) - -let empty_boxml = lazy ( - domImpl#createDocument ~namespaceURI:(Some DomMisc.boxml_ns) - ~qualifiedName:(Gdome.domString "box") ~doctype:None) - - (** shown for goals closed by side effects *) -let closed_goal_mathml = lazy ( - domImpl#createDocumentFromURI ~uri:BuildTimeConf.closed_xml ()) - -(* ids_to_terms should not be passed here, is just for debugging *) -let find_root_id annobj id ids_to_father_ids ids_to_terms ids_to_inner_types = - let find_parent id ids = - let rec aux id = -(* (prerr_endline (sprintf "id %s = %s" id - (try - CicPp.ppterm (Hashtbl.find ids_to_terms id) - with Not_found -> "NONE"))); *) - if List.mem id ids then Some id - else - (match - (try Hashtbl.find ids_to_father_ids id with Not_found -> None) - with - | None -> None - | Some id' -> aux id') - in - aux id - in - let return_father id ids = - match find_parent id ids with - | None -> assert false - | Some parent_id -> parent_id - in - let mk_ids terms = List.map CicUtil.id_of_annterm terms in - let inner_types = - Hashtbl.fold - (fun _ types acc -> - match types.Cic2acic.annexpected with - None -> types.Cic2acic.annsynthesized :: acc - | Some ty -> ty :: types.Cic2acic.annsynthesized :: acc - ) ids_to_inner_types [] in - match annobj with - | Cic.AConstant (_, _, _, Some bo, ty, _, _) - | Cic.AVariable (_, _, Some bo, ty, _, _) - | Cic.ACurrentProof (_, _, _, _, bo, ty, _, _) -> - return_father id (mk_ids (ty :: bo :: inner_types)) - | Cic.AConstant (_, _, _, None, ty, _, _) - | Cic.AVariable (_, _, None, ty, _, _) -> - return_father id (mk_ids (ty::inner_types)) - | Cic.AInductiveDefinition _ -> - assert false (* TODO *) - - (** @return string content of a dom node having a single text child node, e.g. - * bool *) -let string_of_dom_node node = - match node#get_firstChild with - | None -> "" - | Some node -> - (try - let text = new Gdome.text_of_node node in - text#get_data#to_string - with GdomeInit.DOMCastException _ -> "") - -class clickableMathView obj = -let text_width = 80 in -object (self) - inherit GMathViewAux.multi_selection_math_view obj - - val mutable href_callback: (string -> unit) option = None - method set_href_callback f = href_callback <- f - - val mutable _cic_info = None - method private set_cic_info info = _cic_info <- info - method private cic_info = _cic_info - - initializer - self#set_font_size !current_font_size; - ignore (self#connect#selection_changed self#choose_selection_cb); - ignore (self#event#connect#button_press self#button_press_cb); - ignore (self#event#connect#button_release self#button_release_cb); - ignore (self#event#connect#selection_clear self#selection_clear_cb); - ignore (self#coerce#misc#connect#selection_get self#selection_get_cb) - - val mutable button_press_x = -1. - val mutable button_press_y = -1. - val mutable selection_changed = false - - method private selection_get_cb ctxt ~info ~time = - (match self#get_selections with - | [] -> () - | node :: _ -> ctxt#return (self#string_of_node node)) - - method private selection_clear_cb sel_event = - self#remove_selections; - false - - method private button_press_cb gdk_button = - let button = GdkEvent.Button.button gdk_button in - if button = left_button then begin - button_press_x <- GdkEvent.Button.x gdk_button; - button_press_y <- GdkEvent.Button.y gdk_button; - selection_changed <- false - end else if button = right_button then - self#popup_contextual_menu (GdkEvent.Button.time gdk_button); - false - - method private popup_contextual_menu time = - match self#string_of_selection with - | None -> () - | Some s -> - let clipboard = GData.clipboard Gdk.Atom.clipboard in - let menu = GMenu.menu () in - let copy_menu_item = - GMenu.image_menu_item - ~label:"_Copy" ~stock:`COPY ~packing:menu#append () - in - connect_menu_item copy_menu_item (fun () -> clipboard#set_text s); - menu#popup ~button:right_button ~time - - method private button_release_cb gdk_button = - let clipboard = GData.clipboard Gdk.Atom.primary in - if GdkEvent.Button.button gdk_button = left_button then begin - let button_release_x = GdkEvent.Button.x gdk_button in - let button_release_y = GdkEvent.Button.y gdk_button in - if selection_changed then - () - else (* selection _not_ changed *) - if near (button_press_x, button_press_y) - (button_release_x, button_release_y) - then - let x = int_of_float button_press_x in - let y = int_of_float button_press_y in - (match self#get_element_at x y with - | None -> () - | Some elt -> - let localName = href_ds in - if elt#hasAttributeNS ~namespaceURI:xlink_ns ~localName then - self#invoke_href_callback - (elt#getAttributeNS ~namespaceURI:xlink_ns - ~localName)#to_string - gdk_button - else - ignore (self#action_toggle elt)); - end; - false - - method private invoke_href_callback href_value gdk_button = - let button = GdkEvent.Button.button gdk_button in - if button = left_button then - let time = GdkEvent.Button.time gdk_button in - match href_callback with - | None -> () - | Some f -> - (match HExtlib.split href_value with - | [ uri ] -> f uri - | uris -> - let menu = GMenu.menu () in - List.iter - (fun uri -> - let menu_item = - GMenu.menu_item ~label:uri ~packing:menu#append () - in - connect_menu_item menu_item (fun () -> f uri)) - uris; - menu#popup ~button ~time) - - method private choose_selection_cb gdome_elt = - let (gui: MatitaGuiTypes.gui) = get_gui () in - let clipboard = GData.clipboard Gdk.Atom.primary in - let set_selection elt = - self#set_selection (Some elt); - self#coerce#misc#add_selection_target - ~target:(Gdk.Atom.name Gdk.Atom.string) Gdk.Atom.primary; - ignore (self#coerce#misc#grab_selection Gdk.Atom.primary) - in - let rec aux elt = - if (elt#getAttributeNS ~namespaceURI:helm_ns - ~localName:xref_ds)#to_string <> "" - then - set_selection elt - else - try - (match elt#get_parentNode with - | None -> assert false - | Some p -> aux (new Gdome.element_of_node p)) - with GdomeInit.DOMCastException _ -> () - in - (match gdome_elt with - | Some elt when (elt#getAttributeNS ~namespaceURI:xlink_ns - ~localName:href_ds)#to_string <> "" -> - set_selection elt - | Some elt -> aux elt - | None -> self#set_selection None); - selection_changed <- true - - method update_font_size = self#set_font_size !current_font_size - - method private get_term_by_id cic_info id = - let unsh_item, ids_to_terms, ids_to_hypotheses, _, _, _ = cic_info in - try - `Term (Hashtbl.find ids_to_terms id) - with Not_found -> - try - let hyp = Hashtbl.find ids_to_hypotheses id in - let _, context, _ = - match unsh_item with - | Some seq -> seq - | None -> assert false - in - let context' = MatitaMisc.list_tl_at hyp context in - `Hyp context' - with Not_found -> assert false - - method private find_obj_conclusion id = - match self#cic_info with - | None - | Some (_, _, _, _, _, None) -> assert false - | Some (_, ids_to_terms, _, ids_to_father_ids, ids_to_inner_types, Some annobj) -> - let id = - find_root_id annobj id ids_to_father_ids ids_to_terms ids_to_inner_types - in - (try Hashtbl.find ids_to_terms id with Not_found -> assert false) - - method private string_of_node node = - if node#hasAttributeNS ~namespaceURI:helm_ns ~localName:xref_ds - then self#string_of_id_node node - else string_of_dom_node node - - method private string_of_id_node node = - let get_id (node: Gdome.element) = - let xref_attr = - node#getAttributeNS ~namespaceURI:helm_ns ~localName:xref_ds - in - List.hd (HExtlib.split ~sep:' ' xref_attr#to_string) - in - let id = get_id node in - let script = MatitaScript.current () in - let metasenv = - if script#onGoingProof () then - script#proofMetasenv - else - [] - in -(* TODO: code for patterns - let conclusion = (MatitaScript.instance ())#proofConclusion in - let conclusion_pattern = - ProofEngineHelpers.pattern_of ~term:conclusion cic_terms - in -*) - let string_of_cic_sequent cic_sequent = - let _, (acic_sequent, _, _, ids_to_inner_sorts, _) = - Cic2acic.asequent_of_sequent metasenv cic_sequent - in - let _, _, _, annterm = acic_sequent in - let ast, ids_to_uris = - CicNotationRew.ast_of_acic ids_to_inner_sorts annterm - in - let pped_ast = CicNotationRew.pp_ast ast in - let markup = CicNotationPres.render ids_to_uris pped_ast in - BoxPp.render_to_string text_width markup - in - let cic_info, unsh_sequent = - match self#cic_info with - | Some ((Some unsh_sequent, _, _, _, _, _) as info) -> - info, unsh_sequent - | Some ((None, _, _, _, _, _) as info) -> - (* building a dummy sequent for obj *) - let t = self#find_obj_conclusion id in - MatitaLog.debug (CicPp.ppterm t); - info, (~-1, [], t) - | None -> assert false - in - let cic_sequent = - match self#get_term_by_id cic_info id with - | `Term t -> - let context' = - match ProofEngineHelpers.locate_in_conjecture t unsh_sequent with - [context,_] -> context - | _ -> -(* prerr_endline (sprintf "%d\nt=%s\ncontext=%s" - (List.length l) (CicPp.ppterm t) (CicPp.ppcontext context)); *) - assert false (* since it uses physical equality *) - in - ~-1, context', t - | `Hyp context -> ~-1, context, Cic.Rel 1 - in - string_of_cic_sequent cic_sequent - - method string_of_selections = - List.map self#string_of_node (List.rev self#get_selections) - - method string_of_selection = - match self#get_selections with - | [] -> None - | node :: _ -> Some (self#string_of_node node) - -end - -let clickableMathView ?hadjustment ?vadjustment ?font_size ?log_verbosity = - GtkBase.Widget.size_params - ~cont:(OgtkMathViewProps.pack_return (fun p -> - OgtkMathViewProps.set_params - (new clickableMathView (GtkMathViewProps.MathView_GMetaDOM.create p)) - ~font_size:None ~log_verbosity:None)) - [] - -class cicMathView obj = -object (self) - inherit clickableMathView obj - - val mutable current_mathml = None - - method load_sequent metasenv metano = - let sequent = CicUtil.lookup_meta metano metasenv in - let (mathml, unsh_sequent, - (_, (ids_to_terms, ids_to_father_ids, ids_to_hypotheses,_ ))) - = - ApplyTransformation.mml_of_cic_sequent metasenv sequent - in - self#set_cic_info - (Some (Some unsh_sequent, - ids_to_terms, ids_to_hypotheses, ids_to_father_ids, - Hashtbl.create 1, None)); - let name = "sequent_viewer.xml" in - MatitaLog.debug ("load_sequent: dumping MathML to ./" ^ name); - ignore (domImpl#saveDocumentToFile ~name ~doc:mathml ()); - self#load_root ~root:mathml#get_documentElement - - method load_object obj = - let use_diff = false in (* ZACK TODO use XmlDiff when re-rendering? *) - let (mathml, - (annobj, (ids_to_terms, ids_to_father_ids, _, ids_to_hypotheses, _, ids_to_inner_types))) - = - ApplyTransformation.mml_of_cic_object obj - in - self#set_cic_info - (Some (None, ids_to_terms, ids_to_hypotheses, ids_to_father_ids, ids_to_inner_types, Some annobj)); - (match current_mathml with - | Some current_mathml when use_diff -> - self#freeze; - XmlDiff.update_dom ~from:current_mathml mathml; - self#thaw - | _ -> - let name = "cic_browser.xml" in - MatitaLog.debug ("cic_browser: dumping MathML to ./" ^ name); - ignore (domImpl#saveDocumentToFile ~name ~doc:mathml ()); - self#load_root ~root:mathml#get_documentElement; - current_mathml <- Some mathml); -end - -let tab_label meta_markup = - let rec aux = - function - | `Current m -> sprintf "%s" (aux m) - | `Closed m -> sprintf "%s" (aux m) - | `Shift (pos, m) -> sprintf "|%d: %s" pos (aux m) - | `Meta n -> sprintf "?%d" n - in - let markup = aux meta_markup in - (GMisc.label ~markup ~show:true ())#coerce - -let goal_of_switch = function Stack.Open g | Stack.Closed g -> g - -class sequentsViewer ~(notebook:GPack.notebook) ~(cicMathView:cicMathView) () = - object (self) - inherit scriptAccessor - - val mutable pages = 0 - val mutable switch_page_callback = None - val mutable page2goal = [] (* associative list: page no -> goal no *) - val mutable goal2page = [] (* the other way round *) - val mutable goal2win = [] (* associative list: goal no -> scrolled win *) - val mutable _metasenv = [] - val mutable scrolledWin: GBin.scrolled_window option = None - (* scrolled window to which the sequentViewer is currently attached *) - val logo = (GMisc.image - ~file:(MatitaMisc.image_path "matita_medium.png") () - :> GObj.widget) - - val logo_with_qed = (GMisc.image - ~file:(MatitaMisc.image_path "matita_small.png") () - :> GObj.widget) - - method load_logo = - notebook#set_show_tabs false; - notebook#append_page logo - - method load_logo_with_qed = - notebook#set_show_tabs false; - notebook#append_page logo_with_qed - - method reset = - (match scrolledWin with - | Some w -> - (* removing page from the notebook will destroy all contained widget, - * we do not want the cicMathView to be destroyed as well *) - w#remove cicMathView#coerce; - scrolledWin <- None - | None -> ()); - (match switch_page_callback with - | Some id -> - GtkSignal.disconnect notebook#as_widget id; - switch_page_callback <- None - | None -> ()); - for i = 0 to pages do notebook#remove_page 0 done; - notebook#set_show_tabs true; - pages <- 0; - page2goal <- []; - goal2page <- []; - goal2win <- []; - _metasenv <- []; - self#script#setGoal ~-1; - - method load_sequents { proof = (_,metasenv,_,_) as proof; stack = stack } = - let sequents_no = List.length metasenv in - _metasenv <- metasenv; - pages <- 0; - let win goal_switch = - let w = - GBin.scrolled_window ~hpolicy:`AUTOMATIC ~vpolicy:`ALWAYS - ~shadow_type:`IN ~show:true () - in - let reparent () = - scrolledWin <- Some w; - match cicMathView#misc#parent with - | None -> w#add cicMathView#coerce - | Some parent -> - let parent = - match cicMathView#misc#parent with - None -> assert false - | Some p -> GContainer.cast_container p - in - parent#remove cicMathView#coerce; - w#add cicMathView#coerce - in - goal2win <- (goal_switch, reparent) :: goal2win; - w#coerce - in - assert ( - let stack_goals = Stack.open_goals stack in - let proof_goals = ProofEngineTypes.goals_of_proof proof in - if - HExtlib.list_uniq (List.sort Pervasives.compare stack_goals) - <> List.sort Pervasives.compare proof_goals - then begin - prerr_endline ("STACK GOALS = " ^ String.concat " " (List.map string_of_int stack_goals)); - prerr_endline ("PROOF GOALS = " ^ String.concat " " (List.map string_of_int proof_goals)); - false - end - else true - ); - let render_switch = - function Stack.Open i ->`Meta i | Stack.Closed i ->`Closed (`Meta i) - in - let page = ref 0 in - let added_goals = ref [] in - (* goals can be duplicated on the tack due to focus, but we should avoid - * multiple labels in the user interface *) - let add_tab markup goal_switch = - let goal = Stack.goal_of_switch goal_switch in - if not (List.mem goal !added_goals) then begin - notebook#append_page ~tab_label:(tab_label markup) (win goal_switch); - page2goal <- (!page, goal_switch) :: page2goal; - goal2page <- (goal_switch, !page) :: goal2page; - incr page; - pages <- pages + 1; - added_goals := goal :: !added_goals - end - in - let add_switch _ _ (_, sw) = add_tab (render_switch sw) sw in - Stack.iter (** populate notebook with tabs *) - ~env:(fun depth tag (pos, sw) -> - let markup = - match depth, pos with - | 0, _ -> `Current (render_switch sw) - | 1, pos when Stack.head_tag stack = `BranchTag -> - `Shift (pos, render_switch sw) - | _ -> render_switch sw - in - add_tab markup sw) - ~cont:add_switch ~todo:add_switch - stack; - switch_page_callback <- - Some (notebook#connect#switch_page ~callback:(fun page -> - let goal_switch = - try List.assoc page page2goal with Not_found -> assert false - in - self#script#setGoal (goal_of_switch goal_switch); - self#render_page ~page ~goal_switch)) - - method private render_page ~page ~goal_switch = - (match goal_switch with - | Stack.Open goal -> cicMathView#load_sequent _metasenv goal - | Stack.Closed goal -> - let doc = Lazy.force closed_goal_mathml in - cicMathView#load_root ~root:doc#get_documentElement); - (try - cicMathView#set_selection None; - List.assoc goal_switch goal2win () - with Not_found -> assert false) - - method goto_sequent goal = - let goal_switch, page = - try - List.find - (function Stack.Open g, _ | Stack.Closed g, _ -> g = goal) - goal2page - with Not_found -> assert false - in - notebook#goto_page page; - self#render_page page goal_switch - - end - - (** constructors *) - -type 'widget constructor = - ?hadjustment:GData.adjustment -> - ?vadjustment:GData.adjustment -> - ?font_size:int -> - ?log_verbosity:int -> - ?width:int -> - ?height:int -> - ?packing:(GObj.widget -> unit) -> - ?show:bool -> - unit -> - 'widget - -let cicMathView ?hadjustment ?vadjustment ?font_size ?log_verbosity = - GtkBase.Widget.size_params - ~cont:(OgtkMathViewProps.pack_return (fun p -> - OgtkMathViewProps.set_params - (new cicMathView (GtkMathViewProps.MathView_GMetaDOM.create p)) - ~font_size ~log_verbosity)) - [] - -let blank_uri = BuildTimeConf.blank_uri -let current_proof_uri = BuildTimeConf.current_proof_uri - -type term_source = - [ `Ast of DisambiguateTypes.term - | `Cic of Cic.term * Cic.metasenv - | `String of string - ] - -class cicBrowser_impl ~(history:MatitaTypes.mathViewer_entry MatitaMisc.history) - () -= - let term_RE = Pcre.regexp "^term:(.*)" in - let whelp_RE = Pcre.regexp "^\\s*whelp" in - let uri_RE = - Pcre.regexp - "^cic:/([^/]+/)*[^/]+\\.(con|ind|var)(#xpointer\\(\\d+(/\\d+)+\\))?$" - in - let dir_RE = Pcre.regexp "^cic:((/([^/]+/)*[^/]+(/)?)|/|)$" in - let whelp_query_RE = Pcre.regexp "^\\s*whelp\\s+([^\\s]+)\\s+(.*)$" in - let trailing_slash_RE = Pcre.regexp "/$" in - let has_xpointer_RE = Pcre.regexp "#xpointer\\(\\d+/\\d+(/\\d+)?\\)$" in - let is_whelp txt = Pcre.pmatch ~rex:whelp_RE txt in - let is_uri txt = Pcre.pmatch ~rex:uri_RE txt in - let is_dir txt = Pcre.pmatch ~rex:dir_RE txt in - let gui = get_gui () in - let (win: MatitaGuiTypes.browserWin) = gui#newBrowserWin () in - let queries = ["Locate";"Hint";"Match";"Elim";"Instance"] in - let combo,_ = GEdit.combo_box_text ~strings:queries () in - let activate_combo_query input q = - let q' = String.lowercase q in - let rec aux i = function - | [] -> failwith ("Whelp query '" ^ q ^ "' not found") - | h::_ when String.lowercase h = q' -> i - | _::tl -> aux (i+1) tl - in - combo#set_active (aux 0 queries); - win#queryInputText#set_text input - in - let set_whelp_query txt = - let query, arg = - try - let q = Pcre.extract ~rex:whelp_query_RE txt in - q.(1), q.(2) - with Invalid_argument _ -> failwith "Malformed Whelp query" - in - activate_combo_query arg query - in - let toplevel = win#toplevel in - let mathView = cicMathView ~packing:win#scrolledBrowser#add () in - let fail message = - MatitaGtkMisc.report_error ~title:"Cic browser" ~message - ~parent:toplevel () - in - let tags = - [ "dir", GdkPixbuf.from_file (MatitaMisc.image_path "matita-folder.png"); - "obj", GdkPixbuf.from_file (MatitaMisc.image_path "matita-object.png") ] - in - let handle_error f = - try - f () - with exn -> - if not (Helm_registry.get_bool "matita.debug") then - fail (MatitaExcPp.to_string exn) - else raise exn - in - let handle_error' f = (fun () -> handle_error (fun () -> f ())) in - let load_easter_egg = lazy ( - win#easterEggImage#set_file (MatitaMisc.image_path "meegg.png")) - in - object (self) - inherit scriptAccessor - - (* Whelp bar queries *) - - initializer - activate_combo_query "" "locate"; - win#whelpBarComboVbox#add combo#coerce; - let start_query () = - let query = String.lowercase (List.nth queries combo#active) in - let input = win#queryInputText#text in - let statement = "whelp " ^ query ^ " " ^ input ^ "." in - (MatitaScript.current ())#advance ~statement () - in - ignore(win#queryInputText#connect#activate ~callback:start_query); - ignore(combo#connect#changed ~callback:start_query); - win#whelpBarImage#set_file (MatitaMisc.image_path "whelp.png"); - win#mathOrListNotebook#set_show_tabs false; - win#browserForwardButton#misc#set_sensitive false; - win#browserBackButton#misc#set_sensitive false; - ignore (win#browserUri#entry#connect#activate (handle_error' (fun () -> - self#loadInput win#browserUri#entry#text))); - ignore (win#browserHomeButton#connect#clicked (handle_error' (fun () -> - self#load (`About `Current_proof)))); - ignore (win#browserRefreshButton#connect#clicked - (handle_error' (self#refresh ~force:true))); - ignore (win#browserBackButton#connect#clicked (handle_error' self#back)); - ignore (win#browserForwardButton#connect#clicked - (handle_error' self#forward)); - ignore (win#toplevel#event#connect#delete (fun _ -> - let my_id = Oo.id self in - cicBrowsers := List.filter (fun b -> Oo.id b <> my_id) !cicBrowsers; - if !cicBrowsers = [] && - Helm_registry.get "matita.mode" = "cicbrowser" - then - GMain.quit (); - false)); - ignore(win#whelpResultTreeview#connect#row_activated - ~callback:(fun _ _ -> - handle_error (fun () -> self#loadInput (self#_getSelectedUri ())))); - mathView#set_href_callback (Some (fun uri -> - handle_error (fun () -> - self#load (`Uri (UriManager.uri_of_string uri))))); - self#_load (`About `Blank); - toplevel#show () - - val mutable current_entry = `About `Blank - - val model = - new MatitaGtkMisc.taggedStringListModel tags win#whelpResultTreeview - - val mutable lastDir = "" (* last loaded "directory" *) - - method mathView = (mathView :> MatitaGuiTypes.clickableMathView) - - method private _getSelectedUri () = - match model#easy_selection () with - | [sel] when is_uri sel -> sel (* absolute URI selected *) -(* | [sel] -> win#browserUri#entry#text ^ sel |+ relative URI selected +| *) - | [sel] -> lastDir ^ sel - | _ -> assert false - - (** history RATIONALE - * - * All operations about history are done using _historyFoo. - * Only toplevel functions (ATM load and loadInput) call _historyAdd. - *) - - method private _historyAdd item = - history#add item; - win#browserBackButton#misc#set_sensitive true; - win#browserForwardButton#misc#set_sensitive false - - method private _historyPrev () = - let item = history#previous in - if history#is_begin then win#browserBackButton#misc#set_sensitive false; - win#browserForwardButton#misc#set_sensitive true; - item - - method private _historyNext () = - let item = history#next in - if history#is_end then win#browserForwardButton#misc#set_sensitive false; - win#browserBackButton#misc#set_sensitive true; - item - - (** notebook RATIONALE - * - * Use only these functions to switch between the tabs - *) - method private _showMath = win#mathOrListNotebook#goto_page 0 - method private _showList = win#mathOrListNotebook#goto_page 1 - - method private back () = - try - self#_load (self#_historyPrev ()) - with MatitaMisc.History_failure -> () - - method private forward () = - try - self#_load (self#_historyNext ()) - with MatitaMisc.History_failure -> () - - (* loads a uri which can be a cic uri or an about:* uri - * @param uri string *) - method private _load ?(force=false) entry = - handle_error (fun () -> - if entry <> current_entry || entry = `About `Current_proof || force then - begin - (match entry with - | `About `Current_proof -> self#home () - | `About `Blank -> self#blank () - | `About `Us -> self#egg () - | `Check term -> self#_loadCheck term - | `Cic (term, metasenv) -> self#_loadTermCic term metasenv - | `Dir dir -> self#_loadDir dir - | `Uri uri -> self#_loadUriManagerUri uri - | `Whelp (query, results) -> - set_whelp_query query; - self#_loadList (List.map (fun r -> "obj", - UriManager.string_of_uri r) results)); - self#setEntry entry - end) - - method private blank () = - self#_showMath; - mathView#load_root (Lazy.force empty_mathml)#get_documentElement - - method private _loadCheck term = - failwith "not implemented _loadCheck"; - self#_showMath - - method private egg () = - win#mathOrListNotebook#goto_page 2; - Lazy.force load_easter_egg - - method private home () = - self#_showMath; - match self#script#status.proof_status with - | Proof (uri, metasenv, bo, ty) -> - let name = UriManager.name_of_uri (HExtlib.unopt uri) in - let obj = Cic.CurrentProof (name, metasenv, bo, ty, [], []) in - self#_loadObj obj - | Incomplete_proof { proof = (uri, metasenv, bo, ty) } -> - let name = UriManager.name_of_uri (HExtlib.unopt uri) in - let obj = Cic.CurrentProof (name, metasenv, bo, ty, [], []) in - self#_loadObj obj - | _ -> self#blank () - - (** loads a cic uri from the environment - * @param uri UriManager.uri *) - method private _loadUriManagerUri uri = - let uri = UriManager.strip_xpointer uri in - let (obj, _) = CicEnvironment.get_obj CicUniv.empty_ugraph uri in - self#_loadObj obj - - method private _loadDir dir = - let content = Http_getter.ls dir in - let l = - List.fast_sort - Pervasives.compare - (List.map - (function - | Http_getter_types.Ls_section s -> "dir", s - | Http_getter_types.Ls_object o -> "obj", o.Http_getter_types.uri) - content) - in - lastDir <- dir; - self#_loadList l - - method private setEntry entry = - win#browserUri#entry#set_text (string_of_entry entry); - current_entry <- entry - - method private _loadObj obj = - (* showMath must be done _before_ loading the document, since if the - * widget is not mapped (hidden by the notebook) the document is not - * rendered *) - self#_showMath; - mathView#load_object obj - - method private _loadTermCic term metasenv = - let context = self#script#proofContext in - let dummyno = CicMkImplicit.new_meta metasenv [] in - let sequent = (dummyno, context, term) in - mathView#load_sequent (sequent :: metasenv) dummyno; - self#_showMath - - method private _loadList l = - model#list_store#clear (); - List.iter (fun (tag, s) -> model#easy_append ~tag s) l; - self#_showList - - (** { public methods, all must call _load!! } *) - - method load entry = - handle_error (fun () -> self#_load entry; self#_historyAdd entry) - - (** this is what the browser does when you enter a string an hit enter *) - method loadInput txt = - let txt = HExtlib.trim_blanks txt in - let fix_uri txt = - UriManager.string_of_uri - (UriManager.strip_xpointer (UriManager.uri_of_string txt)) - in - if is_whelp txt then begin - set_whelp_query txt; - (MatitaScript.current ())#advance ~statement:(txt ^ ".") () - end else begin - let entry = - match txt with - | txt when is_uri txt -> `Uri (UriManager.uri_of_string (fix_uri txt)) - | txt when is_dir txt -> `Dir (MatitaMisc.normalize_dir txt) - | txt -> - (try - entry_of_string txt - with Invalid_argument _ -> - command_error (sprintf "unsupported uri: %s" txt)) - in - self#_load entry; - self#_historyAdd entry - end - - (** {2 methods accessing underlying GtkMathView} *) - - method updateFontSize = mathView#set_font_size !current_font_size - - (** {2 methods used by constructor only} *) - - method win = win - method history = history - method currentEntry = current_entry - method refresh ~force () = self#_load ~force current_entry - - end - -let sequentsViewer ~(notebook:GPack.notebook) ~(cicMathView:cicMathView) (): - MatitaGuiTypes.sequentsViewer -= - new sequentsViewer ~notebook ~cicMathView () - -let cicBrowser () = - let size = BuildTimeConf.browser_history_size in - let rec aux history = - let browser = new cicBrowser_impl ~history () in - let win = browser#win in - ignore (win#browserNewButton#connect#clicked (fun () -> - let history = - new MatitaMisc.browser_history ~memento:history#save size - (`About `Blank) - in - let newBrowser = aux history in - newBrowser#load browser#currentEntry)); -(* - (* attempt (failed) to close windows on CTRL-W ... *) - MatitaGtkMisc.connect_key win#browserWinEventBox#event ~modifiers:[`CONTROL] - GdkKeysyms._W (fun () -> win#toplevel#destroy ()); -*) - cicBrowsers := browser :: !cicBrowsers; - (browser :> MatitaGuiTypes.cicBrowser) - in - let history = new MatitaMisc.browser_history size (`About `Blank) in - aux history - -let default_cicMathView () = cicMathView ~show:true () -let cicMathView_instance = MatitaMisc.singleton default_cicMathView - -let default_sequentsViewer () = - let gui = get_gui () in - let cicMathView = cicMathView_instance () in - sequentsViewer ~notebook:gui#main#sequentsNotebook ~cicMathView () -let sequentsViewer_instance = MatitaMisc.singleton default_sequentsViewer - -let mathViewer () = - object(self) - method private get_browser reuse = - if reuse then - (match !cicBrowsers with - | [] -> cicBrowser () - | b :: _ -> (b :> MatitaGuiTypes.cicBrowser)) - else - (cicBrowser ()) - - method show_entry ?(reuse=false) t = (self#get_browser reuse)#load t - - method show_uri_list ?(reuse=false) ~entry l = - (self#get_browser reuse)#load entry - end - -let refresh_all_browsers () = - List.iter (fun b -> b#refresh ~force:false ()) !cicBrowsers - -let update_font_sizes () = - List.iter (fun b -> b#updateFontSize) !cicBrowsers; - (cicMathView_instance ())#update_font_size - -let get_math_views () = - ((cicMathView_instance ()) :> MatitaGuiTypes.clickableMathView) - :: (List.map (fun b -> b#mathView) !cicBrowsers) - -let get_selections () = - if (MatitaScript.current ())#onGoingProof () then - let rec aux = - function - | [] -> None - | mv :: tl -> - (match mv#string_of_selections with - | [] -> aux tl - | sels -> Some sels) - in - aux (get_math_views ()) - else - None - -let reset_selections () = - List.iter (fun mv -> mv#remove_selections) (get_math_views ()) - diff --git a/helm/matita/matitaMathView.mli b/helm/matita/matitaMathView.mli deleted file mode 100644 index f5acf6349..000000000 --- a/helm/matita/matitaMathView.mli +++ /dev/null @@ -1,82 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -(** {2 Constructors} *) - - (** meta constructor *) -type 'widget constructor = - ?hadjustment:GData.adjustment -> - ?vadjustment:GData.adjustment -> - ?font_size:int -> - ?log_verbosity:int -> - ?width:int -> - ?height:int -> - ?packing:(GObj.widget -> unit) -> - ?show:bool -> - unit -> - 'widget - -val clickableMathView: MatitaGuiTypes.clickableMathView constructor - -val cicMathView: MatitaGuiTypes.cicMathView constructor - -val sequentsViewer: - notebook:GPack.notebook -> - cicMathView:MatitaGuiTypes.cicMathView -> - unit -> - MatitaGuiTypes.sequentsViewer - -val cicBrowser: unit -> MatitaGuiTypes.cicBrowser - -(** {2 MathView wide functions} *) -(* TODO ZACK consider exporting here a single function which return a list of - * MatitaGuiTypes.clickableMathView and act on them externally ... *) - -val increase_font_size: unit -> unit -val decrease_font_size: unit -> unit -val reset_font_size: unit -> unit - -val refresh_all_browsers: unit -> unit (** act on all cicBrowsers *) -val update_font_sizes: unit -> unit - - (** {3 selection handling} *) - - (* @return the selections of a (unspecified) math viewer *) -val get_selections: unit -> string list option - - (* remove the selections of all math viewers *) -val reset_selections: unit -> unit - -(** {2 Singleton instances} *) - -val cicMathView_instance: unit -> MatitaGuiTypes.cicMathView -val sequentsViewer_instance: unit -> MatitaGuiTypes.sequentsViewer - -val mathViewer: unit -> MatitaTypes.mathViewer - -(** {2 Initialization} *) - -val set_gui: MatitaGuiTypes.gui -> unit - diff --git a/helm/matita/matitaMisc.ml b/helm/matita/matitaMisc.ml deleted file mode 100644 index e311973c9..000000000 --- a/helm/matita/matitaMisc.ml +++ /dev/null @@ -1,198 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf -open MatitaTypes - -(** Functions "imported" from Http_getter_misc *) - -let strip_trailing_slash = Http_getter_misc.strip_trailing_slash -let normalize_dir = Http_getter_misc.normalize_dir -let strip_suffix = Http_getter_misc.strip_suffix - -let baseuri_of_baseuri_decl st = - match st with - | GrafiteAst.Executable (_, GrafiteAst.Command (_, GrafiteAst.Set (_, "baseuri", buri))) -> - Some buri - | _ -> None - -let is_empty buri = - List.for_all - (function - Http_getter_types.Ls_section _ -> true - | Http_getter_types.Ls_object _ -> false) - (Http_getter.ls (Http_getter_misc.strip_trailing_slash buri ^ "/")) - -let safe_remove fname = if Sys.file_exists fname then Sys.remove fname - -let is_dir_empty d = - try - let od = Unix.opendir d in - try - ignore (Unix.readdir od); - ignore (Unix.readdir od); - ignore (Unix.readdir od); - Unix.closedir od; - false - with End_of_file -> - Unix.closedir od; - true - with Unix.Unix_error _ -> true - -let safe_rmdir d = try Unix.rmdir d with Unix.Unix_error _ -> () - -let rec rmdir_descend d = - if is_dir_empty d then - begin - safe_rmdir d; - rmdir_descend (Filename.dirname d) - end - -let absolute_path file = - if file.[0] = '/' then file else Unix.getcwd () ^ "/" ^ file - -let is_proof_script fname = true (** TODO Zack *) -let is_proof_object fname = true (** TODO Zack *) - -let append_phrase_sep s = - if not (Pcre.pmatch ~pat:(sprintf "%s$" BuildTimeConf.phrase_sep) s) then - s ^ BuildTimeConf.phrase_sep - else - s - -exception History_failure - -type 'a memento = 'a array * int * int * int (* data, hd, tl, cur *) - -class type ['a] history = - object - method add : 'a -> unit - method next : 'a - method previous : 'a - method load: 'a memento -> unit - method save: 'a memento - method is_begin: bool - method is_end: bool - end - -class basic_history (head, tail, cur) = - object - val mutable hd = head (* insertion point *) - val mutable tl = tail (* oldest inserted item *) - val mutable cur = cur (* current item for the history *) - - method is_begin = cur <= tl - method is_end = cur >= hd - end - - -class shell_history size = - let size = size + 1 in - let decr x = let x' = x - 1 in if x' < 0 then size + x' else x' in - let incr x = (x + 1) mod size in - object (self) - val data = Array.create size "" - - inherit basic_history (0, -1 , -1) - - method add s = - data.(hd) <- s; - if tl = -1 then tl <- hd; - hd <- incr hd; - if hd = tl then tl <- incr tl; - cur <- hd - method previous = - if cur = tl then raise History_failure; - cur <- decr cur; - data.(cur) - method next = - if cur = hd then raise History_failure; - cur <- incr cur; - if cur = hd then "" else data.(cur) - method load (data', hd', tl', cur') = - assert (Array.length data = Array.length data'); - hd <- hd'; tl <- tl'; cur <- cur'; - Array.blit data' 0 data 0 (Array.length data') - method save = (Array.copy data, hd, tl, cur) - end - -class ['a] browser_history ?memento size init = - object (self) - initializer match memento with Some m -> self#load m | _ -> () - val data = Array.create size init - - inherit basic_history (0, 0, 0) - - method previous = - if cur = tl then raise History_failure; - cur <- cur - 1; - if cur = ~-1 then cur <- size - 1; - data.(cur) - method next = - if cur = hd then raise History_failure; - cur <- cur + 1; - if cur = size then cur <- 0; - data.(cur) - method add (e:'a) = - if e <> data.(cur) then - begin - cur <- cur + 1; - if cur = size then cur <- 0; - if cur = tl then tl <- tl + 1; - if tl = size then tl <- 0; - hd <- cur; - data.(cur) <- e - end - method load (data', hd', tl', cur') = - assert (Array.length data = Array.length data'); - hd <- hd'; tl <- tl'; cur <- cur'; - Array.blit data' 0 data 0 (Array.length data') - method save = (Array.copy data, hd, tl, cur) - end - -let singleton f = - let instance = lazy (f ()) in - fun () -> Lazy.force instance - -let image_path n = sprintf "%s/%s" BuildTimeConf.images_dir n - -let end_ma_RE = Pcre.regexp "\\.ma$" - -let obj_file_of_baseuri baseuri = - let path = - Helm_registry.get "matita.basedir" ^ "/xml" ^ - Pcre.replace ~pat:"^cic:" ~templ:"" baseuri - in - path ^ ".moo" - -let list_tl_at ?(equality=(==)) e l = - let rec aux = - function - | [] -> raise Not_found - | hd :: tl as l when equality hd e -> l - | hd :: tl -> aux tl - in - aux l - diff --git a/helm/matita/matitaMisc.mli b/helm/matita/matitaMisc.mli deleted file mode 100644 index a04258aee..000000000 --- a/helm/matita/matitaMisc.mli +++ /dev/null @@ -1,93 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -val baseuri_of_baseuri_decl: - ('a, 'b, 'c, 'd, 'e) GrafiteAst.statement -> string option - - (** check whether no objects are defined below a given baseuri *) -val is_empty: string -> bool - -(** removes a file if it exists *) -val safe_remove: string -> unit -(** removes a dir if it exists and is empty *) -val safe_rmdir: string -> unit -(** checks if the dir is empty *) -val is_dir_empty: string -> bool -(** removes a directory and recursively the father (if empty) *) -val rmdir_descend: string -> unit - -val absolute_path: string -> string - - (** @return true if file is a (textual) proof script *) -val is_proof_script: string -> bool - - (** @return true if file is a (binary) proof object *) -val is_proof_object: string -> bool - - (** given a phrase, if it doesn't end with BuildTimeConf.phrase_sep, append - * it *) -val append_phrase_sep: string -> string - -val strip_trailing_slash: string -> string -val normalize_dir: string -> string (** add trailing "/" if missing *) -val strip_suffix: suffix:string -> string -> string - - (** @return tl tail of a list starting at a given element - * @param eq equality to be used, defaults to physical equality (==) - * @raise Not_found *) -val list_tl_at: ?equality:('a -> 'a -> bool) -> 'a -> 'a list -> 'a list - -exception History_failure - -type 'a memento - -class type ['a] history = - object ('b) - method add : 'a -> unit - method next : 'a (** @raise History_failure *) - method previous : 'a (** @raise History_failure *) - method load: 'a memento -> unit - method save: 'a memento - method is_begin: bool - method is_end: bool - end - - (** shell like history: new items added at the end of the history - * @param size maximum history size *) -class shell_history : int -> [string] history - - (** browser like history: new items added at the current point of the history - * @param size maximum history size - * @param first element in history (this history is never empty) *) -class ['a] browser_history: ?memento:'a memento -> int -> 'a -> ['a] history - - (** create a singleton from a given function. Given function is invoked the - * first time it gets called. Next invocation will return first value *) -val singleton: (unit -> 'a) -> (unit -> 'a) - - (** given the base name of an image, returns its full path *) -val image_path: string -> string -val obj_file_of_baseuri: string -> string - diff --git a/helm/matita/matitaMoo.ml b/helm/matita/matitaMoo.ml deleted file mode 100644 index bdea339b7..000000000 --- a/helm/matita/matitaMoo.ml +++ /dev/null @@ -1,70 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -exception Checksum_failure of string -exception Corrupt_moo of string -exception Version_mismatch of string - -let marshal_flags = [] - -(** .moo file format - * - an integer -- magic number -- denoting the version of the dumped data - * structure. Different magic numbers stand for incompatible data structures - * - an integer -- checksum -- denoting the hash value (computed with - * Hashtbl.hash) of the string representation of the dumped data structur - * - marshalled pair: first component is a list of GrafiteAst.command (real moo - * content), second component is a list of GrafiteAst.metadata - *) - -let save_moo ~fname (moo, metadata) = - let oc = open_out fname in - let marshalled = - Marshal.to_string (List.rev moo, List.rev metadata) marshal_flags - in - let checksum = Hashtbl.hash marshalled in - output_binary_int oc GrafiteAst.magic; - output_binary_int oc checksum; - output_string oc marshalled; - close_out oc - -let load_moo ~fname = - let ic = open_in fname in - HExtlib.finally - (fun () -> close_in ic) - (fun () -> - try - let moo_magic = input_binary_int ic in - if moo_magic <> GrafiteAst.magic then raise (Version_mismatch fname); - let moo_checksum = input_binary_int ic in - let marshalled = HExtlib.input_all ic in - let checksum = Hashtbl.hash marshalled in - if checksum <> moo_checksum then raise (Checksum_failure fname); - let (moo: MatitaTypes.moo) = - Marshal.from_string marshalled 0 - in - moo - with End_of_file -> raise (Corrupt_moo fname)) - () - diff --git a/helm/matita/matitaMoo.mli b/helm/matita/matitaMoo.mli deleted file mode 100644 index 75b71a58f..000000000 --- a/helm/matita/matitaMoo.mli +++ /dev/null @@ -1,35 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - - (** name of the corrupt .moo file *) -exception Checksum_failure of string -exception Corrupt_moo of string -exception Version_mismatch of string - -val save_moo: fname:string -> MatitaTypes.moo -> unit - - (** @raise Corrupt_moo *) -val load_moo: fname:string -> MatitaTypes.moo - diff --git a/helm/matita/matitaScript.ml b/helm/matita/matitaScript.ml deleted file mode 100644 index 34e0408c5..000000000 --- a/helm/matita/matitaScript.ml +++ /dev/null @@ -1,813 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf -open MatitaTypes - -module TA = GrafiteAst - -let debug = false -let debug_print = if debug then prerr_endline else ignore - - (** raised when one of the script margins (top or bottom) is reached *) -exception Margin - -let safe_substring s i j = - try String.sub s i j with Invalid_argument _ -> assert false - -let heading_nl_RE = Pcre.regexp "^\\s*\n\\s*" -let heading_nl_RE' = Pcre.regexp "^(\\s*\n\\s*)((.|\n)*)" -let only_dust_RE = Pcre.regexp "^(\\s|\n|%%[^\n]*\n)*$" -let multiline_RE = Pcre.regexp "^\n[^\n]+$" -let newline_RE = Pcre.regexp "\n" - -let comment str = - if Pcre.pmatch ~rex:multiline_RE str then - "\n(** " ^ (Pcre.replace ~rex:newline_RE str) ^ " *)" - else - "\n(**\n" ^ str ^ "\n*)" - -let first_line s = - let s = Pcre.replace ~rex:heading_nl_RE s in - try - let nl_pos = String.index s '\n' in - String.sub s 0 nl_pos - with Not_found -> s - - (** creates a statement AST for the Goal tactic, e.g. "goal 7" *) -let goal_ast n = - let module A = GrafiteAst in - let loc = DisambiguateTypes.dummy_floc in - A.Executable (loc, A.Tactical (loc, - A.Tactic (loc, A.Goal (loc, n)), - Some (A.Dot loc))) - -type guistuff = { - mathviewer:MatitaTypes.mathViewer; - urichooser: UriManager.uri list -> UriManager.uri list; - ask_confirmation: title:string -> message:string -> [`YES | `NO | `CANCEL]; - develcreator: containing:string option -> unit; - mutable filenamedata: string option * MatitamakeLib.development option -} - -let eval_with_engine guistuff status user_goal parsed_text st = - let module TAPp = GrafiteAstPp in - let include_ = - match guistuff.filenamedata with - | None,None -> [] - | None,Some devel -> [MatitamakeLib.root_for_development devel ] - | Some f,_ -> - match MatitamakeLib.development_for_dir (Filename.dirname f) with - | None -> [] - | Some devel -> [MatitamakeLib.root_for_development devel ] - in - let parsed_text_length = String.length parsed_text in - let loc, ex = - match st with TA.Executable (loc,ex) -> loc, ex | _ -> assert false in - let initial_space,parsed_text = - try - let pieces = Pcre.extract ~rex:heading_nl_RE' parsed_text in - pieces.(1), pieces.(2) - with - Not_found -> "", parsed_text in - (* we add the goal command if needed *) - let inital_space,new_status,new_status_and_text_list' = - match status.proof_status with -(* | Incomplete_proof { stack = stack } - when not (List.mem user_goal (Continuationals.head_goals stack)) -> - let status = - MatitaEngine.eval_ast ~include_paths:include_ - ~do_heavy_checks:true status (goal_ast user_goal) - in - let initial_space = if initial_space = "" then "\n" else initial_space - in - "\n", status, - [ status, - initial_space ^ TAPp.pp_tactical (TA.Select (loc, [user_goal])) ] *) - | _ -> initial_space,status,[] in - let new_status = - MatitaEngine.eval_ast - ~include_paths:include_ ~do_heavy_checks:true new_status st - in - let new_aliases = - match ex with - | TA.Command (_, TA.Alias _) - | TA.Command (_, TA.Include _) - | TA.Command (_, TA.Interpretation _) -> [] - | _ -> MatitaSync.alias_diff ~from:status new_status - in - (* we remove the defined object since we consider them "automatic aliases" *) - let dummy_st = - TA.Comment (DisambiguateTypes.dummy_floc, - TA.Note (DisambiguateTypes.dummy_floc, "")) - in - let initial_space,status,new_status_and_text_list_rev = - let module DTE = DisambiguateTypes.Environment in - let module UM = UriManager in - List.fold_left ( - fun (initial_space,status,acc) (k,((v,_) as value)) -> - let b = - try - let v = UM.strip_xpointer (UM.uri_of_string v) in - List.exists (fun (s,_) -> s = v) new_status.objects - with UM.IllFormedUri _ -> false - in - if b then - initial_space,status,acc - else - let new_text = - let initial_space = - if initial_space = "" then "\n" else initial_space in - initial_space ^ - DisambiguatePp.pp_environment - (DisambiguateTypes.Environment.add k value - DisambiguateTypes.Environment.empty) in - let new_status = - MatitaSync.set_proof_aliases status [k,value] - in - "\n",new_status,((new_status, (new_text, dummy_st))::acc) - ) (initial_space,status,[]) new_aliases in - let parsed_text = initial_space ^ parsed_text in - let res = - List.rev new_status_and_text_list_rev @ new_status_and_text_list' @ - [new_status, (parsed_text, st)] - in - res,parsed_text_length - -let eval_with_engine guistuff status user_goal parsed_text st = - try - eval_with_engine guistuff status user_goal parsed_text st - with - | MatitaEngine.UnableToInclude what - | MatitaEngine.IncludedFileNotCompiled what as exc -> - let compile_needed_and_go_on d = - let target = what in - let refresh_cb () = - while Glib.Main.pending () do ignore(Glib.Main.iteration false); done - in - if not(MatitamakeLib.build_development_in_bg ~target refresh_cb d) then - raise exc - else - eval_with_engine guistuff status user_goal parsed_text st - in - let do_nothing () = [], 0 in - let handle_with_devel d = - let name = MatitamakeLib.name_for_development d in - let title = "Unable to include " ^ what in - let message = - what ^ " is handled by development " ^ name ^ ".\n\n" ^ - "Should I compile it and Its dependencies?" - in - (match guistuff.ask_confirmation ~title ~message with - | `YES -> compile_needed_and_go_on d - | `NO -> raise exc - | `CANCEL -> do_nothing ()) - in - let handle_without_devel filename = - let title = "Unable to include " ^ what in - let message = - what ^ " is not handled by a development.\n" ^ - "All dependencies are automatically solved for a development.\n\n" ^ - "Do you want to set up a development?" - in - (match guistuff.ask_confirmation ~title ~message with - | `YES -> - (match filename with - | Some f -> - guistuff.develcreator ~containing:(Some (Filename.dirname f)) - | None -> guistuff.develcreator ~containing:None); - do_nothing () - | `NO -> raise exc - | `CANCEL -> do_nothing()) - in - match guistuff.filenamedata with - | None,None -> handle_without_devel None - | None,Some d -> handle_with_devel d - | Some f,_ -> - match MatitamakeLib.development_for_dir (Filename.dirname f) with - | None -> handle_without_devel (Some f) - | Some d -> handle_with_devel d -;; - -let disambiguate_macro_term term status user_goal = - let module MD = MatitaDisambiguator in - let dbd = MatitaDb.instance () in - let metasenv = MatitaTypes.get_proof_metasenv status in - let context = MatitaTypes.get_proof_context status user_goal in - let interps = - MD.disambiguate_term ~dbd ~context ~metasenv ~aliases:status.aliases - ~universe:(Some status.multi_aliases) term in - match interps with - | [_,_,x,_], _ -> x - | _ -> assert false - -let eval_macro guistuff status user_goal unparsed_text parsed_text script mac = - let module TAPp = GrafiteAstPp in - let module MQ = MetadataQuery in - let module MDB = MatitaDb in - let module CTC = CicTypeChecker in - let module CU = CicUniv in - (* no idea why ocaml wants this *) - let advance ?statement () = script#advance ?statement () in - let parsed_text_length = String.length parsed_text in - let dbd = MatitaDb.instance () in - match mac with - (* WHELP's stuff *) - | TA.WMatch (loc, term) -> - let term = disambiguate_macro_term term status user_goal in - let l = MQ.match_term ~dbd term in - let query_url = - MatitaMisc.strip_suffix ~suffix:"." - (HExtlib.trim_blanks unparsed_text) - in - let entry = `Whelp (query_url, l) in - guistuff.mathviewer#show_uri_list ~reuse:true ~entry l; - [], parsed_text_length - | TA.WInstance (loc, term) -> - let term = disambiguate_macro_term term status user_goal in - let l = MQ.instance ~dbd term in - let entry = `Whelp (TAPp.pp_macro_cic (TA.WInstance (loc, term)), l) in - guistuff.mathviewer#show_uri_list ~reuse:true ~entry l; - [], parsed_text_length - | TA.WLocate (loc, s) -> - let l = MQ.locate ~dbd s in - let entry = `Whelp (TAPp.pp_macro_cic (TA.WLocate (loc, s)), l) in - guistuff.mathviewer#show_uri_list ~reuse:true ~entry l; - [], parsed_text_length - | TA.WElim (loc, term) -> - let term = disambiguate_macro_term term status user_goal in - let uri = - match term with - | Cic.MutInd (uri,n,_) -> UriManager.uri_of_uriref uri n None - | _ -> failwith "Not a MutInd" - in - let l = MQ.elim ~dbd uri in - let entry = `Whelp (TAPp.pp_macro_cic (TA.WElim (loc, term)), l) in - guistuff.mathviewer#show_uri_list ~reuse:true ~entry l; - [], parsed_text_length - | TA.WHint (loc, term) -> - let term = disambiguate_macro_term term status user_goal in - let s = ((None,[0,[],term], Cic.Meta (0,[]) ,term),0) in - let l = List.map fst (MQ.experimental_hint ~dbd s) in - let entry = `Whelp (TAPp.pp_macro_cic (TA.WHint (loc, term)), l) in - guistuff.mathviewer#show_uri_list ~reuse:true ~entry l; - [], parsed_text_length - (* REAL macro *) - | TA.Hint loc -> - let proof = MatitaTypes.get_current_proof status in - let proof_status = proof, user_goal in - let l = List.map fst (MQ.experimental_hint ~dbd proof_status) in - let selected = guistuff.urichooser l in - (match selected with - | [] -> [], parsed_text_length - | [uri] -> - let suri = UriManager.string_of_uri uri in - let ast = - TA.Executable (loc, (TA.Tactical (loc, - TA.Tactic (loc, - TA.Apply (loc, CicNotationPt.Uri (suri, None))), - Some (TA.Dot loc)))) - in - let new_status = MatitaEngine.eval_ast status ast in - let extra_text = - comment parsed_text ^ - "\n" ^ TAPp.pp_statement ast - in - [ new_status , (extra_text, ast) ], parsed_text_length - | _ -> - MatitaLog.error - "The result of the urichooser should be only 1 uri, not:\n"; - List.iter ( - fun u -> MatitaLog.error (UriManager.string_of_uri u ^ "\n") - ) selected; - assert false) - | TA.Check (_,term) -> - let metasenv = MatitaTypes.get_proof_metasenv status in - let context = MatitaTypes.get_proof_context status user_goal in - let interps = - MatitaDisambiguator.disambiguate_term ~dbd ~context ~metasenv - ~aliases:status.aliases ~universe:(Some status.multi_aliases) term - in - let _, metasenv , term, ugraph = - match interps with - | [x], _ -> x - | _ -> assert false - in - let ty,_ = CTC.type_of_aux' metasenv context term ugraph in - let t_and_ty = Cic.Cast (term,ty) in - guistuff.mathviewer#show_entry (`Cic (t_and_ty,metasenv)); - [], parsed_text_length -(* | TA.Abort _ -> - let rec go_back () = - let status = script#status.proof_status in - match status with - | No_proof -> () - | _ -> script#retract ();go_back() - in - [], parsed_text_length, Some go_back - | TA.Redo (_, Some i) -> [], parsed_text_length, - Some (fun () -> for j = 1 to i do advance () done) - | TA.Redo (_, None) -> [], parsed_text_length, - Some (fun () -> advance ()) - | TA.Undo (_, Some i) -> [], parsed_text_length, - Some (fun () -> for j = 1 to i do script#retract () done) - | TA.Undo (_, None) -> [], parsed_text_length, - Some (fun () -> script#retract ()) *) - (* TODO *) - | TA.Quit _ -> failwith "not implemented" - | TA.Print (_,kind) -> failwith "not implemented" - | TA.Search_pat (_, search_kind, str) -> failwith "not implemented" - | TA.Search_term (_, search_kind, term) -> failwith "not implemented" - -let eval_executable guistuff status user_goal unparsed_text parsed_text script - ex -= - let module TAPp = GrafiteAstPp in - let module MD = MatitaDisambiguator in - let module ML = MatitacleanLib in - let parsed_text_length = String.length parsed_text in - match ex with - | TA.Command (loc, _) | TA.Tactical (loc, _, _) -> - (try - (match MatitaMisc.baseuri_of_baseuri_decl (TA.Executable (loc,ex)) with - | None -> () - | Some u -> - if not (MatitaMisc.is_empty u) then - match - guistuff.ask_confirmation - ~title:"Baseuri redefinition" - ~message:( - "Baseuri " ^ u ^ " already exists.\n" ^ - "Do you want to redefine the corresponding "^ - "part of the library?") - with - | `YES -> MatitacleanLib.clean_baseuris [u] - | `NO -> () - | `CANCEL -> raise MatitaTypes.Cancel); - eval_with_engine - guistuff status user_goal parsed_text (TA.Executable (loc, ex)) - with MatitaTypes.Cancel -> [], 0) - | TA.Macro (_,mac) -> - eval_macro guistuff status user_goal unparsed_text parsed_text script mac - -let parse_statement baseoffset parsedlen ?error_tag (buffer: GText.buffer) text -= - try - GrafiteParser.parse_statement (Ulexing.from_utf8_string text) - with CicNotationParser.Parse_error (floc, err) as exn -> - match error_tag with - | None -> raise exn - | Some error_tag -> - let (x, y) = CicNotationPt.loc_of_floc floc in - let x = parsedlen + x in - let y = parsedlen + y in - let x' = baseoffset + x in - let y' = baseoffset + y in - let x_iter = buffer#get_iter (`OFFSET x') in - let y_iter = buffer#get_iter (`OFFSET y') in - buffer#apply_tag error_tag ~start:x_iter ~stop:y_iter; - let id = ref None in - id := Some (buffer#connect#changed ~callback:(fun () -> - buffer#remove_tag error_tag ~start:buffer#start_iter - ~stop:buffer#end_iter; - match !id with - | None -> assert false (* a race condition occurred *) - | Some id -> - (new GObj.gobject_ops buffer#as_buffer)#disconnect id)); - let flocb,floce = floc in - let floc = - { flocb with Lexing.pos_cnum = x }, { floce with Lexing.pos_cnum = y } - in - buffer#place_cursor (buffer#get_iter (`OFFSET x')); - raise (CicNotationParser.Parse_error (floc, err)) - -let rec eval_statement baseoffset parsedlen error_tag (buffer : GText.buffer) - guistuff status user_goal script statement -= - let st, unparsed_text = - match statement with - | `Raw text -> - if Pcre.pmatch ~rex:only_dust_RE text then raise Margin; - parse_statement baseoffset parsedlen ~error_tag buffer text, text - | `Ast (st, text) -> st, text - in - let text_of_loc loc = - let parsed_text_length = snd (CicNotationPt.loc_of_floc loc) in - let parsed_text = safe_substring unparsed_text 0 parsed_text_length in - parsed_text, parsed_text_length - in - match st with - | GrafiteAst.Comment (loc, _) -> - let parsed_text, parsed_text_length = text_of_loc loc in - let remain_len = String.length unparsed_text - parsed_text_length in - let s = String.sub unparsed_text parsed_text_length remain_len in - let s,len = - eval_statement baseoffset (parsedlen + parsed_text_length) error_tag - buffer guistuff status user_goal script (`Raw s) - in - (match s with - | (status, (text, ast)) :: tl -> - ((status, (parsed_text ^ text, ast))::tl), (parsed_text_length + len) - | [] -> [], 0) - | GrafiteAst.Executable (loc, ex) -> - let parsed_text, parsed_text_length = text_of_loc loc in - eval_executable guistuff status user_goal unparsed_text parsed_text - script ex - -let fresh_script_id = - let i = ref 0 in - fun () -> incr i; !i - -class script ~(source_view: GSourceView.source_view) - ~(init: MatitaTypes.status) - ~(mathviewer: MatitaTypes.mathViewer) - ~set_star - ~ask_confirmation - ~urichooser - ~develcreator - () = -let buffer = source_view#buffer in -let source_buffer = source_view#source_buffer in -object (self) - val scriptId = fresh_script_id () - - val guistuff = { - mathviewer = mathviewer; - urichooser = urichooser; - ask_confirmation = ask_confirmation; - develcreator = develcreator; - filenamedata = (None, None)} - - method private getFilename = - match guistuff.filenamedata with Some f,_ -> f | _ -> assert false - - method filename = self#getFilename - - method private ppFilename = - match guistuff.filenamedata with - | Some f,_ -> f - | None,_ -> sprintf ".unnamed%d.ma" scriptId - - initializer - ignore (GMain.Timeout.add ~ms:300000 - ~callback:(fun _ -> self#_saveToBackupFile ();true)); - ignore (buffer#connect#modified_changed - (fun _ -> set_star (Filename.basename self#ppFilename) buffer#modified)) - - val mutable statements = []; (** executed statements *) - val mutable history = [ init ]; - (** list of states before having executed statements. Head element of this - * list is the current state, last element is the state at the beginning of - * the script. - * Invariant: this list length is 1 + length of statements *) - - (** goal as seen by the user (i.e. metano corresponding to current tab) *) - val mutable userGoal = ~-1 - - (** text mark and tag representing locked part of a script *) - val locked_mark = - buffer#create_mark ~name:"locked" ~left_gravity:true buffer#start_iter - val locked_tag = buffer#create_tag [`BACKGROUND "lightblue"; `EDITABLE false] - val error_tag = buffer#create_tag [`UNDERLINE `SINGLE; `FOREGROUND "red"] - - method locked_mark = locked_mark - method locked_tag = locked_tag - - (* history can't be empty, the invariant above grant that it contains at - * least the init status *) - method status = match history with hd :: _ -> hd | _ -> assert false - - method private _advance ?statement () = - let rec aux st = - let baseoffset = (buffer#get_iter_at_mark (`MARK locked_mark))#offset in - let (entries, parsed_len) = - eval_statement baseoffset 0 error_tag buffer guistuff self#status - userGoal self st - in - let (new_statuses, new_statements, new_asts) = - let statuses, statements = List.split entries in - let texts, asts = List.split statements in - statuses, texts, asts - in - history <- List.rev new_statuses @ history; - statements <- List.rev new_statements @ statements; - let start = buffer#get_iter_at_mark (`MARK locked_mark) in - let new_text = String.concat "" new_statements in - if statement <> None then - buffer#insert ~iter:start new_text - else - let s = match st with `Raw s | `Ast (_, s) -> s in - if new_text <> String.sub s 0 parsed_len then - begin - let stop = start#copy#forward_chars parsed_len in - buffer#delete ~start ~stop; - buffer#insert ~iter:start new_text; - end; - self#moveMark (String.length new_text); - (* - (match List.rev new_asts with (* advance again on punctuation *) - | TA.Executable (_, TA.Tactical (_, tac, _)) :: _ -> - let baseoffset = - (buffer#get_iter_at_mark (`MARK locked_mark))#offset - in - let text = self#getFuture in - (try - (match parse_statement baseoffset 0 ?error_tag:None buffer text with - | TA.Executable (loc, TA.Tactical (_, tac, None)) as st - when GrafiteAst.is_punctuation tac -> - let len = snd (CicNotationPt.loc_of_floc loc) in - aux (`Ast (st, String.sub text 0 len)) - | _ -> ()) - with CicNotationParser.Parse_error _ | End_of_file -> ()) - | _ -> ()) - *) - in - let s = match statement with Some s -> s | None -> self#getFuture in - MatitaLog.debug ("evaluating: " ^ first_line s ^ " ..."); - (try aux (`Raw s) with End_of_file -> raise Margin) - - method private _retract offset status new_statements new_history = - let cur_status = match history with s::_ -> s | [] -> assert false in - MatitaSync.time_travel ~present:cur_status ~past:status; - statements <- new_statements; - history <- new_history; - self#moveMark (- offset) - - method advance ?statement () = - try - self#_advance ?statement (); - self#notify - with - | Margin -> self#notify - | exc -> self#notify; raise exc - - method retract () = - try - let cmp,new_statements,new_history,status = - match statements,history with - stat::statements, _::(status::_ as history) -> - String.length stat, statements, history, status - | [],[_] -> raise Margin - | _,_ -> assert false - in - self#_retract cmp status new_statements new_history; - self#notify - with - | Margin -> self#notify - | exc -> self#notify; raise exc - - method private getFuture = - buffer#get_text ~start:(buffer#get_iter_at_mark (`MARK locked_mark)) - ~stop:buffer#end_iter () - - - (** @param rel_offset relative offset from current position of locked_mark *) - method private moveMark rel_offset = - let mark = `MARK locked_mark in - let old_insert = buffer#get_iter_at_mark `INSERT in - buffer#remove_tag locked_tag ~start:buffer#start_iter ~stop:buffer#end_iter; - let current_mark_pos = buffer#get_iter_at_mark mark in - let new_mark_pos = - match rel_offset with - | 0 -> current_mark_pos - | n when n > 0 -> current_mark_pos#forward_chars n - | n (* when n < 0 *) -> current_mark_pos#backward_chars (abs n) - in - buffer#move_mark mark ~where:new_mark_pos; - buffer#apply_tag locked_tag ~start:buffer#start_iter ~stop:new_mark_pos; - buffer#move_mark `INSERT old_insert; - let mark_position = buffer#get_iter_at_mark mark in - if source_view#move_mark_onscreen mark then - begin - buffer#move_mark mark mark_position; - source_view#scroll_to_mark ~use_align:true ~xalign:1.0 ~yalign:0.1 mark; - end; - while Glib.Main.pending () do ignore(Glib.Main.iteration false); done - - method clean_dirty_lock = - let lock_mark_iter = buffer#get_iter_at_mark (`MARK locked_mark) in - buffer#remove_tag locked_tag ~start:buffer#start_iter ~stop:buffer#end_iter; - buffer#apply_tag locked_tag ~start:buffer#start_iter ~stop:lock_mark_iter - - val mutable observers = [] - - method addObserver (o: MatitaTypes.status -> unit) = - observers <- o :: observers - - method private notify = - let status = self#status in - List.iter (fun o -> o status) observers - - method loadFromFile f = - buffer#set_text (HExtlib.input_file f); - self#reset_buffer; - buffer#set_modified false - - method assignFileName file = - let abspath = MatitaMisc.absolute_path file in - let devel = MatitamakeLib.development_for_dir (Filename.dirname abspath) in - guistuff.filenamedata <- Some abspath, devel - - method saveToFile () = - let oc = open_out self#getFilename in - output_string oc (buffer#get_text ~start:buffer#start_iter - ~stop:buffer#end_iter ()); - close_out oc; - buffer#set_modified false - - method private _saveToBackupFile () = - if buffer#modified then - begin - let f = self#ppFilename ^ "~" in - let oc = open_out f in - output_string oc (buffer#get_text ~start:buffer#start_iter - ~stop:buffer#end_iter ()); - close_out oc; - MatitaLog.debug ("backup " ^ f ^ " saved") - end - - method private goto_top = - MatitaSync.time_travel ~present:self#status ~past:init - - method private reset_buffer = - statements <- []; - history <- [ init ]; - userGoal <- ~-1; - self#notify; - buffer#remove_tag locked_tag ~start:buffer#start_iter ~stop:buffer#end_iter; - buffer#move_mark (`MARK locked_mark) ~where:buffer#start_iter - - method reset () = - self#reset_buffer; - source_buffer#begin_not_undoable_action (); - buffer#delete ~start:buffer#start_iter ~stop:buffer#end_iter; - source_buffer#end_not_undoable_action (); - buffer#set_modified false - - method template () = - let template = HExtlib.input_file BuildTimeConf.script_template in - buffer#insert ~iter:(buffer#get_iter `START) template; - guistuff.filenamedata <- - (None,MatitamakeLib.development_for_dir (Unix.getcwd ())); - buffer#set_modified false; - set_star (Filename.basename self#ppFilename) false - - method goto (pos: [`Top | `Bottom | `Cursor]) () = - let old_locked_mark = - `MARK - (buffer#create_mark ~name:"old_locked_mark" - ~left_gravity:true (buffer#get_iter_at_mark (`MARK locked_mark))) in - let getpos _ = buffer#get_iter_at_mark (`MARK locked_mark) in - let getoldpos _ = buffer#get_iter_at_mark old_locked_mark in - let dispose_old_locked_mark () = buffer#delete_mark old_locked_mark in - match pos with - | `Top -> - dispose_old_locked_mark (); - self#goto_top; - self#reset_buffer; - self#notify - | `Bottom -> - (try - let rec dowhile () = - self#_advance (); - let newpos = getpos () in - if (getoldpos ())#compare newpos < 0 then - begin - buffer#move_mark old_locked_mark newpos; - dowhile () - end - in - dowhile (); - dispose_old_locked_mark (); - self#notify - with - | Margin -> dispose_old_locked_mark (); self#notify - | exc -> dispose_old_locked_mark (); self#notify; raise exc) - | `Cursor -> - let locked_iter () = buffer#get_iter_at_mark (`NAME "locked") in - let cursor_iter () = buffer#get_iter_at_mark `INSERT in - let remember = - `MARK - (buffer#create_mark ~name:"initial_insert" - ~left_gravity:true (cursor_iter ())) in - let dispose_remember () = buffer#delete_mark remember in - let remember_iter () = - buffer#get_iter_at_mark (`NAME "initial_insert") in - let cmp () = (locked_iter ())#offset - (remember_iter ())#offset in - let icmp = cmp () in - let forward_until_cursor () = (* go forward until locked > cursor *) - let rec aux () = - self#_advance (); - if cmp () < 0 && (getoldpos ())#compare (getpos ()) < 0 - then - begin - buffer#move_mark old_locked_mark (getpos ()); - aux () - end - in - aux () - in - let rec back_until_cursor len = (* go backward until locked < cursor *) - function - statements, (status::_ as history) when len <= 0 -> - self#_retract (icmp - len) status statements history - | statement::tl1, _::tl2 -> - back_until_cursor (len - String.length statement) (tl1,tl2) - | _,_ -> assert false - in - (try - begin - if icmp < 0 then (* locked < cursor *) - (forward_until_cursor (); self#notify) - else if icmp > 0 then (* locked > cursor *) - (back_until_cursor icmp (statements,history); self#notify) - else (* cursor = locked *) - () - end ; - dispose_remember (); - dispose_old_locked_mark (); - with - | Margin -> dispose_remember (); dispose_old_locked_mark (); self#notify - | exc -> dispose_remember (); dispose_old_locked_mark (); - self#notify; raise exc) - - method onGoingProof () = - match self#status.proof_status with - | No_proof | Proof _ -> false - | Incomplete_proof _ -> true - | Intermediate _ -> assert false - -(* method proofStatus = MatitaTypes.get_proof_status self#status *) - method proofMetasenv = MatitaTypes.get_proof_metasenv self#status - method proofContext = MatitaTypes.get_proof_context self#status userGoal - method proofConclusion = MatitaTypes.get_proof_conclusion self#status userGoal - method stack = MatitaTypes.get_stack self#status - method setGoal n = userGoal <- n - method goal = userGoal - - method eos = - let s = self#getFuture in - let rec is_there_and_executable s = - if Pcre.pmatch ~rex:only_dust_RE s then raise Margin; - let st = GrafiteParser.parse_statement (Ulexing.from_utf8_string s) in - match st with - | GrafiteAst.Comment (loc,_)-> - let parsed_text_length = snd (CicNotationPt.loc_of_floc loc) in - let remain_len = String.length s - parsed_text_length in - let next = String.sub s parsed_text_length remain_len in - is_there_and_executable next - | GrafiteAst.Executable (loc, ex) -> false - in - try - is_there_and_executable s - with - | CicNotationParser.Parse_error _ -> false - | Margin | End_of_file -> true - - (* debug *) - method dump () = - MatitaLog.debug "script status:"; - MatitaLog.debug ("history size: " ^ string_of_int (List.length history)); - MatitaLog.debug (sprintf "%d statements:" (List.length statements)); - List.iter MatitaLog.debug statements; - MatitaLog.debug ("Current file name: " ^ - (match guistuff.filenamedata with - |None,_ -> "[ no name ]" - | Some f,_ -> f)); - -end - -let _script = ref None - -let script ~source_view ~init ~mathviewer ~urichooser ~develcreator ~ask_confirmation ~set_star () -= - let s = new script - ~source_view ~init ~mathviewer ~ask_confirmation ~urichooser ~develcreator ~set_star () - in - _script := Some s; - s - -let current () = match !_script with None -> assert false | Some s -> s - diff --git a/helm/matita/matitaScript.mli b/helm/matita/matitaScript.mli deleted file mode 100644 index 35ae43ebb..000000000 --- a/helm/matita/matitaScript.mli +++ /dev/null @@ -1,98 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -class type script = -object - - method locked_mark : Gtk.text_mark - method locked_tag : GText.tag - - (** @return current status *) - method status: MatitaTypes.status - - (** {2 Observers} *) - - method addObserver : (MatitaTypes.status -> unit) -> unit - - (** {2 History} *) - - method advance : ?statement:string -> unit -> unit - method retract : unit -> unit - method goto: [`Top | `Bottom | `Cursor] -> unit -> unit - method reset: unit -> unit - method template: unit -> unit - - (** {2 Load/save} *) - - method assignFileName : string -> unit (* to the current active file *) - method loadFromFile : string -> unit - method saveToFile : unit -> unit - method filename : string - - (** {2 Current proof} (if any) *) - - (** @return true if there is an ongoing proof, false otherise *) - method onGoingProof: unit -> bool - -(* method proofStatus: ProofEngineTypes.status |+* @raise Statement_error +| *) - method proofMetasenv: Cic.metasenv (** @raise Statement_error *) - method proofContext: Cic.context (** @raise Statement_error *) - method proofConclusion: Cic.term (** @raise Statement_error *) - method stack: Continuationals.Stack.t (** @raise Statement_error *) - - method setGoal: int -> unit - method goal: int - - (** end of script, true if the whole script has been executed *) - method eos: bool - - (** misc *) - method clean_dirty_lock: unit - - (* debug *) - method dump : unit -> unit - -end - - (** @param set_star callback used to set the modified symbol (usually a star - * "*") on the side of a script name *) -val script: - source_view:GSourceView.source_view -> - init:MatitaTypes.status -> - mathviewer: MatitaTypes.mathViewer-> - urichooser: (UriManager.uri list -> UriManager.uri list) -> - develcreator: (containing:string option -> unit) -> - ask_confirmation: - (title:string -> message:string -> [`YES | `NO | `CANCEL]) -> - set_star: (string -> bool -> unit) -> - unit -> - script - -(* each time script above is called an internal ref is set, instance will return - * the value of this ref *) -(* TODO Zack: orrible solution until we found a better one for having a single - * access point for the script *) -val current: unit -> script - diff --git a/helm/matita/matitaSync.ml b/helm/matita/matitaSync.ml deleted file mode 100644 index 716aa04d2..000000000 --- a/helm/matita/matitaSync.ml +++ /dev/null @@ -1,339 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -open MatitaTypes - -let alias_diff ~from status = - let module Map = DisambiguateTypes.Environment in - Map.fold - (fun domain_item (description1,_ as codomain_item) acc -> - try - let description2,_ = Map.find domain_item from.aliases in - if description1 <> description2 then - (domain_item,codomain_item)::acc - else - acc - with - Not_found -> - (domain_item,codomain_item)::acc) - status.aliases [] - -let alias_diff = - let profiler = HExtlib.profile "alias_diff (conteggiato anche in include)" in - fun ~from status -> profiler.HExtlib.profile (alias_diff ~from) status - -let set_proof_aliases status new_aliases = - let commands_of_aliases = - List.map - (fun alias -> GrafiteAst.Alias (DisambiguateTypes.dummy_floc, alias)) - in - let deps_of_aliases = - HExtlib.filter_map - (function - | GrafiteAst.Ident_alias (_, suri) -> - let buri = UriManager.buri_of_uri (UriManager.uri_of_string suri) in - Some (GrafiteAst.Dependency buri) - | _ -> None) - in - let aliases = - List.fold_left (fun acc (d,c) -> DisambiguateTypes.Environment.add d c acc) - status.aliases new_aliases in - let multi_aliases = - List.fold_left (fun acc (d,c) -> DisambiguateTypes.Environment.cons d c acc) - status.multi_aliases new_aliases in - let new_status = - { status with multi_aliases = multi_aliases ; aliases = aliases} - in - if new_aliases = [] then - new_status - else - let aliases = - DisambiguatePp.aliases_of_domain_and_codomain_items_list new_aliases - in - let status = add_moo_content (commands_of_aliases aliases) new_status in - let status = add_moo_metadata (deps_of_aliases aliases) status in - status - -(** given a uri and a type list (the contructors types) builds a list of pairs - * (name,uri) that is used to generate automatic aliases **) -let extract_alias types uri = - fst(List.fold_left ( - fun (acc,i) (name, _, _, cl) -> - (name, UriManager.string_of_uri (UriManager.uri_of_uriref uri i None)) - :: - (fst(List.fold_left ( - fun (acc,j) (name,_) -> - (((name,UriManager.string_of_uri (UriManager.uri_of_uriref uri i - (Some j))) :: acc) , j+1) - ) (acc,1) cl)),i+1 - ) ([],0) types) - -let build_aliases = - List.map - (fun (name,suri) -> - DisambiguateTypes.Id name, - (suri, fun _ _ _ -> CicUtil.term_of_uri (UriManager.uri_of_string suri))) - -let add_aliases_for_inductive_def status types suri = - let uri = UriManager.uri_of_string suri in - let aliases = build_aliases (extract_alias types uri) in - set_proof_aliases status aliases - -let add_alias_for_constant status suri = - let uri = UriManager.uri_of_string suri in - let name = UriManager.name_of_uri uri in - let new_env = build_aliases [(name,suri)] in - set_proof_aliases status new_env - -let add_aliases_for_object status suri = - function - Cic.InductiveDefinition (types,_,_,_) -> - add_aliases_for_inductive_def status types suri - | Cic.Constant _ -> add_alias_for_constant status suri - | Cic.Variable _ - | Cic.CurrentProof _ -> assert false - -let paths_and_uris_of_obj uri status = - let basedir = get_string_option status "basedir" ^ "/xml" in - let innertypesuri = UriManager.innertypesuri_of_uri uri in - let bodyuri = UriManager.bodyuri_of_uri uri in - let univgraphuri = UriManager.univgraphuri_of_uri uri in - let innertypesfilename = Str.replace_first (Str.regexp "^cic:") "" - (UriManager.string_of_uri innertypesuri) ^ ".xml.gz" in - let innertypespath = basedir ^ "/" ^ innertypesfilename in - let xmlfilename = Str.replace_first (Str.regexp "^cic:/") "" - (UriManager.string_of_uri uri) ^ ".xml.gz" in - let xmlpath = basedir ^ "/" ^ xmlfilename in - let xmlbodyfilename = Str.replace_first (Str.regexp "^cic:/") "" - (UriManager.string_of_uri uri) ^ ".body.xml.gz" in - let xmlbodypath = basedir ^ "/" ^ xmlbodyfilename in - let xmlunivgraphfilename = Str.replace_first (Str.regexp "^cic:/") "" - (UriManager.string_of_uri univgraphuri) ^ ".xml.gz" in - let xmlunivgraphpath = basedir ^ "/" ^ xmlunivgraphfilename in - xmlpath, xmlbodypath, innertypespath, bodyuri, innertypesuri, - xmlunivgraphpath, univgraphuri - -let save_object_to_disk status uri obj ugraph univlist = - let ensure_path_exists path = - let dir = Filename.dirname path in - HExtlib.mkdir dir - in - (* generate annobj, ids_to_inner_sorts and ids_to_inner_types *) - let annobj = Cic2acic.plain_acic_object_of_cic_object obj in - (* prepare XML *) - let xml, bodyxml = - Cic2Xml.print_object - uri ?ids_to_inner_sorts:None ~ask_dtd_to_the_getter:false annobj - in - let xmlpath, xmlbodypath, innertypespath, bodyuri, innertypesuri, - xmlunivgraphpath, univgraphuri = - paths_and_uris_of_obj uri status - in - let path_scheme_of path = "file://" ^ path in - List.iter HExtlib.mkdir (List.map Filename.dirname [xmlpath]); - (* now write to disk *) - ensure_path_exists xmlpath; - Xml.pp ~gzip:true xml (Some xmlpath); - CicUniv.write_xml_of_ugraph xmlunivgraphpath ugraph univlist; - (* we return a list of uri,path we registered/created *) - (uri,xmlpath) :: - (univgraphuri,xmlunivgraphpath) :: - (* now the optional body, both write and register *) - (match bodyxml,bodyuri with - None,None -> [] - | Some bodyxml,Some bodyuri-> - ensure_path_exists xmlbodypath; - Xml.pp ~gzip:true bodyxml (Some xmlbodypath); - [bodyuri, xmlbodypath] - | _-> assert false) - -let typecheck_obj = - let profiler = HExtlib.profile "add_obj.typecheck_obj" in - fun uri obj -> profiler.HExtlib.profile (CicTypeChecker.typecheck_obj uri) obj - -let index_obj = - let profiler = HExtlib.profile "add_obj.index_obj" in - fun ~dbd ~uri -> - profiler.HExtlib.profile (fun uri -> MetadataDb.index_obj ~dbd ~uri) uri - -let add_obj uri obj status = - let dbd = MatitaDb.instance () in - let suri = UriManager.string_of_uri uri in - if CicEnvironment.in_library uri then - command_error (sprintf "%s already defined" suri) - else begin - typecheck_obj uri obj; (* 1 *) - let _, ugraph, univlist = - CicEnvironment.get_cooked_obj_with_univlist CicUniv.empty_ugraph uri in - try - index_obj ~dbd ~uri; (* 2 must be in the env *) - try - let new_stuff=save_object_to_disk status uri obj ugraph univlist in(*3*) - try - MatitaLog.message (sprintf "%s defined" suri); - let status = add_aliases_for_object status suri obj in - { status with objects = new_stuff @ status.objects; - proof_status = No_proof } - with exc -> - List.iter MatitaMisc.safe_remove (List.map snd new_stuff); (* -3 *) - raise exc - with exc -> - ignore(MatitaDb.remove_uri uri); (* -2 *) - raise exc - with exc -> - CicEnvironment.remove_obj uri; (* -1 *) - raise exc - end - -let add_obj = - let profiler = HExtlib.profile "add_obj" in - fun uri obj status -> profiler.HExtlib.profile (add_obj uri obj) status - -module OrderedUri = -struct - type t = UriManager.uri * string - let compare (u1, _) (u2, _) = UriManager.compare u1 u2 -end - -module OrderedId = -struct - type t = CicNotation.notation_id - let compare = Pervasives.compare -end - -module UriSet = Set.Make (OrderedUri) -module IdSet = Set.Make (OrderedId) - - (** @return l2 \ l1 *) -let urixstring_list_diff l2 l1 = - let module S = UriSet in - let s1 = List.fold_left (fun set uri -> S.add uri set) S.empty l1 in - let s2 = List.fold_left (fun set uri -> S.add uri set) S.empty l2 in - let diff = S.diff s2 s1 in - S.fold (fun uri uris -> uri :: uris) diff [] - -let uri_list_diff l2 l1 = - let module S = UriManager.UriSet in - let s1 = List.fold_left (fun set uri -> S.add uri set) S.empty l1 in - let s2 = List.fold_left (fun set uri -> S.add uri set) S.empty l2 in - let diff = S.diff s2 s1 in - S.fold (fun uri uris -> uri :: uris) diff [] - - (** @return l2 \ l1 *) -let id_list_diff l2 l1 = - let module S = IdSet in - let s1 = List.fold_left (fun set uri -> S.add uri set) S.empty l1 in - let s2 = List.fold_left (fun set uri -> S.add uri set) S.empty l2 in - let diff = S.diff s2 s1 in - S.fold (fun uri uris -> uri :: uris) diff [] - -let remove_coercion uri = - CoercDb.remove_coercion (fun (_,_,u) -> UriManager.eq u uri) - -let time_travel ~present ~past = - let objs_to_remove = urixstring_list_diff present.objects past.objects in - let coercions_to_remove = uri_list_diff present.coercions past.coercions in - let notation_to_remove = - id_list_diff present.notation_ids past.notation_ids - in - let debug_list = ref [] in - List.iter remove_coercion coercions_to_remove; - List.iter - (fun (uri,p) -> - MatitaMisc.safe_remove p; - (try - CicEnvironment.remove_obj uri - with CicEnvironment.Object_not_found _ -> - MatitaLog.debug - (sprintf "time_travel removes from cache %s that is not in" - (UriManager.string_of_uri uri))); - let l = MatitaDb.remove_uri uri in - debug_list := UriManager.string_of_uri uri :: !debug_list @ l) - objs_to_remove; - List.iter CicNotation.remove_notation notation_to_remove - (* - (* this is debug code - * idea: debug_list is the list of objects to be removed as computed from the - * db, while list_of_objs_to_remove is the same list but computer from the - * differences between statuses *) - let l1 = List.sort Pervasives.compare !debug_list in - let l2 = List.sort Pervasives.compare - (List.map (fun (x,_) -> UriManager.string_of_uri x) list_of_objs_to_remove) - in - let rec uniq = function - | [] -> [] - | h::[] -> [h] - | h1::h2::tl when h1 = h2 -> uniq (h2 :: tl) - | h1::tl (* when h1 <> h2 *) -> h1 :: uniq tl - in - let l1 = uniq l1 in - let l2 = uniq l2 in - try - List.iter2 (fun x y -> if x <> y then raise Exit) l1 l2 - with - | Invalid_argument _ | Exit -> - MatitaLog.debug "It seems you garbaged something..."; - MatitaLog.debug "l1:"; - List.iter MatitaLog.debug l1; - MatitaLog.debug "l2:"; - List.iter MatitaLog.debug l2 - *) - -let last_baseuri = ref "" - -let remove ?(verbose=false) uri = - let derived_uris_of_uri uri = - UriManager.innertypesuri_of_uri uri :: - UriManager.univgraphuri_of_uri uri :: - (match UriManager.bodyuri_of_uri uri with - | None -> [] - | Some u -> [u]) - in - let to_remove = - uri :: - (if UriManager.uri_is_ind uri then MatitaDb.xpointers_of_ind uri else []) @ - derived_uris_of_uri uri - in - List.iter - (fun uri -> - (try - (* WARNING: non reentrant debugging code *) - if verbose then - let baseuri = UriManager.buri_of_uri uri in - if !last_baseuri <> baseuri then - begin - MatitaLog.debug ("Removing: " ^ baseuri ^ "/*"); - last_baseuri := baseuri - end; - let file = Http_getter.resolve' uri in - MatitaMisc.safe_remove file; - MatitaMisc.rmdir_descend (Filename.dirname file) - with Http_getter_types.Key_not_found _ -> ()); - remove_coercion uri; - ignore (MatitaDb.remove_uri uri); - CicEnvironment.remove_obj uri) - to_remove diff --git a/helm/matita/matitaSync.mli b/helm/matita/matitaSync.mli deleted file mode 100644 index f3906fb8b..000000000 --- a/helm/matita/matitaSync.mli +++ /dev/null @@ -1,52 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -val add_obj: - UriManager.uri -> Cic.obj -> - MatitaTypes.status -> MatitaTypes.status - -val time_travel: - present:MatitaTypes.status -> past:MatitaTypes.status -> unit - - (** perform a diff between the aliases contained in two statuses, assuming - * that the second one can only have more aliases than the first one - * @return the list of aliases that should be added to aliases of from in - * order to be equal to aliases of the second argument *) -val alias_diff: - from:MatitaTypes.status -> MatitaTypes.status -> - (DisambiguateTypes.domain_item * DisambiguateTypes.codomain_item) list - - (** set the proof aliases enriching the moo_content *) -val set_proof_aliases : - MatitaTypes.status -> - (DisambiguateTypes.domain_item * DisambiguateTypes.codomain_item) list -> - MatitaTypes.status - - (* removes the object from DB, Disk, CoercionsDB, CicEnvironment, getter - * asserts the uri is resolved to file:// so it is only for - * user's objects - * @param verbose defaults to false *) -val remove: ?verbose:bool -> UriManager.uri -> unit - diff --git a/helm/matita/matitaTypes.ml b/helm/matita/matitaTypes.ml deleted file mode 100644 index 8bd32bb23..000000000 --- a/helm/matita/matitaTypes.ml +++ /dev/null @@ -1,291 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - - (** user hit the cancel button *) -exception Cancel - - (** statement invoked in the wrong context (e.g. tactic with no ongoing proof) - *) -exception Statement_error of string -let statement_error msg = raise (Statement_error msg) - -exception Command_error of string -let command_error msg = raise (Command_error msg) - - (** parameters are: option name, error message *) -exception Option_error of string * string - -exception Unbound_identifier of string - -type incomplete_proof = { - proof: ProofEngineTypes.proof; - stack: Continuationals.Stack.t; -} - -type proof_status = - | No_proof - | Incomplete_proof of incomplete_proof - | Proof of ProofEngineTypes.proof - | Intermediate of Cic.metasenv - (* Status in which the proof could be while it is being processed by the - * engine. No status entering/exiting the engine could be in it. *) - -module StringMap = Map.Make (String) - -type option_value = - | String of string - | Int of int -type options = option_value StringMap.t -let no_options = StringMap.empty - -type ast_command = (CicNotationPt.term, GrafiteAst.obj) GrafiteAst.command -type moo = ast_command list * GrafiteAst.metadata list - -type status = { - aliases: DisambiguateTypes.environment; - multi_aliases: DisambiguateTypes.multiple_environment; - moo_content_rev: moo; - proof_status: proof_status; - options: options; - objects: (UriManager.uri * string) list; - coercions: UriManager.uri list; - notation_ids: CicNotation.notation_id list; -} - -let set_metasenv metasenv status = - let proof_status = - match status.proof_status with - | No_proof -> Intermediate metasenv - | Incomplete_proof ({ proof = (uri, _, proof, ty) } as incomplete_proof) -> - Incomplete_proof - { incomplete_proof with proof = (uri, metasenv, proof, ty) } - | Intermediate _ -> Intermediate metasenv - | Proof _ -> assert false - in - { status with proof_status = proof_status } - -let dump_status status = - MatitaLog.message "status.aliases:\n"; - MatitaLog.message "status.proof_status:"; - MatitaLog.message - (match status.proof_status with - | No_proof -> "no proof\n" - | Incomplete_proof _ -> "incomplete proof\n" - | Proof _ -> "proof\n" - | Intermediate _ -> "Intermediate\n"); - MatitaLog.message "status.options\n"; - StringMap.iter (fun k v -> - let v = - match v with - | String s -> s - | Int i -> string_of_int i - in - MatitaLog.message (k ^ "::=" ^ v)) status.options; - MatitaLog.message "status.coercions\n"; - MatitaLog.message "status.objects:\n"; - List.iter - (fun (u,_) -> - MatitaLog.message (UriManager.string_of_uri u)) status.objects - -let get_option status name = - try - StringMap.find name status.options - with Not_found -> raise (Option_error (name, "not found")) - -let get_string_option status name = - match get_option status name with - | String s -> s - | _ -> raise (Option_error (name, "not a string value")) - -let set_option status name value = - let mangle_dir s = - let s = Str.global_replace (Str.regexp "//+") "/" s in - let s = Str.global_replace (Str.regexp "/$") "" s in - s - in - let types = - [ "baseuri", (`String, mangle_dir); - "basedir", (`String, mangle_dir); - ] - in - let ty_and_mangler = - try - List.assoc name types - with Not_found -> command_error (sprintf "Unknown option \"%s\"" name) - in - let value = - match ty_and_mangler with - | `String, f -> String (f value) - | `Int, f -> - (try - Int (int_of_string (f value)) - with Failure _ -> - command_error (sprintf "Not an integer value \"%s\"" value)) - in - if StringMap.mem name status.options && name = "baseuri" then - command_error "Redefinition of 'baseuri' is forbidden." - else - { status with options = StringMap.add name value status.options } - -let add_moo_content cmds status = - let content, metadata = status.moo_content_rev in - let content' = - List.fold_right - (fun cmd acc -> -(* prerr_endline ("adding to moo command: " ^ GrafiteAstPp.pp_command cmd); *) - match cmd with - | GrafiteAst.Interpretation _ - | GrafiteAst.Default _ -> - if List.mem cmd content then acc - else cmd :: acc - | GrafiteAst.Alias _ -> (* move Alias as the last inserted one *) - cmd :: (List.filter ((<>) cmd) acc) - | _ -> cmd :: acc) - cmds content - in -(* prerr_endline ("new moo content: " ^ String.concat " " (List.map - GrafiteAstPp.pp_command content')); *) - { status with moo_content_rev = content', metadata } - -let add_moo_metadata new_metadata status = - let content, metadata = status.moo_content_rev in - let metadata' = - List.fold_left - (fun acc m -> - match m with - | GrafiteAst.Dependency buri -> - let is_self = (* self dependency *) - try - get_string_option status "baseuri" = buri - with Option_error _ -> false (* baseuri not yet set *) - in - if is_self - || List.exists (GrafiteAst.eq_metadata m) metadata (* duplicate *) - then acc - else m :: acc - | _ -> m :: acc) - metadata new_metadata - in - { status with moo_content_rev = content, metadata' } - - (* subset of MatitaConsole.console methods needed by MatitaInterpreter *) -class type console = - object - method clear : unit -> unit - method echo_error : string -> unit - method echo_message : string -> unit - method wrap_exn : 'a. (unit -> 'a) -> 'a option - method choose_uri : string list -> string - method show : ?msg:string -> unit -> unit - end - -type abouts = - [ `Blank - | `Current_proof - | `Us - ] - -type mathViewer_entry = - [ `About of abouts (* current proof *) - | `Check of string (* term *) - | `Cic of Cic.term * Cic.metasenv - | `Dir of string (* "directory" in cic uris namespace *) - | `Uri of UriManager.uri (* cic object uri *) - | `Whelp of string * UriManager.uri list (* query and results *) - ] - -let string_of_entry = function - | `About `Blank -> "about:blank" - | `About `Current_proof -> "about:proof" - | `About `Us -> "about:us" - | `Check _ -> "check:" - | `Cic (_, _) -> "term:" - | `Dir uri -> uri - | `Uri uri -> UriManager.string_of_uri uri - | `Whelp (query, _) -> query - -let entry_of_string = function - | "about:blank" -> `About `Blank - | "about:proof" -> `About `Current_proof - | "about:us" -> `About `Us - | _ -> (* only about entries supported ATM *) - raise (Invalid_argument "entry_of_string") - -class type mathViewer = - object - (** @param reuse if set reused last opened cic browser otherwise - * opens a new one. default is false - *) - method show_entry: ?reuse:bool -> mathViewer_entry -> unit - method show_uri_list: - ?reuse:bool -> entry:mathViewer_entry -> UriManager.uri list -> unit - end - -let qualify status name = get_string_option status "baseuri" ^ "/" ^ name - -let get_current_proof status = - match status.proof_status with - | Incomplete_proof { proof = p } -> p - | _ -> statement_error "no ongoing proof" - -let get_proof_metasenv status = - match status.proof_status with - | No_proof -> [] - | Proof (_, metasenv, _, _) - | Incomplete_proof { proof = (_, metasenv, _, _) } - | Intermediate metasenv -> - metasenv - -let get_proof_context status goal = - match status.proof_status with - | Incomplete_proof { proof = (_, metasenv, _, _) } -> - let (_, context, _) = CicUtil.lookup_meta goal metasenv in - context - | _ -> [] - -let get_proof_conclusion status goal = - match status.proof_status with - | Incomplete_proof { proof = (_, metasenv, _, _) } -> - let (_, _, conclusion) = CicUtil.lookup_meta goal metasenv in - conclusion - | _ -> statement_error "no ongoing proof" - -let get_stack status = - match status.proof_status with - | Incomplete_proof p -> p.stack - | Proof _ -> Continuationals.Stack.empty - | _ -> assert false - -let set_stack stack status = - match status.proof_status with - | Incomplete_proof p -> - { status with proof_status = Incomplete_proof { p with stack = stack } } - | Proof _ -> - assert (Continuationals.Stack.is_empty stack); - status - | _ -> assert false - diff --git a/helm/matita/matitaTypes.mli b/helm/matita/matitaTypes.mli deleted file mode 100644 index e54fe5c7e..000000000 --- a/helm/matita/matitaTypes.mli +++ /dev/null @@ -1,128 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -exception Cancel -exception Statement_error of string -val statement_error : string -> 'a - -exception Command_error of string -val command_error : string -> 'a - -exception Option_error of string * string -exception Unbound_identifier of string - -type incomplete_proof = { - proof: ProofEngineTypes.proof; - stack: Continuationals.Stack.t; -} - -type proof_status = - No_proof - | Incomplete_proof of incomplete_proof - | Proof of ProofEngineTypes.proof - | Intermediate of Cic.metasenv - -module StringMap : Map.S with type key = String.t - -type option_value = - | String of string - | Int of int -type options = option_value StringMap.t -val no_options : 'a StringMap.t - -type ast_command = (CicNotationPt.term, GrafiteAst.obj) GrafiteAst.command -type moo = ast_command list * GrafiteAst.metadata list (** *) - -type status = { - aliases: DisambiguateTypes.environment; (** disambiguation aliases *) - multi_aliases: DisambiguateTypes.multiple_environment; - moo_content_rev: moo; - proof_status: proof_status; (** logical status *) - options: options; - objects: (UriManager.uri * string) list; (** in-scope objects, with paths *) - coercions: UriManager.uri list; (** defined coercions *) - notation_ids: CicNotation.notation_id list; (** in-scope notation ids *) -} - -val set_metasenv: Cic.metasenv -> status -> status - - (** list is not reversed, head command will be the first emitted *) -val add_moo_content: ast_command list -> status -> status -val add_moo_metadata: GrafiteAst.metadata list -> status -> status - -val dump_status : status -> unit -val get_option : status -> StringMap.key -> option_value -val get_string_option : status -> StringMap.key -> string -val set_option : status -> StringMap.key -> string -> status - -class type console = - object - method choose_uri : string list -> string - method clear : unit -> unit - method echo_error : string -> unit - method echo_message : string -> unit - method show : ?msg:string -> unit -> unit - method wrap_exn : (unit -> 'a) -> 'a option - end - -type abouts = [ `Blank | `Current_proof | `Us ] - -type mathViewer_entry = - [ `About of abouts - | `Check of string - | `Cic of Cic.term * Cic.metasenv - | `Dir of string - | `Uri of UriManager.uri - | `Whelp of string * UriManager.uri list ] - -val string_of_entry : - [< `About of [< `Blank | `Current_proof | `Us ] - | `Check of 'a - | `Cic of 'b * 'c - | `Dir of string - | `Uri of UriManager.uri - | `Whelp of string * 'd ] -> - string - -val entry_of_string : - string -> [> `About of [> `Blank | `Current_proof | `Us ] ] - -class type mathViewer = - object - method show_entry : ?reuse:bool -> mathViewer_entry -> unit - method show_uri_list : - ?reuse:bool -> entry:mathViewer_entry -> UriManager.uri list -> unit - end - -val qualify: status -> string -> string - -val get_current_proof: status -> ProofEngineTypes.proof -val get_proof_metasenv: status -> Cic.metasenv -val get_proof_context: status -> ProofEngineTypes.goal -> Cic.context -val get_proof_conclusion: status -> ProofEngineTypes.goal -> Cic.term -val get_stack: status -> Continuationals.Stack.t - -val set_stack: Continuationals.Stack.t -> status -> status - diff --git a/helm/matita/matitac.ml b/helm/matita/matitac.ml deleted file mode 100644 index 49032a857..000000000 --- a/helm/matita/matitac.ml +++ /dev/null @@ -1,37 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -let main () = - match Filename.basename Sys.argv.(0) with - | "matitadep" | "matitadep.opt" -> Matitadep.main () - | "matitaclean" | "matitaclean.opt" -> Matitaclean.main () - | "matitamake" | "matitamake.opt" -> Matitamake.main () - | _ -> - let _ = Paramodulation.Saturation.init () in (* ALB to link paramodulation *) - let _ = MatitacLib.main `COMPILER in - () - -let _ = main () - diff --git a/helm/matita/matitacLib.ml b/helm/matita/matitacLib.ml deleted file mode 100644 index 8552cbf86..000000000 --- a/helm/matita/matitacLib.ml +++ /dev/null @@ -1,216 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -open MatitaTypes - -(** {2 Initialization} *) - -let status = ref None - -let run_script is eval_function = - let status = - match !status with - | None -> assert false - | Some s -> s - in - let slash_n_RE = Pcre.regexp "\\n" in - let cb = - if Helm_registry.get_bool "matita.quiet" then - (fun _ _ -> ()) - else - (fun status stm -> - (* dump_status status; *) - let stm = GrafiteAstPp.pp_statement stm in - let stm = Pcre.replace ~rex:slash_n_RE stm in - let stm = - if String.length stm > 50 then - String.sub stm 0 50 ^ " ..." - else - stm - in - MatitaLog.debug ("Executing: ``" ^ stm ^ "''")) - in - try - eval_function status is cb - with - | MatitaEngine.Drop - | End_of_file - | CicNotationParser.Parse_error _ as exn -> raise exn - | exn -> - MatitaLog.error (MatitaExcPp.to_string exn); - raise exn - -let fname () = - match Helm_registry.get_list Helm_registry.string "matita.args" with - | [x] -> x - | _ -> MatitaInit.die_usage () - -let pp_ocaml_mode () = - MatitaLog.message ""; - MatitaLog.message " ** Entering Ocaml mode ** "; - MatitaLog.message ""; - MatitaLog.message "Type 'go ();;' to enter an interactive matitac"; - MatitaLog.message "" - -let clean_exit n = - let opt_exit = - function - None -> () - | Some n -> exit n - in - match !status with - None -> opt_exit n - | Some status -> - try - let baseuri = MatitaTypes.get_string_option !status "baseuri" in - MatitacleanLib.clean_baseuris ~verbose:false [baseuri]; - opt_exit n - with MatitaTypes.Option_error("baseuri", "not found") -> - (* no baseuri ==> nothing to clean yet *) - opt_exit n - -let rec interactive_loop () = - let str = Ulexing.from_utf8_channel stdin in - try - run_script str - (MatitaEngine.eval_from_stream_greedy - ~include_paths:(Helm_registry.get_list Helm_registry.string - "matita.includes")) - with - | MatitaEngine.Drop -> pp_ocaml_mode () - | Sys.Break -> MatitaLog.error "user break!"; interactive_loop () - | MatitaTypes.Command_error _ -> interactive_loop () - | End_of_file -> - print_newline (); - clean_exit (Some 0) - | CicNotationParser.Parse_error (floc,err) -> - let (x, y) = CicNotationPt.loc_of_floc floc in - MatitaLog.error (sprintf "Parse error at %d-%d: %s" x y err); - interactive_loop () - | exn -> MatitaLog.error (Printexc.to_string exn); interactive_loop () - -let go () = - Helm_registry.load_from BuildTimeConf.matita_conf; - CicNotation.load_notation BuildTimeConf.core_notation_script; - Http_getter.init (); - MetadataTypes.ownerize_tables (Helm_registry.get "matita.owner"); - MatitaDb.create_owner_environment (); - CicEnvironment.set_trust (* environment trust *) - (let trust = Helm_registry.get_bool "matita.environment_trust" in - fun _ -> trust); - status := Some (ref (Lazy.force MatitaEngine.initial_status)); - Sys.catch_break true; - interactive_loop () - -let main ~mode = - MatitaInit.initialize_all (); - (* must be called after init since args are set by cmdline parsing *) - let fname = fname () in - status := Some (ref (Lazy.force MatitaEngine.initial_status)); - Sys.catch_break true; - let origcb = MatitaLog.get_log_callback () in - let newcb tag s = - match tag with - | `Debug | `Message -> () - | `Warning | `Error -> origcb tag s - in - if Helm_registry.get_bool "matita.quiet" then - MatitaLog.set_log_callback newcb; - let matita_debug = Helm_registry.get_bool "matita.debug" in - try - let time = Unix.time () in - if Helm_registry.get_bool "matita.quiet" then - origcb `Message ("compiling " ^ Filename.basename fname ^ "...") - else - MatitaLog.message (sprintf "execution of %s started:" fname); - let is = - Ulexing.from_utf8_channel - (match fname with - | "stdin" -> stdin - | fname -> open_in fname) - in - run_script is - (MatitaEngine.eval_from_stream - ~include_paths:(Helm_registry.get_list Helm_registry.string - "matita.includes") - ~clean_baseuri:(not (Helm_registry.get_bool "matita.preserve"))); - let elapsed = Unix.time () -. time in - let tm = Unix.gmtime elapsed in - let sec = - if tm.Unix.tm_sec > 0 then (string_of_int tm.Unix.tm_sec ^ "''") else "" - in - let min = - if tm.Unix.tm_min > 0 then (string_of_int tm.Unix.tm_min ^ "' ") else "" - in - let hou = - if tm.Unix.tm_hour > 0 then (string_of_int tm.Unix.tm_hour ^ "h ") else "" - in - let proof_status,moo_content_rev = - match !status with - | Some s -> !s.proof_status, !s.moo_content_rev - | None -> assert false - in - if proof_status <> MatitaTypes.No_proof then - begin - MatitaLog.error - "there are still incomplete proofs at the end of the script"; - clean_exit (Some 2) - end - else - begin - let moo_fname = MatitacleanLib.obj_file_of_script fname in - MatitaMoo.save_moo moo_fname moo_content_rev; - MatitaLog.message - (sprintf "execution of %s completed in %s." fname (hou^min^sec)); - exit 0 - end - with - | Sys.Break -> - MatitaLog.error "user break!"; - if mode = `COMPILER then - clean_exit (Some ~-1) - else - pp_ocaml_mode () - | MatitaEngine.Drop -> - if mode = `COMPILER then - clean_exit (Some 1) - else - pp_ocaml_mode () - | CicNotationParser.Parse_error (floc,err) -> - let (x, y) = CicNotationPt.loc_of_floc floc in - MatitaLog.error (sprintf "Parse error at %d-%d: %s" x y err); - if mode = `COMPILER then - clean_exit (Some 1) - else - pp_ocaml_mode () - | exn -> - if matita_debug then raise exn; - if mode = `COMPILER then - clean_exit (Some 3) - else - pp_ocaml_mode () - diff --git a/helm/matita/matitacLib.mli b/helm/matita/matitacLib.mli deleted file mode 100644 index 636c51d57..000000000 --- a/helm/matita/matitacLib.mli +++ /dev/null @@ -1,37 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -val interactive_loop : unit -> unit - -(** go initializes the status and calls interactive_loop *) -val go : unit -> unit -val main : mode:[ `COMPILER | `TOPLEVEL ] -> unit - -(** clean_exit n - if n = Some n it performs an exit [n] after a complete clean-up of what was - partially compiled - otherwise it performs the clean-up without exiting -*) -val clean_exit : int option -> unit diff --git a/helm/matita/matitaclean.ml b/helm/matita/matitaclean.ml deleted file mode 100644 index 5aabf7558..000000000 --- a/helm/matita/matitaclean.ml +++ /dev/null @@ -1,70 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -module UM = UriManager -module TA = GrafiteAst - -let main () = - let _ = MatitaInit.initialize_all () in - let uris_to_remove = ref [] in - let files_to_remove = ref [] in - (match Helm_registry.get_list Helm_registry.string "matita.args" with - | [ "all" ] -> - MatitaDb.clean_owner_environment (); - let xmldir = Helm_registry.get "matita.basedir" ^ "/xml" in - ignore - (Sys.command - ("find " ^ xmldir ^ - " \\( -name \\*.xml.gz -o -name \\*.moo \\) " ^ - "-exec rm \\{\\} \\; 2> /dev/null")); - ignore - (Sys.command ("find " ^ xmldir ^ - " -type d -exec rmdir -p {} \\; 2> /dev/null")); - exit 0 - | [] -> MatitaInit.die_usage () - | files -> - List.iter - (fun suri -> - let uri = - try - UM.buri_of_uri (UM.uri_of_string suri) - with UM.IllFormedUri _ -> - files_to_remove := suri :: !files_to_remove; - let u = MatitacleanLib.baseuri_of_file suri in - if String.length u < 5 || String.sub u 0 5 <> "cic:/" then begin - MatitaLog.error (sprintf "File %s defines a bad baseuri: %s" - suri u); - exit 1 - end else - u - in - uris_to_remove := uri :: !uris_to_remove) - files); - MatitacleanLib.clean_baseuris !uris_to_remove; - let moos = List.map MatitacleanLib.obj_file_of_script !files_to_remove in - List.iter MatitaMisc.safe_remove moos - diff --git a/helm/matita/matitaclean.mli b/helm/matita/matitaclean.mli deleted file mode 100644 index 45d57a886..000000000 --- a/helm/matita/matitaclean.mli +++ /dev/null @@ -1,27 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -val main: unit -> unit - diff --git a/helm/matita/matitacleanLib.ml b/helm/matita/matitacleanLib.ml deleted file mode 100644 index 82fac08af..000000000 --- a/helm/matita/matitacleanLib.ml +++ /dev/null @@ -1,267 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -open Printf - -let debug = false -let debug_prerr = if debug then prerr_endline else ignore - -module HGT = Http_getter_types;; -module HG = Http_getter;; -module HGM = Http_getter_misc;; -module UM = UriManager;; -module TA = GrafiteAst;; - -let cache_of_processed_baseuri = Hashtbl.create 1024 - -let one_step_depend suri = - let buri = - try - UM.buri_of_uri (UM.uri_of_string suri) - with UM.IllFormedUri _ -> suri - in - if Hashtbl.mem cache_of_processed_baseuri buri then - [] - else - begin - Hashtbl.add cache_of_processed_baseuri buri true; - let query = - let buri = buri ^ "/" in - let buri = HMysql.escape buri in - let obj_tbl = MetadataTypes.obj_tbl () in - sprintf - ("SELECT source, h_occurrence FROM %s WHERE " ^^ - "h_occurrence REGEXP '^%s[^/]*$'") - obj_tbl buri - in - try - let rc = HMysql.exec (MatitaDb.instance ()) query in - let l = ref [] in - HMysql.iter rc ( - fun row -> - match row.(0), row.(1) with - | Some uri, Some occ when Filename.dirname occ = buri -> - l := uri :: !l - | _ -> ()); - let l = List.sort Pervasives.compare !l in - HExtlib.list_uniq l - with - exn -> raise exn (* no errors should be accepted *) - end - -let safe_buri_of_suri suri = - try - UM.buri_of_uri (UM.uri_of_string suri) - with - UM.IllFormedUri _ -> suri - -let close_uri_list uri_to_remove = - (* to remove an uri you have to remove the whole script *) - let buri_to_remove = - HExtlib.list_uniq - (List.fast_sort Pervasives.compare - (List.map safe_buri_of_suri uri_to_remove)) - in - (* cleand the already visided baseuris *) - let buri_to_remove = - List.filter - (fun buri -> - if Hashtbl.mem cache_of_processed_baseuri buri then false - else true) - buri_to_remove - in - (* now calculate the list of objects that belong to these baseuris *) - let uri_to_remove = - try - List.fold_left - (fun acc buri -> - let inhabitants = HG.ls (buri ^ "/") in - let inhabitants = List.filter - (function HGT.Ls_object _ -> true | _ -> false) - inhabitants - in - let inhabitants = List.map - (function - | HGT.Ls_object e -> buri ^ "/" ^ e.HGT.uri - | _ -> assert false) - inhabitants - in - inhabitants @ acc) - [] buri_to_remove - with HGT.Invalid_URI u -> - MatitaLog.error ("We were listing an invalid buri: " ^ u); - exit 1 - in - (* now we want the list of all uri that depend on them *) - let depend = - List.fold_left - (fun acc u -> one_step_depend u @ acc) [] uri_to_remove - in - let depend = - HExtlib.list_uniq (List.fast_sort Pervasives.compare depend) - in - uri_to_remove, depend - -let rec close_using_db uris next = - match next with - | [] -> uris - | l -> let uris, next = close_uri_list l in close_using_db uris next @ uris - -let cleaned_no = ref 0;; - - (** TODO repellent code ... *) -let moo_root_dir = lazy ( - let url = - List.assoc "cic:/matita/" - (List.map - (fun pair -> - match - Str.split (Str.regexp "[ \t\r\n]+") (HExtlib.trim_blanks pair) - with - | [a;b] -> a, b - | _ -> assert false) - (Helm_registry.get_list Helm_registry.string "getter.prefix")) - in - String.sub url 7 (String.length url - 7) (* remove heading "file:///" *) -) - -let close_using_moos buris = - let rev_deps = Hashtbl.create 97 in - let all_moos = - HExtlib.find ~test:(fun name -> Filename.check_suffix name ".moo") - (Lazy.force moo_root_dir) - in - List.iter - (fun path -> - let _, metadata = MatitaMoo.load_moo ~fname:path in - let baseuri_of_current_moo = - let rec aux = function - | [] -> assert false - | GrafiteAst.Baseuri buri::_ -> buri - | _ :: tl -> aux tl - in - aux metadata - in - let deps = - HExtlib.filter_map - (function - | GrafiteAst.Dependency buri -> Some buri - | _ -> None ) - metadata - in - List.iter - (fun buri -> Hashtbl.add rev_deps buri baseuri_of_current_moo) deps) - all_moos; - let buris_to_remove = - HExtlib.list_uniq - (List.fast_sort Pervasives.compare - (List.flatten (List.map (Hashtbl.find_all rev_deps) buris))) - in - let objects_to_remove = - let objs_of_buri buri = - HExtlib.filter_map - (function - | Http_getter_types.Ls_object o -> - Some (buri ^ "/" ^ o.Http_getter_types.uri) - | _ -> None) - (Http_getter.ls buri) - in - List.flatten (List.map objs_of_buri (buris @ buris_to_remove)) - in - objects_to_remove - -let clean_baseuris ?(verbose=true) buris = - Hashtbl.clear cache_of_processed_baseuri; - let buris = List.map HGM.strip_trailing_slash buris in - debug_prerr "clean_baseuris called on:"; - if debug then - List.iter debug_prerr buris; - let l = - if Helm_registry.get_bool "db.nodb" then - close_using_moos buris - else - close_using_db [] buris - in - let l = HExtlib.list_uniq (List.fast_sort Pervasives.compare l) in - let l = List.map UriManager.uri_of_string l in - debug_prerr "clean_baseuri will remove:"; - if debug then - List.iter (fun u -> debug_prerr (UriManager.string_of_uri u)) l; - List.iter - (fun buri -> - MatitaMisc.safe_remove (MatitaMisc.obj_file_of_baseuri buri)) - (HExtlib.list_uniq (List.fast_sort Pervasives.compare - (List.map (UriManager.buri_of_uri) l))); - List.iter (MatitaSync.remove ~verbose) l; - cleaned_no := !cleaned_no + List.length l; - if !cleaned_no > 30 then - begin - cleaned_no := 0; - List.iter - (function table -> - ignore (HMysql.exec (MatitaDb.instance ()) ("OPTIMIZE TABLE " ^ table))) - [MetadataTypes.name_tbl (); MetadataTypes.rel_tbl (); - MetadataTypes.sort_tbl (); MetadataTypes.obj_tbl(); - MetadataTypes.count_tbl()] - end - -let baseuri_of_file file = - let uri = ref None in - let ic = open_in file in - let istream = Ulexing.from_utf8_channel ic in - (try - while true do - try - let stm = GrafiteParser.parse_statement istream in - match MatitaMisc.baseuri_of_baseuri_decl stm with - | Some buri -> - let u = MatitaMisc.strip_trailing_slash buri in - if String.length u < 5 || String.sub u 0 5 <> "cic:/" then - MatitaLog.error (file ^ " sets an incorrect baseuri: " ^ buri); - (try - ignore(Http_getter.resolve u) - with - | Http_getter_types.Unresolvable_URI _ -> - MatitaLog.error (file ^ " sets an unresolvable baseuri: "^buri) - | Http_getter_types.Key_not_found _ -> ()); - uri := Some u; - raise End_of_file - | None -> () - with - CicNotationParser.Parse_error _ as exn -> - prerr_endline ("Unable to parse: " ^ file); - prerr_endline (MatitaExcPp.to_string exn); - () - done - with End_of_file -> close_in ic); - match !uri with - | Some uri -> uri - | None -> failwith ("No baseuri defined in " ^ file) - -let obj_file_of_script f = - if f = "coq.ma" then BuildTimeConf.coq_notation_script else - let baseuri = baseuri_of_file f in - MatitaMisc.obj_file_of_baseuri baseuri - diff --git a/helm/matita/matitacleanLib.mli b/helm/matita/matitacleanLib.mli deleted file mode 100644 index 91aa51b2a..000000000 --- a/helm/matita/matitacleanLib.mli +++ /dev/null @@ -1,30 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -val clean_baseuris : ?verbose:bool -> string list -> unit - -val baseuri_of_file: string -> string -val obj_file_of_script : string -> string - diff --git a/helm/matita/matitadep.ml b/helm/matita/matitadep.ml deleted file mode 100644 index 5b22cb70b..000000000 --- a/helm/matita/matitadep.ml +++ /dev/null @@ -1,99 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -module GA = GrafiteAst -module U = UriManager - -let main () = - (* all are maps from "file" to "something" *) - let include_deps = Hashtbl.create (Array.length Sys.argv) in - let baseuri_of = Hashtbl.create (Array.length Sys.argv) in - let uri_deps = Hashtbl.create (Array.length Sys.argv) in - let buri alias = U.buri_of_uri (U.uri_of_string alias) in - let resolve alias current_buri = - let buri = buri alias in - if buri <> current_buri then Some buri else None - in - let find path = - let rec aux = function - | [] -> close_in (open_in path); path - | p :: tl -> - try - close_in (open_in (p ^ "/" ^ path)); p ^ "/" ^ path - with Sys_error _ -> aux tl - in - let paths = Helm_registry.get_list Helm_registry.string "matita.includes" in - try - aux paths - with Sys_error _ as exc -> - MatitaLog.error ("Unable to read " ^ path); - MatitaLog.error ("opts.include_paths was " ^ String.concat ":" paths); - raise exc - in - MatitaInit.load_configuration_file (); - MatitaInit.parse_cmdline (); - List.iter - (fun file -> - let ic = open_in file in - let istream = Ulexing.from_utf8_channel ic in - let dependencies = GrafiteParser.parse_dependencies istream in - close_in ic; - List.iter - (function - | GrafiteAst.UriDep uri -> - let uri = UriManager.string_of_uri uri in - Hashtbl.add uri_deps file uri - | GrafiteAst.BaseuriDep uri -> - let uri = MatitaMisc.strip_trailing_slash uri in - Hashtbl.add baseuri_of file uri - | GrafiteAst.IncludeDep path -> - try - let ma_file = if path <> "coq.ma" then find path else path in - let moo_file = MatitacleanLib.obj_file_of_script ma_file in - Hashtbl.add include_deps file moo_file - with Sys_error _ -> - MatitaLog.warn - ("Unable to find " ^ path ^ " that is included in " ^ file)) - dependencies) - (Helm_registry.get_list Helm_registry.string "matita.args"); - Hashtbl.iter - (fun file alias -> - let dep = resolve alias (Hashtbl.find baseuri_of file) in - match dep with - | None -> () - | Some u -> - Hashtbl.add include_deps file (MatitaMisc.obj_file_of_baseuri u)) - uri_deps; - List.iter - (fun file -> - let deps = Hashtbl.find_all include_deps file in - let deps = List.fast_sort Pervasives.compare deps in - let deps = HExtlib.list_uniq deps in - let deps = file :: deps in - let moo = MatitacleanLib.obj_file_of_script file in - Printf.printf "%s: %s\n" moo (String.concat " " deps); - Printf.printf "%s: %s\n" (Pcre.replace ~pat:"ma$" ~templ:"mo" file) moo) - (Helm_registry.get_list Helm_registry.string "matita.args") - diff --git a/helm/matita/matitadep.mli b/helm/matita/matitadep.mli deleted file mode 100644 index 45d57a886..000000000 --- a/helm/matita/matitadep.mli +++ /dev/null @@ -1,27 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -val main: unit -> unit - diff --git a/helm/matita/matitamake.ml b/helm/matita/matitamake.ml deleted file mode 100644 index 96fdbfb28..000000000 --- a/helm/matita/matitamake.ml +++ /dev/null @@ -1,160 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -module MK = MatitamakeLib ;; - -let main () = - MatitaInit.load_configuration_file (); - MK.initialize (); - let usage = ref (fun () -> ()) in - let dev_of_name name = - match MK.development_for_name name with - | None -> - prerr_endline ("Unable to find a development called " ^ name); - exit 1 - | Some d -> d - in - let dev_for_dir dir = - match MK.development_for_dir dir with - | None -> - prerr_endline ("Unable to find a development holding directory: "^ dir); - exit 1 - | Some d -> d - in - let init_dev_doc = " -\tParameters: name (the name of the development, required) -\tDescription: tells matitamake that a new development radicated -\t\tin the current working directory should be handled." - in - let init_dev args = - if List.length args <> 1 then !usage (); - match MK.initialize_development (List.hd args) (Unix.getcwd ()) with - | None -> exit 2 - | Some _ -> exit 0 - in - let list_dev_doc = " -\tParameters: -\tDescription: lists the known developments and their roots." - in - let list_dev args = - if List.length args <> 0 then !usage (); - match MK.list_known_developments () with - | [] -> print_string "No developments found.\n"; exit 0 - | l -> - List.iter - (fun (name, root) -> - print_string (Printf.sprintf "%-10s\trooted in %s\n" name root)) - l; - exit 0 - in - let destroy_dev_doc = " -\tParameters: name (the name of the development to destroy, required) -\tDescription: deletes a development (only from matitamake metadat, no -\t\t.ma files will be deleted)." - in - let destroy_dev args = - if List.length args <> 1 then !usage (); - let name = (List.hd args) in - let dev = dev_of_name name in - MK.destroy_development dev; - exit 0 - in - let clean_dev_doc = " -\tParameters: name (the name of the development to destroy, optional) -\t\tIf omitted the development that holds the current working -\t\tdirectory is used (if any). -\tDescription: clean the develpoment." - in - let clean_dev args = - let dev = - match args with - | [] -> dev_for_dir (Unix.getcwd ()) - | [name] -> dev_of_name name - | _ -> !usage (); exit 1 - in - match MK.clean_development dev with - | true -> exit 0 - | false -> exit 1 - in - let build_dev_doc = " -\tParameters: name (the name of the development to build, required) -\tDescription: completely builds the develpoment." - in - let build_dev args = - if List.length args <> 1 then !usage (); - let name = (List.hd args) in - let dev = dev_of_name name in - match MK.build_development dev with - | true -> exit 0 - | false -> exit 1 - in - let nodb_doc = " -\tParameters: -\tDescription: avoid using external database connection." - in - let nodb _ = Helm_registry.set_bool "db.nodb" true in - let target args = - if List.length args < 1 then !usage (); - let dev = dev_for_dir (Unix.getcwd ()) in - List.iter - (fun t -> - ignore(MK.build_development ~target:t dev)) - args - in - let params = [ - "-init", init_dev, init_dev_doc; - "-clean", clean_dev, clean_dev_doc; - "-list", list_dev, list_dev_doc; - "-destroy", destroy_dev, destroy_dev_doc; - "-build", build_dev, build_dev_doc; - "-nodb", nodb, nodb_doc; - "-h", (fun _ -> !usage()), "print this help screen"; - "-help", (fun _ -> !usage()), "print this help screen"; - ] - in - usage := (fun () -> - let p = prerr_endline in - p "\nusage:"; - p "\tmatitamake(.opt) [command [options]]\n"; - p "\tmatitamake(.opt) [target]\n"; - p "commands:"; - List.iter (fun (n,_,d) -> p (Printf.sprintf " %-10s%s" n d)) params; - p "\nIf target is omitted a 'all' will be used as the default."; - p "With -build you can build a development wherever it is."; - p "If you specify a target it implicitly refers to the development that"; - p "holds the current working directory (if any).\n"; - exit 1); - let rec parse args = - match args with - | [] -> target ["all"] - | s::tl -> - try - let _,f,_ = List.find (fun (n,_,_) -> n = s) params in - f tl; - parse tl - with Not_found -> if s.[0] = '-' then !usage () else target args - in - parse (List.tl (Array.to_list Sys.argv)) - diff --git a/helm/matita/matitamakeLib.ml b/helm/matita/matitamakeLib.ml deleted file mode 100644 index 998dcd70e..000000000 --- a/helm/matita/matitamakeLib.ml +++ /dev/null @@ -1,298 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -let logger = fun mark -> - match mark with - | `Error -> MatitaLog.error - | `Warning -> MatitaLog.warn - | `Debug -> MatitaLog.debug - | `Message -> MatitaLog.message -;; - -type development = - { root: string ; name: string } - -let developments = ref [] - -let pool () = Helm_registry.get "matita.basedir" ^ "/matitamake/" ;; -let rootfile = "/root" ;; - -let ls_dir dir = - try - let d = Unix.opendir dir in - let content = ref [] in - try - while true do - let name = Unix.readdir d in - if name <> "." && name <> ".." then - content := name :: !content - done; - Some [] - with End_of_file -> Unix.closedir d; Some !content - with Unix.Unix_error _ -> None - -let initialize () = - (* create a base env if none *) - HExtlib.mkdir (pool ()); - (* load developments *) - match ls_dir (pool ()) with - | None -> logger `Error ("Unable to list directory " ^ pool ()) - | Some l -> - List.iter - (fun name -> - let root = - try - Some (HExtlib.input_file (pool () ^ name ^ rootfile)) - with Unix.Unix_error _ -> - logger `Warning ("Malformed development " ^ name); - None - in - match root with - | None -> () - | Some root -> - developments := {root = root ; name = name} :: !developments) - l - -(* finds the makefile path for development devel *) -let makefile_for_development devel = - let develdir = pool () ^ devel.name in - develdir ^ "/makefile" -;; - -(* given a dir finds a development that is radicated in it or below *) -let development_for_dir dir = - let is_prefix_of d1 d2 = - let len1 = String.length d1 in - let len2 = String.length d2 in - if len2 < len1 then - false - else - let pref = String.sub d2 0 len1 in - pref = d1 - in - (* it must be unique *) - try - Some (List.find (fun d -> is_prefix_of d.root dir) !developments) - with Not_found -> None -;; - -let development_for_name name = - try - Some (List.find (fun d -> d.name = name) !developments) - with Not_found -> None - -(* dumps the deveopment to disk *) -let dump_development devel = - let devel_dir = pool () ^ devel.name in - HExtlib.mkdir devel_dir; - HExtlib.output_file ~filename:(devel_dir ^ rootfile) ~text:devel.root -;; - -let list_known_developments () = - List.map (fun r -> r.name,r.root) !developments - -let am_i_opt () = - if Pcre.pmatch ~pat:"\\.opt$" Sys.argv.(0) then ".opt" else "" - -let rebuild_makefile development = - let makefilepath = makefile_for_development development in - let template = - HExtlib.input_file BuildTimeConf.matitamake_makefile_template - in - let cc = BuildTimeConf.runtime_base_dir ^ "/matitac" ^ am_i_opt () in - let rm = BuildTimeConf.runtime_base_dir ^ "/matitaclean" ^ am_i_opt () in - let mm = BuildTimeConf.runtime_base_dir ^ "/matitadep" ^ am_i_opt () in - let df = pool () ^ development.name ^ "/depend" in - let template = Pcre.replace ~pat:"@ROOT@" ~templ:development.root template in - let template = Pcre.replace ~pat:"@CC@" ~templ:cc template in - let template = Pcre.replace ~pat:"@DEP@" ~templ:mm template in - let template = Pcre.replace ~pat:"@DEPFILE@" ~templ:df template in - let template = Pcre.replace ~pat:"@CLEAN@" ~templ:rm template in - HExtlib.output_file ~filename:makefilepath ~text:template - -(* creates a new development if possible *) -let initialize_development name dir = - let name = Pcre.replace ~pat:" " ~templ:"_" name in - let dev = {name = name ; root = dir} in - match development_for_dir dir with - | Some d -> - logger `Error - ("Directory " ^ dir ^ " is already handled by development " ^ d.name); - logger `Error - ("Development " ^ d.name ^ " is rooted in " ^ d.root); - logger `Error - (dir ^ " is a subdir of " ^ d.root); - None - | None -> - dump_development dev; - rebuild_makefile dev; - developments := dev :: !developments; - Some dev - -let make chdir args = - let old = Unix.getcwd () in - try - Unix.chdir chdir; - let rc = - Unix.system - (String.concat " " ("make"::(List.map Filename.quote args))) - in - Unix.chdir old; - match rc with - | Unix.WEXITED 0 -> true - | Unix.WEXITED i -> logger `Error ("make returned " ^ string_of_int i);false - | _ -> logger `Error "make STOPPED or SIGNALED!";false - with Unix.Unix_error (_,cmd,err) -> - logger `Warning ("Unix Error: " ^ cmd ^ ": " ^ err); - false - -let call_make development target make = - rebuild_makefile development; - let makefile = makefile_for_development development in - let nodb = - Helm_registry.get_opt_default Helm_registry.bool ~default:false "db.nodb" - in - let flags = if nodb then ["NODB=true"] else [] in - make development.root - (["--no-print-directory"; "-s"; "-k"; "-f"; makefile; target] - @ flags) - -let build_development ?(target="all") development = - call_make development target make - -(* not really good vt100 *) -let vt100 s = - let rex = Pcre.regexp "\\[[0-9;]+m" in - let rex_i = Pcre.regexp "^Info" in - let rex_w = Pcre.regexp "^Warning" in - let rex_e = Pcre.regexp "^Error" in - let rex_d = Pcre.regexp "^Debug" in - let rex_noendline = Pcre.regexp "\\n" in - let s = Pcre.replace ~rex:rex_noendline s in - let len = String.length s in - let tokens = Pcre.split ~rex s in - let logger = ref MatitaLog.message in - let rec aux = - function - | [] -> () - | s::tl -> - (if Pcre.pmatch ~rex:rex_i s then - logger := MatitaLog.message - else if Pcre.pmatch ~rex:rex_w s then - logger := MatitaLog.warn - else if Pcre.pmatch ~rex:rex_e s then - logger := MatitaLog.error - else if Pcre.pmatch ~rex:rex_d s then - logger := MatitaLog.debug - else - !logger s); - aux tl - in - aux tokens - - -let mk_maker refresh_cb = - (fun chdir args -> - let out_r,out_w = Unix.pipe () in - let err_r,err_w = Unix.pipe () in - let pid = ref ~-1 in - ignore(Sys.signal Sys.sigchld (Sys.Signal_ignore)); - try - let argv = Array.of_list ("make"::args) in - pid := Unix.create_process "make" argv Unix.stdin out_w err_w; - Unix.close out_w; - Unix.close err_w; - let buf = String.create 1024 in - let rec aux = function - | f::tl -> - let len = Unix.read f buf 0 1024 in - if len = 0 then - raise - (Unix.Unix_error - (Unix.EPIPE,"read","len = 0 (matita internal)")); - vt100 (String.sub buf 0 len); - aux tl - | _ -> () - in - while true do - let r,_,_ = Unix.select [out_r; err_r] [] [] (-. 1.) in - aux r; - refresh_cb () - done; - true - with - | Unix.Unix_error (_,"read",_) - | Unix.Unix_error (_,"select",_) -> true) - -let build_development_in_bg ?(target="all") refresh_cb development = - call_make development target (mk_maker refresh_cb) -;; - -let clean_development development = - call_make development "clean" make - -let clean_development_in_bg refresh_cb development = - call_make development "clean" (mk_maker refresh_cb) - -let destroy_development_aux development clean_development = - let delete_development development = - let unlink file = - try - Unix.unlink file - with Unix.Unix_error _ -> logger `Debug ("Unable to delete " ^ file) - in - let rmdir dir = - try - Unix.rmdir dir - with Unix.Unix_error _ -> - logger `Warning ("Unable to remove dir " ^ dir); - match ls_dir dir with - | None -> logger `Error ("Unable to list directory " ^ dir) - | Some [] -> () - | Some l -> logger `Error ("The directory is not empty") - in - unlink (makefile_for_development development); - unlink (pool () ^ development.name ^ rootfile); - unlink (pool () ^ development.name ^ "/depend"); - rmdir (pool () ^ development.name); - developments := - List.filter (fun d -> d.name <> development.name) !developments - in - if not(clean_development development) then - begin - logger `Warning "Unable to clean the development problerly."; - logger `Warning "This may cause garbage." - end; - delete_development development - -let destroy_development development = - destroy_development_aux development clean_development - -let destroy_development_in_bg refresh development = - destroy_development_aux development (clean_development_in_bg refresh) - -let root_for_development development = development.root -let name_for_development development = development.name - diff --git a/helm/matita/matitamakeLib.mli b/helm/matita/matitamakeLib.mli deleted file mode 100644 index 4aaab47b1..000000000 --- a/helm/matita/matitamakeLib.mli +++ /dev/null @@ -1,54 +0,0 @@ -(* Copyright (C) 2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -type development - -(* initialize_development [name] [dir] - * ask matitamake to recorder [dir] as the root for thedevelopment [name] *) -val initialize_development: string -> string -> development option -(* make target [default all] *) -val build_development: ?target:string -> development -> bool -(* make target [default all], the refresh cb is called after every output *) -val build_development_in_bg: - ?target:string -> (unit -> unit) -> development -> bool -(* make clean *) -val clean_development: development -> bool -val clean_development_in_bg: (unit -> unit) -> development -> bool -(* return the development that handles dir *) -val development_for_dir: string -> development option -(* return the development *) -val development_for_name: string -> development option -(* return the known list of name, development_root *) -val list_known_developments: unit -> (string * string ) list -(* cleans the development, forgetting about it *) -val destroy_development: development -> unit -val destroy_development_in_bg: (unit -> unit) -> development -> unit -(* initiale internal data structures *) -val initialize : unit -> unit -(* gives back the root *) -val root_for_development : development -> string -(* gives back the name *) -val name_for_development : development -> string - diff --git a/helm/matita/matitatop.ml b/helm/matita/matitatop.ml deleted file mode 100644 index bdf9860b1..000000000 --- a/helm/matita/matitatop.ml +++ /dev/null @@ -1,29 +0,0 @@ -(* Copyright (C) 2004-2005, HELM Team. - * - * This file is part of HELM, an Hypertextual, Electronic - * Library of Mathematics, developed at the Computer Science - * Department, University of Bologna, Italy. - * - * HELM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * HELM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HELM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA. - * - * For details, see the HELM World-Wide-Web page, - * http://helm.cs.unibo.it/ - *) - -let _ = - let _ = Topdirs.dir_quit in - Toploop.loop Format.std_formatter; - assert false diff --git a/helm/matita/scripts/README b/helm/matita/scripts/README deleted file mode 100644 index e1b7d2447..000000000 --- a/helm/matita/scripts/README +++ /dev/null @@ -1,20 +0,0 @@ -bench.sql - the SQL code to generate the bench table - -crontab - install this crontab (may need tweaking) to have cron run the whole - stuff for you - -crontab.sh - the script crontab should run (includes a "pretty" report) - -do_tests.sh - script used by ../Makefile to run matitac[.opt] on some tests. supports some - options and prints out some informations neded my insert - -insert.awk - creates the SQL INSERT statements for the output of profile_cvs.sh - -profile_cvs.sh - CVS co, compilation, run - diff --git a/helm/matita/scripts/bench.sql b/helm/matita/scripts/bench.sql deleted file mode 100644 index a45508548..000000000 --- a/helm/matita/scripts/bench.sql +++ /dev/null @@ -1,13 +0,0 @@ -DROP TABLE bench; - -CREATE TABLE bench ( - mark VARCHAR(100) NOT NULL, - time VARCHAR(8) NOT NULL, - timeuser VARCHAR(8) NOT NULL, - compilation ENUM('byte','opt') NOT NULL, - test VARCHAR(100) NOT NULL, - result ENUM('ok','fail') NOT NULL, - options SET('gc-off','gc-on') -); - -DESCRIBE bench; diff --git a/helm/matita/scripts/crontab b/helm/matita/scripts/crontab deleted file mode 100644 index 4221e65e9..000000000 --- a/helm/matita/scripts/crontab +++ /dev/null @@ -1,2 +0,0 @@ -MAILTO=helm@cs.unibo.it -10 5 * * * sh /home/tassi/helm/matita/scripts/crontab.sh diff --git a/helm/matita/scripts/crontab.sh b/helm/matita/scripts/crontab.sh deleted file mode 100644 index ee7c181db..000000000 --- a/helm/matita/scripts/crontab.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/bash -TODAY=`date +%Y%m%d` -YESTERDAY=`date -d yesterday +%Y%m%d` -TMPDIRNAME=.__${TODAY}_crontab -CVSROOT=":ext:$USER@marcello.cs.unibo.it:/home/faculty/PROJECTS/cvs/helm" -SHELLTIME2CENTSPHP=helm/matita/scripts/shell_time2cents.php -SHELLADDERPHP=helm/matita/scripts/shell_adder.php -COMMONPHP=helm/matita/scripts/public_html/common.php - -OLD=$PWD -rm -rf $TMPDIRNAME -mkdir $TMPDIRNAME -cd $TMPDIRNAME -cvs -d $CVSROOT co helm/matita/scripts 1>/dev/null 2>/dev/null -helm/matita/scripts/profile_cvs.sh 2> LOG - -MARK=`echo "select distinct mark from bench where mark like '$TODAY%' order by mark" | mysql -u helm matita | tail -n 1` -LASTMARK=`echo "select distinct mark from bench where mark like '$YESTERDAY%' order by mark" | mysql -u helm matita | tail -n 1` - -if [ -z "$MARK" ]; then - echo "No benchmark records for $TODAY" - exit 1 -fi - -if [ -z "$LASTMARK" ]; then - echo "No benchmark records for $YESTERDAY" - exit 1 -fi - -CUR_TIME=`/usr/bin/php4 -c /etc/php4/apache/php.ini -f $SHELLADDERPHP -- $COMMONPHP "select SEC_TO_TIME(SUM(TIME_TO_SEC(time))) from bench where mark = \"$MARK\" group by mark;"` -OLD_TIME=`/usr/bin/php4 -c /etc/php4/apache/php.ini -f $SHELLADDERPHP -- $COMMONPHP "select SEC_TO_TIME(SUM(TIME_TO_SEC(time))) from bench where mark = \"$LASTMARK\" group by mark;"` - -CUR_CENTS=`/usr/bin/php4 -c /etc/php4/apache/php.ini -f $SHELLTIME2CENTSPHP -- $COMMONPHP $CUR_TIME` -OLD_CENTS=`/usr/bin/php4 -c /etc/php4/apache/php.ini -f $SHELLTIME2CENTSPHP -- $COMMONPHP $OLD_TIME` - -((DELTA=$CUR_CENTS-$OLD_CENTS)) -if [ $DELTA -lt 0 ]; then - PERC=0 -else - ((PERC=100 * $DELTA)) - ((PERC=$PERC / $OLD_CENTS)) -fi -if [ $PERC -ge 5 ]; then - cat </dev/null 2>/dev/null - $COMPILER $T 1>/dev/null 2>/dev/null - fi - $CLEANER $T 1>/dev/null 2>/dev/null - TIMES=`(time $COMPILER $T > $LOG 2>&1) 2>&1` - RC=$?; - cat $LOG >> $LOGFILE - touch $DIFF - if [ $EXPECTED = "FAIL" ]; then - if [ $RC = 0 ]; then - echo "The test was successful but it should have failed!" > $DIFF - RC=1; - else - diff $LOG `basename $T .ma`.log > $DIFF - RC=$? - rm -f $LOG - fi - fi - if [ $RC = 0 ]; then - printf "$OK\t$TIMES\t$DO_TESTS_EXTRA\n" - else - printf "$FAIL\t$TIMES\t$DO_TESTS_EXTRA\n"; - cat $DIFF - fi - rm -f $DIFF - exit $RC -done diff --git a/helm/matita/scripts/insert.awk b/helm/matita/scripts/insert.awk deleted file mode 100644 index d62a6a3ec..000000000 --- a/helm/matita/scripts/insert.awk +++ /dev/null @@ -1,17 +0,0 @@ - { - result=tolower($3); - if( $1 ~ ".opt$" ) - compilation="opt" - else - compilation="byte" - test=$2 - time=$4 - timeuser=$5 - mark=$7 - if ( $8 ~ "^gc-off$") - options="'gc-off'"; - if ( $8 ~ "^gc-on$") - options="'gc-on'" - - printf "INSERT bench (result, compilation, test, time, timeuser, mark, options) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', %s);\n", result, compilation, test, time, timeuser, mark, options; - } diff --git a/helm/matita/scripts/profile_cvs.sh b/helm/matita/scripts/profile_cvs.sh deleted file mode 100755 index a0fb848a9..000000000 --- a/helm/matita/scripts/profile_cvs.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -MARK=`date +%Y%m%d%H%M` -TMPDIRNAME=.__$MARK -CVSROOT=":ext:$USER@marcello.cs.unibo.it:/home/faculty/PROJECTS/cvs/helm" - -function testit { - LOGTOOPT=/dev/null - LOGTOBYTE=/dev/null - export DO_TESTS_EXTRA="$MARK\t$@" - make tests DO_TESTS_OPTS="-no-color -twice" - make tests.opt DO_TESTS_OPTS="-no-color -twice" -} - -function compile { - LOCALOLD=$PWD - cd $1 - autoconf 1>/dev/null - ./configure 1>/dev/null - make all opt 1>/dev/null - cd $2 - autoconf 1>/dev/null - ./configure 1>/dev/null - cp matita.conf.xml.sample matita.conf.xml - make all opt 1>/dev/null - cd $LOCALOLD -} - -function run_tests { - LOCALOLD=$PWD - cd $1 - ./matitaclean all - mkdir .matita - export OCAMLRUNPARAM='o=1000000' - testit "gc-off" - export OCAMLRUNPARAM='' - testit "gc-on" - cd $LOCALOLD -} - -OLD=$PWD -rm -rf $TMPDIRNAME -mkdir $TMPDIRNAME -cd $TMPDIRNAME -cvs -d $CVSROOT co helm/ocaml 1>/dev/null 2>/dev/null -cvs -d $CVSROOT co helm/matita 1>/dev/null 2>/dev/null -compile $PWD/helm/ocaml $PWD/helm/matita -run_tests $PWD/helm/matita > LOG 2>/dev/null -cat LOG | grep "\(OK\|FAIL\)" | grep "\(gc-on\|gc-off\)" | awk -f $PWD/helm/matita/scripts/insert.awk > INSERT.sql -cat INSERT.sql | mysql -u helm -h mowgli.cs.unibo.it matita -cd $OLD -rm -rf $TMPDIRNAME diff --git a/helm/matita/scripts/public_html/bench.php b/helm/matita/scripts/public_html/bench.php deleted file mode 100644 index 49bfe6235..000000000 --- a/helm/matita/scripts/public_html/bench.php +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - -

QUERY the benchmark system

-

Common Queries

-

-

-

-

Custom Query

-
- - - - - - - - -
Marks: -
Compilations: -
Options: -
Tests: -
Test results: -
Group By: -
-
- - diff --git a/helm/matita/scripts/public_html/common.php b/helm/matita/scripts/public_html/common.php deleted file mode 100644 index e1bef4dd7..000000000 --- a/helm/matita/scripts/public_html/common.php +++ /dev/null @@ -1,89 +0,0 @@ - $v) { - $rc[$x['mark']][$k] = sum_time($v, $x[$k]); - } - } - } - return array_values($rc); -} - -function array_to_combo($l,$a) { - echo ""; -} - -?> diff --git a/helm/matita/scripts/public_html/composequery.php b/helm/matita/scripts/public_html/composequery.php deleted file mode 100644 index 683df4daa..000000000 --- a/helm/matita/scripts/public_html/composequery.php +++ /dev/null @@ -1,40 +0,0 @@ - $x) { - $v = $_GET[$x]; - if($v != "--") { - if($fst == false) { - $rc = $rc . " and "; - } else { - $rc = $rc . " "; - } - $fst = false; - $rc = $rc . $x . " = '" . $v . "'"; - } - } - return $rc; - } - - $gb = $_GET['groupby']; - if($gb != "--") - $what = "mark, SEC_TO_TIME(SUM(TIME_TO_SEC(time))) as sum_time, SEC_TO_TIME(SUM(TIME_TO_SEC(timeuser))) as sum_timeuser"; - else - $what = "mark, time, timeuser, compilation, test, result, options"; - $clause = clause_for($c); - if($clause != "") - $query = "select $what from bench where " . clause_for($c); - else - $query = "select $what from bench "; - if( $gb != "--"){ - $query = $query. "group by $gb"; - } - $query = $query. ";"; - - header("Location: showquery.php?query=".urlencode("Custom:@@@" . $query)); - exit; -?> diff --git a/helm/matita/scripts/public_html/index.html b/helm/matita/scripts/public_html/index.html deleted file mode 100644 index e08234d20..000000000 --- a/helm/matita/scripts/public_html/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - -

MATITA BENCHMARKING SYSTEM

-

Go to the benchmark query page

- - diff --git a/helm/matita/scripts/public_html/showquery.php b/helm/matita/scripts/public_html/showquery.php deleted file mode 100644 index bd54d6a63..000000000 --- a/helm/matita/scripts/public_html/showquery.php +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - -

QUERY results

- $q) { ?> -

-

- -

- - "; - foreach( $q[0] as $name => $txt) { - echo ""; - } - echo "\n"; - foreach ($q as $k => $v) { - echo ""; - foreach( $v as $name => $txt) { - echo ""; - } - echo "\n"; - } - ?> -
$name
$txt
- -

BACK to the query page

- - diff --git a/helm/matita/scripts/shell_adder.php b/helm/matita/scripts/shell_adder.php deleted file mode 100755 index a13005e55..000000000 --- a/helm/matita/scripts/shell_adder.php +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/helm/matita/scripts/shell_time2cents.php b/helm/matita/scripts/shell_time2cents.php deleted file mode 100755 index 4914fc24f..000000000 --- a/helm/matita/scripts/shell_time2cents.php +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/helm/matita/template_makefile.in b/helm/matita/template_makefile.in deleted file mode 100644 index 5ae1165bb..000000000 --- a/helm/matita/template_makefile.in +++ /dev/null @@ -1,28 +0,0 @@ -SRC=$(shell find @ROOT@ -name "*.ma" -a -type f) -TODO=$(SRC:%.ma=%.mo) - -MATITA_FLAGS=-noprofile -NODB=false -ifeq ($(NODB),true) - MATITA_FLAGS += -nodb -endif - -MATITAC=@CC@ -MATITACLEAN=@CLEAN@ -MATITADEP=@DEP@ - -all: $(TODO) - -clean: - $(MATITACLEAN) $(MATITA_FLAGS) $(SRC) - rm -f $(TODO) - -%.moo: - ($(MATITAC) $(MATITA_FLAGS) -q -I @ROOT@ $< | (grep -v "^make" || true)) - -@DEPFILE@ : $(SRC) - $(MATITADEP) $(MATITA_FLAGS) -I '@ROOT@' $^ 1> @DEPFILE@ 2>/dev/null - -# this is the depend for full targets like: -# dir/dir/name.moo: dir/dir/name.ma dir/dep.moo --include @DEPFILE@ diff --git a/helm/matita/tests/.cvsignore b/helm/matita/tests/.cvsignore deleted file mode 100644 index 6d473d47a..000000000 --- a/helm/matita/tests/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.depend -*.moo diff --git a/helm/matita/tests/Makefile b/helm/matita/tests/Makefile deleted file mode 100644 index 33d458929..000000000 --- a/helm/matita/tests/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -SRC=$(wildcard *.ma) - -MATITA_FLAGS = -NODB=false -ifeq ($(NODB),true) - MATITA_FLAGS += -nodb -endif - -MATITAC=../scripts/do_tests.sh $(DO_TESTS_OPTS) "../matitac $(MATITA_FLAGS)" "../matitaclean $(MATITA_FLAGS)" /dev/null OK -MATITACOPT=../scripts/do_tests.sh $(DO_TESTS_OPTS) "../matitac.opt $(MATITA_FLAGS)" "../matitaclean.opt $(MATITA_FLAGS)" /dev/null OK -VERBOSEMATITAC=../matitac $(MATITA_FLAGS) -VERBOSEMATITACOPT=../matitac.opt $(MATITA_FLAGS) - -MATITACLEAN=../matitaclean $(MATITA_FLAGS) -MATITACLEANOPT=../matitaclean.opt $(MATITA_FLAGS) - -MATITADEP=../matitadep $(MATITA_FLAGS) -MATITADEPOPT=../matitadep.opt $(MATITA_FLAGS) - -DEPEND_NAME=.depend - -H=@ - -all: $(SRC:%.ma=%.mo) - -opt: - $(H)$(MAKE) MATITAC='$(MATITACOPT)' MATITACLEAN='$(MATITACLEANOPT)' MATITADEP='$(MATITADEPOPT)' all - -verbose: - $(H)$(MAKE) MATITAC='$(VERBOSEMATITAC)' MATITACLEAN='$(MATITACLEAN)' MATITADEP='$(MATITADEP)' all - -%.opt: - $(H)$(MAKE) MATITAC='$(MATITACOPT)' MATITACLEAN='$(MATITACLEANOPT)' MATITADEP='$(MATITADEPOPT)' $(@:%.opt=%) - -clean: - $(H)$(MATITACLEAN) $(SRC) - -cleanall: - $(H)rm -f $(SRC:%.ma=%.moo) - $(MATITACLEAN) all - -depend: - rm -f $(DEPEND_NAME) - $(MAKE) $(DEPEND_NAME) -.PHONY: depend - -%.moo: - $(H)$(MATITAC) $< - -$(DEPEND_NAME): $(SRC) - $(H)$(MATITADEP) $(SRC) > $@ || rm -f $@ - -#include $(DEPEND_NAME) -include .depend diff --git a/helm/matita/tests/absurd.ma b/helm/matita/tests/absurd.ma deleted file mode 100644 index 19c738d05..000000000 --- a/helm/matita/tests/absurd.ma +++ /dev/null @@ -1,26 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/absurd/". -include "coq.ma". -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias id "not" = "cic:/Coq/Init/Logic/not.con". - -theorem stupid : \forall a:Prop. a \to not a \to 0 = 1. -intros. -absurd a. -assumption. -assumption. -qed. diff --git a/helm/matita/tests/apply.ma b/helm/matita/tests/apply.ma deleted file mode 100644 index 21c0faa41..000000000 --- a/helm/matita/tests/apply.ma +++ /dev/null @@ -1,57 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -(* test _with_ the WHD on the apply argument *) -set "baseuri" "cic:/matita/tests/apply/". -include "coq.ma". - -alias id "not" = "cic:/Coq/Init/Logic/not.con". -alias id "False" = "cic:/Coq/Init/Logic/False.ind#xpointer(1/1)". - -theorem b: - \forall x:Prop. - (not x) \to x \to False. -intros. -apply H. -assumption. -qed. - -(* test _without_ the WHD on the apply argument *) - -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". - -theorem a: - \forall A:Set. - \forall x: A. - not (x=x) \to not (x=x). -intros. -apply H. -qed. - - -(* this test shows what happens when a term of type A -> ? is applied to - a goal of type A' -> B: if A unifies with A' the unifier becomes ? := B - and no goal is opened; otherwise the unifier becomes ? := A' -> B and a - new goal of type A is created. *) -theorem c: - \forall A,B:Prop. - A \to (\forall P: Prop. A \to P) \to (A \to B) \land (B \to B). - intros 4; split; [ apply H1 | apply H1; exact H ]. -qed. - -(* this test requires the delta-expansion of not in the type of the applied - term (to reveal a product) *) -theorem d: \forall A: Prop. \lnot A \to A \to False. - intros. apply H. assumption. -qed. \ No newline at end of file diff --git a/helm/matita/tests/assumption.ma b/helm/matita/tests/assumption.ma deleted file mode 100644 index fde8f8c98..000000000 --- a/helm/matita/tests/assumption.ma +++ /dev/null @@ -1,39 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/assumption". -include "coq.ma". - -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". -alias num (instance 0) = "natural number". -alias symbol "and" (instance 0) = "Coq's logical and". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias symbol "plus" (instance 0) = "Coq's natural plus". - - -theorem stupid: - \forall a: 0 = 0. - \forall b: 3 + 2 = 5. - \forall c: (\lambda x:nat.x) 3 = 3. - 0=0 \land 3 + 2 = 5 \land 3 = 3. -intros. -split. -split. -clear H2. clear H1. -assumption. -clear H. -assumption. -assumption. -qed. - diff --git a/helm/matita/tests/bad_tests/.depend b/helm/matita/tests/bad_tests/.depend deleted file mode 100644 index 8f040e5c7..000000000 --- a/helm/matita/tests/bad_tests/.depend +++ /dev/null @@ -1,6 +0,0 @@ -/home/sacerdot/.matita/xml/matita/tests/auto.moo: auto.ma /home/sacerdot/miohelm/matita/coq.moo -auto.mo: /home/sacerdot/.matita/xml/matita/tests/auto.moo -/home/sacerdot/.matita/xml/matita/tests/baseuri.moo: baseuri.ma -baseuri.mo: /home/sacerdot/.matita/xml/matita/tests/baseuri.moo -/home/sacerdot/.matita/xml/matita/tests/test2.moo: test2.ma /home/sacerdot/miohelm/matita/coq.moo -test2.mo: /home/sacerdot/.matita/xml/matita/tests/test2.moo diff --git a/helm/matita/tests/bad_tests/Makefile b/helm/matita/tests/bad_tests/Makefile deleted file mode 100644 index 8f7a83fd5..000000000 --- a/helm/matita/tests/bad_tests/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -SRC=$(wildcard *.ma) - -MATITA_FLAGS = -NODB=false -ifeq ($(NODB),true) - MATITA_FLAGS += -nodb -endif - -MATITAC=../../scripts/do_tests.sh $(DO_TESTS_OPTS) "../../matitac $(MATITA_FLAGS) -noprofile" "../../matitaclean $(MATITA_FLAGS)" /dev/null FAIL -MATITACOPT=../../scripts/do_tests.sh $(DO_TESTS_OPTS) "../../matitac.opt $(MATITA_FLAGS) -noprofile" "../../matitaclean.opt $(MATITA_FLAGS)" /dev/null FAIL -VERBOSEMATITAC=../../matitac $(MATITA_FLAGS) -VERBOSEMATITACOPT=../../matitac.opt $(MATITA_FLAGS) - -MATITACLEAN=../../matitaclean $(MATITA_FLAGS) -MATITACLEANOPT=../../matitaclean.opt $(MATITA_FLAGS) - -MATITADEP=../../matitadep $(MATITA_FLAGS) -MATITADEPOPT=../../matitadep.opt $(MATITA_FLAGS) - -DEPEND_NAME=.depend - -H=@ - -all: $(SRC:%.ma=%.mo) - -opt: - $(H)$(MAKE) MATITAC='$(MATITACOPT)' MATITACLEAN='$(MATITACLEANOPT)' MATITADEP='$(MATITADEPOPT)' all - -verbose: - $(H)$(MAKE) MATITAC='$(VERBOSEMATITAC)' MATITACLEAN='$(MATITACLEAN)' MATITADEP='$(MATITADEP)' all - -%.opt: - $(H)$(MAKE) MATITAC='$(MATITACOPT)' MATITACLEAN='$(MATITACLEANOPT)' MATITADEP='$(MATITADEPOPT)' $(@:%.opt=%) - -clean: - $(H)$(MATITACLEAN) $(SRC) - -cleanall: - $(H)rm -f $(SRC:%.ma=%.moo) - $(MATITACLEAN) all - -depend: - rm -f $(DEPEND_NAME) - $(MAKE) $(DEPEND_NAME) -.PHONY: depend - -%.moo: - $(H)$(MATITAC) $< - -$(DEPEND_NAME): $(SRC) - $(H)$(MATITADEP) $(SRC) > $@ || rm -f $@ - -#include $(DEPEND_NAME) -include .depend diff --git a/helm/matita/tests/bad_tests/auto.log b/helm/matita/tests/bad_tests/auto.log deleted file mode 100644 index 1e1fc77ae..000000000 --- a/helm/matita/tests/bad_tests/auto.log +++ /dev/null @@ -1,107 +0,0 @@ -Info: execution of auto.ma started: -Debug: Executing: ``set "baseuri" "cic:/matita/tests/auto/"'' -Debug: Executing: ``include coq.ma'' -Debug: Executing: ``alias id "O" = "cic:/Coq/Init/Datatypes/nat.ind#xp ...'' -Debug: Executing: ``alias id "S" = "cic:/Coq/Init/Datatypes/nat.ind#xp ...'' -Debug: Executing: ``alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind# ...'' -Debug: Executing: ``alias symbol "eq" (instance 0) = "Coq's leibnitz's ...'' -Debug: Executing: ``alias symbol "minus" (instance 0) = "Coq's natural ...'' -Debug: Executing: ``alias symbol "plus" (instance 0) = "Coq's natural ...'' -Debug: Executing: ``alias symbol "times" (instance 0) = "Coq's natural ...'' -Debug: Executing: ``Theorem a: @[\forall ((x): (@[nat])).(\forall ((y) ...'' -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Datatypes/nat.ind -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Logic/eq.ind -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Peano/minus.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Peano/plus.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Peano/mult.con -Error: Bad name: a -Debug: Executing: ``intro.'' -Debug: Executing: ``auto.'' -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Logic/trans_eq.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Logic/Logic_lemmas/equality/A.var -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Logic/Logic_lemmas/equality/x.var -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Logic/Logic_lemmas/equality/y.var -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Logic/Logic_lemmas/equality/z.var -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Logic/f_equal3.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Logic/f_equal2.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Logic/f_equal.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Logic/Logic_lemmas/equality/B.var -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Logic/Logic_lemmas/equality/f.var -WE HAVE NO UNIVERSE FILE FOR cic:/Nijmegen/QArith/sqrt2/add_sub_square_identity.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Peano/mult_n_Sm.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/TreeAutomata/semantics/conservation_0_0.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/MATHS/Z/Nat_complements/technical_lemma.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/ARITH/Chinese/Nat_complements/technical_lemma.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Minus/plus_minus.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Minus/minus_plus_simpl_l_reverse.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Minus/minus_plus.con -WE HAVE NO UNIVERSE FILE FOR cic:/Nijmegen/QArith/sqrt2/minus_minus.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Mult/mult_plus_distr_r.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Mult/mult_plus_distr_l.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/SUBST/comparith/mult_plus_distr_r.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/HARDWARE/GENE/Arith_compl/mult_plus_distr2.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Minus/minus_n_n.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Minus/minus_n_O.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/HARDWARE/GENE/Arith_compl/minus_minus_lem1.con -WE HAVE NO UNIVERSE FILE FOR cic:/Cachan/SMC/mu/Splus_nm.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Peano/plus_n_Sm.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Peano/plus_Sn_m.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Plus/plus_Snm_nSm.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/TreeAutomata/bases/S_plus_l.con -WE HAVE NO UNIVERSE FILE FOR cic:/Nijmegen/QArith/Qpositive/mult_reg_l.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Plus/plus_reg_l.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Plus/plus_permute_2_in_4.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Plus/plus_permute.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Plus/plus_comm.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Plus/plus_assoc_reverse.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Plus/plus_assoc.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/SUBST/comparith/eq_plus_reg_r.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/SUBST/comparith/eq_plus_reg_l.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/Rsa/MiscRsa/plus_eq.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/HARDWARE/GENE/Arith_compl/plus_permute2.con -WE HAVE NO UNIVERSE FILE FOR cic:/Nijmegen/QArith/sqrt2/minus_eq_decompose.con -WE HAVE NO UNIVERSE FILE FOR cic:/Nijmegen/QArith/Qpositive/minus_decompose.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/Rsa/MiscRsa/minus_eq.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Peano/eq_add_S.con -WE HAVE NO UNIVERSE FILE FOR cic:/Nijmegen/QArith/sqrt2/expand_mult2.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/SUBST/comparith/mult_n_2.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/ring/ArithRing/S_to_plus_one.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/ZArith/BinInt/ZL0.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/SUBST/comparith/S_plus.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/HARDWARE/GENE/Arith_compl/plus_n_SO.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Peano/plus_n_O.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Plus/plus_0_r.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Plus/plus_0_l.con -WE HAVE NO UNIVERSE FILE FOR cic:/Marseille/GC/lib_arith/lib_plus/plus_O_O.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/Rsa/MiscRsa/plus_eqO.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/HARDWARE/GENE/Arith_compl/plus_O_O.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/Bertrand/Misc/plus_eqO.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/DEMOS/Demo_AutoRewrite/g0.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/DEMOS/Demo_AutoRewrite/McCarthy/g.var -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/Rsa/MiscRsa/mult_SO.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/Bertrand/Misc/mult_SO.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/DEMOS/Demo_AutoRewrite/Ack1.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/DEMOS/Demo_AutoRewrite/Ackermann/Ack.var -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Mult/mult_1_r.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Mult/mult_1_l.con -WE HAVE NO UNIVERSE FILE FOR cic:/Nijmegen/QArith/sqrt2/mult2_recompose.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/SUBST/comparith/mult_n_1.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Init/Peano/mult_n_O.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Mult/mult_0_r.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Mult/mult_0_l.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Mult/mult_comm.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Mult/mult_assoc_reverse.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Mult/mult_assoc.con -WE HAVE NO UNIVERSE FILE FOR cic:/Nijmegen/QArith/sqrt2/square_recompose.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/SUBST/comparith/mult_sym.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/SUBST/comparith/mult_permut.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/SUBST/comparith/mult_assoc_l.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/SUBST/comparith/eq_mult_reg_r.con -WE HAVE NO UNIVERSE FILE FOR cic:/Rocq/SUBST/comparith/eq_mult_reg_l.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/Rsa/MiscRsa/mult_eq.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/HARDWARE/GENE/Arith_compl/mult_sym.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/HARDWARE/GENE/Arith_compl/mult_permute.con -WE HAVE NO UNIVERSE FILE FOR cic:/Sophia-Antipolis/Float/Faux/minus_inv_lt_aux.con -WE HAVE NO UNIVERSE FILE FOR cic:/Coq/Arith/Mult/mult_minus_distr_r.con -WE HAVE NO UNIVERSE FILE FOR cic:/Nijmegen/QArith/sqrt2/mult_minus_distr_l.con -Error: Tactic error: No Applicable theorem diff --git a/helm/matita/tests/bad_tests/auto.ma b/helm/matita/tests/bad_tests/auto.ma deleted file mode 100755 index 5c6c04358..000000000 --- a/helm/matita/tests/bad_tests/auto.ma +++ /dev/null @@ -1,27 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/auto/". -include "coq.ma". - -alias id "O" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1)". -alias id "S" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2)". -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias symbol "minus" (instance 0) = "Coq's natural minus". -alias symbol "plus" (instance 0) = "Coq's natural plus". -alias symbol "times" (instance 0) = "Coq's natural times". -theorem a : \forall x,y:nat. x*x+(S y) = O - x. -intros. -auto depth = 3. diff --git a/helm/matita/tests/bad_tests/baseuri.log b/helm/matita/tests/bad_tests/baseuri.log deleted file mode 100644 index 9185479df..000000000 --- a/helm/matita/tests/bad_tests/baseuri.log +++ /dev/null @@ -1,4 +0,0 @@ -Info: execution of baseuri.ma started: -Debug: Executing: ``set "baseuri" "cic:/matita/tests/baseuri/"'' -Debug: Executing: ``set "baseuri" "cic:/matita/tests/baseuri/"'' -Error: Error: Redefinition of 'baseuri' is forbidden. diff --git a/helm/matita/tests/bad_tests/baseuri.ma b/helm/matita/tests/bad_tests/baseuri.ma deleted file mode 100644 index 0e06223fa..000000000 --- a/helm/matita/tests/bad_tests/baseuri.ma +++ /dev/null @@ -1,16 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/baseuri/". -set "baseuri" "cic:/matita/tests/baseuri/". diff --git a/helm/matita/tests/change.ma b/helm/matita/tests/change.ma deleted file mode 100644 index 16b675316..000000000 --- a/helm/matita/tests/change.ma +++ /dev/null @@ -1,40 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/change/". -include "coq.ma". -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias symbol "plus" (instance 0) = "Coq's natural plus". -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". - -theorem stupid: - \forall a:nat. - a = 5 \to - (3 + 2) = a. -intros. -change in \vdash (? ? % ?) with 5. -rewrite < H in \vdash (? ? % ?). -reflexivity. -qed. - -(* tests changing a term under a binder *) -alias id "True" = "cic:/Coq/Init/Logic/True.ind#xpointer(1/1)". -theorem t: (\forall x:nat. x=x) \to True. - intro H. - change in match x in H : (\forall _.%) with (0+x). - change in H: (\forall _.(? ? ? (? % ?))) with 0. - constructor 1. -qed. - diff --git a/helm/matita/tests/clear.ma b/helm/matita/tests/clear.ma deleted file mode 100644 index 9f1655b59..000000000 --- a/helm/matita/tests/clear.ma +++ /dev/null @@ -1,30 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/clear". -include "coq.ma". -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias id "True" = "cic:/Coq/Init/Logic/True.ind#xpointer(1/1)". - -theorem stupid: - \forall a: True. - \forall b: 0 = 0. - 0 = 0. -intros 1 (H). -clear H. -intros 1 (H). -exact H. -qed. - diff --git a/helm/matita/tests/clearbody.ma b/helm/matita/tests/clearbody.ma deleted file mode 100644 index 0956cbc1e..000000000 --- a/helm/matita/tests/clearbody.ma +++ /dev/null @@ -1,31 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/clearbody". -include "coq.ma". -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias symbol "plus" (instance 0) = "Coq's natural plus". - - -theorem stupid : - let x \def 0 + 1 in x + 2 = x + 2. - intros. - clearbody x. - simplify. - generalize in \vdash (? ? (? % ?) (? % ?)). - intros. - reflexivity. - qed. - diff --git a/helm/matita/tests/coercions.ma b/helm/matita/tests/coercions.ma deleted file mode 100644 index ae69759bf..000000000 --- a/helm/matita/tests/coercions.ma +++ /dev/null @@ -1,47 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/coercions/". -include "coq.ma". - -inductive pos: Set \def -| one : pos -| next : pos \to pos. - -inductive nat:Set \def -| O : nat -| S : nat \to nat. - -inductive int: Set \def -| positive: nat \to int -| negative : nat \to int. - -inductive empty : Set \def . - -let rec pos2nat x \def - match x with - [ one \Rightarrow (S O) - | (next z) \Rightarrow S (pos2nat z)]. - -definition nat2int \def \lambda x. positive x. - -coercion pos2nat. - -coercion nat2int. - -definition fst \def \lambda x,y:int.x. - -theorem a: fst O one = fst (positive O) (next one). -reflexivity. -qed. diff --git a/helm/matita/tests/comments.ma b/helm/matita/tests/comments.ma deleted file mode 100644 index f9412f45a..000000000 --- a/helm/matita/tests/comments.ma +++ /dev/null @@ -1,36 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/comments/". -include "coq.ma". - -(* commento che va nell'ast, ma non viene contato - come step perche' non e' un executable -*) - -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -theorem a:0=0. - -(* nota *) -(** - - -apply Prop. -*) -reflexivity. -(* commenti che non devono essere colorati perche' - non c'e' nulla di eseguibile dopo di loro -*) -qed. diff --git a/helm/matita/tests/constructor.ma b/helm/matita/tests/constructor.ma deleted file mode 100644 index 3ee7f4b98..000000000 --- a/helm/matita/tests/constructor.ma +++ /dev/null @@ -1,23 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/constructor". -include "coq.ma". -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". - - -theorem stupid: 1 = 1. -constructor 1. -qed. diff --git a/helm/matita/tests/continuationals.ma b/helm/matita/tests/continuationals.ma deleted file mode 100644 index b2f906084..000000000 --- a/helm/matita/tests/continuationals.ma +++ /dev/null @@ -1,80 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/test/continuationals/". -include "coq.ma". - -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". -alias id "S" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2)". -alias id "trans_equal" = "cic:/Coq/Init/Logic/trans_equal.con". -alias id "refl_equal" = "cic:/Coq/Init/Logic/eq.ind#xpointer(1/1/1)". -alias id "Z" = "cic:/Coq/ZArith/BinInt/Z.ind#xpointer(1/1)". - -theorem semicolon: \forall p:Prop.p\to p\land p. -intros (p); split; assumption. -qed. - -theorem branch:\forall x:nat.x=x. -intros (n); -elim n -[ reflexivity; -| reflexivity ]. -qed. - -theorem pos:\forall x:Z.x=x. -intros (n); -elim n; -[ 3: reflexivity; -| 2: reflexivity; -| reflexivity ] -qed. - -theorem dot:\forall x:Z.x=x. -intros (x). -elim x. -reflexivity. reflexivity. reflexivity. -qed. - -theorem dot_slice:\forall x:Z.x=x. -intros (x). -elim x; -[ elim x. reflexivity. reflexivity. reflexivity; -| reflexivity -| reflexivity ]; -qed. - -theorem focus:\forall x:Z.x=x. -intros (x); elim x. -focus 16 17; - reflexivity; -unfocus. -reflexivity. -qed. - -theorem skip:\forall x:nat.x=x. -intros (x). -apply trans_equal; -[ 2: apply (refl_equal nat x); -| skip -| reflexivity -] -qed. - -theorem skip_focus:\forall x:nat.x=x. -intros (x). -apply trans_equal; -[ focus 18; apply (refl_equal nat x); unfocus; -| skip -| reflexivity ] -qed. diff --git a/helm/matita/tests/contradiction.ma b/helm/matita/tests/contradiction.ma deleted file mode 100644 index 886bc8c80..000000000 --- a/helm/matita/tests/contradiction.ma +++ /dev/null @@ -1,31 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/contradiction". -include "coq.ma". -alias id "True" = "cic:/Coq/Init/Logic/True.ind#xpointer(1/1)". -alias id "not" = "cic:/Coq/Init/Logic/not.con". -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". - - - -theorem stupid: \forall a:Prop. a \to not a \to 0 = 2. -intros. -letin H \def (H1 H). -contradiction. -qed. - - - diff --git a/helm/matita/tests/cut.ma b/helm/matita/tests/cut.ma deleted file mode 100644 index 3e5605a10..000000000 --- a/helm/matita/tests/cut.ma +++ /dev/null @@ -1,25 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/cut". -include "coq.ma". -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". - -theorem stupid: 3 = 3. - cut (3 = 3). - assumption. - reflexivity. -qed. - diff --git a/helm/matita/tests/decompose.ma b/helm/matita/tests/decompose.ma deleted file mode 100644 index caf2d5289..000000000 --- a/helm/matita/tests/decompose.ma +++ /dev/null @@ -1,28 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/decompose". -include "coq.ma". -alias symbol "and" (instance 0) = "Coq's logical and". -alias symbol "or" (instance 0) = "Coq's logical or". - - - -theorem stupid: - \forall a,b,c:Prop. - (a \land c \lor b \land c) \to (c \land (b \lor a)). - intros.decompose H.split.assumption.right.assumption. - split.assumption.left.assumption.qed. - - diff --git a/helm/matita/tests/discriminate.ma b/helm/matita/tests/discriminate.ma deleted file mode 100644 index f873dd8f7..000000000 --- a/helm/matita/tests/discriminate.ma +++ /dev/null @@ -1,40 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/discriminate". -include "coq.ma". -alias id "not" = "cic:/Coq/Init/Logic/not.con". -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". - -inductive foo: Prop \def I_foo: foo. - -theorem stupid: - 1 = 0 \to (\forall p:Prop. p \to not p). - intros. - generalize in match I_foo. - discriminate H. -qed. - -inductive bar_list (A:Set): Set \def - | bar_nil: bar_list A - | bar_cons: A \to bar_list A \to bar_list A. - -alias id "False" = "cic:/Coq/Init/Logic/False.ind#xpointer(1/1)". -theorem stupid2: - \forall A:Set.\forall x:A.\forall l:bar_list A. - bar_nil A = bar_cons A x l \to False. - intros. - discriminate H. -qed. diff --git a/helm/matita/tests/elim.ma b/helm/matita/tests/elim.ma deleted file mode 100644 index 9d48bc970..000000000 --- a/helm/matita/tests/elim.ma +++ /dev/null @@ -1,80 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/elim". -include "coq.ma". - -inductive stupidtype: Set \def - | Base : stupidtype - | Next : stupidtype \to stupidtype - | Pair : stupidtype \to stupidtype \to stupidtype. - -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias symbol "exists" (instance 0) = "Coq's exists". -alias symbol "or" (instance 0) = "Coq's logical or". -alias num (instance 0) = "natural number". -alias id "True" = "cic:/Coq/Init/Logic/True.ind#xpointer(1/1)". -alias id "refl_equal" = "cic:/Coq/Init/Logic/eq.ind#xpointer(1/1/1)". - -theorem serious: - \forall a:stupidtype. - a = Base - \lor - (\exists b:stupidtype.a = Next b) - \lor - (\exists c,d:stupidtype.a = Pair c d). -intros. -elim a. -clear a.left.left. - reflexivity. -clear H.clear a.left.right. - exists.exact s.reflexivity. -clear H.clear H1.clear a.right. - exists.exact s.exists.exact s1.reflexivity. -qed. - -theorem t: 0=0 \to stupidtype. - intros; constructor 1. -qed. - -(* In this test "elim t" should open a new goal 0=0 and put it in the *) -(* goallist so that the THEN tactical closes it using reflexivity. *) -theorem foo: let ax \def refl_equal ? 0 in t ax = t ax. - elim t; reflexivity. -qed. - -(* This test shows a bug where elim opens a new unus{ed,eful} goal *) - -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias id "O" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1)". - -inductive sum (n:nat) : nat \to nat \to Set \def - k: \forall x,y. n = x + y \to sum n x y. - -theorem t': \forall x,y. \forall H: sum x y O. - match H with [ (k a b p) \Rightarrow a ] = x. - intros. - cut (y = y \to O = O \to match H with [ (k a b p) \Rightarrow a] = x). - apply Hcut; reflexivity. - apply - (sum_ind ? - (\lambda a,b,K. y=a \to O=b \to - match K with [ (k a b p) \Rightarrow a ] = x) - ? ? ? H). - goal 16. - simplify. intros. - generalize in match H1. - rewrite < H2; rewrite < H3.intro. - rewrite > H4.auto. -qed. diff --git a/helm/matita/tests/fguidi.ma b/helm/matita/tests/fguidi.ma deleted file mode 100644 index 567f15c97..000000000 --- a/helm/matita/tests/fguidi.ma +++ /dev/null @@ -1,114 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/fguidi/". -include "coq.ma". - -alias id "O" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1)". -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". -alias id "S" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2)". -alias id "le" = "cic:/matita/fguidi/le.ind#xpointer(1/1)". -alias id "False_ind" = "cic:/Coq/Init/Logic/False_ind.con". -alias id "I" = "cic:/Coq/Init/Logic/True.ind#xpointer(1/1/1)". -alias id "ex_intro" = "cic:/Coq/Init/Logic/ex.ind#xpointer(1/1/1)". -alias id "False" = "cic:/Coq/Init/Logic/False.ind#xpointer(1/1)". -alias id "True" = "cic:/Coq/Init/Logic/True.ind#xpointer(1/1)". - -alias symbol "and" (instance 0) = "Coq's logical and". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias symbol "exists" (instance 0) = "Coq's exists". - -definition is_S: nat \to Prop \def - \lambda n. match n with - [ O \Rightarrow False - | (S n) \Rightarrow True - ]. - -definition pred: nat \to nat \def - \lambda n. match n with - [ O \Rightarrow O - | (S n) \Rightarrow n - ]. - -theorem eq_gen_S_O: \forall x. (S x = O) \to \forall P:Prop. P. -intros. apply False_ind. cut (is_S O). auto paramodulation. elim H. exact I. -qed. - -theorem eq_gen_S_O_cc: (\forall P:Prop. P) \to \forall x. (S x = O). -intros. auto. -qed. - -theorem eq_gen_S_S: \forall m,n. (S m) = (S n) \to m = n. -intros. cut ((pred (S m)) = (pred (S n))). -assumption. elim H. auto paramodulation. -qed. - -theorem eq_gen_S_S_cc: \forall m,n. m = n \to (S m) = (S n). -intros. elim H. auto paramodulation. -qed. - -inductive le: nat \to nat \to Prop \def - le_zero: \forall n. (le O n) - | le_succ: \forall m, n. (le m n) \to (le (S m) (S n)). - -theorem le_refl: \forall x. (le x x). -intros. elim x. auto paramodulation. auto paramodulation. -qed. - -theorem le_gen_x_O_aux: \forall x, y. (le x y) \to (y =O) \to - (x = O). -intros 3. elim H. auto paramodulation. apply eq_gen_S_O. exact n1. auto paramodulation. -qed. - -theorem le_gen_x_O: \forall x. (le x O) \to (x = O). -intros. apply le_gen_x_O_aux. exact O. auto paramodulation. auto paramodulation. -qed. - -theorem le_gen_x_O_cc: \forall x. (x = O) \to (le x O). -intros. elim H. auto paramodulation. -qed. - -theorem le_gen_S_x_aux: \forall m,x,y. (le y x) \to (y = S m) \to - (\exists n. x = (S n) \land (le m n)). -intros 4. elim H. -apply eq_gen_S_O. exact m. elim H1. auto paramodulation. -cut (n = m). elim Hcut. apply ex_intro. exact n1. auto paramodulation. auto. (* paramodulation non trova la prova *) -qed. - -theorem le_gen_S_x: \forall m,x. (le (S m) x) \to - (\exists n. x = (S n) \land (le m n)). -intros. apply le_gen_S_x_aux. exact (S m). auto paramodulation. auto paramodulation. -qed. - -theorem le_gen_S_x_cc: \forall m,x. (\exists n. x = (S n) \land (le m n)) \to - (le (S m) x). -intros. elim H. elim H1. cut ((S x1) = x). elim Hcut. auto paramodulation. elim H2. auto paramodulation. -qed. - -theorem le_gen_S_S: \forall m,n. (le (S m) (S n)) \to (le m n). -intros. -lapply le_gen_S_x to H using H0. elim H0. elim H1. -lapply eq_gen_S_S to H2 using H4. rewrite > H4. assumption. -qed. - -theorem le_gen_S_S_cc: \forall m,n. (le m n) \to (le (S m) (S n)). -intros. auto paramodulation. -qed. - -(* -theorem le_trans: \forall x,y. (le x y) \to \forall z. (le y z) \to (le x z). -intros 1. elim x; clear H. clear x. -auto paramodulation. -fwd H1 [H]. decompose H. -*) diff --git a/helm/matita/tests/first.ma b/helm/matita/tests/first.ma deleted file mode 100644 index 4fca7b199..000000000 --- a/helm/matita/tests/first.ma +++ /dev/null @@ -1,37 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/first/". - -inductive nat : Set \def - | O : nat - | S : nat \to nat. - -inductive eq (A:Set): A \to A \to Prop \def - refl: \forall x:A.eq A x x. - -inductive list (A:Set) : Set \def - | nil : list A - | cons : A \to list A \to list A. - -let rec list_len (A:Set) (l:list A) on l \def - match l with - [ nil \Rightarrow O - | (cons a tl) \Rightarrow S (list_len A tl)]. - -theorem stupid: \forall A:Set.eq ? (list_len A (nil ?)) O. -intros. -normalize. -apply refl. -qed. diff --git a/helm/matita/tests/fix_betareduction.ma b/helm/matita/tests/fix_betareduction.ma deleted file mode 100644 index 82f0b1cf6..000000000 --- a/helm/matita/tests/fix_betareduction.ma +++ /dev/null @@ -1,26 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/fix_betareduction/". - -alias id "eq" = "cic:/Coq/Init/Logic/eq.ind#xpointer(1/1)". -alias id "n" = "cic:/Suresnes/BDD/canonicite/Canonicity_BDT/n.con". -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". -theorem a: - (\forall p: nat \to Prop. - \forall n: nat. p n \to p n ) \to (eq nat n n). -intro. -apply (H (\lambda n:nat.(eq nat n n))). -reflexivity. -qed. diff --git a/helm/matita/tests/fold.ma b/helm/matita/tests/fold.ma deleted file mode 100644 index 003d45f47..000000000 --- a/helm/matita/tests/fold.ma +++ /dev/null @@ -1,26 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/fold". -include "coq.ma". -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias symbol "plus" (instance 0) = "Coq's natural plus". -theorem t: \forall x:nat. 0+x=x. - intro. - simplify in match (0+x) in \vdash (? ? % ?). - fold simplify (0 + x) in \vdash (? ? % ?). - reflexivity. -qed. diff --git a/helm/matita/tests/generalize.ma b/helm/matita/tests/generalize.ma deleted file mode 100644 index aca28ffdc..000000000 --- a/helm/matita/tests/generalize.ma +++ /dev/null @@ -1,37 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/generalize". -include "coq.ma". - -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias symbol "plus" (instance 0) = "Coq's natural plus". -alias id "plus_comm" = "cic:/Coq/Arith/Plus/plus_comm.con". -alias id "S" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2)". - -(* This tests is for the case of a pattern that contains metavariables *) -theorem t: \forall x. x + 4 = 4 + x. - intro. - generalize in match (S ?). - intro; apply plus_comm. -qed. - -(* This test used to fail because x was used in the wrong context *) -(* Once this was fixed it still did not work since apply is not *) -(* able to solve a goal that ends in a product. *) -theorem test2: \forall x. 4 + x = x + 4. - generalize in match 4. - exact plus_comm. -qed. diff --git a/helm/matita/tests/interactive/automatic_insertion.ma b/helm/matita/tests/interactive/automatic_insertion.ma deleted file mode 100644 index 56212bdc5..000000000 --- a/helm/matita/tests/interactive/automatic_insertion.ma +++ /dev/null @@ -1,17 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/xxx". - -theorem t: And True (eq nat O O). split. exact (refl_equal nat O). exact I. qed. \ No newline at end of file diff --git a/helm/matita/tests/interactive/drop.ma b/helm/matita/tests/interactive/drop.ma deleted file mode 100644 index b8718cdb8..000000000 --- a/helm/matita/tests/interactive/drop.ma +++ /dev/null @@ -1,8 +0,0 @@ -set "baseuri" "cic:/matita/tests/drop". - -alias id "O" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1)". -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "leibnitz's equality". -alias symbol "plus" (instance 0) = "natural plus". -theorem a : O + 1 = 1. -drop. diff --git a/helm/matita/tests/interactive/grafite.ma b/helm/matita/tests/interactive/grafite.ma deleted file mode 100644 index aaf570091..000000000 --- a/helm/matita/tests/interactive/grafite.ma +++ /dev/null @@ -1,34 +0,0 @@ -set "baseuri" "cic:/matita/tests/grafite/". - -(* commento *) -(** hint. *) - -inductive pippo : Type \def - | a : Type \to pippo - | b : Prop \to pippo - | c : Set \to pippo. - -definition pollo : Set \to Set \def - \lambda a:Set.a. - -inductive paolo : Prop \def t:paolo. - -theorem comeno : \forall p:pippo.pippo. -intros.assumption. -qed. - -definition f : pippo \to paolo \def - \lambda x:pippo. - match x with - [ (a z) \Rightarrow t - | (b z) \Rightarrow t - | (c z) \Rightarrow t ]. - -record w : Type \def { - mario : Prop; - pippo : Set -}. - -whelp locate pippo. - -print "coercions". diff --git a/helm/matita/tests/interactive/test5.ma b/helm/matita/tests/interactive/test5.ma deleted file mode 100644 index e48cc827e..000000000 --- a/helm/matita/tests/interactive/test5.ma +++ /dev/null @@ -1,7 +0,0 @@ -set "baseuri" "cic:/matita/tests/interactive/test5/". - -whelp instance - \lambda A:Set. - \lambda f: A \to A \to A. - \forall x,y : A. - f x y = f y x. diff --git a/helm/matita/tests/interactive/test6.ma b/helm/matita/tests/interactive/test6.ma deleted file mode 100644 index 4afdd3741..000000000 --- a/helm/matita/tests/interactive/test6.ma +++ /dev/null @@ -1,7 +0,0 @@ -set "baseuri" "cic:/matita/tests/interactive/test6/". - -whelp instance - \lambda A:Set. - \lambda f:A \to A \to A. - \forall x,y,z:A. - f x (f y z) = f (f x y) z. diff --git a/helm/matita/tests/interactive/test7.ma b/helm/matita/tests/interactive/test7.ma deleted file mode 100644 index d7347ed9f..000000000 --- a/helm/matita/tests/interactive/test7.ma +++ /dev/null @@ -1,7 +0,0 @@ -set "baseuri" "cic:/matita/tests/interactive/test7/". - -whelp instance - \lambda A:Set. - \lambda r:A \to A \to Prop. - \forall x:A. - r x x. diff --git a/helm/matita/tests/interactive/test_instance.ma b/helm/matita/tests/interactive/test_instance.ma deleted file mode 100644 index 7e02c0fff..000000000 --- a/helm/matita/tests/interactive/test_instance.ma +++ /dev/null @@ -1,16 +0,0 @@ -set "baseuri" "cic:/matita/tests/interactive/instance/". - -whelp instance \lambda A:Set.\lambda P:A \to A \to Prop.\forall x:A. P x x. -whelp instance \lambda A:Set.\lambda P:A \to A \to Prop.\forall x,y:A. P x y \to P y x. -whelp instance \lambda A:Set.\lambda P:A \to A \to Prop.\forall x,y,z:A. P x y \to P y z \to P y z. -whelp instance \lambda A:Set.\lambda f:A \to A \to A. \forall x,y:A. f x y = f y x. -whelp instance \lambda A:Set.\lambda r : A \to A \to Prop. \forall x,y,z:A. r x y \to r y z \to r x z. - - -whelp instance \lambda A:Set.\lambda R:A \to A \to Prop.\forall x:A.\forall y:A.(R x y) \to \forall z:A.(R x z) \to \exists u:A.(R y u) \land (R z u). - -whelp instance λA:Set.λR:A→A→Prop.∀x:A.∀y:A.(R x y)→∀z:A.(R x z)→∃u:A.(R y u)∧(R z u). - -whelp instance \lambda A:Set. \lambda R:A\to A\to Prop. confluence A R. - -whelp instance \lambda A:Set. \lambda f:A\to A\to A. \lambda g:A\to A\to A. \forall x,y,z : A . f x (g y z) = g (f x y ) (f x z). diff --git a/helm/matita/tests/inversion.ma b/helm/matita/tests/inversion.ma deleted file mode 100644 index f717cd1df..000000000 --- a/helm/matita/tests/inversion.ma +++ /dev/null @@ -1,53 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/inversion/". -include "coq.ma". - -inductive nat : Set \def - O : nat - | S : nat \to nat. - -inductive le (n:nat) : nat \to Prop \def - leO : le n n - | leS : \forall m. le n m \to le n (S m). - -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". - -theorem test_inversion: \forall n. le n O \to n=O. - intros. - (* inversion begins *) - cut (O=O); - [ 2: reflexivity; - | generalize in match Hcut. - apply (le_ind ? (\lambda x. O=x \to n=x) ? ? ? H); - [ intro. rewrite < H1. clear Hcut. - | simplify. intros. discriminate H3. - ] - reflexivity. - ] -qed. - -(* Piu' semplice e non lascia l'ipotesi inutile Hcut *) -alias id "refl_equal" = "cic:/Coq/Init/Logic/eq.ind#xpointer(1/1/1)". -theorem test_inversion2: \forall n. le n O \to n=O. - intros. - (* inversion begins *) - generalize in match (refl_equal nat O). - apply (le_ind ? (\lambda x. O=x \to n=x) ? ? ? H); - [ intro. rewrite < H1. - | simplify. intros. discriminate H3. - ] - reflexivity. -qed. diff --git a/helm/matita/tests/letrec.ma b/helm/matita/tests/letrec.ma deleted file mode 100644 index 55933cd31..000000000 --- a/helm/matita/tests/letrec.ma +++ /dev/null @@ -1,25 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/letrec/". - - -alias id "O" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1)". -alias id "S" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2)". -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". - -let rec plus n m \def - match n with - [ O \Rightarrow m - | (S x) \Rightarrow S (plus x m) ]. diff --git a/helm/matita/tests/match_inference.ma b/helm/matita/tests/match_inference.ma deleted file mode 100644 index 0e27ce409..000000000 --- a/helm/matita/tests/match_inference.ma +++ /dev/null @@ -1,52 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/match_inference/". - -inductive pos: Set \def -| one : pos -| next : pos \to pos. - -inductive nat:Set \def -| O : nat -| S : nat \to nat. - -definition pos2nat : pos \to nat \def - \lambda x:pos . match x with - [ one \Rightarrow O - | (next z) \Rightarrow O]. - -inductive empty (x:nat) : nat \to Set \def . - -definition empty2nat : (empty O O) \to nat \def - \lambda x : (empty O O). S (match x in empty with []). - -inductive le (n:nat) : nat \to Prop \def - | le_n : le n n - | le_S : \forall m:nat. le n m \to le n (S m). - -inductive True : Prop \def - I : True. - -definition r : True \def - match (le_n O) with - [ le_n \Rightarrow I - | (le_S y p') \Rightarrow I ]. - -inductive Prod (A,B:Set): Set \def -pair : A \to B \to Prod A B. - -definition fst : \forall A,B:Set. (Prod A B) \to A \def -\lambda A,B:Set. \lambda p:(Prod A B). match p with -[(pair a b) \Rightarrow a]. diff --git a/helm/matita/tests/metasenv_ordering.ma b/helm/matita/tests/metasenv_ordering.ma deleted file mode 100644 index 25c66594b..000000000 --- a/helm/matita/tests/metasenv_ordering.ma +++ /dev/null @@ -1,139 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/metasenv_ordering". - -include "coq.ma". - -alias num (instance 0) = "natural number". -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". - -(* REWRITE *) - -theorem th1 : - \forall P:Prop. - \forall H:(\forall G1: Set. \forall G2:Prop. \forall G3 : Type. 1 = 0). - 1 = 1 \land 1 = 0 \land 2 = 2. - intros. split; split; - [ reflexivity - | rewrite > H; - [ reflexivity | exact nat | exact (0=0) | exact Type ] - ] -qed. - -theorem th2 : - \forall P:Prop. - \forall H:(\forall G1: Set. \forall G2:Prop. \forall G3 : Type. 1 = 0). - 1 = 1 \land 1 = 0 \land 3 = 3. - intros. split. split. - focus 13. - rewrite > (H ?); [reflexivity | exact nat | exact (0=0) | exact Type]. - unfocus. - reflexivity. - reflexivity. -qed. - -theorem th3 : - \forall P:Prop. - \forall H:(\forall G1: Set. \forall G2:Prop. \forall G3 : Type. 1 = 0). - 1 = 1 \land 1 = 0 \land 4 = 4. - intros. split. split. - focus 13. - rewrite > (H ? ?); [reflexivity | exact nat | exact (0=0) | exact Type]. - unfocus. - reflexivity. - reflexivity. -qed. - -theorem th4 : - \forall P:Prop. - \forall H:(\forall G1: Set. \forall G2:Prop. \forall G3 : Type. 1 = 0). - 1 = 1 \land 1 = 0 \land 5 = 5. - intros. split. split. - focus 13. - rewrite > (H ? ? ?); [reflexivity | exact nat | exact (0=0) | exact Type]. - unfocus. - reflexivity. - reflexivity. -qed. - -(* APPLY *) - -theorem th5 : - \forall P:Prop. - \forall H:(\forall G1: Set. \forall G2:Prop. \forall G3 : Type. 1 = 0). - 1 = 1 \land 1 = 0 \land 6 = 6. - intros. split. split. - focus 13. - apply H; [exact nat | exact (0=0) | exact Type]. - unfocus. - reflexivity. - reflexivity. -qed. - -theorem th6 : - \forall P:Prop. - \forall H:(\forall G1: Set. \forall G2:Prop. \forall G3 : Type. 1 = 0). - 1 = 1 \land 1 = 0 \land 7 = 7. - intros. split. split. - focus 13. - apply (H ?); [exact nat | exact (0=0) | exact Type]. - unfocus. - reflexivity. - reflexivity. -qed. - -theorem th7 : - \forall P:Prop. - \forall H:(\forall G1: Set. \forall G2:Prop. \forall G3 : Type. 1 = 0). - 1 = 1 \land 1 = 0 \land 8 = 8. - intros. split. split. - focus 13. - apply (H ? ?); [exact nat | exact (0=0) | exact Type]. - unfocus. - reflexivity. - reflexivity. -qed. - -theorem th8 : - \forall P:Prop. - \forall H:(\forall G1: Set. \forall G2:Prop. \forall G3 : Type. 1 = 0). - 1 = 1 \land 1 = 0 \land 9 = 9. - intros. split. split. - focus 13. - apply (H ? ? ?); [exact nat | exact (0=0) | exact Type]. - unfocus. - reflexivity. - reflexivity. -qed. - -(* ELIM *) - -theorem th9: - \forall P,Q,R,S : Prop. R \to S \to \forall E:(R \to S \to P \land Q). P \land Q. - intros (P Q R S r s H). - elim (H ? ?); [split; assumption | exact r | exact s]. - qed. - -theorem th10: - \forall P,Q,R,S : Prop. R \to S \to \forall E:(R \to S \to P \land Q). P \land Q. - intros (P Q R S r s H). - elim (H ?); [split; assumption | exact r | exact s]. - qed. - -theorem th11: - \forall P,Q,R,S : Prop. R \to S \to \forall E:(R \to S \to P \land Q). P \land Q. - intros (P Q R S r s H). - elim H; [split; assumption | exact r | exact s]. - qed. diff --git a/helm/matita/tests/mysql_escaping.ma b/helm/matita/tests/mysql_escaping.ma deleted file mode 100644 index bd0eb8d5a..000000000 --- a/helm/matita/tests/mysql_escaping.ma +++ /dev/null @@ -1,17 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/mysql_escaping/". - -theorem a' : Prop \to Prop.intros.assumption.qed. diff --git a/helm/matita/tests/paramodulation.ma b/helm/matita/tests/paramodulation.ma deleted file mode 100644 index d918fb451..000000000 --- a/helm/matita/tests/paramodulation.ma +++ /dev/null @@ -1,32 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/paramodulation". -include "coq.ma". -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias symbol "plus" (instance 0) = "Coq's natural plus". -alias num (instance 0) = "natural number". -alias symbol "times" (instance 0) = "Coq's natural times". - -theorem para1: - \forall n,m,n1,m1:nat. - n=m \to n1 = m1 \to (n + n1) = (m + m1). -intros. auto paramodulation. -qed. - -theorem para2: - \forall n:nat. n + n = 2 * n. -intros. auto paramodulation. -qed. diff --git a/helm/matita/tests/record.ma b/helm/matita/tests/record.ma deleted file mode 100644 index ed9ecfed8..000000000 --- a/helm/matita/tests/record.ma +++ /dev/null @@ -1,39 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/record/". - -record empty : Type \def {}. - -inductive True : Prop \def I: True. - -record pippo : Type \def -{ -a: Set ; -b: a \to Prop; -c: \forall x:a.(b x) \to a \to Type -}. - -record pluto (A, B:Set) : Type \def { -d: A \to B \to Prop; -e: \forall y:A.\forall z:B. (d y z) \to A \to B; -mario: \forall y:A.\forall z:B. \forall h:(d y z). \forall i : B \to Prop. - i (e y z h y) -}. - -record paperino: Prop \def { - paolo : Type; - pippo : paolo \to paolo; - piero : True -}. diff --git a/helm/matita/tests/replace.ma b/helm/matita/tests/replace.ma deleted file mode 100644 index b5d1eb355..000000000 --- a/helm/matita/tests/replace.ma +++ /dev/null @@ -1,39 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/replace/". -include "coq.ma". -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias symbol "plus" (instance 0) = "Coq's natural plus". -alias symbol "times" (instance 0) = "Coq's natural times". -alias id "mult_n_O" = "cic:/Coq/Init/Peano/mult_n_O.con". -alias id "plus_n_O" = "cic:/Coq/Init/Peano/plus_n_O.con". - -theorem t: \forall x:nat. x * (x + 0) = (0 + x) * (x + x * 0). - intro. - replace in \vdash (? ? (? ? %) (? % %)) with x. - reflexivity. - rewrite < (mult_n_O x). - rewrite < (plus_n_O x). - reflexivity. - reflexivity. - auto. -qed. - -(* This test tests "replace in match t" where t contains some metavariables *) -theorem t2: 2 + (3 * 4) = (5 + 5) + 2 * 2. - replace in match (5+?) with (6 + 4); [reflexivity | reflexivity]. -qed. diff --git a/helm/matita/tests/rewrite.ma b/helm/matita/tests/rewrite.ma deleted file mode 100644 index a69e33d77..000000000 --- a/helm/matita/tests/rewrite.ma +++ /dev/null @@ -1,64 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/rewrite/". -include "coq.ma". - -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias symbol "plus" (instance 0) = "Coq's natural plus". -alias id "plus_n_O" = "cic:/Coq/Init/Peano/plus_n_O.con". - -theorem a: - \forall a,b:nat. - a = b \to b + a + b + a= (\lambda j.((\lambda w.((\lambda x.x + b + w + j) a)) b)) a. -intros. -rewrite < H in \vdash (? ? ? ((\lambda j.((\lambda w.%) ?)) ?)). - -rewrite < H in \vdash (? ? % ?). - -simplify in \vdash (? ? ? ((\lambda _.((\lambda _.%) ?)) ?)). - -rewrite < H in \vdash (? ? ? (% ?)). -simplify. -reflexivity. -qed. - -theorem t: \forall n. 0=0 \to n = n + 0. - intros. - apply plus_n_O. -qed. - -(* In this test "rewrite < t" should open a new goal 0=0 and put it in *) -(* the goallist so that the THEN tactical closes it using reflexivity. *) -theorem foo: \forall n. n = n + 0. - intros. - rewrite < t; reflexivity. -qed. - -theorem test_rewrite_in_hyp: - \forall n,m. n + 0 = m \to m = n + 0 \to n=m \land m+0=n+0. - intros. - rewrite < plus_n_O in H. - rewrite > plus_n_O in H1. - split; [ exact H | exact H1]. -qed. - -theorem test_rewrite_in_hyp2: - \forall n,m. n + 0 = m \to n + 0 = m \to n=m \land n+0=m. - intros. - rewrite < plus_n_O in H H1 \vdash (? ? %). - split; [ exact H | exact H1]. -qed. diff --git a/helm/matita/tests/second.ma b/helm/matita/tests/second.ma deleted file mode 100644 index 450c67671..000000000 --- a/helm/matita/tests/second.ma +++ /dev/null @@ -1,24 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/second/". -alias id "nat" = "cic:/matita/tests/first/nat.ind#xpointer(1/1)". -alias id "O" = "cic:/matita/tests/first/nat.ind#xpointer(1/1/1)". -alias id "eq" = "cic:/matita/tests/first/eq.ind#xpointer(1/1)". -alias id "refl" = "cic:/matita/tests/first/eq.ind#xpointer(1/1/1)". - -theorem ultrastupid : eq nat O O. -apply refl. -qed. - diff --git a/helm/matita/tests/simpl.ma b/helm/matita/tests/simpl.ma deleted file mode 100644 index 1001d2351..000000000 --- a/helm/matita/tests/simpl.ma +++ /dev/null @@ -1,51 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/simpl/". -include "coq.ma". - -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -alias id "plus" = "cic:/Coq/Init/Peano/plus.con". -alias id "S" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2)". -alias id "O" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1)". -alias id "not" = "cic:/Coq/Init/Logic/not.con". -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". -alias id "plus_comm" = "cic:/Coq/Arith/Plus/plus_comm.con". - -theorem a : - \forall A:Set. - \forall x,y : A. - not (x = y) \to not(y = x). -intros. -unfold not. (* simplify. *) -intro. apply H. -symmetry. -exact H1. -qed. - -theorem t: let f \def \lambda x,y. x y in f (\lambda x.S x) O = S O. - intros. simplify. change in \vdash (? ? (? %) ?) with O. - reflexivity. qed. - - -theorem X: \forall x:nat. let myplus \def plus x in myplus (S O) = S x. - intros. simplify. change in \vdash (? ? (% ?) ?) with (plus x). - -rewrite > plus_comm. reflexivity. qed. - -theorem R: \forall x:nat. let uno \def x + O in S O + uno = 1 + x. - intros. simplify. - change in \vdash (? ? (? %) ?) with (x + O). - rewrite > plus_comm. reflexivity. qed. - diff --git a/helm/matita/tests/test2.ma b/helm/matita/tests/test2.ma deleted file mode 100644 index 0ffdb8268..000000000 --- a/helm/matita/tests/test2.ma +++ /dev/null @@ -1,26 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/test2/". -include "coq.ma". - -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". -alias symbol "and" (instance 0) = "Coq's logical and". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -theorem a:\forall x:nat.x=x\land x=x. -intro. -split. -reflexivity. -reflexivity. -qed. diff --git a/helm/matita/tests/test3.ma b/helm/matita/tests/test3.ma deleted file mode 100644 index 98dc65c95..000000000 --- a/helm/matita/tests/test3.ma +++ /dev/null @@ -1,31 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/test3/". -include "coq.ma". - -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -theorem a:\forall x.x=x. -alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)". -[ exact nat. -| intro. reflexivity. -] -qed. -alias num (instance 0) = "natural number". -alias symbol "times" (instance 0) = "Coq's natural times". - -theorem b:\forall p:nat. p * 0=0. -intro. -auto. -qed. diff --git a/helm/matita/tests/test4.ma b/helm/matita/tests/test4.ma deleted file mode 100644 index d680378eb..000000000 --- a/helm/matita/tests/test4.ma +++ /dev/null @@ -1,38 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/test4/". -include "coq.ma". - - -(* commento che va nell'ast, ma non viene contato - come step perche' non e' un executable -*) - -alias num (instance 0) = "natural number". -alias symbol "eq" (instance 0) = "Coq's leibnitz's equality". -theorem a:0=0. - -(* nota *) -(** - - -apply Prop. -*) -apply cic:/Coq/Init/Logic/eq.ind#xpointer(1/1/1). - -(* commenti che non devono essere colorati perche' - non c'e' nulla di eseguibile dopo di loro -*) -qed. diff --git a/helm/matita/tests/third.ma b/helm/matita/tests/third.ma deleted file mode 100644 index 124cdc121..000000000 --- a/helm/matita/tests/third.ma +++ /dev/null @@ -1,24 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/tests/third/". -alias id "nat" = "cic:/matita/tests/first/nat.ind#xpointer(1/1)". -alias id "O" = "cic:/matita/tests/first/nat.ind#xpointer(1/1/1)". -alias id "eq" = "cic:/matita/tests/first/eq.ind#xpointer(1/1)". -alias id "ultrastupid" = "cic:/matita/tests/second/ultrastupid.con". - -theorem iperstupid : eq nat O O. -exact ultrastupid. -qed. - diff --git a/helm/matita/tests/unfold.ma b/helm/matita/tests/unfold.ma deleted file mode 100644 index d17e5a2da..000000000 --- a/helm/matita/tests/unfold.ma +++ /dev/null @@ -1,41 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -set "baseuri" "cic:/matita/unfold". - -include "coq.ma". - -alias symbol "plus" (instance 0) = "Coq's natural plus". -definition myplus \def \lambda x,y. x+y. - -alias id "S" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2)". -lemma lem: \forall n. S (n + n) = (S n) + n. - intro; reflexivity. -qed. - -theorem trivial: \forall n. S (myplus n n) = myplus (S n) n. - unfold myplus in \vdash (\forall _.(? ? ? %)). - intro. - unfold myplus. - rewrite > lem. - reflexivity. -qed. - -(* This test needs to parse "uno" in the context of the hypothesis H, - not in the context of the goal. *) -alias id "O" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1)". -theorem t: let uno \def S O in uno + uno = S uno \to uno=uno. - intros. unfold uno in H. - reflexivity. -qed. diff --git a/helm/metadata/.cvsignore b/helm/metadata/.cvsignore deleted file mode 100644 index 2cde8a0b2..000000000 --- a/helm/metadata/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -all_objects.txt -constants_and_variables.txt -fill_db.sql -inductive_types.txt -log -tmp diff --git a/helm/metadata/Makefile b/helm/metadata/Makefile deleted file mode 100644 index 1485dfdbf..000000000 --- a/helm/metadata/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -FILLDB=fill_db.sql -INDUCTIVETYPES=inductive_types.txt -CONSTANTSANDVARIABLES=constants_and_variables.txt -ALLOBJECTS=all_objects.txt -GETTERURL=http://mowgli.cs.unibo.it:58081 -DBCOMM=mysql -pbjIcRpru -u helmadmin mowgli -#DBCOMM=psql -q -U helm mowgli2 - -all: - @echo "try one of:" - @echo " make indexes" - @echo " make drop_tables" - @echo " make create_tables" - @echo " make $(FILLDB)" - @echo " make fill_db" - -$(FILLDB): - rm -f $(FILLDB) - time for i in `cat $(INDUCTIVETYPES)` ; do (cd tmp ; wget -t 1 -O downloaded.xml.gz "$(GETTERURL)/getxml?format=gz&uri=$$i") ; zcat tmp/downloaded.xml.gz > tmp/inductive_type.xml ; extractor/meta_ind $$i "tmp/inductive_type.xml" >> $(FILLDB) ; rm -f tmp/downloaded.xml.gz tmp/inductive_type.xml; done > log 2>&1 - time for i in `cat $(CONSTANTSANDVARIABLES)` ; do (cd tmp ; wget -t 1 -O downloaded.xml.gz "$(GETTERURL)/getxml?format=gz&uri=$$i" ; wget -t 1 -O downloaded_body.xml.gz "$(GETTERURL)/getxml?format=gz&uri=$$i.body"); zcat tmp/downloaded.xml.gz > tmp/type.xml ; zcat tmp/downloaded_body.xml.gz > tmp/body.xml ; extractor/meta $$i "tmp/body.xml" "tmp/type.xml" >> $(FILLDB) ; rm -f tmp/downloaded.xml.gz tmp/downloaded_body.xml.gz tmp/type.xml tmp/body.xml ; done > log 2>&1 - cat sql/fill_inconcl_aux.sql >> $@ - cat sql/fill_no_concl_hyp.sql >> $@ - -indexes: - wget "$(GETTERURL)/getalluris?format=txt" -O - | grep -v "\\.body$$" | grep -v "\\.types$$" | grep -v "\\.proof_tree$$" | sort > $(ALLOBJECTS) - cat $(ALLOBJECTS) | grep "\\.ind$$" > $(INDUCTIVETYPES) - cat $(ALLOBJECTS) | grep -v "\\.ind$$" > $(CONSTANTSANDVARIABLES) - -drop_tables: - #cat sql/drop_mowgli_tables.sql | $(DBCOMM) - cat sql/drop_mowgli_tables.mysql.sql | $(DBCOMM) - -create_tables: - #cat sql/create_mowgli_tables.sql | $(DBCOMM) - cat sql/create_mowgli_tables.mysql.sql | $(DBCOMM) - -fill_db: - cat $(FILLDB) | $(DBCOMM) - -.PHONY: all create_tables drop_tables fill_db indexes $(FILLDB) diff --git a/helm/metadata/README b/helm/metadata/README deleted file mode 100644 index 5e83286a2..000000000 --- a/helm/metadata/README +++ /dev/null @@ -1,11 +0,0 @@ -To generate the metadata and refill the DB: - -make indexes -make fill_db.sql -make drop_tables -make create_tables -make fill_db -cd dc -make drop_tables -make create_tables -make fill_db diff --git a/helm/metadata/dc/Makefile b/helm/metadata/dc/Makefile deleted file mode 100644 index c9a7c73d6..000000000 --- a/helm/metadata/dc/Makefile +++ /dev/null @@ -1,32 +0,0 @@ - -SQL_DB = mowgli -SQL_DIR = sql -SQL_HOST = localhost -SQL_PASSWORD = bjIcRpru -SQL_USER = helmadmin -DC_DIR = /projects/helm/library/dc/ - -SQL_ENGINE = \ - mysql -h $(SQL_HOST) -u $(SQL_USER) --password=$(SQL_PASSWORD) $(SQL_DB) - -all: - @echo "try one of:" - @echo " make connect" - @echo " make create_tables" - @echo " make fill_db" - @echo " make drop_tables" - -connect: - $(SQL_ENGINE) - -create_tables: - $(SQL_ENGINE) < $(SQL_DIR)/create_dc_tables.sql - -fill_db: - find $(DC_DIR) -name "*.xml" -exec ./fill_db.pl {} \; | $(SQL_ENGINE) - -drop_tables: - $(SQL_ENGINE) < $(SQL_DIR)/drop_dc_tables.sql - -.PHONY: all connect create_tables fill_db drop_tables - diff --git a/helm/metadata/dc/fill_db.pl b/helm/metadata/dc/fill_db.pl deleted file mode 100755 index fed21ee5a..000000000 --- a/helm/metadata/dc/fill_db.pl +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/perl -w -use strict; - -use XML::Parser; - -my $skipped = 0; -my $open = 0; -my $content = ""; -my $uri = ""; - -sub handle_start($$@) { - my ($expat, $element, @attrs) = @_; - if ($skipped == 1) { - $uri = $attrs[1]; - $uri =~ s/'/''/g; - } - if ($skipped < 2) { $skipped++ ; } - else { - $open++; - $content = ""; - } -} - -sub handle_end($$) { - my ($expat,$element) = @_; - $open--; - if ($open >= 0) { - $content =~ s/'/''/g; - $element =~ s/(\w+):(\w+)/$1$2/; - my $query = "INSERT INTO $element VALUES ('$content','$uri');"; - print $query, "\n"; - } -} - -sub handle_char($$) { - my ($expat,$char) = @_; - if ($open >= 1) { - chomp($char); - $char =~ s/ +/ /g; - $char =~ s/^ //g; - $char =~ s/ $//g; - $content .= $char; - } -} - -my $p = new XML::Parser( - Handlers => - { Start => \&handle_start, - End => \&handle_end, - Char => \&handle_char}); - -$p->parsefile($ARGV[0]); - diff --git a/helm/metadata/dc/sql/create_dc_tables.sql b/helm/metadata/dc/sql/create_dc_tables.sql deleted file mode 100644 index ca53c5b36..000000000 --- a/helm/metadata/dc/sql/create_dc_tables.sql +++ /dev/null @@ -1,58 +0,0 @@ - -create table dccreator (value varchar(255), uri varchar(255)); -create table dcdate (value varchar(255), uri varchar(255)); -create table dcdescription (value varchar(255), uri varchar(255)); -create table dcformat (value varchar(255), uri varchar(255)); -create table dcidentifier (value varchar(255), uri varchar(255)); -create table dclanguage (value varchar(255), uri varchar(255)); -create table dcpublisher (value varchar(255), uri varchar(255)); -create table dcqRelationType (value varchar(255), uri varchar(255)); -create table dcrelation (value varchar(255), uri varchar(255)); -create table dcrights (value varchar(255), uri varchar(255)); -create table dcsource (value varchar(255), uri varchar(255)); -create table dcsubject (value varchar(255), uri varchar(255)); -create table dctitle (value varchar(255), uri varchar(255)); -create table hthResourceFormat (value varchar(255), uri varchar(255)); -create table hthcontact (value varchar(255), uri varchar(255)); -create table hthfirstVersion (value varchar(255), uri varchar(255)); -create table hthinstitution (value varchar(255), uri varchar(255)); -create table hthmodified (value varchar(255), uri varchar(255)); - -create index dccreator_index on dccreator (value); -create index dcdate_index on dcdate (value); -create index dcdescription_index on dcdescription (value); -create index dcformat_index on dcformat (value); -create index dcidentifier_index on dcidentifier (value); -create index dclanguage_index on dclanguage (value); -create index dcpublisher_index on dcpublisher (value); -create index dcqRelationType_index on dcqRelationType (value); -create index dcrelation_index on dcrelation (value); -create index dcrights_index on dcrights (value); -create index dcsource_index on dcsource (value); -create index dcsubject_index on dcsubject (value); -create index dctitle_index on dctitle (value); -create index hthResourceFormat_index on hthResourceFormat (value); -create index hthcontact_index on hthcontact (value); -create index hthfirstVersion_index on hthfirstVersion (value); -create index hthinstitution_index on hthinstitution (value); -create index hthmodified_index on hthmodified (value); - -create index dccreator_rev_index on dccreator (uri); -create index dcdate_rev_index on dcdate (uri); -create index dcdescription_rev_index on dcdescription (uri); -create index dcformat_rev_index on dcformat (uri); -create index dcidentifier_rev_index on dcidentifier (uri); -create index dclanguage_rev_index on dclanguage (uri); -create index dcpublisher_rev_index on dcpublisher (uri); -create index dcqRelationType_rev_index on dcqRelationType (uri); -create index dcrelation_rev_index on dcrelation (uri); -create index dcrights_rev_index on dcrights (uri); -create index dcsource_rev_index on dcsource (uri); -create index dcsubject_rev_index on dcsubject (uri); -create index dctitle_rev_index on dctitle (uri); -create index hthResourceFormat_rev_index on hthResourceFormat (uri); -create index hthcontact_rev_index on hthcontact (uri); -create index hthfirstVersion_rev_index on hthfirstVersion (uri); -create index hthinstitution_rev_index on hthinstitution (uri); -create index hthmodified_rev_index on hthmodified (uri); - diff --git a/helm/metadata/dc/sql/drop_dc_tables.sql b/helm/metadata/dc/sql/drop_dc_tables.sql deleted file mode 100644 index d13a2a8ed..000000000 --- a/helm/metadata/dc/sql/drop_dc_tables.sql +++ /dev/null @@ -1,18 +0,0 @@ -drop table dccreator; -drop table dcdate; -drop table dcdescription; -drop table dcformat; -drop table dcidentifier; -drop table dclanguage; -drop table dcpublisher; -drop table dcqRelationType; -drop table dcrelation; -drop table dcrights; -drop table dcsource; -drop table dcsubject; -drop table dctitle; -drop table hthResourceFormat; -drop table hthcontact; -drop table hthfirstVersion; -drop table hthinstitution; -drop table hthmodified; diff --git a/helm/metadata/extractor/.cvsignore b/helm/metadata/extractor/.cvsignore deleted file mode 100644 index 1d5ca6be6..000000000 --- a/helm/metadata/extractor/.cvsignore +++ /dev/null @@ -1,4 +0,0 @@ -meta -meta_ind -lex.yy.c -lex.yy_ind.c diff --git a/helm/metadata/extractor/Makefile b/helm/metadata/extractor/Makefile deleted file mode 100644 index 4b6f01aa8..000000000 --- a/helm/metadata/extractor/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -CC = gcc -Wall - -all: meta meta_ind - -meta: lex.yy.o sthandler.o - $(CC) lex.yy.o sthandler.o -lpq -o meta - -meta_ind: lex.yy_ind.o sthandler.o - $(CC) lex.yy_ind.o sthandler.o -lpq -o meta_ind - -lex.yy.c: meta_lex.l sthandler.h - flex meta_lex.l - -lex.yy_ind.c: meta_lex_ind.l sthandler.h - flex -olex.yy_ind.c meta_lex_ind.l - -sthandler.o: sthandler.c sthandler.h - -lex.yy.o: lex.yy.c sthandler.h - $(CC) -c lex.yy.c - -lex.yy_ind.o: lex.yy_ind.c sthandler.h - $(CC) -c lex.yy_ind.c - -clean: - -rm -f *.o - -rm -f lex.yy.c lex.yy_ind.c - -rm -f meta meta_ind diff --git a/helm/metadata/extractor/README b/helm/metadata/extractor/README deleted file mode 100644 index 6c9fe0bcb..000000000 --- a/helm/metadata/extractor/README +++ /dev/null @@ -1,9 +0,0 @@ -Note: - - LetIn e Variabili con corpo: da pensarci (capita solamente una 30ina - di volte... per ora!) Per il momento ci mettiamo una pezza. - - Variabili: non consideriamo l'occorrenza di una variabile come una - vera occorrenza (perche' puo' essere istanziata). In ogni caso c'e' - l'attributo @params che fornisce questa informazione. - - META e IMPLICIT non trattati - - CAST non considerati ==> di default vado in ricorsione sia sul tipo - che sul corpo diff --git a/helm/metadata/extractor/meta_lex.l b/helm/metadata/extractor/meta_lex.l deleted file mode 100644 index c4c23e847..000000000 --- a/helm/metadata/extractor/meta_lex.l +++ /dev/null @@ -1,374 +0,0 @@ - /******************************************************************/ - /* Copyright (C) 2000, HELM Team */ - /* */ - /* This file is part of HELM, an Hypertextual, Electronic */ - /* Library of Mathematics, developed at the Computer Science */ - /* Department, University of Bologna, Italy. */ - /* */ - /* HELM is free software; you can redistribute it and/or */ - /* modify it under the terms of the GNU General Public License */ - /* as published by the Free Software Foundation; either version */ - /* 2 of the License, or (at your option) any later version. */ - /* */ - /* HELM is distributed in the hope that it will be useful, */ - /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ - /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ - /* GNU General Public License for more details. */ - /* */ - /* You should have received a copy of the GNU General Public */ - /* License along with HELM; if not, write to the Free Software */ - /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, */ - /* MA 02111-1307, USA. */ - /* */ - /* For details, see the HELM World-Wide-Web page, */ - /* http://cs.unibo.it/helm/. */ - /******************************************************************/ - - /***************************************************************/ - /* META_LEXAN */ - /* Automatic Metadata Extractor */ - /* First draft 11/12/2001, by Andrea Asperti */ - /* more bugs added by domenico lordi on mon 12/17/2001 */ - /***************************************************************/ - - /***************************************************************/ - /* 1. Inclusion of header files. */ - /***************************************************************/ - -%{ -#include -#include -#include -#include "sthandler.h" -%} - - /***************************************************************/ - /* 2. Constants and Variables Definitions */ - /***************************************************************/ - -%{ -#define NOWHERE 0 -#define CONST 1 -#define MUTIND 2 -#define MUTCONSTRUCT 3 -#define SORT 4 - -#define INBODY 0 -#define MAINHYP 1 -#define INHYP 2 -#define INCONCL 3 -#define MAINCONCL 4 -#define INTYPE 5 -#define NOTFOUND 6 - -#define HERE 0 -#define AFTER 1 - - -int where = NOWHERE; -int found = NOTFOUND; -int position = INBODY; -int first_child = HERE; -int skip = 0; // boolean to skip the insertion of a URI -int no_open_source = 0; -int spine_depth = 0; -int depth = 0; -int tmp_n; -char sep = '"'; -char *xpointer = "#xpointer(1/"; -char *uri; -char *tmp; - -void search(char *uri, int first_child, int position, int depth); -%} - - /***************************************************************/ - /* 3. Regular definitions. */ - /***************************************************************/ - -uri [^"]+ -digits [0-9]+ -value [^"]+ - - /***************************************************************/ - /* 4. Rules. */ - /***************************************************************/ - - -%% - -"]*">"(" "|\n)*""(" "|\n)*"" | -"" { - if (position == INHYP) - { - no_open_source--; - if (no_open_source == 0) - { - position = MAINHYP; - depth++; - first_child = HERE; - } - } - else if (position == MAINHYP) - { - position = INTYPE; - spine_depth++; - depth = 0; - first_child = HERE; - } - /* bug? first_child = HERE; */ - } - - -.|\n { - } - -" \n"); - exit(1); - } - - - /* initialize the symbol table */ - init_symbol_table(); - - // We process the body - if (!stat(argv[2],&buf)) - { - yyin = fopen(argv[2], "r"); - position = INBODY; - yylex(); - fclose(yyin); - } - - // We process the type - yyin = fopen(argv[3], "r"); - position = INTYPE; - first_child = HERE; - no_open_source = 0; - spine_depth = 0; - depth = 0; - yylex(); - fclose(yyin); - print_all(argv[1]); - poss = rindex(argv[1],'/'); - posd = rindex(argv[1],'.'); - name = (char *)malloc((posd - poss) * sizeof(char)); - strncpy(name, poss + 1, posd - poss - 1); - name[posd - poss - 1] = '\0'; - print_name(name,argv[1]); - free(name); - - return 0; -} - - -void search(uri,first_child,position,depth) -char *uri; -int first_child; -int position; -{ - if (position == MAINHYP) - { - if (first_child == HERE) - found = search_bucket(uri,MAINHYP,depth); - else - found = search_bucket(uri,INHYP,0); - } - else if (position == INCONCL) - { - if (first_child == HERE) - found = search_bucket(uri,MAINCONCL,depth); - else - found = search_bucket(uri,INCONCL,0); - } - - else - found = search_bucket(uri,position,depth); - /* - if (found == NOTFOUND) - fprintf(stderr,"here = %d, pos = %d, uri = %s\n", first_child,position, uri); */ -} -/* - (first_child == HERE) - { - if (position == MAINHYP) - found = search_bucket(uri,MAINHYP,depth); - else if (position == INCONCL) - found = search_bucket(uri,MAINCONCL,0); - else if (position == INHYP) - found = search_bucket(uri,INHYP,0); - if (found == NOTFOUND) - printf( "pos = %d, uri = %s\n", MAINCONCL, uri); - } - else if ((position == MAINHYP) && (first_child == AFTER)) - found = search_bucket(uri,INHYP,0); - else found = search_bucket(uri,position,0); - if (found == NOTFOUND) - printf( "pos = %d, uri = %s\n", position, uri); - } */ - -int yywrap() { - return 1; - } - - - - diff --git a/helm/metadata/extractor/meta_lex_ind.l b/helm/metadata/extractor/meta_lex_ind.l deleted file mode 100644 index 9f474bf85..000000000 --- a/helm/metadata/extractor/meta_lex_ind.l +++ /dev/null @@ -1,375 +0,0 @@ - /******************************************************************/ - /* Copyright (C) 2000, HELM Team */ - /* */ - /* This file is part of HELM, an Hypertextual, Electronic */ - /* Library of Mathematics, developed at the Computer Science */ - /* Department, University of Bologna, Italy. */ - /* */ - /* HELM is free software; you can redistribute it and/or */ - /* modify it under the terms of the GNU General Public License */ - /* as published by the Free Software Foundation; either version */ - /* 2 of the License, or (at your option) any later version. */ - /* */ - /* HELM is distributed in the hope that it will be useful, */ - /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ - /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ - /* GNU General Public License for more details. */ - /* */ - /* You should have received a copy of the GNU General Public */ - /* License along with HELM; if not, write to the Free Software */ - /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, */ - /* MA 02111-1307, USA. */ - /* */ - /* For details, see the HELM World-Wide-Web page, */ - /* http://cs.unibo.it/helm/. */ - /******************************************************************/ - - /***************************************************************/ - /* META_LEXAN */ - /* Automatic Metadata Extractor */ - /* First draft 11/12/2001, by Andrea Asperti */ - /* more bugs added by domenico lordi on mon 12/17/2001 */ - /***************************************************************/ - - /***************************************************************/ - /* 1. Inclusion of header files. */ - /***************************************************************/ - -%{ -#include -#include -#include -#include "sthandler.h" -%} - - /***************************************************************/ - /* 2. Constants and Variables Definitions */ - /***************************************************************/ - -%{ -#define NOWHERE 0 -#define CONST 1 -#define MUTIND 2 -#define MUTCONSTRUCT 3 -#define SORT 4 - -#define INBODY 0 -#define MAINHYP 1 -#define INHYP 2 -#define INCONCL 3 -#define MAINCONCL 4 -#define INTYPE 5 -#define NOTFOUND 6 - -#define HERE 0 -#define AFTER 1 - - -int where = NOWHERE; -int found = NOTFOUND; -int position = INBODY; -int first_child = HERE; -int skip = 0; // boolean to skip the insertion of a URI -int no_open_source =0; -int spine_depth = 0; -int depth = 0; -int tmp_n; -int inductive_type = 0; -int constructor = 0; -int deep_type = 0; -char sep = '"'; -char *xpointer = "#xpointer(1/"; -char *uri; -char *tmp; -char *source_uri; -char *source_uri_prefix; -int waiting_for_name = 0; - -void search(char *uri, int first_child, int position, int depth); -%} - - /***************************************************************/ - /* 3. Regular definitions. */ - /***************************************************************/ - -uri [^"]+ -digits [0-9]+ -value [^"]+ -id [a-zA-Z]([-_'a-zA-Z0-9])* - - /***************************************************************/ - /* 4. Rules. */ - /***************************************************************/ - - -%% - -"" { - print_all(source_uri); - /* print_file(); */ - } - -"" { print_all(source_uri); - /* print_file(); */ - } - -"" | -"" { - if (position == INHYP) - { - no_open_source--; - if (no_open_source == 0) - { - position = MAINHYP; - depth++; - first_child = HERE; - } - } - else if (position == MAINHYP) - { - position = INTYPE; - spine_depth++; - depth = 0; - first_child = HERE; - } - } - - -.|\n { - } - -" \n"); - exit(1); - } - - source_uri = malloc((sizeof('a')*2000)); - source_uri_prefix=argv[1]; - /* fprintf(stderr,"qua"); */ - yyin = fopen(argv[2], "r"); - yylex(); - - return 0; -} - -void search(uri,first_child,position,depth) -char *uri; -int first_child; -int position; -{ - if (position == MAINHYP) - { - if (first_child == HERE) - found = search_bucket(uri,MAINHYP,depth); - else - found = search_bucket(uri,INHYP,0); - } - else if (position == INCONCL) - { - if (first_child == HERE) - found = search_bucket(uri,MAINCONCL,depth); - else - found = search_bucket(uri,INCONCL,0); - } - - else - found = search_bucket(uri,position,depth); - /* if (found == NOTFOUND) - printf( "pos = %d, uri = %s\n", position, uri); */ -} - - -int yywrap() { - return 1; - } - - - - diff --git a/helm/metadata/extractor/sthandler.c b/helm/metadata/extractor/sthandler.c deleted file mode 100644 index 87e0d49c7..000000000 --- a/helm/metadata/extractor/sthandler.c +++ /dev/null @@ -1,475 +0,0 @@ -/*********************************************************************/ -/* Copyright (C) 2000, HELM Team */ -/* */ -/* This file is part of HELM, an Hypertextual, Electronic */ -/* Library of Mathematics, developed at the Computer Science */ -/* Department, University of Bologna, Italy. */ -/* */ -/* HELM is free software; you can redistribute it and/or */ -/* modify it under the terms of the GNU General Public License */ -/* as published by the Free Software Foundation; either version 2 */ -/* of the License, or (at your option) any later version. */ -/* */ -/* HELM is distributed in the hope that it will be useful, */ -/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ -/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ -/* GNU General Public License for more details. */ -/* */ -/* You should have received a copy of the GNU General Public License */ -/* along with HELM; if not, write to the Free Software */ -/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, */ -/* MA 02111-1307, USA. */ -/* */ -/* For details, see the HELM World-Wide-Web page, */ -/* http://cs.unibo.it/helm/. */ - /*********************************************************************/ - -/****************************************************************/ -/* STHANDLER.C */ -/****************************************************************/ -/* This module supplies routines for symbol table handling. */ -/* - init_symbol_table(): it initializes the symbol table */ -/* to void. */ -/* - search_bucket(): it searches the symbol table for the */ -/* bucket containing a given identifier, and */ -/* inserts it if it is not present; */ -/****************************************************************/ -/* First draft 11/12/2001, by Andrea Asperti */ -/****************************************************************/ - -/****************************************************************/ -/* 1. Inclusion of header files. */ -/****************************************************************/ - -#include -#include -#include - -/****************************************************************/ -/* 2. Declarations */ -/****************************************************************/ - - -#define DICTSIZE 211 -#define HASH1 4 -#define HASH2 0xf0000000 -#define HASH3 28 -#define EOS '\0' - -#define INBODY 0 -#define MAINHYP 1 -#define INHYP 2 -#define INCONCL 3 -#define MAINCONCL 4 -#define INTYPE 5 -#define NOTFOUND 6 - -/****************************************************************/ -/* 3. Types. */ -/****************************************************************/ - -struct int_list { - int val; - struct int_list *next; - }; - -struct st_bucket { - char *id; - /* identifier */ - int main_depth; - struct int_list *depths; - struct st_bucket *next_st_bucket; - /* next bucket in the list */ - struct st_bucket *all_next; - /* all buckets in symbol - table are linked together */ - int pos[5]; - - }; - -struct st_bucket *dictionary[DICTSIZE]; - /* pointers to bucket lists */ - -/****************************************************************/ -/* 4. Local functions. */ -/****************************************************************/ -struct int_list *add(struct int_list *,int); -void allocate_bucket(struct st_bucket **st, char *id, int where); -void print_mainhyp(char *about, char *uri,struct int_list *l); -void print_mainconcl(char *about, char *uri, int depth); -void move_bucket(struct st_bucket *st, int dict_index); -void print_one(char *about, char *uri, int pos); -int hash_pjw(char *id); - -/* This function is copied from the file fe-exec.c of PostgreSQL. */ -/* Copyright (c) 1996-2003, PostgreSQL Global Development Group */ -/* Copyright (c) 1994, Regents of the University of California */ -size_t -PQescapeString(char *to, const char *from, size_t length) -{ - const char *source = from; - char *target = to; - size_t remaining = length; - - while (remaining > 0 && *source != '\0') - { - switch (*source) - { - case '\\': - *target++ = '\\'; - *target++ = '\\'; - break; - - case '\'': - *target++ = '\''; - *target++ = '\''; - break; - - default: - *target++ = *source; - break; - } - source++; - remaining--; - } - - /* Write the terminating NUL character. */ - *target = '\0'; - - return target - to; -} - - -/****************************************************************/ -/* 5. Definitions of functions to be exported. */ -/****************************************************************/ - -struct st_bucket *all; - - /* The following function initializes the symbol table to NULL */ -void init_symbol_table() -{ - int i; - - /* initialize the dictionary */ - for (i = 0; i < DICTSIZE; i++) - dictionary[i] = NULL; - all = NULL; -} - - /* The following function searches the symbol table for an identifier */ - /* and inserts it if it is not present. */ - /* The bucket associated with the given identifier */ - /* becomes the first one in its list. */ - -int search_bucket(id, where, depth) - char *id; - /* identifier */ - int where; - int depth; -{ - int dict_index; - /* value returned by the */ - /* hash function */ - struct st_bucket - *prev, - *curr; - - struct st_bucket *st; - - /* apply the hash function */ - dict_index = hash_pjw(id); - /* fprintf(stderr,"%d\n", dict_index); */ - - /* scan the bucket list indicated by the hash function */ - prev = curr = dictionary[dict_index]; - while ((curr != NULL) && (strcmp(id, curr->id))) - { - prev = curr; - curr = curr->next_st_bucket; - } - if (curr == NULL) - /* the identifier is not in the list */ - { - allocate_bucket(&st,id,where); - if (where == MAINCONCL) - st->main_depth = depth; - else if (where == MAINHYP) - st->depths = add(st->depths,depth); - move_bucket(st,dict_index); - return NOTFOUND; - } - else - /* - printf("uno=%s\n", id); - printf("st=%s\n", curr->id); fflush(stdout) */ - - /* the identifier is already in the list */ - { - /* st = curr; */ - curr->pos[where] = 1; - if (where >= 1) - curr->pos[INBODY] = 0; /* it will never be set again to 1 */ - if (where == MAINHYP) - curr->depths=add(curr->depths,depth); - else if (where == MAINCONCL) - curr->main_depth = depth; - if (prev != curr) - /* the identifier is not in the first position */ - { - prev->next_st_bucket = curr->next_st_bucket; - move_bucket(curr,dict_index); - }; - return where; - } -} - -void print_all(about,conn) - char *about; -{ - - int i; - struct st_bucket *curr; - curr = all; - while (curr != NULL) - { - for (i = 0; i < 5; ++i) - if ((curr->pos[i]) == 1) - { - if (i == MAINHYP) - print_mainhyp(about,curr->id,curr->depths); - else if (i == MAINCONCL) - print_mainconcl(about,curr->id,curr->main_depth); - else - print_one(about,curr->id,i); - } - curr = curr->all_next; - } -} - -void print_name(char *name, char *uri) -{ - size_t len = strlen(uri) + 1; - char *quri = malloc (sizeof(char) * len * 2); - PQescapeString(quri,uri,len); - len = strlen(name) + 1; - char *qname = malloc (sizeof(char) * len * 2); - PQescapeString(qname,name,len); - printf("INSERT INTO objectName VALUES ('%s', '%s');\n",quri,qname); - free(quri); - free(qname); -} - -/****************************************************************/ -/* 5. Definitions of functions local to the module. */ -/****************************************************************/ - -struct int_list *add(l,m) - struct int_list *l; - int m; -{ - struct int_list *curr; - /* scan the list looking for m */ - curr = l; - while ((curr != NULL) && (m != (curr->val))) - curr = curr->next; - if (curr == NULL) - /* m is not in the list */ - { - curr = (struct int_list *)malloc(sizeof(struct int_list)); - curr->val = m; - curr->next = l; - return curr; - } - else - return l; - -} - -void print_mainhyp(about,uri,l) - char *about; - char *uri; - struct int_list *l; -{ - struct int_list *curr; - curr = l; - if (!strcmp(uri,"Rel")) - { - /* scan the list */ - while (curr != NULL) - { - size_t len = strlen(about) + 1; - char *qabout = malloc (sizeof(char) * len * 2); - PQescapeString(qabout,about,len); - printf("INSERT INTO refRel VALUES ('%s', 'http://www.cs.unibo.it/helm/schemas/schema-helm#MainHypothesis', %d);\n",qabout,curr->val); - free(qabout); - curr = curr->next; - } - } - else if ((!strcmp(uri,"Prop")) || (!strcmp(uri,"Type")) || - (!strcmp(uri,"Set"))) - { - /* scan the list */ - while (curr != NULL) - { - size_t len = strlen(about) + 1; - char *qabout = malloc (sizeof(char) * len * 2); - PQescapeString(qabout,about,len); - printf("INSERT INTO refSort VALUES ('%s', 'http://www.cs.unibo.it/helm/schemas/schema-helm#MainHypothesis', %d, '%s');\n",qabout,curr->val,uri); - free(qabout); - curr = curr->next; - } - } - else - { - /* scan the list */ - while (curr != NULL) - { - size_t len = strlen(about) + 1; - char *qabout = malloc (sizeof(char) * len * 2); - char *quri; - PQescapeString(qabout,about,len); - len = strlen(uri) + 1; - quri = malloc (sizeof(char) * len * 2); - PQescapeString(quri,uri,len); - printf("INSERT INTO refObj VALUES ('%s', '%s', 'http://www.cs.unibo.it/helm/schemas/schema-helm#MainHypothesis', %d);\n",qabout,quri,curr->val); - free(qabout); - free(quri); - curr = curr->next; - } - } -} - -void print_mainconcl(about,uri,depth) - char *about; - char *uri; - int depth; - -{ - /* fprintf(stderr,"about = %s\n",about); */ - if (!strcmp(uri,"Rel")) - { - size_t len = strlen(about) + 1; - char *qabout = malloc (sizeof(char) * len * 2); - PQescapeString(qabout,about,len); - printf("INSERT INTO refRel VALUES ('%s', 'http://www.cs.unibo.it/helm/schemas/schema-helm#MainConclusion', %d);\n",qabout,depth); - free(qabout); - } - else if ((!strcmp(uri,"Prop")) || (!strcmp(uri,"Type")) || - (!strcmp(uri,"Set"))) - { - size_t len = strlen(about) + 1; - char *qabout = malloc (sizeof(char) * len * 2); - PQescapeString(qabout,about,len); - printf("INSERT INTO refSort VALUES ('%s', 'http://www.cs.unibo.it/helm/schemas/schema-helm#MainConclusion', %d, '%s');\n",qabout,depth,uri); - free(qabout); - } - else - { - size_t len = strlen(about) + 1; - char *qabout = malloc (sizeof(char) * len * 2); - char *quri; - PQescapeString(qabout,about,len); - len = strlen(uri) + 1; - quri = malloc (sizeof(char) * len * 2); - PQescapeString(quri,uri,len); - printf("INSERT INTO refObj VALUES ('%s', '%s','http://www.cs.unibo.it/helm/schemas/schema-helm#MainConclusion', %d);\n",qabout,quri,depth); - free(qabout); - free(quri); - } -} - -// dome: cambiata per usare il modello con position -void print_one(about,uri,pos) - char *about, - *uri; - int pos; -{ - char *position = (char *)malloc((sizeof('a')*20)); - size_t len = strlen(about) + 1; - char *qabout = malloc (sizeof(char) * len * 2); - char *quri; - PQescapeString(qabout,about,len); - len = strlen(uri) + 1; - quri = malloc (sizeof(char) * len * 2); - PQescapeString(quri,uri,len); - if (pos == INBODY) - position="InBody"; - else if (pos == MAINHYP) - position="MainHypothesis"; /* This should never happen */ - else if (pos == INHYP) - position="InHypothesis"; - else if (pos == INCONCL) - position="InConclusion"; - else if (pos == MAINCONCL) - position="MainConclusion"; /* This should never happen */ - printf("INSERT INTO refObj VALUES ('%s', '%s', \ - 'http://www.cs.unibo.it/helm/schemas/schema-helm#%s', NULL);\n",qabout,quri,position); - free(qabout); - free(quri); -} - - /* The following function allocates a bucket for an identifier. */ -void allocate_bucket(st, id, where) - struct st_bucket - **st; - /* pointer to the bucket to be */ - /* allocated */ - char *id; - /* identifier */ - int where; -{ - int i; - - *st = (struct st_bucket *)malloc(sizeof(struct st_bucket)); - (*st)->id = (char *)malloc(sizeof('a')*(strlen(id) + 1)); - strcpy((*st)->id,id); - (*st)->main_depth = 0; - (*st)->depths = NULL; - (*st)->next_st_bucket = NULL; - (*st)->all_next = all; - all = *st; - for (i = 0; i < 5; ++i) - (*st)->pos[i] = 0; - (*st)->pos[where] = 1; -} - - /* The following function moves a bucket to the head of the */ - /* list in which it lies. */ -void move_bucket(st, dict_index) - struct st_bucket - *st; - /* pointer to the bucket to */ - /* be moved */ - int dict_index; - /* index corresponding to */ - /* the list in which the */ - /* bucket lies */ -{ - st->next_st_bucket = dictionary[dict_index]; - dictionary[dict_index] = st; -} - - /* The following function implements Weinberger's hash function. */ -int -hash_pjw(id) - char *id; - /* identifier to be hashed */ -{ - unsigned h, - g; - - for (h = 0; *id != EOS; id++) - { - h = (h << HASH1) + (*id); - if ((g = h) & HASH2) - h = h ^ (g >> HASH3) ^ g; - } - return(h % DICTSIZE); -} - - - - - - diff --git a/helm/metadata/extractor/sthandler.h b/helm/metadata/extractor/sthandler.h deleted file mode 100644 index f4e8284d5..000000000 --- a/helm/metadata/extractor/sthandler.h +++ /dev/null @@ -1,9 +0,0 @@ -/****************************************************************/ -/* STHANDLER.H */ -/****************************************************************/ - - -extern void init_symbol_table(); -extern void print_all(char *); -extern void print_name(char *, char *); -extern int search_bucket(char *, int, int); diff --git a/helm/metadata/extractor/sthandler_ind.c b/helm/metadata/extractor/sthandler_ind.c deleted file mode 100644 index ee035ef2a..000000000 --- a/helm/metadata/extractor/sthandler_ind.c +++ /dev/null @@ -1,424 +0,0 @@ -/*********************************************************************/ -/* Copyright (C) 2000, HELM Team */ -/* */ -/* This file is part of HELM, an Hypertextual, Electronic */ -/* Library of Mathematics, developed at the Computer Science */ -/* Department, University of Bologna, Italy. */ -/* */ -/* HELM is free software; you can redistribute it and/or */ -/* modify it under the terms of the GNU General Public License */ -/* as published by the Free Software Foundation; either version 2 */ -/* of the License, or (at your option) any later version. */ -/* */ -/* HELM is distributed in the hope that it will be useful, */ -/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ -/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ -/* GNU General Public License for more details. */ -/* */ -/* You should have received a copy of the GNU General Public License */ -/* along with HELM; if not, write to the Free Software */ -/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, */ -/* MA 02111-1307, USA. */ -/* */ -/* For details, see the HELM World-Wide-Web page, */ -/* http://cs.unibo.it/helm/. */ - /*********************************************************************/ - -/****************************************************************/ -/* STHANDLER.C */ -/****************************************************************/ -/* This module supplies routines for symbol table handling. */ -/* - init_symbol_table(): it initializes the symbol table */ -/* to void. */ -/* - search_bucket(): it searches the symbol table for the */ -/* bucket containing a given identifier, and */ -/* inserts it if it is not present; */ -/****************************************************************/ -/* First draft 11/12/2001, by Andrea Asperti */ -/****************************************************************/ - -/****************************************************************/ -/* 1. Inclusion of header files. */ -/****************************************************************/ - -#include -#include - -/****************************************************************/ -/* 2. Declarations */ -/****************************************************************/ - - -#define DICTSIZE 211 -#define HASH1 4 -#define HASH2 0xf0000000 -#define HASH3 24 -#define EOS '\0' - -#define INBODY 0 -#define MAINHYP 1 -#define INHYP 2 -#define INCONCL 3 -#define MAINCONCL 4 -#define INTYPE 5 -#define NOTFOUND 6 - -/****************************************************************/ -/* 3. Types. */ -/****************************************************************/ - -struct int_list { - int val; - struct int_list *next; - }; - -struct st_bucket { - char *id; - /* identifier */ - int main_depth; - struct int_list *depths; - struct st_bucket *next_st_bucket; - /* next bucket in the list */ - struct st_bucket *all_next; - /* all buckets in symbol - table are linked together */ - int pos[5]; - - }; - -struct st_bucket *dictionary[DICTSIZE]; - /* pointers to bucket lists */ - -/****************************************************************/ -/* 4. Local functions. */ -/****************************************************************/ -struct int_list *add(struct int_list *,int); -int hash_pjw(char *id); - -/****************************************************************/ -/* 5. Definitions of functions to be exported. */ -/****************************************************************/ - -struct st_bucket *all; - - /* The following function initializes the symbol table to NULL */ -void init_symbol_table() -{ - struct st_bucket *st; - int i; - - /* initialize the dictionary */ - for (i = 0; i < DICTSIZE; i++) - dictionary[i] = NULL; - all = NULL; -} - - /* The following function searches the symbol table for an identifier */ - /* and inserts it if it is not present. - /* The bucket associated with the given identifier */ - /* becomes the first one in its list. */ - -search_bucket(id, where, depth) - char *id; - /* identifier */ - int where; - int depth; -{ - int dict_index; - /* value returned by the */ - /* hash function */ - struct st_bucket - *prev, - *curr; - - struct st_bucket *st; - - /* apply the hash function */ - dict_index = hash_pjw(id); - /* fprintf(stderr,"%d\n", dict_index); fflush(stdout); */ - - /* scan the bucket list indicated by the hash function */ - prev = curr = dictionary[dict_index]; - while ((curr != NULL) && (strcmp(id, curr->id))) - { - prev = curr; - curr = curr->next_st_bucket; - } - if (curr == NULL) - /* the identifier is not in the list */ - { - allocate_bucket(&st,id,where); - if (where == MAINCONCL) - st->main_depth = depth; - else if (where == MAINHYP) - st->depths = add(st->depths,depth); - move_bucket(st,dict_index); - return NOTFOUND; - } - else - /* - fprintf(stderr,"uno=%s\n", id); - fprintf(stderr,"st=%s\n", curr->id); fflush(stdout) */ - - /* the identifier is already in the list */ - { - /* st = curr; */ - curr->pos[where] = 1; - if (where >= 1) - curr->pos[INBODY] = 0; /* it will never be set again to 1 */ - if (where == MAINHYP) - curr->depths=add(curr->depths,depth); - else if (where == MAINCONCL) - curr->main_depth = depth; - if (prev != curr) - /* the identifier is not in the first position */ - { - prev->next_st_bucket = curr->next_st_bucket; - move_bucket(curr, - dict_index); - }; - return where; - } -} - -print_all(about,out,outrel,outsort) - char *about; - FILE *out, - *outrel, - *outsort; -{ - - int i; - struct st_bucket *curr; - curr = all; - while (curr != NULL) - { - for (i = 0; i < 5; ++i) - if ((curr->pos[i]) == 1) - { - if (i == MAINHYP) - print_mainhyp(about,out,outrel,outsort,curr->id,curr->depths); - else if (i == MAINCONCL) - print_mainconcl(about,out,outrel,outsort,curr->id,curr->main_depth); - else - print_one(out,curr->id,i); - } - curr = curr->all_next; - } -} - - -/****************************************************************/ -/* 5. Definitions of functions local to the module. */ -/****************************************************************/ - -struct int_list *add(l,m) - struct int_list *l; - int m; -{ - struct int_list *curr; - /* scan the list looking for m */ - curr = l; - while ((curr != NULL) && (m != (curr->val))) - curr = curr->next; - if (curr == NULL) - /* m is not in the list */ - { - curr = (struct int_list *)malloc(sizeof(struct int_list)); - curr->val = m; - curr->next = l; - return curr; - } - else - return l; - -} - -print_mainhyp(about,out,outrel,outsort,uri,l) - char *about; - FILE *out, - *outrel, - *outsort; - char *uri; - struct int_list *l; -{ - struct int_list *curr; - curr = l; - if (!strcmp(uri,"Rel")) - { - /* scan the list */ - while (curr != NULL) - { - fprintf(outrel,"\t\n"); - fprintf(outrel,"\t\t"); - fprintf(outrel,"\n\t\t\t\t"); - fprintf(outrel,"\n\t\t\t\t%d",curr->val); - fprintf(outrel,"\n\t\t\n"); - fprintf(outrel,"\t\n"); - curr = curr->next; - } - } - else if ((!strcmp(uri,"Prop")) || (!strcmp(uri,"Type")) || - (!strcmp(uri,"Set"))) - { - /* scan the list */ - while (curr != NULL) - { - fprintf(outsort,"\t\n"); - fprintf(outsort,"\t\t"); - fprintf(outsort,"\n\t\t\t\t"); - fprintf(outsort,"\n\t\t\t\t",uri); - fprintf(outsort,"\n\t\t\t\t%d",curr->val); - fprintf(outsort,"\n\t\t\n"); - fprintf(outsort,"\t\n"); - curr = curr->next; - } - } - else - { - /* scan the list */ - while (curr != NULL) - { - fprintf(out,"\t\t"); - fprintf(out,"\n\t\t\t\t"); - fprintf(out,"\n\t\t\t\t%d",curr->val); - fprintf(out,"\n\t\t\t\t",uri); - fprintf(out,"\n\t\t\n"); - curr = curr->next; - } - } -} - -print_mainconcl(about,out,outrel,outsort,uri,depth) - char *about; - FILE *out, - *outrel, - *outsort; - char *uri; - int depth; - -{ - if (!strcmp(uri,"Rel")) - { - fprintf(outrel,"\t\n"); - fprintf(outrel,"\t\t"); - fprintf(outrel,"\n\t\t\t\t"); - fprintf(outrel,"\n\t\t\t\t%d",depth); - fprintf(outrel,"\n\t\t\n"); - fprintf(outrel,"\t\n"); - } - else if ((!strcmp(uri,"Prop")) || (!strcmp(uri,"Type")) || - (!strcmp(uri,"Set"))) - { - fprintf(outsort,"\t\n"); - fprintf(outsort,"\t\t"); - fprintf(outsort,"\n\t\t\t\t"); - fprintf(outsort,"\n\t\t\t\t",uri); - fprintf(outsort,"\n\t\t\t\t%d",depth); - fprintf(outsort,"\n\t\t\n"); - fprintf(outsort,"\t\n"); - } - else - { - fprintf(out,"\t\t"); - fprintf(out,"\n\t\t\t\t"); - fprintf(out,"\n\t\t\t\t%d",depth); - fprintf(out,"\n\t\t\t\t",uri); - fprintf(out,"\n\t\t\n"); - } -} - -// dome: cambiata per usare il modello con position -print_one(out,uri,pos) - FILE *out; - char *uri; - int pos; -{ - fprintf(out,"\t\t"); - fprintf(out,"\n\t\t\t\t\n\t\t\t\t\n\t\t\n", uri); - -} - - /* The following function allocates a bucket for an identifier. */ -allocate_bucket(st, id, where) - struct st_bucket - **st; - /* pointer to the bucket to be */ - /* allocated */ - char *id; - /* identifier */ - int where; -{ - int i; - - *st = (struct st_bucket *)malloc(sizeof(struct st_bucket)); - (*st)->id = (char *)malloc(sizeof('a')*(strlen(id) + 1)); - strcpy((*st)->id,id); - (*st)->main_depth = 0; - (*st)->depths = NULL; - (*st)->next_st_bucket = NULL; - (*st)->all_next = all; - all = *st; - for (i = 0; i < 5; ++i) - (*st)->pos[i] = 0; - (*st)->pos[where] = 1; -} - - /* The following function moves a bucket to the head of the */ - /* list in which it lies. */ -move_bucket(st, dict_index) - struct st_bucket - *st; - /* pointer to the bucket to */ - /* be moved */ - int dict_index; - /* index corresponding to */ - /* the list in which the */ - /* bucket lies */ -{ - st->next_st_bucket = dictionary[dict_index]; - dictionary[dict_index] = st; -} - - /* The following function implements Weinberger's hash function. */ -int -hash_pjw(id) - char *id; - /* identifier to be hashed */ -{ - unsigned h, - g; - - for (h = 0; *id != EOS; id++) - { - h = (h << HASH1) + (*id); - if (g = h & HASH2) - h = h ^ (g >> HASH3) ^ g; - } - return(h % DICTSIZE); -} - - - - - - diff --git a/helm/metadata/extractor/sthandler_ind.h b/helm/metadata/extractor/sthandler_ind.h deleted file mode 100644 index 2536b0f60..000000000 --- a/helm/metadata/extractor/sthandler_ind.h +++ /dev/null @@ -1,8 +0,0 @@ -/****************************************************************/ -/* STHANDLER.H */ -/****************************************************************/ - - -extern void init_symbol_table(); -extern void print_all(char *, FILE *, FILE *, FILE *); -extern int search_bucket(char *, int, int); diff --git a/helm/metadata/sql/create_mowgli_tables.mysql.sql b/helm/metadata/sql/create_mowgli_tables.mysql.sql deleted file mode 100644 index 228e787b8..000000000 --- a/helm/metadata/sql/create_mowgli_tables.mysql.sql +++ /dev/null @@ -1,61 +0,0 @@ - -CREATE TABLE refObj ( - source varchar(255) binary not null, - h_occurrence varchar(255) binary not null, - h_position varchar(255) binary not null, - h_depth integer -); -CREATE TABLE refSort ( - source varchar(255) binary not null, - h_position varchar(255) binary not null, - h_depth integer not null, - h_sort varchar(255) binary not null -); -CREATE TABLE refRel ( - source varchar(255) binary not null, - h_position varchar(255) binary not null, - h_depth integer not null -); -CREATE TABLE objectName ( - source varchar(255) binary not null, - value varchar(255) binary not null -); -CREATE TABLE no_inconcl_aux ( - source varchar(255) binary unique not null, - no smallint(6) not null -); -CREATE TABLE no_concl_hyp ( - source varchar(255) binary unique not null, - no smallint(6) not null -); -CREATE TABLE no_hyp ( - source varchar(255) binary unique not null, - no smallint(6) not null -); -CREATE TABLE hits ( - source varchar(255) binary not null, - no integer not null -); -CREATE TABLE count ( - source varchar(255) binary unique not null, - conclusion smallint(6) not null, - hypothesis smallint(6) not null, - statement smallint(6) not null -); - -CREATE INDEX refObj_source ON refObj (source); -CREATE INDEX refObj_target ON refObj (h_occurrence); -CREATE INDEX refObj_position ON refObj (h_position); -CREATE INDEX refSort_source ON refSort (source); -CREATE INDEX objectName_value ON objectName (value); -CREATE INDEX no_inconcl_aux_source ON no_inconcl_aux (source); -CREATE INDEX no_inconcl_aux_no ON no_inconcl_aux (no); -CREATE INDEX no_concl_hyp_source ON no_concl_hyp (source); -CREATE INDEX no_concl_hyp_no ON no_concl_hyp (no); -CREATE INDEX no_hyp_no ON no_hyp (no); -CREATE INDEX no_hyp_source ON no_hyp (source); -CREATE INDEX owners_owner ON owners (owner); -CREATE INDEX owners_source ON owners (source); -CREATE INDEX hits_source ON hits (source); -CREATE INDEX hits_no ON hits (source); - diff --git a/helm/metadata/sql/create_mowgli_tables.sql b/helm/metadata/sql/create_mowgli_tables.sql deleted file mode 100644 index 2719f43a9..000000000 --- a/helm/metadata/sql/create_mowgli_tables.sql +++ /dev/null @@ -1,29 +0,0 @@ - -CREATE TABLE refObj ( - source varchar(255), - h_occurrence varchar(255), - h_position varchar(255), - h_depth integer -); -CREATE TABLE refSort ( - source varchar(255), - h_position varchar(255), - h_depth integer, - h_sort varchar(255) -); -CREATE TABLE refRel ( - source varchar(255), - h_position varchar(255), - h_depth integer -); -CREATE TABLE objectName ( - source varchar(255), - value varchar(255) -); - -CREATE INDEX refObj_source ON refObj (source); -CREATE INDEX refObj_target ON refObj (h_occurrence); -CREATE INDEX refObj_position ON refObj (h_position); -CREATE INDEX refSort_source ON refSort (source); -CREATE INDEX objectName_value ON objectName (value); - diff --git a/helm/metadata/sql/drop_mowgli_tables.mysql.sql b/helm/metadata/sql/drop_mowgli_tables.mysql.sql deleted file mode 100644 index 2cc87e5fd..000000000 --- a/helm/metadata/sql/drop_mowgli_tables.mysql.sql +++ /dev/null @@ -1,9 +0,0 @@ -DROP TABLE refObj; -DROP TABLE refSort; -DROP TABLE refRel; -DROP TABLE objectName; -DROP TABLE no_inconcl_aux; -DROP TABLE no_concl_hyp; -DROP TABLE no_hyp; -DROP TABLE owners; -DROP TABLE count; diff --git a/helm/metadata/sql/drop_mowgli_tables.sql b/helm/metadata/sql/drop_mowgli_tables.sql deleted file mode 100644 index 070183db1..000000000 --- a/helm/metadata/sql/drop_mowgli_tables.sql +++ /dev/null @@ -1,6 +0,0 @@ -DROP TABLE refObj; -DROP TABLE refSort; -DROP TABLE refRel; -DROP TABLE objectName; -DROP TABLE no_inconcl_aux; -DROP TABLE no_concl_hyp; diff --git a/helm/metadata/sql/fill_all_derived.sql b/helm/metadata/sql/fill_all_derived.sql deleted file mode 100644 index 708015b9a..000000000 --- a/helm/metadata/sql/fill_all_derived.sql +++ /dev/null @@ -1,64 +0,0 @@ -CREATE TABLE no_inconcl_aux_tmp ( - source varchar(255) binary unique not null, - no smallint(6) not null -); -CREATE TABLE no_concl_hyp_tmp ( - source varchar(255) binary unique not null, - no smallint(6) not null -); -CREATE TABLE no_hyp_tmp ( - source varchar(255) binary unique not null, - no smallint(6) not null -); - -INSERT INTO no_inconcl_aux_tmp -SELECT source, COUNT(h_occurrence) -FROM refObj -WHERE - h_position='http://www.cs.unibo.it/helm/schemas/schema-helm#InConclusion' - OR h_position='http://www.cs.unibo.it/helm/schemas/schema-helm#MainConclusion' -GROUP BY source; - -INSERT IGNORE INTO no_inconcl_aux_tmp -SELECT source, 0 -FROM refObj -GROUP BY source; - -INSERT INTO no_concl_hyp_tmp -SELECT source, COUNT(DISTINCT h_occurrence) -FROM refObj -WHERE NOT (h_position="http://www.cs.unibo.it/helm/schemas/schema-helm#InBody") -GROUP BY source; - -INSERT IGNORE INTO no_concl_hyp_tmp -SELECT source, 0 -FROM refObj -GROUP BY source; - -INSERT INTO no_hyp_tmp -SELECT source, COUNT(DISTINCT h_occurrence) -FROM refObj -WHERE (h_position="http://www.cs.unibo.it/helm/schemas/schema-helm#MainHypothesis" - OR h_position="http://www.cs.unibo.it/helm/schemas/schema-helm#InHypothesis") -GROUP BY source; - -INSERT IGNORE INTO no_hyp_tmp -SELECT source, 0 -FROM refObj -GROUP BY source; - -INSERT INTO count -SELECT no_hyp_tmp.source, - no_inconcl_aux_tmp.no, - no_hyp_tmp.no, - no_concl_hyp_tmp.no -FROM no_hyp_tmp, no_concl_hyp_tmp, no_inconcl_aux_tmp -WHERE no_hyp_tmp.source = no_concl_hyp_tmp.source AND - no_hyp_tmp.source = no_inconcl_aux_tmp.source; - -DROP TABLE no_hyp_tmp; -DROP TABLE no_inconcl_aux_tmp; -DROP TABLE no_concl_hyp_tmp; - - - diff --git a/helm/metadata/sql/fill_inconcl_aux.sql b/helm/metadata/sql/fill_inconcl_aux.sql deleted file mode 100644 index 50146e0fd..000000000 --- a/helm/metadata/sql/fill_inconcl_aux.sql +++ /dev/null @@ -1,10 +0,0 @@ - --- table mapping sources to number of distinct constants occurring in conclusion -INSERT INTO no_inconcl_aux -SELECT source, COUNT(h_occurrence) -FROM refObj -WHERE - h_position='http://www.cs.unibo.it/helm/schemas/schema-helm#InConclusion' - OR h_position='http://www.cs.unibo.it/helm/schemas/schema-helm#MainConclusion' -GROUP BY source; - diff --git a/helm/metadata/sql/fill_no_concl_hyp.sql b/helm/metadata/sql/fill_no_concl_hyp.sql deleted file mode 100644 index 3c82358a2..000000000 --- a/helm/metadata/sql/fill_no_concl_hyp.sql +++ /dev/null @@ -1,9 +0,0 @@ - --- table mapping sources to number of distinct constants occurring everywhere --- except body -INSERT INTO no_concl_hyp -SELECT source, COUNT(DISTINCT h_occurrence) -FROM refObj -WHERE NOT (h_position="http://www.cs.unibo.it/helm/schemas/schema-helm#InBody") -GROUP BY source; - diff --git a/helm/metadata/sql/fill_no_hyp.sql b/helm/metadata/sql/fill_no_hyp.sql deleted file mode 100644 index b920e1ca8..000000000 --- a/helm/metadata/sql/fill_no_hyp.sql +++ /dev/null @@ -1,15 +0,0 @@ - --- table mapping sources to number of distinct constants occurring in hypothesis -INSERT INTO no_hyp -SELECT source, COUNT(DISTINCT h_occurrence) -FROM refObj -WHERE (h_position="http://www.cs.unibo.it/helm/schemas/schema-helm#MainHypothesis" - OR h_position="http://www.cs.unibo.it/helm/schemas/schema-helm#InHypothesis") -GROUP BY source; - -INSERT IGNORE INTO no_hyp -SELECT source, 0 -FROM refObj -WHERE NOT (h_position="http://www.cs.unibo.it/helm/schemas/schema-helm#MainHypothesis" - OR h_position="http://www.cs.unibo.it/helm/schemas/schema-helm#InHypothesis") -GROUP BY source; diff --git a/helm/metadata/sql/rating.sql b/helm/metadata/sql/rating.sql deleted file mode 100644 index b34a9fd08..000000000 --- a/helm/metadata/sql/rating.sql +++ /dev/null @@ -1,6 +0,0 @@ - -INSERT INTO hits -SELECT h_occurrence, COUNT(source) -FROM refObj -GROUP BY h_occurrence; - diff --git a/helm/minidom/.cvsignore b/helm/minidom/.cvsignore deleted file mode 100644 index 19aef19d8..000000000 --- a/helm/minidom/.cvsignore +++ /dev/null @@ -1,23 +0,0 @@ -*.lo -*.la -.libs -.deps -.emacs.desktop -config.h -config.h.in -config.cache -config.log -config.status -libtool -stamp-h -stamp-h.in -Makefile -Makefile.in -*.gz -configure -aclocal.m4 -install-sh -minidom-config -minidom.spec -missing -mkinstalldirs diff --git a/helm/minidom/AUTHORS b/helm/minidom/AUTHORS deleted file mode 100644 index fe59f14d6..000000000 --- a/helm/minidom/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Luca Padovani diff --git a/helm/minidom/COPYING b/helm/minidom/COPYING deleted file mode 100644 index d60c31a97..000000000 --- a/helm/minidom/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/helm/minidom/ChangeLog b/helm/minidom/ChangeLog deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/minidom/HEADER b/helm/minidom/HEADER deleted file mode 100644 index acd4a4d8c..000000000 --- a/helm/minidom/HEADER +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2000, Luca Padovani . - * - * This file is part of MambaCC, a compiler for the Mamba - * Functional Language - * - * MambaCC is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * MambaCC is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MambaCC; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * For details, see the MambaCC World-Wide-Web page, - * http://cs.unibo.it/~lpadovan/mamba/, or send a mail to - * - */ diff --git a/helm/minidom/INSTALL b/helm/minidom/INSTALL deleted file mode 100644 index b42a17ac4..000000000 --- a/helm/minidom/INSTALL +++ /dev/null @@ -1,182 +0,0 @@ -Basic Installation -================== - - These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, a file -`config.cache' that saves the results of its tests to speed up -reconfiguring, and a file `config.log' containing compiler output -(useful mainly for debugging `configure'). - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If at some point `config.cache' -contains results you don't want to keep, you may remove or edit it. - - The file `configure.in' is used to create `configure' by a program -called `autoconf'. You only need `configure.in' if you want to change -it or regenerate `configure' using a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. You can give `configure' -initial values for variables by setting them in the environment. Using -a Bourne-compatible shell, you can do that on the command line like -this: - CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure - -Or on systems that have the `env' program, you can do it like this: - env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - If you have to use a `make' that does not supports the `VPATH' -variable, you have to compile the package for one architecture at a time -in the source code directory. After you have installed the package for -one architecture, use `make distclean' before reconfiguring for another -architecture. - -Installation Names -================== - - By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PATH'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PATH', the package will use -PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=PATH' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - - There may be some features `configure' can not figure out -automatically, but needs to determine by the type of host the package -will run on. Usually `configure' can figure that out, but if it prints -a message saying it can not guess the host type, give it the -`--host=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name with three fields: - CPU-COMPANY-SYSTEM - -See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the host type. - - If you are building compiler tools for cross-compiling, you can also -use the `--target=TYPE' option to select the type of system they will -produce code for and the `--build=TYPE' option to select the type of -system on which you are compiling the package. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Operation Controls -================== - - `configure' recognizes the following options to control how it -operates. - -`--cache-file=FILE' - Use and save the results of the tests in FILE instead of - `./config.cache'. Set FILE to `/dev/null' to disable caching, for - debugging `configure'. - -`--help' - Print a summary of the options to `configure', and exit. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`--version' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`configure' also accepts some other, not widely useful, options. diff --git a/helm/minidom/Makefile.am b/helm/minidom/Makefile.am deleted file mode 100644 index 2bc9d7189..000000000 --- a/helm/minidom/Makefile.am +++ /dev/null @@ -1,42 +0,0 @@ - -lib_LTLIBRARIES = libminidom.la -bin_SCRIPTS = minidom-config - -libminidom_la_LDFLAGS = -version-info @MINIDOM_VERSION_INFO@ - -EXTRA_DIST = minidom-config.in - -CLEANFILES = minidom-config - -libminidom_la_SOURCES = \ - minidom.c - -pkginclude_HEADERS = \ - minidom.h - -minidom-config: minidom-config.in - @echo "#!/bin/sh" >minidom-config - @echo >>minidom-config - @echo VERSION=\"$(VERSION)\" >>minidom-config - @echo XML_CONFIG=\"$(XML_CONFIG)\" >>minidom-config - @echo libdir=\"$(libdir)\" >>minidom-config - @echo pkglibdir=\"$(pkglibdir)\" >>minidom-config - @echo includedir=\"$(includedir)\" >>minidom-config - @echo pkgincludedir=\"$(pkgincludedir)\" >>minidom-config - @echo >>minidom-config - @cat $(srcdir)/minidom-config.in >>minidom-config - @chmod a+x minidom-config - -backup: - tar cvfz ../@PACKAGE@-@VERSION@-`date|tr ' ' '_'|tr ':' '_'`.tar.gz . - -cleanbak: - -rm -f `find . -name "*~"` - -lc: - @( \ - CFILES=`find . -name "*.c"`; \ - HFILES=`find . -name "*.h"`; \ - ICCFILES=`find . -name "*.inc"`; \ - wc -l $$CFILES $$HFILES $$INCFILES | tail -n 1 \ - ) diff --git a/helm/minidom/NEWS b/helm/minidom/NEWS deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/minidom/README b/helm/minidom/README deleted file mode 100644 index e69de29bb..000000000 diff --git a/helm/minidom/TODO b/helm/minidom/TODO deleted file mode 100644 index bebb4b616..000000000 --- a/helm/minidom/TODO +++ /dev/null @@ -1,2 +0,0 @@ -+ support for converting string to/from Unicode - diff --git a/helm/minidom/acconfig.h b/helm/minidom/acconfig.h deleted file mode 100644 index ac44dc34f..000000000 --- a/helm/minidom/acconfig.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2000, Luca Padovani . - * - * This file is part of miniDOM, a minimal implementation of the - * Document Object Model based on the libxml library. - * - * miniDOM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * miniDOM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with miniDOM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * For details, see the miniDOM World-Wide-Web page, - * http://cs.unibo.it/~lpadovan/minidom/, or send a mail to - * - */ - -#ifndef config_h -#define config_h - -@TOP@ - -/* Define to compile with libxml 2.x (recommended) */ -#undef HAVE_LIBXML2 - -@BOTTOM@ - -#endif /* config_h */ diff --git a/helm/minidom/config.guess b/helm/minidom/config.guess deleted file mode 100644 index 28fcc5e22..000000000 --- a/helm/minidom/config.guess +++ /dev/null @@ -1,1308 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. - -timestamp='2001-11-08' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - - -dummy=dummy-$$ -trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int dummy(){}" > $dummy.c ; - for c in cc gcc c89 ; do - ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; - if test $? = 0 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - rm -f $dummy.c $dummy.o $dummy.rel ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # Determine the machine/vendor (is the vendor relevant). - case "${UNAME_MACHINE}" in - amiga) machine=m68k-unknown ;; - arm32) machine=arm-unknown ;; - atari*) machine=m68k-atari ;; - sun3*) machine=m68k-sun ;; - mac68k) machine=m68k-apple ;; - macppc) machine=powerpc-apple ;; - hp3[0-9][05]) machine=m68k-hp ;; - ibmrt|romp-ibm) machine=romp-ibm ;; - sparc*) machine=`uname -p`-unknown ;; - *) machine=${UNAME_MACHINE}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE}" in - i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit 0 ;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - arc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - macppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvmeppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - pmax:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sgi:OpenBSD:*:*) - echo mipseb-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sun3:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - wgrisc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - alpha:OSF1:*:*) - if test $UNAME_RELEASE = "V4.0"; then - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - fi - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - cat <$dummy.s - .data -\$Lformat: - .byte 37,100,45,37,120,10,0 # "%d-%x\n" - - .text - .globl main - .align 4 - .ent main -main: - .frame \$30,16,\$26,0 - ldgp \$29,0(\$27) - .prologue 1 - .long 0x47e03d80 # implver \$0 - lda \$2,-1 - .long 0x47e20c21 # amask \$2,\$1 - lda \$16,\$Lformat - mov \$0,\$17 - not \$1,\$18 - jsr \$26,printf - ldgp \$29,0(\$26) - mov 0,\$16 - jsr \$26,exit - .end main -EOF - eval $set_cc_for_build - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - case `./$dummy` in - 0-0) - UNAME_MACHINE="alpha" - ;; - 1-0) - UNAME_MACHINE="alphaev5" - ;; - 1-1) - UNAME_MACHINE="alphaev56" - ;; - 1-101) - UNAME_MACHINE="alphapca56" - ;; - 2-303) - UNAME_MACHINE="alphaev6" - ;; - 2-307) - UNAME_MACHINE="alphaev67" - ;; - 2-1307) - UNAME_MACHINE="alphaev68" - ;; - esac - fi - rm -f $dummy.s $dummy - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit 0 ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit 0 ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit 0 ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit 0;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit 0 ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit 0 ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit 0;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit 0 ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit 0 ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - i86pc:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit 0 ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit 0 ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit 0 ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit 0 ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit 0 ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit 0 ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit 0 ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit 0 ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy \ - && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit 0 ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit 0 ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit 0 ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit 0 ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit 0 ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit 0 ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit 0 ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit 0 ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit 0 ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit 0 ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit 0 ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo rs6000-ibm-aix3.2.5 - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit 0 ;; - *:AIX:*:[45]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit 0 ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit 0 ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit 0 ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit 0 ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit 0 ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit 0 ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy` - if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi - rm -f $dummy.c $dummy - fi ;; - esac - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit 0 ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo unknown-hitachi-hiuxwe2 - exit 0 ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit 0 ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit 0 ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit 0 ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit 0 ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit 0 ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit 0 ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit 0 ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit 0 ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit 0 ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit 0 ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit 0 ;; - CRAY*X-MP:*:*:*) - echo xmp-cray-unicos - exit 0 ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3D:*:*:*) - echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY-2:*:*:*) - echo cray2-cray-unicos - exit 0 ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit 0 ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit 0 ;; - i*:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit 0 ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit 0 ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i386-pc-interix - exit 0 ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit 0 ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit 0 ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - *:GNU:*:*) - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit 0 ;; - arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux - exit 0 ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - mips:Linux:*:*) - case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in - big) echo mips-unknown-linux-gnu && exit 0 ;; - little) echo mipsel-unknown-linux-gnu && exit 0 ;; - esac - ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit 0 ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit 0 ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit 0 ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit 0 ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit 0 ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit 0 ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit 0 ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - ld_supported_targets=`cd /; ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit 0 ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit 0 ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit 0 ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - cat >$dummy.c < -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif -#ifdef __ELF__ -# ifdef __GLIBC__ -# if __GLIBC__ >= 2 - printf ("%s-pc-linux-gnu\n", argv[1]); -# else - printf ("%s-pc-linux-gnulibc1\n", argv[1]); -# endif -# else - printf ("%s-pc-linux-gnulibc1\n", argv[1]); -# endif -#else - printf ("%s-pc-linux-gnuaout\n", argv[1]); -#endif - return 0; -} -EOF - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit 0 ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit 0 ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit 0 ;; - i*86:*:5:[78]*) - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit 0 ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit 0 ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit 0 ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit 0 ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit 0 ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit 0 ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit 0 ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit 0 ;; - M68*:*:R3V[567]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4.3${OS_REL} && exit 0 - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit 0 ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit 0 ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit 0 ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit 0 ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit 0 ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit 0 ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit 0 ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit 0 ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit 0 ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit 0 ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit 0 ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit 0 ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit 0 ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit 0 ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit 0 ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Darwin:*:*) - echo `uname -p`-apple-darwin${UNAME_RELEASE} - exit 0 ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - if test "${UNAME_MACHINE}" = "x86pc"; then - UNAME_MACHINE=pc - fi - echo `uname -p`-${UNAME_MACHINE}-nto-qnx - exit 0 ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit 0 ;; - NSR-[KW]:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit 0 ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit 0 ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit 0 ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit 0 ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit 0 ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit 0 ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit 0 ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit 0 ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit 0 ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit 0 ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit 0 ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit 0 ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit 0 ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit 0 ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 -rm -f $dummy.c $dummy - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit 0 ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - c34*) - echo c34-convex-bsd - exit 0 ;; - c38*) - echo c38-convex-bsd - exit 0 ;; - c4*) - echo c4-convex-bsd - exit 0 ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/helm/minidom/config.sub b/helm/minidom/config.sub deleted file mode 100644 index 24794696d..000000000 --- a/helm/minidom/config.sub +++ /dev/null @@ -1,1417 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. - -timestamp='2001-11-08' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit 0;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis) - os= - basic_machine=$1 - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ - | c4x | clipper \ - | d10v | d30v | dsp16xx \ - | fr30 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | m32r | m68000 | m68k | m88k | mcore \ - | mips16 | mips64 | mips64el | mips64orion | mips64orionel \ - | mips64vr4100 | mips64vr4100el | mips64vr4300 \ - | mips64vr4300el | mips64vr5000 | mips64vr5000el \ - | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \ - | mipsisa32 \ - | mn10200 | mn10300 \ - | ns16k | ns32k \ - | openrisc \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | sh | sh[34] | sh[34]eb | shbe | shle \ - | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \ - | strongarm \ - | tahoe | thumb | tic80 | tron \ - | v850 \ - | we32k \ - | x86 | xscale | xstormy16 \ - | z8k) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alphapca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armv*-* \ - | avr-* \ - | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c54x-* \ - | clipper-* | cray2-* | cydra-* \ - | d10v-* | d30v-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fr30-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | m32r-* \ - | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | mcore-* \ - | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \ - | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \ - | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \ - | sparc-* | sparc64-* | sparc86x-* | sparclite-* \ - | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* \ - | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \ - | v850-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* | xstormy16-* \ - | ymp-* \ - | z8k-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | ymp) - basic_machine=ymp-cray - os=-unicos - ;; - cray2) - basic_machine=cray2-cray - os=-unicos - ;; - [cjt]90) - basic_machine=${basic_machine}-cray - os=-unicos - ;; - crds | unos) - basic_machine=m68k-crds - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mipsel*-linux*) - basic_machine=mipsel-unknown - os=-linux-gnu - ;; - mips*-linux*) - basic_machine=mips-unknown - os=-linux-gnu - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - mmix*) - basic_machine=mmix-knuth - os=-mmixware - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon) - basic_machine=i686-pc - ;; - pentiumii | pentium2) - basic_machine=i686-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=t3e-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - windows32) - basic_machine=i386-pc - os=-windows32-msvcrt - ;; - xmp) - basic_machine=xmp-cray - os=-unicos - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - mips) - if [ x$os = x-linux-gnu ]; then - basic_machine=mips-unknown - else - basic_machine=mips-mips - fi - ;; - romp) - basic_machine=romp-ibm - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh3 | sh4 | sh3eb | sh4eb) - basic_machine=sh-unknown - ;; - sparc | sparcv9 | sparcv9b) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - c4x*) - basic_machine=c4x-none - os=-coff - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto*) - os=-nto-qnx - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-ibm) - os=-aix - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -vxsim* | -vxworks*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/helm/minidom/configure.in b/helm/minidom/configure.in deleted file mode 100644 index c6067b0ae..000000000 --- a/helm/minidom/configure.in +++ /dev/null @@ -1,82 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT(minidom.c) - -MINIDOM_MAJOR_VERSION=0 -MINIDOM_MINOR_VERSION=1 -MINIDOM_MICRO_VERSION=4 -MINIDOM_VERSION=$MINIDOM_MAJOR_VERSION.$MINIDOM_MINOR_VERSION.$MINIDOM_MICRO_VERSION -MINIDOM_VERSION_INFO=`expr $MINIDOM_MAJOR_VERSION + $MINIDOM_MINOR_VERSION`:$MINIDOM_MICRO_VERSION:$MINIDOM_MINOR_VERSION - -AC_SUBST(MINIDOM_VERSION) -AC_SUBST(MINIDOM_VERSION_INFO) - -AC_ARG_WITH( - libxml2, - [ --with-libxml2[=ARG] compile with libxml 2.x library [default=auto]], - libxml2=$withval, - libxml2="auto" -) - -AM_INIT_AUTOMAKE(minidom, $MINIDOM_VERSION) -AM_CONFIG_HEADER(config.h) -AM_PROG_LIBTOOL - -dnl Checks for programs. -AC_PROG_CC -AC_LANG_C -AC_PROG_RANLIB - -dnl Checks for libraries. -AC_CHECK_LIB(glib, g_malloc, - [ - CFLAGS="$CFLAGS `glib-config --cflags`" - CXXFLAGS="$CXXFLAGS `glib-config --cflags`" - LIBS="$LIBS `glib-config --libs`" - ], - AC_MSG_ERROR(cound not find glib), - `glib-config --libs` -) - -AC_CHECK_PROG(XML_CONFIG, xml2-config, xml2-config, no) -if test $XML_CONFIG = "no"; then - AC_CHECK_PROG(XML_CONFIG, xml-config, xml-config, no) -fi -AC_SUBST(XML_CONFIG) - -if test $XML_CONFIG = "no"; then - AC_MSG_ERROR(could not find configuration script for libxml) -fi - -if test $XML_CONFIG = "xml2-config" -a $libxml2 = "auto"; then - libxml2="yes" -fi - -CFLAGS="$CFLAGS `$XML_CONFIG --cflags`" -CXXFLAGS="$CXXFLAGS `$XML_CONFIG --cflags`" -LIBS="$LIBS `$XML_CONFIG --libs`" - -dnl if the user gave no explicit libxml2 option, try to guess its value -if test $libxml2 = "auto"; then - AC_MSG_CHECKING(for libxml version 2) - AC_TRY_COMPILE( - [#include ], - [ - xmlEntity e; - e.etype = e.etype; - ], - [ - AC_DEFINE(HAVE_LIBXML2) - AC_MSG_RESULT(maybe) - ], - AC_MSG_RESULT(no) - ) -elif test $libxml2 = "yes"; then - AC_DEFINE(HAVE_LIBXML2) -fi - -dnl Checks for header files. - -AC_OUTPUT([ - Makefile - minidom.spec -]) diff --git a/helm/minidom/debian/README.helm b/helm/minidom/debian/README.helm deleted file mode 100644 index d899a74d2..000000000 --- a/helm/minidom/debian/README.helm +++ /dev/null @@ -1,7 +0,0 @@ -To obtain a *clean* debianized source tree from which invoke debuild, -dpkg-buildpackage or so, run debian/debianize.helm from the root directory of -this module. - -Next change to that dir and have fun with debian packaging! - --- Zack diff --git a/helm/minidom/debian/autopippe.helm b/helm/minidom/debian/autopippe.helm deleted file mode 100644 index 9c5e5e706..000000000 --- a/helm/minidom/debian/autopippe.helm +++ /dev/null @@ -1,5 +0,0 @@ -aclocal -autoheader -automake -a -automake -a -autoconf diff --git a/helm/minidom/debian/changelog b/helm/minidom/debian/changelog deleted file mode 100644 index 55032b93f..000000000 --- a/helm/minidom/debian/changelog +++ /dev/null @@ -1,40 +0,0 @@ -minidom (0.1.3-1) unstable; urgency=low - - * New upstream release - - -- Stefano Zacchiroli Mon, 12 Nov 2001 17:26:18 +0100 - -minidom (0.1.2-2) unstable; urgency=low - - * upgraded config.sub and config.guess in order to support hppa and other - architectures (closes: Bug#103063, Bug#103351) - - -- Stefano Zacchiroli Wed, 4 Jul 2001 19:04:24 +0200 - -minidom (0.1.2-1) unstable; urgency=low - - * New upstream release - - -- Stefano Zacchiroli Tue, 22 May 2001 14:18:19 +0200 - -minidom (0.1.0-3) unstable; urgency=low - - * Changed section of libminidom0 and libminidom-dev - - -- Stefano Zacchiroli (Zack) Mon, 19 Feb 2001 21:25:26 +0100 - -minidom (0.1.0-2) unstable; urgency=low - - * Removed zero sized files and unnecessary extra license info - - -- Stefano Zacchiroli (Zack) Thu, 1 Feb 2001 18:37:12 +0100 - -minidom (0.1.0-1) unstable; urgency=low - - * Initial Release. - - -- Stefano Zacchiroli (Zack) Sun, 21 Jan 2001 18:24:26 +0100 - -Local variables: -mode: debian-changelog -End: diff --git a/helm/minidom/debian/control b/helm/minidom/debian/control deleted file mode 100644 index 1914d0e61..000000000 --- a/helm/minidom/debian/control +++ /dev/null @@ -1,23 +0,0 @@ -Source: minidom -Section: devel -Priority: optional -Maintainer: Stefano Zacchiroli (Zack) -Build-Depends: debhelper (>> 2.0.0), libxml2-dev, libglib1.2-dev -Standards-Version: 3.2.1 - -Package: libminidom0 -Section: libs -Architecture: any -Depends: ${shlibs:Depends} -Description: A minimal implementation of the Document Object Model - Minidom is a minimal implementation of the Document Object Model. - This package include the shared library. - -Package: libminidom-dev -Section: devel -Architecture: any -Depends: libminidom0 (= ${Source-Version}), libc6-dev -Description: A minimal implementation of the Document Object Model - Minidom is a minimal implementation of the Document Object Model. - This package includes the development and runtime support files. - diff --git a/helm/minidom/debian/copyright b/helm/minidom/debian/copyright deleted file mode 100644 index 5acf27224..000000000 --- a/helm/minidom/debian/copyright +++ /dev/null @@ -1,28 +0,0 @@ -This package was debianized by Stefano Zacchiroli on -Sun, 21 Jan 2001 18:24:26 +0100. - -It was packed from source obtained via cvs, with this CVSROOT: - :pserver:anonymous@phd.cs.unibo.it:/home/lpadovan/PHELM/ - -Upstream Author(s): Luca Padovani - -Copyright: - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - On Debian GNU/Linux systems, the complete text of the GNU General - Public License can be found in `/usr/share/common-licenses/GPL'. - The GNU Public Licenses in /usr/share/common-licenses were taken from - ftp.gnu.org and are copyrighted by the Free Software Foundation, Inc. - diff --git a/helm/minidom/debian/debianize.helm b/helm/minidom/debian/debianize.helm deleted file mode 100755 index 5bdbe1789..000000000 --- a/helm/minidom/debian/debianize.helm +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/sh - -# HELM project convenience script -# -# call this as "debian/debianize.helm" to convert a checked out CVS -# module to a debianize source tree ready to be called against debuild -# or dpkg-buildpackage -# -# Stefano "Zack" Zacchiroli -# Sun Nov 25 16:50:10 CET 2001 - -NAME="MINIDOM" # package name in configure.in's opinion -CONFIGURE_IN="configure.in" # configure.in - -# TAR="tar" -# TARFLAGS="-cz" # tar flags used when creating source package - -if [ -z $NAME ]; then - echo "Please edit me and configure the 'NAME' parameter." - exit 1 -fi - - # parse version number from configure.in -echo "Retrieving version number from $CONFIGURE_IN ..." -VERSION="" -for v in MAJOR MINOR MICRO; do - T=`grep "$NAME\_$v\_VERSION\=" $CONFIGURE_IN` - T=`echo $T | sed -e 's/.*=//'` - if [ -z $VERSION ]; then - VERSION=$T - else - VERSION="$VERSION.$T" - fi -done -echo "Version number is: $VERSION" - - # create a new working dir named with the "name-version" schema -echo "Creating debianized source tree ..." -OLDDIR=`basename \`pwd\`` -NEWDIR="$OLDDIR-$VERSION" -cd .. -if [ -d $NEWDIR ]; then - echo "'../$NEWDIR' already exists, please remove it before continue" - exit 1 -fi -cp -r $OLDDIR $NEWDIR -cd $NEWDIR -echo "Debianized source tree starts at `pwd`" - - # autopippe: autoconf, automake, aclocal, ... -echo "Executing auto-* tools ..." -source debian/autopippe.helm -echo "auto-* executed!" - - # remove CVS related files, and other garbage -echo "Removing garbage files ..." -find . -regex '.*\.cvsignore' -exec rm -f {} \; -find . -regex '.*CVS.*' -and -type d -exec rm -rf {} \; -GARBAGES=`egrep -v '^#' debian/garbage.helm` -for p in $GARBAGES; do - find . -name $p -exec rm -f {} \; -done -echo "Garbage removed!" - - # fix remote symlinks -echo "Dereferencing absolute symlinks ..." -PWD=`pwd` -for l in `find . -type l -maxdepth 1`; do # loop on symlink in this dir - SOURCE=$l - TARGET=`readlink $l` - if `echo $TARGET | egrep "^/" > /dev/null`; then - echo "$SOURCE -> $TARGET" - rm -f $SOURCE - cp $TARGET $SOURCE - fi # if symlink does not begin with "/" then it is relative -done -echo "Dereferencing done!" - - # upgrade debian changelog -echo "Upgrading debian changelog version to $VERSION ..." -dch --newversion $VERSION -echo "Debian changelog upgraded!" - -# # build debian native source package -# echo -n "Building debian (native) source package: " -# DEBVERSION=`dpkg-parsechangelog -ldebian/changelog | egrep '^Version: ' | sed -e 's/Version: //'` -# DEBNAME=`dpkg-parsechangelog -ldebian/changelog | egrep '^Source: ' | sed -e 's/Source: //'` -# SOURCEPKGFILE="$DEBNAME""_""$DEBVERSION.tar.gz" -# echo "../$SOURCEPKGFILE" -# cd .. -# $TAR $TARFLAGS -f $SOURCEPKGFILE $NEWDIR - -echo -echo "Debianization is over." -echo "Please change to ../$NEWDIR in order to build the debian package." - - diff --git a/helm/minidom/debian/docs b/helm/minidom/debian/docs deleted file mode 100644 index 7d96d4e7e..000000000 --- a/helm/minidom/debian/docs +++ /dev/null @@ -1,2 +0,0 @@ -AUTHORS -TODO diff --git a/helm/minidom/debian/garbage.helm b/helm/minidom/debian/garbage.helm deleted file mode 100644 index 3542a1b97..000000000 --- a/helm/minidom/debian/garbage.helm +++ /dev/null @@ -1,2 +0,0 @@ -# find patterns; files that match will be removed from debian package. -*.helm diff --git a/helm/minidom/debian/libminidom-dev.files b/helm/minidom/debian/libminidom-dev.files deleted file mode 100644 index afb977f37..000000000 --- a/helm/minidom/debian/libminidom-dev.files +++ /dev/null @@ -1,5 +0,0 @@ -usr/lib/*.so -usr/lib/*.a -usr/lib/*.la -usr/include/ -usr/bin/ diff --git a/helm/minidom/debian/libminidom-dev.undocumented b/helm/minidom/debian/libminidom-dev.undocumented deleted file mode 100644 index 8d08f8e71..000000000 --- a/helm/minidom/debian/libminidom-dev.undocumented +++ /dev/null @@ -1 +0,0 @@ -minidom-config.1 diff --git a/helm/minidom/debian/libminidom0.files b/helm/minidom/debian/libminidom0.files deleted file mode 100644 index 093956b17..000000000 --- a/helm/minidom/debian/libminidom0.files +++ /dev/null @@ -1 +0,0 @@ -usr/lib/*.so.* diff --git a/helm/minidom/debian/libminidom0.postinst b/helm/minidom/debian/libminidom0.postinst deleted file mode 100644 index 1b6c8ba16..000000000 --- a/helm/minidom/debian/libminidom0.postinst +++ /dev/null @@ -1,47 +0,0 @@ -#! /bin/sh -# postinst script for libminidom0 -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * `configure' -# * `abort-upgrade' -# * `abort-remove' `in-favour' -# -# * `abort-deconfigure' `in-favour' -# `removing' -# -# for details, see /usr/share/doc/packaging-manual/ -# -# quoting from the policy: -# Any necessary prompting should almost always be confined to the -# post-installation script, and should be protected with a conditional -# so that unnecessary prompting doesn't happen if a package's -# installation fails and the `postinst' is called with `abort-upgrade', -# `abort-remove' or `abort-deconfigure'. - -case "$1" in - configure) - ldconfig - ;; - - abort-upgrade|abort-remove|abort-deconfigure) - - ;; - - *) - echo "postinst called with unknown argument \`$1'" >&2 - exit 0 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 - - diff --git a/helm/minidom/debian/rules b/helm/minidom/debian/rules deleted file mode 100755 index 8ff12e4ac..000000000 --- a/helm/minidom/debian/rules +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/make -f -# Sample debian/rules that uses debhelper. -# GNU copyright 1997 to 1999 by Joey Hess. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -# This is the debhelper compatability version to use. -export DH_COMPAT=2 - -# shared library versions, option 1 -#version=0.1.0 -#major=0 -# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so -version=`ls src/.libs/lib*.so.* | \ - awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'` -major=`ls src/.libs/lib*.so.* | \ - awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'` - -configure: configure-stamp -configure-stamp: - dh_testdir - # Add here commands to configure the package. - ./configure --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info - - touch configure-stamp - -build: configure-stamp build-stamp -build-stamp: - dh_testdir - - # Add here commands to compile the package. - $(MAKE) - - touch build-stamp - -clean: - dh_testdir - dh_testroot - rm -f build-stamp configure-stamp - - # Add here commands to clean up after the build process. - -$(MAKE) distclean - - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - # Add here commands to install the package into debian/minidom. - $(MAKE) install prefix=$(CURDIR)/debian/tmp/usr - - -# Build architecture-independent files here. -binary-indep: build install -# We have nothing to do by default. - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir - dh_testroot - # - # build libminidom${major} package by moving files from minidom-dev - # -# dh_movefiles -plibminidom$(major) \ -# usr/lib/libminidom.so.$(major) \ -# usr/lib/libminidom.so.$(version) -# dh_movefiles get file contents from debian/*.files - dh_movefiles - -# dh_installdebconf - dh_installdocs - dh_installexamples - dh_installmenu -# dh_installemacsen -# dh_installpam -# dh_installinit - dh_installcron - dh_installmanpages - dh_installinfo - dh_undocumented - dh_installchangelogs ChangeLog - dh_link - dh_strip - dh_compress - dh_fixperms - # You may want to make some executables suid here. -# dh_suidregister - dh_makeshlibs - dh_installdeb -# dh_perl - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/helm/minidom/minidom-config.in b/helm/minidom/minidom-config.in deleted file mode 100644 index 5ed302925..000000000 --- a/helm/minidom/minidom-config.in +++ /dev/null @@ -1,48 +0,0 @@ - -usage() -{ - cat <&2 -fi - -while test $# -gt 0; do - case "$1" in - -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - case $1 in - --version) - echo $VERSION - ;; - --cflags) - echo_cflags=yes - ;; - --libs) - echo_libs=yes - ;; - *) - usage 1 1>&2 - ;; - esac - shift -done - -if test "$echo_cflags" = "yes"; then - echo `$XML_CONFIG --cflags` -I$pkgincludedir -fi - -if test "$echo_libs" = "yes"; then - echo `$XML_CONFIG --libs` -L$libdir -lminidom -fi - diff --git a/helm/minidom/minidom.c b/helm/minidom/minidom.c deleted file mode 100644 index 93cae440d..000000000 --- a/helm/minidom/minidom.c +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Copyright (C) 2000, Luca Padovani . - * - * This file is part of miniDOM, a minimal implementation of the - * Document Object Model - * - * miniDOM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * miniDOM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with miniDOM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * For details, send a mail to - */ - -#include -#include -#include -#include - -#include "minidom.h" - -gboolean -mdom_string_eq(mDOMConstStringRef s1, mDOMConstStringRef s2) -{ - g_return_val_if_fail(s1 != NULL, FALSE); - g_return_val_if_fail(s2 != NULL, FALSE); - - return strcmp(C_CONST_STRING(s1), C_CONST_STRING(s2)) ? FALSE : TRUE; -} - -mDOMStringRef -mdom_string_dup(mDOMConstStringRef s) -{ - g_return_val_if_fail(s != NULL, NULL); - return xmlStrdup(s); -} - -void -mdom_string_free(mDOMStringRef s) -{ - g_free(s); -} - -mDOMDocRef -mdom_load(const char* file_name, gboolean subst, mDOMEntityResolver entity_resolver) -{ - xmlParserCtxtPtr ctxt; - mDOMDocRef doc; - - g_return_val_if_fail(file_name != NULL, NULL); - - xmlSubstituteEntitiesDefault(subst); - - ctxt = xmlCreateFileParserCtxt(file_name); - if (ctxt == NULL) return NULL; - g_assert(ctxt->sax != NULL); - ctxt->sax->getEntity = entity_resolver; - - xmlParseDocument(ctxt); - - doc = ctxt->myDoc; - xmlFreeParserCtxt(ctxt); - - return doc; -} - -void -mdom_unload(mDOMDocRef doc) -{ - g_return_if_fail(doc != NULL); - xmlFreeDoc(doc); -} - -mDOMDocRef -mdom_doc_new(mDOMConstStringRef version) -{ - mDOMDocRef doc; - - g_return_val_if_fail(version != NULL, NULL); - doc = xmlNewDoc(version); - g_return_val_if_fail(doc != NULL, NULL); - - doc->extSubset = xmlNewDtd(doc, DOM_CONST_STRING("Entities"), NULL, NULL); - - return doc; -} - -void -mdom_doc_free(mDOMDocRef doc) -{ - g_return_if_fail(doc != NULL); - xmlFreeDoc(doc); -} - -mDOMEntityRef -mdom_doc_add_entity(mDOMDocRef doc, mDOMConstStringRef name, mDOMConstStringRef content) -{ - g_return_val_if_fail(doc != NULL, NULL); - g_return_val_if_fail(name != NULL, NULL); - g_return_val_if_fail(content != NULL, NULL); -#ifdef HAVE_LIBXML2 - return xmlAddDtdEntity(doc, name, XML_INTERNAL_GENERAL_ENTITY, NULL, NULL, content); -#else - xmlAddDtdEntity(doc, name, XML_INTERNAL_GENERAL_ENTITY, NULL, NULL, content); - return NULL; -#endif -} - -mDOMEntityRef -mdom_doc_get_entity(mDOMDocRef doc, mDOMConstStringRef name) -{ - g_return_val_if_fail(doc != NULL, NULL); - g_return_val_if_fail(name != NULL, NULL); - return xmlGetDtdEntity(doc, name); -} - -mDOMEntityRef -mdom_get_predefined_entity(mDOMConstStringRef name) -{ - g_return_val_if_fail(name != NULL, NULL); - return xmlGetPredefinedEntity(name); -} - -mDOMConstStringRef -mdom_entity_get_content(mDOMEntityRef entity) -{ - g_return_val_if_fail(entity != NULL, NULL); - return entity->content; -} - -mDOMNodeRef -mdom_doc_get_root_node(mDOMDocRef doc) -{ - g_return_val_if_fail(doc != NULL, NULL); - return xmlDocGetRootElement(doc); -} - -void -mdom_node_set_user_data(mDOMNodeRef node, gpointer user_data) -{ - g_return_if_fail(node != NULL); -#ifndef XML_WITHOUT_CORBA - node->_private = user_data; -#else - g_assert_not_reached(); -#endif -} - -gpointer -mdom_node_get_user_data(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, NULL); -#ifndef XML_WITHOUT_CORBA - return node->_private; -#else - g_assert_not_reached(); -#endif -} - -gboolean -mdom_node_is_text(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, FALSE); - return xmlNodeIsText(node) ? TRUE : FALSE; -} - -gboolean -mdom_node_is_element(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, FALSE); - return node->type == XML_ELEMENT_NODE; -} - -gboolean -mdom_node_is_blank(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, FALSE); -#ifdef HAVE_LIBXML2 - return xmlIsBlankNode(node) ? TRUE : FALSE; -#else - return FALSE; -#endif -} - -gboolean -mdom_node_is_entity_ref(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, FALSE); - return node->type == XML_ENTITY_REF_NODE; -} - -guint -mdom_node_get_type(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, 0); - return node->type; -} - -mDOMConstStringRef -mdom_node_get_name(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, NULL); - return node->name; -} - -mDOMConstStringRef -mdom_node_get_ns_uri(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, NULL); - if (node->ns == NULL) return NULL; - return node->ns->href; -} - -mDOMStringRef -mdom_node_get_attribute(mDOMNodeRef node, mDOMConstStringRef name) -{ - g_return_val_if_fail(node != NULL, NULL); - g_return_val_if_fail(name != NULL, NULL); - return xmlGetProp(node, name); -} - -mDOMStringRef -mdom_node_get_attribute_ns(mDOMNodeRef node, mDOMConstStringRef name, mDOMConstStringRef uri) -{ - g_return_val_if_fail(node != NULL, NULL); - g_return_val_if_fail(uri != NULL, NULL); - g_return_val_if_fail(name != NULL, NULL); - g_return_val_if_fail(mdom_node_is_element(node), NULL); - return xmlGetNsProp(node, name, uri); -} - -gboolean -mdom_node_has_attribute(mDOMNodeRef node, mDOMConstStringRef name) -{ -#ifndef HAVE_LIBXML2 - mDOMStringRef s = NULL; -#endif /* HAVE_LIBXML2 */ - g_return_val_if_fail(node != NULL, FALSE); - g_return_val_if_fail(name != NULL, FALSE); -#ifdef HAVE_LIBXML2 - return (xmlHasProp(node, name) != NULL) ? TRUE : FALSE; -#else - s = xmlGetProp(node, name); - if (s != NULL) { - mdom_string_free(s); - return TRUE; - } - return FALSE; -#endif /* HAVE_LIBXML2 */ -} - -gboolean -mdom_node_has_attribute_ns(mDOMNodeRef node, mDOMConstStringRef name, mDOMConstStringRef uri) -{ - g_return_val_if_fail(node != NULL, FALSE); - g_return_val_if_fail(name != NULL, FALSE); - g_return_val_if_fail(uri != NULL, FALSE); -#ifdef HAVE_LIBXML2 - return (xmlHasNsProp(node, name, uri) != NULL) ? TRUE : FALSE; -#else - return FALSE; -#endif /* HAVE_LIBXML2 */ -} - -mDOMStringRef -mdom_node_get_content(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, NULL); - return xmlNodeGetContent(node); -} - -mDOMNodeRef -mdom_node_get_parent(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, NULL); - return node->parent; -} - -mDOMNodeRef -mdom_node_get_prev_sibling(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, NULL); - return node->prev; -} - -mDOMNodeRef -mdom_node_get_next_sibling(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, NULL); - return node->next; -} - -mDOMNodeRef -mdom_node_get_first_child(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, NULL); -#ifdef HAVE_LIBXML2 - return node->children; -#else - return node->childs; -#endif -} - -mDOMAttrRef -mdom_node_get_first_attribute(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, NULL); - return node->properties; -} - -gboolean -mdom_node_is_first(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, FALSE); - return node->prev == NULL; -} - -gboolean -mdom_node_is_last(mDOMNodeRef node) -{ - g_return_val_if_fail(node != NULL, FALSE); - return node->next == NULL; -} - -mDOMConstStringRef -mdom_attr_get_name(mDOMAttrRef attr) -{ - g_return_val_if_fail(attr != NULL, NULL); - return attr->name; -} - -mDOMConstStringRef -mdom_attr_get_ns_uri(mDOMAttrRef attr) -{ - g_return_val_if_fail(attr != NULL, NULL); - if (attr->ns == NULL) return NULL; - return attr->ns->href; -} - -mDOMStringRef -mdom_attr_get_value(mDOMAttrRef attr) -{ -#ifdef HAVE_LIBXML2 - g_return_val_if_fail(attr != NULL, NULL); - return xmlNodeListGetString(attr->doc, attr->children, 1); -#else - mDOMNodeRef child; - g_return_val_if_fail(attr != NULL, NULL); - - child = attr->val; - if (child == NULL) return NULL; - else return xmlNodeListGetString(child->doc, attr->val, 1); -#endif -} - -mDOMAttrRef -mdom_attr_get_prev_sibling(mDOMAttrRef attr) -{ -#ifdef HAVE_LIBXML2 - g_return_val_if_fail(attr != NULL, NULL); - return attr->prev; -#else - /* in libxml 1.x there is no prev link in attributes */ - return NULL; -#endif -} - -mDOMAttrRef -mdom_attr_get_next_sibling(mDOMAttrRef attr) -{ - g_return_val_if_fail(attr != NULL, NULL); - return attr->next; -} - -mDOMNodeRef -mdom_attr_get_parent(mDOMAttrRef attr) -{ - g_return_val_if_fail(attr != NULL, NULL); -#ifdef HAVE_LIBXML2 - return attr->parent; -#else - return attr->node; -#endif -} diff --git a/helm/minidom/minidom.h b/helm/minidom/minidom.h deleted file mode 100644 index bb2b91013..000000000 --- a/helm/minidom/minidom.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2000, Luca Padovani . - * - * This file is part of miniDOM, a minimal implementation of the - * Document Object Model - * - * miniDOM is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * miniDOM is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with miniDOM; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * For details, send a mail to - */ - -#ifndef minidom_h -#define minidom_h - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - typedef xmlChar* mDOMStringRef; - typedef const xmlChar* mDOMConstStringRef; - typedef xmlDocPtr mDOMDocRef; - typedef xmlNodePtr mDOMNodeRef; - typedef xmlAttrPtr mDOMAttrRef; - typedef xmlEntityPtr mDOMEntityRef; - typedef xmlNsPtr mDOMNsRef; - - typedef xmlEntityPtr (*mDOMEntityResolver)(void*, mDOMConstStringRef); - -#define C_STRING(s) ((char*) (s)) -#define C_CONST_STRING(s) ((const char*) (s)) -#define DOM_STRING(s) ((mDOMStringRef) (s)) -#define DOM_CONST_STRING(s) ((mDOMConstStringRef) (s)) - - mDOMDocRef mdom_load(const char*, gboolean, mDOMEntityResolver); - void mdom_unload(mDOMDocRef); - - gboolean mdom_string_eq(mDOMConstStringRef, mDOMConstStringRef); - void mdom_string_free(mDOMStringRef); - mDOMStringRef mdom_string_dup(mDOMConstStringRef); - - mDOMDocRef mdom_doc_new(mDOMConstStringRef); - void mdom_doc_free(mDOMDocRef); - mDOMNodeRef mdom_doc_get_root_node(mDOMDocRef); - mDOMEntityRef mdom_doc_add_entity(mDOMDocRef, mDOMConstStringRef, mDOMConstStringRef); - mDOMEntityRef mdom_doc_get_entity(mDOMDocRef, mDOMConstStringRef); - mDOMEntityRef mdom_get_predefined_entity(mDOMConstStringRef); - mDOMConstStringRef mdom_entity_get_content(mDOMEntityRef); - -#if 0 - mDOMNsRef mdom_doc_search_ns(mDOMDocRef, mDOMNodeRef, mDOMConstStringRef); - mDOMNsRef mdom_doc_search_ns_by_uri(mDOMDocRef, mDOMNodeRef, mDOMConstStringRef); - void mdom_ns_free(mDOMNsRef); - mDOMNsRef mdom_node_ns_new(mDOMNodeRef, mDOMConstStringRef, mDOMConstStringRef); -#endif - - void mdom_node_set_user_data(mDOMNodeRef, gpointer); - gpointer mdom_node_get_user_data(mDOMNodeRef); - gboolean mdom_node_is_text(mDOMNodeRef); - gboolean mdom_node_is_element(mDOMNodeRef); - gboolean mdom_node_is_entity_ref(mDOMNodeRef); - gboolean mdom_node_is_blank(mDOMNodeRef); - guint mdom_node_get_type(mDOMNodeRef); - mDOMConstStringRef mdom_node_get_name(mDOMNodeRef); - mDOMConstStringRef mdom_node_get_ns_uri(mDOMNodeRef); - mDOMStringRef mdom_node_get_attribute(mDOMNodeRef, mDOMConstStringRef); - mDOMStringRef mdom_node_get_attribute_ns(mDOMNodeRef, mDOMConstStringRef, mDOMConstStringRef); - gboolean mdom_node_has_attribute(mDOMNodeRef, mDOMConstStringRef); - gboolean mdom_node_has_attribute_ns(mDOMNodeRef, mDOMConstStringRef, mDOMConstStringRef); - mDOMStringRef mdom_node_get_content(mDOMNodeRef); - mDOMNodeRef mdom_node_get_parent(mDOMNodeRef); - mDOMNodeRef mdom_node_get_prev_sibling(mDOMNodeRef); - mDOMNodeRef mdom_node_get_next_sibling(mDOMNodeRef); - mDOMNodeRef mdom_node_get_first_child(mDOMNodeRef); - mDOMAttrRef mdom_node_get_first_attribute(mDOMNodeRef); - gboolean mdom_node_is_first(mDOMNodeRef); - gboolean mdom_node_is_last(mDOMNodeRef); - - mDOMConstStringRef mdom_attr_get_name(mDOMAttrRef); - mDOMConstStringRef mdom_attr_get_ns_uri(mDOMAttrRef); - mDOMStringRef mdom_attr_get_value(mDOMAttrRef); - mDOMAttrRef mdom_attr_get_prev_sibling(mDOMAttrRef); - mDOMAttrRef mdom_attr_get_next_sibling(mDOMAttrRef); - mDOMNodeRef mdom_attr_get_parent(mDOMAttrRef); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* minidom_h */ - diff --git a/helm/minidom/minidom.spec.in b/helm/minidom/minidom.spec.in deleted file mode 100644 index 6c44be122..000000000 --- a/helm/minidom/minidom.spec.in +++ /dev/null @@ -1,31 +0,0 @@ -Summary: A minimal implementation of the DOM based on libxml2 -Name: minidom -Version: @VERSION@ -Release: 1 -Copyright: GPL -Group: Development/Libraries -Source: www.cs.unibo.it:/~lpadovan/mml-widget/minidom-@VERSION@.tar.gz -%description -miniDOM is a minimal implementation of the Document Object -Model. - -%prep -%setup - -%build -./configure -make - -%install -make install - -%files -%doc AUTHORS BUGS COPYING ChangeLog HISTORY INSTALL LICENSE NEWS README TODO - -/usr/local/bin/minidom-config -/usr/local/lib/libminidom.so -/usr/local/lib/libminidom.so.0 -/usr/local/lib/libminidom.so.@VERSION@ -/usr/local/lib/libminidom.a -/usr/local/lib/libminidom.la -/usr/local/include/minidom/ diff --git a/helm/minidom/stamp-h.in b/helm/minidom/stamp-h.in deleted file mode 100644 index 9788f7023..000000000 --- a/helm/minidom/stamp-h.in +++ /dev/null @@ -1 +0,0 @@ -timestamp diff --git a/helm/mowgli/home/htaccess b/helm/mowgli/home/htaccess deleted file mode 100644 index 702b91533..000000000 --- a/helm/mowgli/home/htaccess +++ /dev/null @@ -1,5 +0,0 @@ -AuthType Basic -AuthName "Mowgli Members" -AuthUserFile /home/projects/mowgli/apache_auth/users -AuthGroupFile /home/projects/mowgli/apache_auth/groups -require valid-user diff --git a/helm/mowgli/home/html/.cvsignore b/helm/mowgli/home/html/.cvsignore deleted file mode 100644 index 206e8734b..000000000 --- a/helm/mowgli/home/html/.cvsignore +++ /dev/null @@ -1,12 +0,0 @@ -home.html -index.html -menu.html -consortium.html -project.html -news.html -mowgli-events.html -other-events.html -deadlines.html -people-list.html -latest-news.xml -approaching-deadlines.xml \ No newline at end of file diff --git a/helm/mowgli/home/html/Makefile b/helm/mowgli/home/html/Makefile deleted file mode 100644 index dc9365a5b..000000000 --- a/helm/mowgli/home/html/Makefile +++ /dev/null @@ -1,359 +0,0 @@ -# Note: "make FRAMES=x" works too -FRAMES = yes -#FRAMES = no - -DESTDIR = /projects/mowgli/public_html -#DESTDIR = /tmp/mowgli - -HTMLDESTDIRSUFFIX = html_$(FRAMES)_frames - -HTMLDESTDIR = $(DESTDIR)/$(HTMLDESTDIRSUFFIX) - -XSLTP = xsltproc --param current-date "'`date`'" -TEMPLATESROOT = ../templates -XMLROOT = ../xml -XSLROOT = ../xsl - -RMDOCTYPE = "s/<\\!DOCTYPE[^>]*>//" - -XHTMLCONTENT = $(XSLROOT)/xhtml-content.xsl - -PEOPLE = \ - people/aei/kelley.html \ - people/aei/pollney.html \ - people/aei/schutz.html \ - people/aei/velden.html \ - people/aei/wegner.html \ - people/aei/weyher.html \ - people/bologna/asperti.html \ - people/bologna/guidi.html \ - people/bologna/padovani.html \ - people/bologna/sacerdoti.html \ - people/bologna/schena.html \ - people/dfki/kohlhase.html \ - people/dfki/melis.html \ - people/dfki/siekmann.html \ - people/dfki/moschner.html \ - people/dfki/goguadze.html \ - people/dfki/libbrecht.html \ - people/inria/amerkad.html \ - people/inria/bertot.html \ - people/inria/chicli.html \ - people/inria/delahaye.html \ - people/inria/herbelin.html \ - people/inria/naciri.html \ - people/inria/pottier.html \ - people/inria/rideau.html \ - people/inria/thery.html \ - people/inria/werner.html \ - people/nijmegen/barendregt.html \ - people/nijmegen/barreiro.html \ - people/nijmegen/cohen.html \ - people/nijmegen/cruz-filipe.html \ - people/nijmegen/geuvers.html \ - people/nijmegen/niqui.html \ - people/nijmegen/stein.html \ - people/nijmegen/synek.html \ - people/nijmegen/wiedijk.html \ - people/trusted-logic/bolignano.html \ - people/trusted-logic/gimenez.html \ - people/trusted-logic/loiseaux.html - -DOCUMENTS = \ - index.html \ - home.html \ - menu.html \ - proposal/project-management.html \ - proposal/project-objectives.html \ - proposal/project-summary.html \ - proposal/contribution.html \ - proposal/innovation.html \ - proposal/EC-contribution.html \ - proposal/econ-scient-tech-prospects.html \ - proposal/project-planning.html \ - proposal/project-components.html \ - consortium.html \ - project.html \ - news.html \ - other-events.html \ - mowgli-events.html \ - deadlines.html \ - people-list.html \ - slides/mowgligroup.html \ - deliverables/distribution/d5a.html \ - deliverables/distribution/d5b.html \ - deliverables/information-dissemination-and-exploitation/d7a.html \ - deliverables/information-dissemination-and-exploitation/d7b.html \ - deliverables/interfaces/d4a.html \ - deliverables/interfaces/d4b.html \ - deliverables/interfaces/d4c.html \ - deliverables/interfaces/d4d.html \ - deliverables/interfaces/d4e.html \ - deliverables/metadata/d3a.html \ - deliverables/metadata/d3b.html \ - deliverables/project-management/d0a.html \ - deliverables/project-management/d0b.html \ - deliverables/project-management/d0c.html \ - deliverables/project-management/d0d.html \ - deliverables/requirement-analysis/d1a.html \ - deliverables/requirement-analysis/d1b.html \ - deliverables/requirement-analysis/d1c.html \ - deliverables/testing-and-validation/d6a.html \ - deliverables/testing-and-validation/d6b.html \ - deliverables/testing-and-validation/d6c.html \ - deliverables/testing-and-validation/d6d.html \ - deliverables/transformation/d2a.html \ - deliverables/transformation/d2b.html \ - deliverables/transformation/d2c.html \ - deliverables/transformation/d2d.html \ - deliverables/transformation/d2e.html \ - deliverables/transformation/d2f.html \ - deliverables/transformation/d2g.html \ - members/index.html \ - members/ml-help-example.txt \ - members/kick-off.html \ - mowgli-events/kick-off.html \ - software/index.html \ - sites/aei.html \ - sites/bologna.html \ - sites/dfki.html \ - sites/inria.html \ - sites/nijmegen.html \ - sites/trusted-logic.html \ - publications/index.html \ - publications/mowgli/crimea2002_aw_on_line.html \ - publications/mowgli/crimea2002_aw.html \ - publications/others/category_al.html \ - publications/others/crimea2001_apss.html \ - publications/others/cup_s.html \ - publications/others/cup_s2.html \ - publications/others/extreme2001_apss.html \ - publications/others/har_bg.html \ - publications/others/jep_ws.html \ - publications/others/jep_wwsw.html \ - publications/others/jlp2001_scg.html \ - publications/others/mathml2000_apss.html \ - publications/others/mscs_gb.html \ - publications/others/tcs2001_og.html \ - publications/others/tphols2000_gwz.html \ - publications/others/tphols2001_apss.html \ - publications/others/w3c_bl98.html \ - publications/others/cup_hp91.html \ - publications/others/cup_hp93.html \ - publications/others/cc.html \ - work-packages/index.html \ - work-packages/distribution.html \ - work-packages/information-dissemination-and-exploitation.html \ - work-packages/interfaces.html \ - work-packages/metadata.html \ - work-packages/project-management.html \ - work-packages/requirement-analysis.html \ - work-packages/testing-and-validation.html \ - work-packages/transformation.html \ - $(PEOPLE) - -all: $(DOCUMENTS) - -home.html: $(XMLROOT)/home.xml \ - $(XMLROOT)/news.xml \ - $(XMLROOT)/other-events.xml \ - $(XMLROOT)/mowgli-events.xml \ - $(XSLROOT)/latest-news.xsl \ - $(XSLROOT)/approaching-deadlines.xsl \ - $(XHTMLCONTENT) - $(XSLTP) -o latest-news.xml $(XSLROOT)/latest-news.xsl $(XMLROOT)/news.xml - $(XSLTP) --param today `date +%Y%m%d` -o approaching-deadlines.xml $(XSLROOT)/approaching-deadlines.xsl $(XMLROOT)/other-events.xml - $(XSLTP) --param make_header "false()" --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) $(XMLROOT)/home.xml - -menu.html: $(XMLROOT)/menu.xml $(XHTMLCONTENT) - $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" --param make_header "false()" --param make_footer "false()" -o $@ $(XHTMLCONTENT) $< - -index.html: $(TEMPLATESROOT)/index.html - cp $< $@ - -members/ml-help-example.txt: $(TEMPLATESROOT)/ml-help-example.txt - cp $< $@ - -slides/%.html: $(XMLROOT)/slides/%.xml $(XHTMLCONTENT) - $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) $< - -members/index.html: $(XMLROOT)/members-index.xml \ - $(XHTMLCONTENT) - sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -members/kick-off.html: $(XMLROOT)/members/kick-off.xml \ - $(XSLROOT)/minutes.xsl \ - $(XHTMLCONTENT) - $(XSLTP) $(XSLROOT)/minutes.xsl $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -software/index.html: $(XMLROOT)/software/index.xml \ - $(XHTMLCONTENT) - $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) $< - -proposal/project-management.html: $(XMLROOT)/proposal/project-management.xml \ - $(XHTMLCONTENT) \ - $(XSLROOT)/management.xsl - $(XSLTP) $(XSLROOT)/management.xsl $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -proposal/project-summary.html: $(XMLROOT)/proposal/project-summary.xml \ - $(XHTMLCONTENT) - sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -proposal/project-objectives.html: $(XMLROOT)/proposal/project-objectives.xml \ - $(XHTMLCONTENT) - sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -proposal/contribution.html: $(XMLROOT)/proposal/contribution.xml \ - $(XHTMLCONTENT) - sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -proposal/innovation.html: $(XMLROOT)/proposal/innovation.xml \ - $(XHTMLCONTENT) - sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -proposal/EC-contribution.html: $(XMLROOT)/proposal/EC-contribution.xml \ - $(XHTMLCONTENT) - sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -proposal/econ-scient-tech-prospects.html: $(XMLROOT)/proposal/econ-scient-tech-prospects.xml \ - $(XHTMLCONTENT) - sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -proposal/project-planning.html: $(XMLROOT)/proposal/project-planning.xml \ - $(XHTMLCONTENT) - sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -proposal/project-components.html: $(XMLROOT)/proposal/project-components.xml \ - $(XHTMLCONTENT) - sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -mowgli-events/kick-off.html: $(XMLROOT)/mowgli-events/kick-off.xml \ - $(XHTMLCONTENT) - sed $(RMDOCTYPE) $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -people-list.html: $(XMLROOT)/people/index.xml \ - $(XSLROOT)/people-list.xsl \ - $(XHTMLCONTENT) - $(XSLTP) $(XSLROOT)/people-list.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -consortium.html: $(XMLROOT)/consortium.xml \ - $(XSLROOT)/consortium.xsl \ - $(XHTMLCONTENT) - $(XSLTP) $(XSLROOT)/consortium.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -project.html: $(XMLROOT)/project.xml \ - $(XSLROOT)/project.xsl \ - $(XHTMLCONTENT) - $(XSLTP) $(XSLROOT)/project.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - - -news.html: $(XMLROOT)/news.xml \ - $(XSLROOT)/news.xsl \ - $(XHTMLCONTENT) - $(XSLTP) $(XSLROOT)/news.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - - -other-events.html: $(XMLROOT)/other-events.xml \ - $(XSLROOT)/events.xsl \ - $(XHTMLCONTENT) - $(XSLTP) --param today `date +%Y%m%d` --param events-class "'Other'" $(XSLROOT)/events.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - - -mowgli-events.html: $(XMLROOT)/mowgli-events.xml \ - $(XSLROOT)/events.xsl \ - $(XHTMLCONTENT) - $(XSLTP) --param today `date +%Y%m%d` --param events-class "'MOWGLI'" $(XSLROOT)/events.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - - -deadlines.html: $(XMLROOT)/other-events.xml \ - $(XSLROOT)/deadlines.xsl \ - $(XHTMLCONTENT) - $(XSLTP) --param today `date +%Y%m%d` --param events-class "'Other'" $(XSLROOT)/deadlines.xsl $< | $(XSLTP) --param path_to_top "'.'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - - -deliverables/%.html: $(XMLROOT)/deliverables/%.xml \ - $(XSLROOT)/deliverable.xsl \ - $(XHTMLCONTENT) - $(XSLTP) $(XSLROOT)/deliverable.xsl $< | $(XSLTP) --param path_to_top "'../..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - - -sites/%.html: $(XMLROOT)/sites/%.xml \ - $(XSLROOT)/site.xsl \ - $(XHTMLCONTENT) - $(XSLTP) $(XSLROOT)/site.xsl $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - - -people/%.html: $(XMLROOT)/people/%.xml \ - $(XSLROOT)/person.xsl \ - $(XHTMLCONTENT) - $(XSLTP) $(XSLROOT)/person.xsl $< | $(XSLTP) --param path_to_top "'../..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - - -publications/index.html: $(XMLROOT)/publications/index.xml \ - $(XSLROOT)/publications-index.xsl \ - $(XHTMLCONTENT) - $(XSLTP) $(XSLROOT)/publications-index.xsl $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - - -publications/mowgli/%_on_line.html: $(XMLROOT)/publications/mowgli/%_on_line.xml \ - $(XHTMLCONTENT) - $(XSLTP) --param path_to_top "'../..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) $< - - -publications/%.html: $(XMLROOT)/publications/%.xml \ - $(XSLROOT)/publication.xsl \ - $(XHTMLCONTENT) - $(XSLTP) $(XSLROOT)/publication.xsl $< | $(XSLTP) --param path_to_top "'../..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - -work-packages/index.html: $(XMLROOT)/work-packages/index.xml \ - $(XSLROOT)/work-packages_index.xsl \ - $(XHTMLCONTENT) - $(XSLTP) $(XSLROOT)/work-packages_index.xsl $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - - -work-packages/%.html: $(XMLROOT)/work-packages/%.xml \ - $(XSLROOT)/work-package.xsl \ - $(XHTMLCONTENT) - $(XSLTP) $(XSLROOT)/work-package.xsl $< | $(XSLTP) --param path_to_top "'..'" --param use_frames "'$(FRAMES)'" -o $@ $(XHTMLCONTENT) - - - -clean: - rm -f $(DOCUMENTS) approaching-deadlines.xml latest-news.xml -.PHONY: clean - -install: $(DOCUMENTS) - mkdir -p $(HTMLDESTDIR) - for i in $(dir $(DOCUMENTS)); do \ - mkdir -p $(HTMLDESTDIR)/$$i; \ - done - for i in $(DOCUMENTS); do \ - cp $$i $(HTMLDESTDIR)/$$i; \ - done - mkdir -p $(DESTDIR)/images - cp ../images/*.* $(DESTDIR)/images - mkdir -p $(DESTDIR)/style - cp ../style/*.css $(DESTDIR)/style - cp ../htaccess $(HTMLDESTDIR)/members/.htaccess - mkdir -p $(DESTDIR)/misc/proposal - cp ../htaccess $(DESTDIR)/misc/proposal/.htaccess - cp ../misc/proposal/*.* $(DESTDIR)/misc/proposal - mkdir -p $(DESTDIR)/misc/contract - cp ../htaccess $(DESTDIR)/misc/contract/.htaccess - cp ../misc/contract/*.* $(DESTDIR)/misc/contract - cp ../misc/kick-off/*.* $(DESTDIR)/misc/kick-off - cp ../htaccess $(DESTDIR)/misc/kick-off/.htaccess - if [ $(FRAMES) = yes ] ; \ - then \ - sed s/menu\\.html/$(HTMLDESTDIRSUFFIX)\\/menu\\.html/ $(DESTDIR)/index.html ; \ - else \ - cp home.html $(HTMLDESTDIR)/index.html ; \ - fi - -uninstall: - rm -rf $(DESTDIR)/* - -$(XSLROOT)/%.xsl : $(XSLROOT)/common.xsl -$(XSLROOT)/latest-news.xsl : $(XSLROOT)/news.xsl -$(DOCUMENTS) : $(XSLROOT)/common.xsl - diff --git a/helm/mowgli/home/html/deliverables/distribution/.cvsignore b/helm/mowgli/home/html/deliverables/distribution/.cvsignore deleted file mode 100644 index 24596ca98..000000000 --- a/helm/mowgli/home/html/deliverables/distribution/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -d5a.html -d5b.html diff --git a/helm/mowgli/home/html/deliverables/information-dissemination-and-exploitation/.cvsignore b/helm/mowgli/home/html/deliverables/information-dissemination-and-exploitation/.cvsignore deleted file mode 100644 index 4723c15bf..000000000 --- a/helm/mowgli/home/html/deliverables/information-dissemination-and-exploitation/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -d7a.html -d7b.html diff --git a/helm/mowgli/home/html/deliverables/interfaces/.cvsignore b/helm/mowgli/home/html/deliverables/interfaces/.cvsignore deleted file mode 100644 index c94f4c4e1..000000000 --- a/helm/mowgli/home/html/deliverables/interfaces/.cvsignore +++ /dev/null @@ -1,5 +0,0 @@ -d4a.html -d4b.html -d4c.html -d4d.html -d4e.html diff --git a/helm/mowgli/home/html/deliverables/metadata/.cvsignore b/helm/mowgli/home/html/deliverables/metadata/.cvsignore deleted file mode 100644 index 00ba3da81..000000000 --- a/helm/mowgli/home/html/deliverables/metadata/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -d3a.html -d3b.html diff --git a/helm/mowgli/home/html/deliverables/project-management/.cvsignore b/helm/mowgli/home/html/deliverables/project-management/.cvsignore deleted file mode 100644 index 28430659f..000000000 --- a/helm/mowgli/home/html/deliverables/project-management/.cvsignore +++ /dev/null @@ -1,4 +0,0 @@ -d0a.html -d0b.html -d0c.html -d0d.html diff --git a/helm/mowgli/home/html/deliverables/requirement-analysis/.cvsignore b/helm/mowgli/home/html/deliverables/requirement-analysis/.cvsignore deleted file mode 100644 index e9c6328a9..000000000 --- a/helm/mowgli/home/html/deliverables/requirement-analysis/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -d1a.html -d1b.html -d1c.html diff --git a/helm/mowgli/home/html/deliverables/testing-and-validation/.cvsignore b/helm/mowgli/home/html/deliverables/testing-and-validation/.cvsignore deleted file mode 100644 index cf0f34543..000000000 --- a/helm/mowgli/home/html/deliverables/testing-and-validation/.cvsignore +++ /dev/null @@ -1,4 +0,0 @@ -d6a.html -d6b.html -d6c.html -d6d.html diff --git a/helm/mowgli/home/html/deliverables/transformation/.cvsignore b/helm/mowgli/home/html/deliverables/transformation/.cvsignore deleted file mode 100644 index 06fef3a09..000000000 --- a/helm/mowgli/home/html/deliverables/transformation/.cvsignore +++ /dev/null @@ -1,7 +0,0 @@ -d2a.html -d2b.html -d2c.html -d2d.html -d2e.html -d2f.html -d2g.html diff --git a/helm/mowgli/home/html/members/.cvsignore b/helm/mowgli/home/html/members/.cvsignore deleted file mode 100644 index 90c0ce079..000000000 --- a/helm/mowgli/home/html/members/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -index.html -ml-help-example.txt -kick-off.html diff --git a/helm/mowgli/home/html/mowgli-events/.cvsignore b/helm/mowgli/home/html/mowgli-events/.cvsignore deleted file mode 100644 index 227036e81..000000000 --- a/helm/mowgli/home/html/mowgli-events/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -kick-off.html diff --git a/helm/mowgli/home/html/people/aei/.cvsignore b/helm/mowgli/home/html/people/aei/.cvsignore deleted file mode 100644 index dd435367d..000000000 --- a/helm/mowgli/home/html/people/aei/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -kelley.html -pollney.html -schutz.html -velden.html -wegner.html -weyher.html diff --git a/helm/mowgli/home/html/people/bologna/.cvsignore b/helm/mowgli/home/html/people/bologna/.cvsignore deleted file mode 100644 index fed7a15ef..000000000 --- a/helm/mowgli/home/html/people/bologna/.cvsignore +++ /dev/null @@ -1,5 +0,0 @@ -asperti.html -guidi.html -padovani.html -sacerdoti.html -schena.html diff --git a/helm/mowgli/home/html/people/dfki/.cvsignore b/helm/mowgli/home/html/people/dfki/.cvsignore deleted file mode 100644 index 05d2b68e9..000000000 --- a/helm/mowgli/home/html/people/dfki/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -kohlhase.html -melis.html -siekmann.html -moschner.html -goguadze.html -libbrecht.html diff --git a/helm/mowgli/home/html/people/inria/.cvsignore b/helm/mowgli/home/html/people/inria/.cvsignore deleted file mode 100644 index 0c7a9ceea..000000000 --- a/helm/mowgli/home/html/people/inria/.cvsignore +++ /dev/null @@ -1,10 +0,0 @@ -amerkad.html -bertot.html -chicli.html -delahaye.html -herbelin.html -naciri.html -pottier.html -rideau.html -thery.html -werner.html diff --git a/helm/mowgli/home/html/people/nijmegen/.cvsignore b/helm/mowgli/home/html/people/nijmegen/.cvsignore deleted file mode 100644 index cb89baf3a..000000000 --- a/helm/mowgli/home/html/people/nijmegen/.cvsignore +++ /dev/null @@ -1,9 +0,0 @@ -barendregt.html -barreiro.html -cohen.html -cruz-filipe.html -geuvers.html -niqui.html -stein.html -synek.html -wiedijk.html diff --git a/helm/mowgli/home/html/people/trusted-logic/.cvsignore b/helm/mowgli/home/html/people/trusted-logic/.cvsignore deleted file mode 100644 index a438e331b..000000000 --- a/helm/mowgli/home/html/people/trusted-logic/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -bolignano.html -gimenez.html -loiseaux.html diff --git a/helm/mowgli/home/html/proposal/.cvsignore b/helm/mowgli/home/html/proposal/.cvsignore deleted file mode 100644 index 4807b69dc..000000000 --- a/helm/mowgli/home/html/proposal/.cvsignore +++ /dev/null @@ -1,9 +0,0 @@ -project-management.html -project-objectives.html -project-summary.html -contribution.html -innovation.html -EC-contribution.html -econ-scient-tech-prospects.html -project-planning.html -project-components.html diff --git a/helm/mowgli/home/html/publications/.cvsignore b/helm/mowgli/home/html/publications/.cvsignore deleted file mode 100644 index dcaf71693..000000000 --- a/helm/mowgli/home/html/publications/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -index.html diff --git a/helm/mowgli/home/html/publications/mowgli/.cvsignore b/helm/mowgli/home/html/publications/mowgli/.cvsignore deleted file mode 100644 index 05440f9e4..000000000 --- a/helm/mowgli/home/html/publications/mowgli/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -crimea2002_aw.html -crimea2002_aw_on_line.html diff --git a/helm/mowgli/home/html/publications/others/.cvsignore b/helm/mowgli/home/html/publications/others/.cvsignore deleted file mode 100644 index 00a053567..000000000 --- a/helm/mowgli/home/html/publications/others/.cvsignore +++ /dev/null @@ -1,18 +0,0 @@ -category_al.html -crimea2001_apss.html -cup_s.html -cup_s2.html -extreme2001_apss.html -har_bg.html -jep_ws.html -jep_wwsw.html -jlp2001_scg.html -mathml2000_apss.html -mscs_gb.html -tcs2001_og.html -tphols2000_gwz.html -tphols2001_apss.html -cc.html -cup_hp91.html -cup_hp93.html -w3c_bl98.html \ No newline at end of file diff --git a/helm/mowgli/home/html/sites/.cvsignore b/helm/mowgli/home/html/sites/.cvsignore deleted file mode 100644 index 66f60b77e..000000000 --- a/helm/mowgli/home/html/sites/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -aei.html -bologna.html -dfki.html -inria.html -nijmegen.html -trusted-logic.html diff --git a/helm/mowgli/home/html/slides/.cvsignore b/helm/mowgli/home/html/slides/.cvsignore deleted file mode 100644 index 64a8aa4e0..000000000 --- a/helm/mowgli/home/html/slides/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -mowgligroup.html diff --git a/helm/mowgli/home/html/software/.cvsignore b/helm/mowgli/home/html/software/.cvsignore deleted file mode 100644 index dcaf71693..000000000 --- a/helm/mowgli/home/html/software/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -index.html diff --git a/helm/mowgli/home/html/work-packages/.cvsignore b/helm/mowgli/home/html/work-packages/.cvsignore deleted file mode 100644 index f902f78ff..000000000 --- a/helm/mowgli/home/html/work-packages/.cvsignore +++ /dev/null @@ -1,9 +0,0 @@ -index.html -distribution.html -information-dissemination-and-exploitation.html -interfaces.html -metadata.html -project-management.html -requirement-analysis.html -testing-and-validation.html -transformation.html diff --git a/helm/mowgli/home/images/NextArrow.gif b/helm/mowgli/home/images/NextArrow.gif deleted file mode 100644 index fcd28bac0..000000000 Binary files a/helm/mowgli/home/images/NextArrow.gif and /dev/null differ diff --git a/helm/mowgli/home/images/PreviousArrow.gif b/helm/mowgli/home/images/PreviousArrow.gif deleted file mode 100644 index 489817a82..000000000 Binary files a/helm/mowgli/home/images/PreviousArrow.gif and /dev/null differ diff --git a/helm/mowgli/home/images/arch.png b/helm/mowgli/home/images/arch.png deleted file mode 100644 index 7603bbfc2..000000000 Binary files a/helm/mowgli/home/images/arch.png and /dev/null differ diff --git a/helm/mowgli/home/images/gantt_new.png b/helm/mowgli/home/images/gantt_new.png deleted file mode 100644 index 5481b8776..000000000 Binary files a/helm/mowgli/home/images/gantt_new.png and /dev/null differ diff --git a/helm/mowgli/home/images/istbutton.gif b/helm/mowgli/home/images/istbutton.gif deleted file mode 100644 index f8e8097d0..000000000 Binary files a/helm/mowgli/home/images/istbutton.gif and /dev/null differ diff --git a/helm/mowgli/home/images/istbutton_small.gif b/helm/mowgli/home/images/istbutton_small.gif deleted file mode 100644 index f3b945e90..000000000 Binary files a/helm/mowgli/home/images/istbutton_small.gif and /dev/null differ diff --git a/helm/mowgli/home/images/istdrop.gif b/helm/mowgli/home/images/istdrop.gif deleted file mode 100644 index db2a1cb25..000000000 Binary files a/helm/mowgli/home/images/istdrop.gif and /dev/null differ diff --git a/helm/mowgli/home/images/logo.png b/helm/mowgli/home/images/logo.png deleted file mode 100644 index 970958231..000000000 Binary files a/helm/mowgli/home/images/logo.png and /dev/null differ diff --git a/helm/mowgli/home/images/mowgli_combo.gif b/helm/mowgli/home/images/mowgli_combo.gif deleted file mode 100644 index 5c8a6b4ad..000000000 Binary files a/helm/mowgli/home/images/mowgli_combo.gif and /dev/null differ diff --git a/helm/mowgli/home/images/mowgli_combo.png b/helm/mowgli/home/images/mowgli_combo.png deleted file mode 100644 index 47c989b0e..000000000 Binary files a/helm/mowgli/home/images/mowgli_combo.png and /dev/null differ diff --git a/helm/mowgli/home/images/mowgli_parquet.png b/helm/mowgli/home/images/mowgli_parquet.png deleted file mode 100644 index 8deab0da8..000000000 Binary files a/helm/mowgli/home/images/mowgli_parquet.png and /dev/null differ diff --git a/helm/mowgli/home/images/mowgli_parquet_light.png b/helm/mowgli/home/images/mowgli_parquet_light.png deleted file mode 100644 index 9c404dbfc..000000000 Binary files a/helm/mowgli/home/images/mowgli_parquet_light.png and /dev/null differ diff --git a/helm/mowgli/home/images/pert_new.png b/helm/mowgli/home/images/pert_new.png deleted file mode 100644 index b84e1bf67..000000000 Binary files a/helm/mowgli/home/images/pert_new.png and /dev/null differ diff --git a/helm/mowgli/home/misc/contract/MOWGLIfinal-for-ceto.zip b/helm/mowgli/home/misc/contract/MOWGLIfinal-for-ceto.zip deleted file mode 100644 index c1d986b0f..000000000 Binary files a/helm/mowgli/home/misc/contract/MOWGLIfinal-for-ceto.zip and /dev/null differ diff --git a/helm/mowgli/home/misc/contract/RTD-annex2-rtd-final.pdf b/helm/mowgli/home/misc/contract/RTD-annex2-rtd-final.pdf deleted file mode 100644 index 6b696d171..000000000 Binary files a/helm/mowgli/home/misc/contract/RTD-annex2-rtd-final.pdf and /dev/null differ diff --git a/helm/mowgli/home/misc/contract/RTD-annex3-ist-fet.pdf b/helm/mowgli/home/misc/contract/RTD-annex3-ist-fet.pdf deleted file mode 100644 index dcb7ca2ab..000000000 Binary files a/helm/mowgli/home/misc/contract/RTD-annex3-ist-fet.pdf and /dev/null differ diff --git a/helm/mowgli/home/misc/contract/RTD-audit-cert-annex4.pdf b/helm/mowgli/home/misc/contract/RTD-audit-cert-annex4.pdf deleted file mode 100644 index 2ed10963f..000000000 Binary files a/helm/mowgli/home/misc/contract/RTD-audit-cert-annex4.pdf and /dev/null differ diff --git a/helm/mowgli/home/misc/contract/mowgli-an1-final.pdf b/helm/mowgli/home/misc/contract/mowgli-an1-final.pdf deleted file mode 100644 index 0dbd1ec59..000000000 Binary files a/helm/mowgli/home/misc/contract/mowgli-an1-final.pdf and /dev/null differ diff --git a/helm/mowgli/home/misc/contract/mowgli-ctr-final.pdf b/helm/mowgli/home/misc/contract/mowgli-ctr-final.pdf deleted file mode 100644 index fbb1902fa..000000000 Binary files a/helm/mowgli/home/misc/contract/mowgli-ctr-final.pdf and /dev/null differ diff --git a/helm/mowgli/home/misc/kick-off/AIP_Intro.ppt b/helm/mowgli/home/misc/kick-off/AIP_Intro.ppt deleted file mode 100644 index 7ce24c27a..000000000 Binary files a/helm/mowgli/home/misc/kick-off/AIP_Intro.ppt and /dev/null differ diff --git a/helm/mowgli/home/misc/kick-off/KM2002GO.ps b/helm/mowgli/home/misc/kick-off/KM2002GO.ps deleted file mode 100644 index 51f022e01..000000000 --- a/helm/mowgli/home/misc/kick-off/KM2002GO.ps +++ /dev/null @@ -1,1984 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvipsk 5.86 p1.5d Copyright 1996-2001 ASCII Corp.(www-ptex@ascii.co.jp) -%%based on dvipsk 5.86 Copyright 1999 Radical Eye Software (www.radicaleye.com) -%%Title: KM2002GO.dvi -%%Pages: 14 -%%PageOrder: Ascend -%%Orientation: Landscape -%%BoundingBox: 0 0 596 842 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips KM2002GO.dvi -o KM2002GO.ps -%DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2002.04.03:0305 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 -def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 -rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 -N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop -false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A -length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} -forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ -BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat -{BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch -round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 -rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B -/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} -B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p --3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ -0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -%%BeginProcSet: pstricks.pro -%! -% PostScript prologue for pstricks.tex. -% Version 97 patch 3, 98/06/01 -% For distribution, see pstricks.tex. -% -/tx@Dict 200 dict def tx@Dict begin -/ADict 25 dict def -/CM { matrix currentmatrix } bind def -/SLW /setlinewidth load def -/CLW /currentlinewidth load def -/CP /currentpoint load def -/ED { exch def } bind def -/L /lineto load def -/T /translate load def -/TMatrix { } def -/RAngle { 0 } def -/Atan { /atan load stopped { pop pop 0 } if } def -/Div { dup 0 eq { pop } { div } ifelse } def -/NET { neg exch neg exch T } def -/Pyth { dup mul exch dup mul add sqrt } def -/PtoC { 2 copy cos mul 3 1 roll sin mul } def -/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } -def -/PathLength { flattenpath /z 0 def { /y1 ED /x1 ED /y2 y1 def /x2 x1 def -} { /y ED /x ED PathLength@ } {} { /y y2 def /x x2 def PathLength@ } -/pathforall load stopped { pop pop pop pop } if z } def -/STP { .996264 dup scale } def -/STV { SDict begin normalscale end STP } def -/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def -PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y -mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul -/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] -0 } ifelse setdash stroke } def -/DotLine { /b PathLength def /a ED /z ED /y CLW def /z y z add def a 0 gt -{ /b b a div def } { a 0 eq { /b b y sub def } { a -3 eq { /b b y add -def } if } ifelse } ifelse [ 0 b b z Div round Div dup 0 le { pop 1 } if -] a 0 gt { 0 } { y 2 div a -2 gt { neg } if } ifelse setdash 1 -setlinecap stroke } def -/LineFill { gsave abs CLW add /a ED a 0 dtransform round exch round exch -2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 -% DG/SR modification begin - Dec. 12, 1997 - Patch 2 -%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a -itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a -% DG/SR modification end -Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict -/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1 -% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) -% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } -% def -a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore -pop pop } def -% DG/SR modification end -/BeginArrow { ADict begin /@mtrx CM def gsave 2 copy T 2 index sub neg -exch 3 index sub exch Atan rotate newpath } def -/EndArrow { @mtrx setmatrix CP grestore end } def -/Arrow { CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 -scale } if w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill -grestore } def -/Tbar { CLW mul add /z ED z -2 div CLW 2 div moveto z 0 rlineto stroke 0 -CLW moveto } def -/Bracket { CLW mul add dup CLW sub 2 div /x ED mul CLW add /y ED /z CLW 2 -div def x neg y moveto x neg CLW 2 div L x CLW 2 div L x y L stroke 0 -CLW moveto } def -/RoundBracket { CLW mul add dup 2 div /x ED mul /y ED /mtrx CM def 0 CLW -2 div T x y mul 0 ne { x y scale } if 1 1 moveto .85 .5 .35 0 0 0 -curveto -.35 0 -.85 .5 -1 1 curveto mtrx setmatrix stroke 0 CLW moveto } -def -/SD { 0 360 arc fill } def -/EndDot { { /z DS def } { /z 0 def } ifelse /b ED 0 z DS SD b { 0 z DS -CLW sub SD } if 0 DS z add CLW 4 div sub moveto } def -/Shadow { [ { /moveto load } { /lineto load } { /curveto load } { -/closepath load } /pathforall load stopped { pop pop pop pop CP /moveto -load } if ] cvx newpath 3 1 roll T exec } def -/NArray { aload length 2 div dup dup cvi eq not { exch pop } if /n exch -cvi def } def -/NArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if -f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def -/Line { NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub -def n { Lineto } repeat CP 4 2 roll ArrowB L pop pop } if } def -/Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 } -ifelse { pop } repeat a } def -/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq -and { pop pop /n n 1 sub def } if } def -/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } -repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 -ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1 -moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto -Lineto pop pop closepath } ifelse } def -/Diamond { /mtrx CM def T rotate /h ED /w ED dup 0 eq { pop } { CLW mul -neg /d ED /a w h Atan def /h d a sin Div h add def /w d a cos Div w add -def } ifelse mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 -div /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx -setmatrix } def -% DG modification begin - Jan. 15, 1997 -%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { -%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2 -%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0 -%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx -%setmatrix } def -/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup -CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2 -div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0 -d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx -% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) -% setmatrix } def -setmatrix pop } def -% DG/SR modification end -/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth -def } def -/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth -def } def -/CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1 -def CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp -mul dy1 l0 c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos -abs b exp a mul dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def -/y2 y l0 dy mul m mul sub def /dx l1 dx mul m mul neg def /dy l1 dy mul -m mul neg def } def -/IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } -ifelse /a a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def } -def -/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def -/NC { CC x1 y1 x2 y2 x y curveto } def -/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def -/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def -/NAC { x2 y2 x y curveto CC x1 y1 } def -/EAC { x2 y2 x y ArrowB curveto pop pop } def -/OpenCurve { NArray n 3 lt { n { pop pop } repeat } { BOC /n n 3 sub def -n { NC } repeat EOC } ifelse } def -/AltCurve { { false NArray n 2 mul 2 roll [ n 2 mul 3 sub 1 roll ] aload -/Points ED n 2 mul -2 roll } { false NArray } ifelse n 4 lt { n { pop -pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse } def -/ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt { -CheckClosed } if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC } -repeat closepath pop pop } ifelse } def -/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def -/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def -/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore } -def -/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix -rotate matrix concatmatrix exch findfont exch makefont setfont } def -/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto -x1 y1 lineto closepath } def -/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1 -y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div -exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse -/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto -x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath } -ifelse } def -/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add -/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq { -pop pop Rect } { OvalFrame } ifelse } def -/BezierNArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop -} if n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat f { ] -aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def -/OpenBezier { BezierNArray n 1 eq { pop pop } { ArrowA n 4 sub 3 idiv { 6 -2 roll 4 2 roll curveto } repeat 6 2 roll 4 2 roll ArrowB curveto } -ifelse } def -/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { -6 2 roll 4 2 roll curveto } repeat closepath } ifelse } def -/BezierShowPoints { gsave Points aload length 2 div cvi /n ED moveto n 1 -sub { lineto } repeat CLW 2 div SLW [ 4 4 ] 0 setdash stroke grestore } -def -/Parab { /y0 exch def /x0 exch def /y1 exch def /x1 exch def /dx x0 x1 -sub 3 div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA -x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0 -y0 x0 2 mul x1 sub y1 ] def } def -/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } -if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if -/dx ED dy div round dy mul /y0 ED dx div round dx mul /x0 ED dy div -round cvi /y2 ED dx div round cvi /x2 ED dy div round cvi /y1 ED dx div -round cvi /x1 ED /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def /w x2 x1 sub -0 gt { 1 } { -1 } ifelse def b 0 gt { /z1 b 4 div CLW 2 div add def -/Helvetica findfont b scalefont setfont /b b .95 mul CLW 2 div add def } -if systemdict /setstrokeadjust known { true setstrokeadjust /t { } def } -{ /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add -exch itransform } bind def } ifelse gsave n 0 gt { 1 setlinecap [ 0 dy n -div ] dy n div 2 div setdash } { 2 setlinecap } ifelse /i x1 def /f y1 -dy mul n 0 gt { dy n div 2 div h mul sub } if def /g y2 dy mul n 0 gt { -dy n div 2 div h mul add } if def x2 x1 sub w mul 1 add dup 1000 gt { -pop 1000 } if { i dx mul dup y0 moveto b 0 gt { gsave c i a cvs dup -stringwidth pop /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse h 0 gt {b neg} -{z1} ifelse rmoveto show grestore } if dup t f moveto g t L stroke /i i -w add def } repeat grestore gsave n 0 gt -% DG/SR modification begin - Nov. 7, 1997 - Patch 1 -%{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash } -{ 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash } -% DG/SR modification end -{ 2 setlinecap } ifelse /i y1 def /f x1 dx mul -n 0 gt { dx n div 2 div w mul sub } if def /g x2 dx mul n 0 gt { dx n -div 2 div w mul add } if def y2 y1 sub h mul 1 add dup 1000 gt { pop -1000 } if { newpath i dy mul dup x0 exch moveto b 0 gt { gsave c i a cvs -dup stringwidth pop /z2 ED w 0 gt {z1 z2 add neg} {z1} ifelse h 0 gt -{z1} {b neg} ifelse rmoveto show grestore } if dup f exch t moveto g -exch t L stroke /i i h add def } repeat grestore } def -/ArcArrow { /d ED /b ED /a ED gsave newpath 0 -1000 moveto clip newpath 0 -1 0 0 b grestore c mul /e ED pop pop pop r a e d PtoC y add exch x add -exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c -mul neg d } def -/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def -/Rot { CP CP translate 3 -1 roll neg rotate NET } def -/RotBegin { tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } -def } if /TMatrix [ TMatrix CM ] cvx def /a ED a Rot /RAngle [ RAngle -dup a add ] cvx def } def -/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] -cvx def } def -/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def -/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def -/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def -/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s -abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b -div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } { -h1 abs h sub dup s mul abs } ifelse } def -/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s -mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q -{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add -exch } def -/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible -/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def -} if } ifelse } def -/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def -/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit -neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def -/IfVisible true def } def -end -% END pstricks.pro - -%%EndProcSet -%%BeginProcSet: pst-dots.pro -%!PS-Adobe-2.0 -%%Title: Dot Font for PSTricks 97 - Version 97, 93/05/07. -%%Creator: Timothy Van Zandt -%%Creation Date: May 7, 1993 -10 dict dup begin - /FontType 3 def - /FontMatrix [ .001 0 0 .001 0 0 ] def - /FontBBox [ 0 0 0 0 ] def - /Encoding 256 array def - 0 1 255 { Encoding exch /.notdef put } for - Encoding - dup (b) 0 get /Bullet put - dup (c) 0 get /Circle put - dup (C) 0 get /BoldCircle put - dup (u) 0 get /SolidTriangle put - dup (t) 0 get /Triangle put - dup (T) 0 get /BoldTriangle put - dup (r) 0 get /SolidSquare put - dup (s) 0 get /Square put - dup (S) 0 get /BoldSquare put - dup (q) 0 get /SolidPentagon put - dup (p) 0 get /Pentagon put - (P) 0 get /BoldPentagon put - /Metrics 13 dict def - Metrics begin - /Bullet 1000 def - /Circle 1000 def - /BoldCircle 1000 def - /SolidTriangle 1344 def - /Triangle 1344 def - /BoldTriangle 1344 def - /SolidSquare 886 def - /Square 886 def - /BoldSquare 886 def - /SolidPentagon 1093.2 def - /Pentagon 1093.2 def - /BoldPentagon 1093.2 def - /.notdef 0 def - end - /BBoxes 13 dict def - BBoxes begin - /Circle { -550 -550 550 550 } def - /BoldCircle /Circle load def - /Bullet /Circle load def - /Triangle { -571.5 -330 571.5 660 } def - /BoldTriangle /Triangle load def - /SolidTriangle /Triangle load def - /Square { -450 -450 450 450 } def - /BoldSquare /Square load def - /SolidSquare /Square load def - /Pentagon { -546.6 -465 546.6 574.7 } def - /BoldPentagon /Pentagon load def - /SolidPentagon /Pentagon load def - /.notdef { 0 0 0 0 } def - end - /CharProcs 20 dict def - CharProcs begin - /Adjust { - 2 copy dtransform floor .5 add exch floor .5 add exch idtransform - 3 -1 roll div 3 1 roll exch div exch scale - } def - /CirclePath { 0 0 500 0 360 arc closepath } def - /Bullet { 500 500 Adjust CirclePath fill } def - /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath eofill } def - /BoldCircle { 500 500 Adjust CirclePath .8 .8 scale CirclePath eofill } def - /BoldCircle { CirclePath .8 .8 scale CirclePath eofill } def - /TrianglePath { - 0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath - } def - /SolidTriangle { TrianglePath fill } def - /Triangle { TrianglePath .85 .85 scale TrianglePath eofill } def - /BoldTriangle { TrianglePath .7 .7 scale TrianglePath eofill } def - /SquarePath { - -450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto - closepath - } def - /SolidSquare { SquarePath fill } def - /Square { SquarePath .89 .89 scale SquarePath eofill } def - /BoldSquare { SquarePath .78 .78 scale SquarePath eofill } def - /PentagonPath { - -337.8 -465 moveto - 337.8 -465 lineto - 546.6 177.6 lineto - 0 574.7 lineto - -546.6 177.6 lineto - closepath - } def - /SolidPentagon { PentagonPath fill } def - /Pentagon { PentagonPath .89 .89 scale PentagonPath eofill } def - /BoldPentagon { PentagonPath .78 .78 scale PentagonPath eofill } def - /.notdef { } def - end - /BuildGlyph { - exch - begin - Metrics 1 index get exec 0 - BBoxes 3 index get exec - setcachedevice - CharProcs begin load exec end - end - } def - /BuildChar { - 1 index /Encoding get exch get - 1 index /BuildGlyph get exec - } bind def -end -/PSTricksDotFont exch definefont pop -% END pst-dots.pro - -%%EndProcSet -%%BeginProcSet: special.pro -%! -TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N -/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N -/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N -/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ -/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho -X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B -/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ -/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known -{userdict/md get type/dicttype eq{userdict begin md length 10 add md -maxlength ge{/md md dup length 20 add dict copy def}if end md begin -/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S -atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ -itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll -transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll -curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf -pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} -if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 --1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 -get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip -yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub -neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ -noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop -90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get -neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr -1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr -2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 --1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S -TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ -Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale -}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState -save N userdict maxlength dict begin/magscale true def normalscale -currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts -/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x -psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx -psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub -TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ -psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 -roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath -moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict -begin/SpecialSave save N gsave normalscale currentpoint TR -@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ -CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto -closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx -sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR -}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse -CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury -lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N -/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} -repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N -/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX -currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY -moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X -/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 -1 startangle endangle arc savematrix setmatrix}N end - -%%EndProcSet -%%BeginProcSet: color.pro -%! -TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop -setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll -}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def -/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ -setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ -/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch -known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC -/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC -/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 -setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 -setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 -0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC -/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 -setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 -0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ -0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ -0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC -/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 -setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 -setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 -0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC -/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 -setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 -0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ -0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ -0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC -/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 -setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC -/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 -0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 -0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 -0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 -setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 -0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC -/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 -setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 -0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 -1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC -/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 -setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ -0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} -DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 -setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 -setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 -setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end - -%%EndProcSet -TeXDict begin 55380996 39158280 2074 600 600 (KM2002GO.dvi) -@start -%DVIPSBitmapFont: Fa cmsy10 20.74 1 -/Fa 1 33 df 32 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmr10 20.74 19 -/Fb 19 122 df<94380FFF804CB512F0041F14FE047F80922701FFFC0113C003079039C0 -003FE0031F90C7EA0FF0DB3FFCEC03F8DBFFF06E7E4A4914004A0180EC07FE4A90C8121F -4A484B7E021F5E4A5A5D147F4A4892B57E7390C7FC495BA349715A4B6F5A735AF101C096 -C9FCB3A296380FFF8095B6FCBCFCA6D8000301C0C8123F8585A285B3B3B3496D4B7FA201 -3F01FC037F13F8007FB600FE90B712FCA6567A7CF960> 12 D -45 D 68 -D 77 D I 83 D 97 D I<1A7E95380FFFFE0503B5FCA6EF0003F0 -007F193FA2191FB3AE923801FFE0031F13FE92B612C0020315F0020F9038E01FF8913A3F -FE0003FEDA7FF8EB007FDAFFE0EC3F9F010349EC0FDF4949EC07FF4948C87E494881013F -824948167F495A193F485B48181F5C5A485BA25AA291CAFC5AA35A5BA312FFAE127FA37F -A27EA37E807EA27E806C183F6C7F197F6C6D16FF137F6D6C5D6D6C4B7F6D6C5D6D6CDB0F -DF7F6D6DDA3F9F13F06D6DDA7F1FEBFFF06D01F0EB01FCDA7FFCEB07F8913A1FFF807FF0 -020790B512C002011500DA003F01FCEDFC00030301C00280C7FC547A7AF760> 100 -D<923807FFC0033F13FC4AB67E020715E0021F01017F913A7FF8003FFCDAFFE0EB0FFE49 -496D7E0107496D7F4990C76C7F49486E7F49488249486F7E01FF163F4A824849151F4884 -5C48717EA2485B1A804883A24890C9FCA21AC05A845BA312FF90BAFCA31A8049CCFCAA12 -7FA27FA27EA36C7FF10380F107C07E6E160F7E6C6DEE1F80A26CF03F006C7F6E167E017F -17FE6D6C5E6D6C4B5A6D6C15036D6D4A5A6D6D4A5A01006DEC3FC0DA7FF802FFC7FCDA1F -FEEB03FE913A0FFFC03FF8020390B55A020015C0031F49C8FC030113F0424F7BCC4D> I< -EB07E0EB1FF8497E497E90B5FC4880A86C91C7FC6D5A6D5A6D5AEB07E090C9FCB3A4EC1F -8048B5FCB6FCA6C6FC131F7FA27FB3B3B3497FA2017F13F0B712F8A625747BF32F> 105 -D 107 D I<023FDA1FFEEE3FFC0003B591B500E04AB512C0B601 -0702FC020F14F8041F6E023F8093283FE01FFF8090397FC03FFF93267F00036D9026FE00 -077F04FC6D9026E001F86D7FDB03F06D9026F007E06D7FC64A48027F49487F011F4A03F8 -49816D49486E6C48C86C7E4BC8143E6D013E031F49153F033CDCFE7882037C17F84B705A -4B6F49151F8C4B5FA34B5FA44B94C9FCB3B3A6496D4B6D4B7EA2017F01F892B500F04AB5 -12E0B7D8FC01B7D8F803B712F0A6844C7ACB8F> I<023FEC1FFE0003B591B512E0B60107 -14FC041F80933A3FE01FFF8093267F00037F04FC6D7FDB03F06D7FC64A48147F011F4A81 -6D49486E7E4BC8FC6D013E151F033C82157C5D4B150F865DA35DA45DB3B3A6496D4B7FA2 -017F01F892B512F0B7D8FC01B712F8A6554C7ACB60> I I<023F -ECFF800003B5010713F0B6011F7F4C13FE9338FF83FF923801FC07922603F00F1380DB07 -E014C0C64B5A011FEB0F806DEB1F00151E6D133E153C037C6D138003786D130003F86D5A -4B6D5A94C8FCA25DA35DA65DB3B3A2497F81017F13FCB87EA63A4C7CCB43> 114 -D 116 D 121 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmex7 8.296 4 -/Fc 4 63 df<12F012FCB4FC13C0EA3FE0EA1FF86C7E6C7E6C6C7E6C7F6C7F137F6D7E6D -7E80130F806D7EA26D1380A36D13C0A315E07FB3B21B3E737E46> 57 -D 59 D 61 D I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmtt8 10.37 53 -/Fd 53 122 df<001E130F003FEB1F80397F803FC000FF14E0A4007F14C0A9EB001FA36C -1480A5003E130F001CEB07001B1A77B52E> 34 D<007FB612C0A2B712E0A36C15C0A223 -077B9D2E> 45 D<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C0C6F8B2E> -I I I I I<0007B612804815C05AA3168001C0C8 -FCADEBC1FF01CF13E090B512F8818181020113809039F8007FC001E0EB3FE049131F6C48 -EB0FF06CC71207C8FC16F81503A3123E127F487EA2150716F0150F90C7EA1FE06C6C133F -6DEB7FC06C6CEBFF80EBFC076CB612006C14FC6C5C000114E06C6C1380D90FFCC7FC2536 -7CB42E> 53 D 56 D 60 D<007FB612FCA2B712FEA36C15FC6C15F8CAFCA7003FB612F84815FCB7 -12FEA36C15FCA227157DA42E> I<1278127EB4FC13C07FEA7FF87FEA1FFF6C7F000313E0 -6C7F38007FFC6D7E90380FFF806D7F010113F06D7FEC3FFE6E7E020713C080020013E015 -7F15FF020313C05C021F13004A5AECFFF8495B010713C0495BD93FFEC7FC495A3801FFF0 -485B000F13804890C8FCEA7FFC5BEAFFE05B90C9FC127E1278232D7BB02E> I<147F4A7E -A2497FA4497F14F7A401077F14E3A3010F7FA414C1011F7FA490383F80FEA590387F007F -A4498091B5FCA44881A29038FC001FA200038149130FA4D83FFFEB7FFE486DB5FCB51580 -A26C16006C496C5A29367EB52E> 65 D<003FB512F04814FEB7128016C06C15E06C15F0 -3A03F8001FF81507ED03FC150116FE1500A5150116FC150316F8150FED1FF090B612E016 -C01600A2168016E09039F8003FF0ED07F8ED03FC150116FE1500A2167FA616FF16FE1501 -1503ED07FC151F003FB612F84815F0B712E016C06C15006C14F828357FB42E> I<91387F -803C903903FFF03E010FEBFC7E49EBFEFE4913FF90B6FC48EBE07FEC801F3903FE000F48 -481307484813035B48481301A2485A15005B127F90C8FC167C16005A5AAB7E7EA2167C6D -14FE123F7FA26C7E15016C6C14FC6D13036C6CEB07F86C7E3A01FF801FF09138E07FE06C -90B512C0013F14806D14006D5B010313F89038007FC027377DB52E> I<007FB57EB612E0 -15F815FE816C15803807F0019138007FC0ED3FE0ED1FF0150FED07F8A2ED03FCA2150116 -FE1500A4167FAC16FEA3150116FCA21503ED07F8A2ED0FF0151FED3FE0ED7FC0EC01FF00 -7FB61280B712005D15F85D6C148028357EB42E> I<003FB612FC4881B7FCA27E7ED803F8 -C7FCA7167C93C7FCA415F84A7EA490B5FCA6EBF801A46E5A92C8FCA4161FEE3F80A8003F -B7FC5AB8FCA27E6C160029357EB42E> I<007FB612FEB8FCA47ED803F8C7127FA7163E16 -00A4157C15FEA490B5FCA6EBF800A4157C92C7FCAD387FFFE0B57E80A25C6C5B28357EB4 -2E> I<9138FE01E0903907FFC1F0011F13F34913FF5B90B6FC4813C14848C6FC4848137F -49133F4848131F5B001F140F5B123F491307A2127F90C7FCED03E092C7FC5A5AA7913801 -FFFE4A13FFA37E6C6D13FE91380007F0A27F003F140FA27F121F6D131F120F7F6C6C133F -6D137F6C6C13FF3801FF816C90B5FC7F7F6D13E70107EBC3E0D900FEC7FC28377DB52E> -I<003FB512FE4880B71280A26C15006C5C260007F0C7FCB3B3A5003FB512FE4880B71280 -A26C15006C5C21357AB42E> 73 D<0103B512C04914E016F0A216E06D14C090390001FC -00B3B0123E127FEAFF80A214035DEB000F397FE03FF090B55A6C5C6C5C6C91C7FC000313 -FC38007FE024367BB42E> I<387FFFF0B57EA46C5BD803F8C8FCB3AE167C16FEA8007FB6 -FCB7FCA46C15FC27357DB42E> 76 D I I<90387FFFC00003B512F8000F14FE4880A2481580EBF0013A7FC0007FC0 -49133FA290C7121FA34815E048140FB3A86C141FA26C15C0A36D133FA26D137F3A3FF803 -FF8090B6FC6C1500A26C5C000314F8C66C13C023377BB52E> I<003FB512E04814FCB7FC -16806C15C06C15E03A03F8007FF0ED1FF8150FED07FC1503150116FE1500A6150116FC15 -031507ED0FF8151FED7FF090B612E016C01680160015FC15E001F8C8FCAF383FFF80487F -B57EA26C5B6C5B27357EB42E> I<387FFFFEB612C015F08115FE7E3907F007FF02007F6F -7E153F151F82150FA5151F5E153F157F4B5A020790C7FC90B55AA215F85D81819038F003 -FEEC00FF8182153FA8EE87C0EE8FE0A5D87FFFEB1FDFB50080EBFFC08117806F13006C49 -6C5AC912F82B367EB42E> 82 D<90390FF80780D97FFF13C048B512CF4814FF5A5A381F -F80F383FE00349C6FC4848137F90C7FC00FE143FA2151FA46CEC0F806C6C90C7FC7F7FEA -3FF86CB47E6C13F86CEBFFC06C14F06C14FC6C6C7F010F7F01001480020F13C0020013E0 -153FED1FF0150FED07F8A2007C140312FEA56CEC07F0A26D130F6DEB1FE001F0133F01FF -EBFFC091B5128016005D00FC5CD8F83F13F0D87803138025377CB52E> I<003FB7FC4816 -80B8FCA43AFE007F003FA7007CED1F00C791C7FCB3AF90381FFFFC497F497FA26D5B6D5B -29357EB42E> I<3B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E0D8 -03F8C7EAFE00B3AF6D130100015DA26D130300005D6D13076D6C485AECC01F90393FF07F -E06DB55A6D5C6D91C7FC6D5B010013F8EC1FC02D3680B42E> I I 89 D 97 D I<903803FFE0011F13FC017F7F90B6FC48158012071400EA0FF84848EB7F0048 -5A49131C484890C7FC90C9FCA25A5AA77E7E7FED0F806C6CEB1FC07F6C6C133FD80FFCEB -7F803907FF81FF91B5120000015C6C5C6D5B011F13E0010390C7FC22257AA42E> I<9138 -07FF804A7FA480EC001FAAEB07F8EB3FFF4913DF48B6FC5A5A380FFE07381FF801EBE000 -4848137F153F4848131F90C7FCA25A5AA77E7E153F7F003F147F6D13FF6C6C5A6D5A380F -FE0F6CB7FC6C16806C14DF6C149F90383FFE1F90260FF80F130029357DB42E> I I I<16FC903903FC07FF90261FFF9F1380017F90B5FC90 -B712C05A4815BF3A07FE07FE3FD9F801EB1F803B0FF000FF0F00496DC7FC001F8149133F -A56D137F000F92C7FC6D5B6C6C485AEBFE0790B55A5D485C5D01DF1380D9C3FCC8FC01C0 -C9FCA27F7F6CB512F815FF16E04881488148819039E0000FFED87F80EB01FF90C87E00FE -ED3F80A248151FA46C153F007FED7F0001C0495AD83FF0EB07FED81FFEEB3FFC6CB65A6C -5D6C5DC61580011F01FCC7FC010313E02A3A7EA52E> I I I I I<387FFF -F0B57EA47EEA0003B3B3A5007FB612C0B712E0A46C15C023357BB42E> I<3A3FC1FC01FC -3A7FE7FF07FFB6009F138015BF6C91B512C07E0007010FEB0FE001FC13FC9039F807F807 -A201F013F0A201E013E0B33B3FFC0FFC0FFC3B7FFE1FFE1FFEB5393FFF3FFFA23B7FFE1F -FE1FFE3B3FFC0FFC0FFC302581A42E> I<397FF807F839FFFC3FFE91B57E90B67EA26C81 -0001EBF81F9138E00FF01480EC0007A25BA25BB23B7FFFF03FFFC0B56C4813E092B5FCA2 -816C496C13C02B257FA42E> I I<397FF80FF839FFFC7FFE01FDB57E -90B67E826C8100019038F83FF89138C007FCEC80034A6C7E491300498082A21780163FA7 -167F17007F5E6D495AA26E485AECC00F9138F03FF891B55A5E5E01FD91C7FC9038FC7FFC -EC0FF091C9FCAD387FFFF0B57EA46C5B29387FA42E> I 114 D<90383FFE3C48B512FE1207121F5A5AEB -E00738FF00014813005AA26C147C6C91C7FCEA7FF0EBFF806C13FE6CEBFFC0000714F000 -0114FCD8003F7F01007F02031380EC007F007CEC1FC000FE140FA27EA26D131F6DEB7F80 -9038F803FF90B612005D5D5D00F814E026781FFEC7FC22257AA42E> I I<3A7F -F801FFE0486C487FA4007F7F0001EB0007B3A3150F151F6D133F6D13FF6C90B612C017E0 -7F7F6D13E70103010313C02B257FA42E> I<3A3FFF80FFFE4801C17FB51580A26C16006C -01805B3A01F8000FE06D5CA20000141F6D5C137E153F017F91C7FC7FA290381F807EA214 -C0010F5BA214E0903807E1F8A2EB03F15D14F31301ECFBE0A2EB00FF5D147FA25D143FA3 -92C8FCA25C147EA214FE00075BEA1FC1383FE1F813E3EBE7F0131FEBFFE06C5B5C6C90C9 -FCEA07FCEA03F029387EA42E> 121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmtt8 16.592 1 -/Fe 1 65 df 64 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmsy8 16.592 1 -/Ff 1 16 df<4AB47E021F13F891B6FC010315C04981011F15F84981498190B8FC481780 -4817C0A24817E04817F0A24817F84817FCA34817FEA3BAFCAC6C17FEA36C17FCA36C17F8 -6C17F0A26C17E06C17C0A26C17806C17006D5D6D5D6D5D010715E06D5D010092C7FC021F -13F802011380383878BE49> 15 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmr8 16.592 72 -/Fg 72 127 df<933803FFFE047FEBFFF00307B7FC031F16C092B5D8800F13F8020301F8 -C713FE020F01C091381FFF804A90C800077FDA7FFC030113F04A486F7F010349EE7FFE49 -49707E4949707F4949707F4990CA6C7F4948717F4948717F48874A8348874A187F488748 -49721380A348497213C0A3481CE04A84AB6E606C1CC0A46C6D4E1380A36C1C006E606C63 -A26C6D4E5AA26C636D6C4D5BA26D6C4D5BA2011F626D6C4D5B6D97C7FC6F5E6D616D616F -161F6D616E6C4C5A023F60A26E6C4C5A020F60A26E6C4CC8FC00F801034D14F86F150100 -7C01014DEB01F0A202005F037E4B5A007E1B03003E023E4C14E0033F1507A2003F6E4C13 -076C1CC001C01A1F90B66C4AB6FCA36C1C80A56C1C0093C87E5D617AE06A> 10 -D<933807FFC093B512F8030F14FE033F6E7E9226FFFC017F02039039E0001FE0020F90C7 -EA07F04A486E7EDA3FF814074A48EC1FFC4A48143F495B495B4990C8FC4E7E49486F5AA2 -131F4A6F5A725AF003C095C9FCB094383FFFFEBAFCA526001FFCC8123F181FA2180FB3B3 -A8496C4B7E90B56C027F13C0007F02FF013FB61280A549617DE051> 12 -D<140C143FEC7F80ECFFC05B4913E05B15C05B491380491300495A5CEBFFF0485B485B48 -5B49C7FC485A485A485AEA7FC05B48C8FC5A127812301B1B62E049> 19 -D 34 -D 40 -D<127012F8127C7E7E6C7E7F6C7E6C7E6C7E6C7E137E137F6D7E6D7EA26D7E8013076D7E -80130180130080A26E7EA26E7EA281141F81A2140F81A2140781A36E7EA48180A41680A2 -80A616C0B3A31680A65CA21600A45C5DA44A5AA35D140FA25D141FA25D143F5DA24A5AA2 -4AC7FCA25C13015C13035C495A130F5C495AA2495A49C8FC137E5B485A485A485A485A5B -48C9FC123E5A5A1270228978E639> I 44 D I I<181E183E18 -7FA218FFA2EF01FEA218FC1703A218F81707A2EF0FF0A218E0171FA218C0173FA2EF7F80 -A218005FA25F1601A24C5AA25F1607A25F160FA24C5AA25F163FA25F167FA24CC7FCA25E -1501A25E1503A24B5AA25E150FA25E151FA24B5AA25E157FA24BC8FCA25D1401A25D1403 -A24A5AA25D140FA25D141FA24A5AA25D147FA292C9FC5CA2495AA25C1303A25C1307A249 -5AA25C131FA25C133FA2495AA291CAFC5BA25B1201A2485AA25B1207A25B120FA2485AA2 -5B123FA25B127FA248CBFCA25AA2127CA2388978E649> I I<153C157E15FE14031407141F14FF130748B5FCB6FCA2141F13F8EAFE00C7 -FCB3B3B3B04A7E4A7F49B512E0007FB81280A5315C74DB49> I<913807FFC0023F13FC49 -B67E010715E04915F890263FF80713FE903A7FC0007FFF49C7001F7FD801FC6E7F484802 -037FD807E06E7F48486E7F844848157F90C96C7E5A003E707E127E007C1880D87FE08148 -7E7F19C06D81A66C5A6C5A6C485DEA0780CA1480A25F1900A24D5AA260177F604D5A5E60 -4C5B4C5B95C7FC4C5A4C5A4C5A5F4C5A4C5A4B5B4B90C8FCED07FC4B5A4B5A4B5A4B5A93 -C9FC15FE4A5A4A5A4A5A4A48EC07C04A5A4A5A4AC8EA0F8014FC495A495A495A4948151F -4948160049C9FC017E5E495E48B9FC5A5A485F5A5A5AB9FCA260A33A5C79DB49> I<9138 -01FFF0021F13FF91B612E0010315F8010F9038007FFED91FF0EB0FFFD93FC06D7F49C700 -017F01FE6E7FD801F88248486F7E4982D807FC153F01FF828048836E80A66C495C6C90C8 -FC6C485E6C5A90C9FC4D5AA34D5A60A24C5B4C5B604C90C7FC4C5A4C5AEE7FF8923801FF -E0033F5B023FB5C8FC16F816FF17E091C7EA7FF8EE1FFE933807FF80707F04007F84717E -717E84717E19808319C0A219E0A28319F0A2EA07C0EA1FF0487E487EA2487EA319E05FA2 -5B6C4817C05B494B1380003EC9FC003F4C13006C6C5E6D4B5A6C6C15FFD807F85E6C6C4A -5B6CB46C010713C06C01E0011F5BD93FFF017F90C7FC6D90B512FC01075D010115C0D900 -3F91C8FC020113F03C5F7ADB49> I I<01E01670D801FCED03F0D9FF80143F02FEEB07FF91 -B75A606095C7FC17FC5F5F17C094C8FC16FC16E001F091C9FC91CBFCB2ED7FF0913807FF -FE021FEBFFC0027F80903AF1FFC03FF8903AF3FC000FFCD9F7F0EB03FFD9FFC06D7F4A6D -7F49C86C7E5B717E498249151F6C488290C97F170F84A3711380A419C0A5EA1FC0EA3FF0 -127F7F12FF7FA219805B5F5B1900EA7FC0007CC95B007E161F003E5F003F163F606C6C15 -7F6C6C5E6D4B5A6C6C4A5B6C6C4A5B6C6C4A90C7FC6CB4EC1FFED97FC0EB7FFC903A3FFC -03FFF06DB65A0107158001014AC8FC6D6C13F0020790C9FC3A5F79DB49> I I 56 D 58 D<007FBEFCA2BF1280A36C1D006C64D2FCB3A5003FBD12FE4888BF1280 -A36C1D00A2612578B472> 61 D 65 D I<94261FFF80EC03800403 -B500F81407041F02FF140F93B712C0030304F0131F030F9027FE003FFC133F033F01E0D9 -07FE137F92B5C8EAFF80020301F892383FC0FF4A01E0ED0FE14A0180ED07F1023F90C9EA -01FBDA7FFC70B5FC4A4883494983494983495B4949834990CB7E5C013F85494884495A87 -485B481B7F5C5A1C3F485BA21C1F485BA25A91CD120FA35AA299C7FC5BA212FFAE127FA2 -7FA36CF30F80A3807EA26C7F1C1F1D006C7FA26C636E193E7E6C6D197E1C7C6D6C19FC6D -6C61011F19016E4E5A6D7F6D6D4D5A6D6D4D5A6D6D4D5A6D6D4DC7FC6E6C5F6EB417FE02 -0F6DED03FC6E01E0ED07F06E01F8ED1FE0020001FFED7FC0033F01E0903803FF80030F01 -FED93FFEC8FC030390B612F8030016E0041F1580040302FCC9FCDC001F13C0596478E06A -> I I I I<94261FFF80EC03800403B500F81407041F02FF140F93 -B712C0030304F0131F030F9027FE003FFC133F033F01E0D907FE137F92B5C8EAFF800203 -01F892383FC0FF4A01E0ED0FE14A0180ED07F1023F90C9EA01FBDA7FFC70B5FC4A488349 -4983494983495B4949834990CB7E5C013F85494884495A87485B481B7F5C5A1C3F485BA2 -1C1F485BA25A91CD120FA35AA299C8FC5BA212FFAE127F6D053FB712E0A47E96C7ECE000 -6E063F5B755B6C86A26C7FA36C7FA27E807E6C7F80137F6D7E6D7EA26D7F6D7F6D6D5F6D -7F6D6D5FEC7FFE6E6C5F020F01C016FD6E01F0ED03F86E01FC923807F07F020001FF9238 -1FE03F033F01E09138FFC01F030F01FF010FEB800F030391B538FE0007030004F8130304 -1F03E090C8FC040392CAFCDC001F13E0636478E073> I I I 75 D I I I I I I I<912603FFE01470023F01FE14F091 -B6EAC001010315F0010FEDF803499039007FFE07D93FF0EB07FFD97FC00100138F4948EC -3FDF4848C8EA0FFF484881484881484881834848167F003F173F5B181F127F49160FA200 -FF1707A31803A27FA218017FA27F6C7E95C7FC7F6C7E6D7E14E06C13F8ECFF806C14F86C -ECFF806C15F8EEFFC06C16F86C16FF013F16C06D826D16F8010382010082023F81020716 -80DA003F15C01503DB003F14E0040314F0EE003F050713F883050013FC187FF03FFE181F -A2180FF007FF127800F883A484A27EA319FE7EA26C170319FC7FF007F87F6DEE0FF07F6D -EE1FE06DEE3FC06D167F6D6CEDFF80D9BFE04A1300D91FF8EC07FE486CB4EC1FFC010301 -F8EBFFF8486C90B612E0486C6C5D020F92C7FC48010114F848D9000F13C0406478E051> -I<001FBD12F0A5489026F0000191C7001F13F891C8D87FFC140101FCF1007F01F01A1F49 -1A0F491A07491A03A290C91701A3007EF300FCA4007C1C7CA7481C3EA5CA1800B3B3B14D -7E4C7F040F14E00203B97EA55F5D7BDC6A> I I I I<003FB70203B612FEA5D8001F02F0DA00 -7F1480010302C0031F01F8C7FC6D4A6F13C06D91C96C5B6E4EC8FC6E6D5E6E60705E6E6D -5E6E6D4B5A1A1F6E6D5E6E6D4BC9FC6E177E7015FE6F6C5D6F6D495A6F4B5A836F6D495A -6F4B5A71131F6F6D5C6F6D49CAFC6F157E7113FE706C5B70EB81F8F083F07013C770EBE7 -E070EBEFC0F0FF80827091CBFC6082717E8385717F717FA24D7F855F4D7F05FE7F4D6C7E -EE01F84C486C7F04076D7F4D7EDC0FC0804C486C7F727F4C487E047E8104FE6D7F4C147F -4B48814B486E7F03076F7F4C804B48824B486E7F737F4BC8FC037E6F7F03FE6F7F4B167F -4A48834A48707F0207717F5D4A48707F021F717F023F834A48844A6C707F010386010F6D -4C7F013F6D4C800003B500FC041F14F0B76C4AB712F8A5655E7CDD6E> I<01061560010F -15F0491401013EEC03E049EC07C049EC0F804848EC1F004848143E49143C0007157C4848 -5CA248C7485A001E5D003E1403A2003C5D007C140700785DA400F8140F4892C7FCA4D8F1 -F8EC1F80D8F7FEEC7FE0B5ECFFF0028014F8A202C014FC6C80A46C80028014F86C806C90 -C713F06C48EC7FE0D801F8EC1F802E2B6BDF49> 92 D 97 D<14F8EA07FFB5FCA51203EA007FA2133FB3A8EE1FFE4BB512 -E0030F14F8033F14FE923A7FE00FFF809127F9FF00017FDAFBFC9038007FF0DAFFF06E7E -03C0EC0FFC4B6E7E92C86C7E5C4A6F13804A6F13C01AE0197F1AF0A2F13FF8A31AFCA219 -1FA21AFEAB1AFCA2193FA21AF8A2197F1AF0A2F1FFE01AC06E5D6E17804E13006E4B5A6F -4A5ADAEFC04A5ADAE7F04A5ADAC3F8ECFFE0DA81FE01035B9127807FC01F90C7FC4A6CB5 -12FC030F14F0013E0103148090C8D83FF8C8FC47617CDF51> I I<19F8EF07FF94 -B5FCA51703EF007FA2183FB3A8ED7FF80203B51280021F14E0027F14F8903A01FFF007FE -010790388000FF4948C7EA3FFFD91FF8140F49488049481401494880485B4890C9127F48 -173F5B120F485AA2123F5BA2127FA25BA212FFAB127FA27FA2123FA36C7EA2120F6D167F -12076C6C16FF6C6D5C5F6C6D5C6D6C4A7FD93FF8EC1FBFD90FFC91397F3FFF806DB4D901 -FE14FE6D9038E01FFC010090B512F0023F14C0020F1400020001F0ECF80047617BDF51> -I I I I<14F8EA07FFB5FCA51203EA007FA213 -3FB3A893380FFF80047F13F00303B512FC4B14FF92261FF00F7F92263F80037F037EC77F -03F86E7EECF9F0DAFBE06E7EECFFC05D92C8121F855CA25CA35CB3B0496C4B7E48B592B5 -1280B600FE017F14FFA548607BDF51> I<133FEBFFC0487F487FA2487FA66C5BA26C5B6C -5B013FC7FC90C8FCB114F8EA07FFB5FCA51201EA007FA2133FB3B3A7497E48487EB612FC -A51E5D7BDC28> I<153FEDFFC04A13E04A13F0A24A13F8A66E13F0A26E13E06E13C0ED3F -0092C7FCB1ED01F8EC0FFF49B5FCA5EB00031400157F153FB3B3B3A7EA1FC0486CEB7FF0 -487E487EA2EDFFE0A216C04A138001F01400007F5B9038C007FE393FF01FF8000FB55A6C -14C0000191C7FC38001FF8257986DC2D> I<14F8EA07FFB5FCA51203EA007FA2133FB3A9 -94B612C0A5053FEBFC007113E096C7FC18FC4D5A18E04D5A4DC8FC4C5A4C5AEE0FF8EE1F -E04C5A4C5A4CC9FCED03FC4B5A4B7E151FED7FFE92B5FC02F98014FBDAFFF77F03E37F03 -C17F15814AC67F4A6D7E4A6D7E5C707E707F707FA2707F707F707F84177F717E717E8583 -717F8585496C16FC2601FFFE4A13FFB600FC017F14F8A545607CDF4D> I<14F8EA07FFB5 -FCA51203EA007FA2133FB3B3B3B3A7497E48B5FCB612FEA51F607BDF28> I I I I<02F8EB1FFED807FF49B512E0 -B5010F14F8033F14FE923A7FE01FFF809127F9FF00037FDAFBFC010013F00003D9FFF06E -7EC66C01C0EC1FFC4B6E7E6D90C87F4A814A6F13804A6F13C01AE0841AF0A2F17FF8A219 -3F1AFCA4F11FFEABF13FFCA4F17FF8A3F1FFF0A24E13E01AC06E5D6E4B13801A006E4B5A -6F4A5A6F4A5A03F04A5ADAFBF849485ADAF9FE01075B9127F87FC03F90C7FC6FB512FC03 -0F14F0030314809226003FF8C8FC93CAFCB3497E48B5FCB612FEA547577CBB51> I 114 D I<147CA714FCA51301A31303A21307A2130FA2131F133F137F13FF1203000F90B6 -12E0B8FCA426001FFCC8FCB3AB17F8AD010FEC01F080A20107EC03E0806DEC07C0ED800F -6D9038C01F806D9038F07F0091383FFFFE6E5B020713F0020013C02D567DD439> I<02F8 -167CD807FF923803FFFCB5157FA500031601D8007FED003FA2013F161FB3AE183FA3187F -A3011F16FF5F80010F5D943807DFFE6D6CEC0F9F6D6C91393F1FFFC06F01FE14FF010090 -38F003FC6EB512F86E14E0020714809127007FFC00EBFC00483D7BBB51> I I I<007FB500FC010FB512F8A5C66C01E06D1400011F496D13F86D6F13E06D1780 -6D94C7FC6D6D495A6D6D5C027F4A5A6E6C14E06F130F6E6C495A6E6C495A6E018090C8FC -6E147E705A6E13E16EEBF3F86FB45A6F5B5F6F5B8181816F7F834B7F4B7F4B7FED1FDFEE -9FFE92383F0FFFDB7E077FDBFE037F4A487EDA03F8804A486C7F4B6D7E4A486D7E4A4813 -1F023F6E7E4AC77F4A6E7F49486E7F01036F7F010F83011F8301FF8300076D020713FFB6 -00C0011F14FFA5483B7EBA4D> I I<000FB812F818FCA302E0C713F849C75AD81F -F84A13F0494A13E04916C0494A13805E494A13005F90C8485A16FF4B5B4B5B485E003E4A -5B5D4B5B4B90C7FC5EC8485A15FF4A5B5E4A5B5C4A5B4A5B93C8FC4A5A027F157C4A5A5D -495B5B494914FC494914F85D4990C8FC5B495A494814015C485B481603485B4A14074849 -140F48161F4890C8EA3FF0484815FF49140FB9FCA37E363B7CBA41> I I I 126 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmbx8 16.592 52 -/Fh 52 128 df 44 -D I<13FC3807FF804813C04813E04813F04813F8A3B512FCA66C -13F8A36C13F06C13E06C13C06C13803800FC00161674952F> I<167E4BB4FC5D150F153F -92B5FC1407147F013FB6FCB8FCA414FB1483EBC003C7FCB3B3B3AE003FB912E0A73B5B74 -DA54> 49 D<913801FFFE023FEBFFF049B612FE0107EDFFC0011F16F0017F16FC48B9FC -4849C66C804801E0010F804801800103804848C76C806D6C6D6C7F4801E06E7F6E824882 -6E6E7FB518806E80A27114C0A31AE0A26C4980A26C5BA26C5B6C5B000390C8FCD800785D -90C915C0A34D1480A21A005F615F614D5B614D5B94B55A4C5C96C7FC4C5B4C5B4C5B4C13 -E04C5B4C90C8FC4C5A4B5B4B13F04B5B4B13804B90C7EA1FE04B5AED7FF84B5A4A49EC3F -C04A13804A90C8FC4A5AEC1FF84A48157F4A5ADAFF8015FF4990C84813804990B8FC5B13 -1F5B5B90BAFC5A4819005A5A5A5A5ABBFCA261A4435B78DA54> I<92383FFF800203B512 -FC021FECFFC0027F15F049B712FC4916FF010FD9F00F8049D9000180D93FFC6D6C7FD97F -F06E7F4A8201FF6F7F4813F802FE82486D8085815A81A6616C4A5BA26C91C75C6C5B6D48 -4A5B6D5AD90FE05E90C95A94B55A614C5C4C91C7FC4C5B041F13F84BB55A0203B612C04A -92C8FC5FEFFFC018F86E15FE91C7000F6D7E040180706C13F0717F717F717F85711480A2 -7114C0A21AE0A201FE6F14F03803FF80000F13E0486D17F8487FA2487FA2B57EA41AF0A3 -4A5C6C19E0A24A17C06C495C4A17806C494A14006C48C8FC6D4B5B6C01C04A5B6C01F04A -5B6C01FE49B512E028007FFFE00F5C6D90B7C7FC010F16FC010316F0D9007F15C0020F02 -FCC8FCDA007F1380455D79DA54> I<93380FFFC04BB512F8030F14FF037F814AB712E002 -07824A49C67F023F01F0EB1FFC4A0180130749B5C7EA1FFE4901FC147F494991B5FC495B -4949491480495B4B5B5B90B5C7FC5A5C5A4A6E14005A715B5A4A6F5A48EF1FF095C8FCA2 -5AA34A131848913803FFFE030FEBFFC0033F14F04B14FC92B7FCB500F1829127F3FE003F -7FDAF7F86D13F0DAFFE001077F4B6D7F854B7F92C87F1A805C1AC05C7213E0A24A17F0A4 -1AF85C7EA67EA46C7F1AF0A27EA21AE07E95B5FC6C6D17C0A26C19806C6D4A1400A26D6C -4A5B6D6D5D6D6D495B6D6D495B6D01F8013F5B6DD9FE01B512806D90B7C7FC6D6C15FC02 -1F15F0020715C0020092C8FC030F13E0455D79DA54> 54 D<13FC3807FF804813C04813 -E04813F04813F8A3B512FCA66C13F8A36C13F06C13E06C13C06C13803800FC0090C7FCB1 -13FC3807FF804813C04813E04813F04813F8A3B512FCA66C13F8A36C13F06C13E06C13C0 -6C13803800FC00163D74BC2F> 58 D<13FC3807FF804813C04813E04813F04813F8A3B5 -12FCA66C13F8A36C13F06C13E06C13C06C13803800FC0090C7FCB1EA01FCEA07FF481380 -4813C04813E04813F0A2B5FC14F8A314FCA47EA27E7E7E7EEA01FEC7FC130114F8A41303 -14F0A2130714E0130F14C0131F1480133FEB7F005B5B485A1203485A485A5B5B5B6CC7FC -165874BC2F> I<0503B512C094B7FC040F16F0047F16FE0303B912C0030F18F0033F91C7 -14FC92B500C0020313FF020301FCC9003F13C0020F01E0040713F04A90CB7FDA3FFCF03F -FCDAFFF0F00FFF4949727F49018006017F4990CD7FD90FFCF23FF04948747E4948DB7FFC -6F7E4A0207B500C014074948023F02F06E7E494849B600FC6E7E4C15FF4890C7000F706D -13804848023FD9F80F01E0EC7FC0494AD9C0006D143F000792B5C7D83FF815E04949496E -6C141F000F4A49020716F04949496E6C140F001F73B514F84949496EEC80074B5B003F1E -FC4949491803A2007F4A1BFE494B1801A292B5FCA200FF1EFF90C791C9815CAC806D8100 -7F1EFE1E0181A26D81003F801FFC6D6D6D1803121F6F6D19F86D6D6D4A1507000F4F16F0 -6D6D6D4A150F00076E6D021F16E06D6D6D4AECC01F00036F01C090B6EB3FC06D6ED9F80F -9238E0FF806C6C020F90B6009F90B5FC6C6D0103040F150070DBFC075C6D6CD9003FDAF0 -0114F86D6C02079126C0007F13E06E9126007FFCC7000713806D6C92CDFC6D7E6DB4FC6D -7F6D01E0F20FFE6D6DF27FFFDA3FFC0703B5FC6EB4193F6E01E00503B512FE020301FC05 -7F14F80200D9FFC0030FB61280033F01FF021FB6EAFC00030F91B912E003034FC7FCDB00 -7F18C0040F05F8C8FC04004CC9FC050302F8CAFC706277E083> 64 -D I I 68 D 70 -D<95B500C01578053F02FE15FC0403B700C01301043F04F813074BB800FE130F03079438 -FF801F031FF0E03F037F9126FC003FEBF07F4AB6C70003EBFCFF020702F8DA007FB5FC4A -02C0151F023F91C912074A01FC160191B500F082494A83494A171F494A834991CB7E495B -4949844949844B8490B5FC484A197F1D3F485CA2484A191FA2481C0F92CDFC5AA248491A -07A448765A9AC9FCA25CA2B5FCAE7E070FB912C080A37EA36E93C86C01FCC7FC7EA27E81 -7EA26C80A26C80A26C807F816D7F6D7F6D7F6D806D806D6E94B5FC6D14F86E6D5E6E01FF -5E020F02E0150F6E02F85D0201DAFF8091B6FC6E6C02FC010F13FD031F91B7EAF07F0307 -F0E01F0301F08007DB003F9338FE0001040304F8EB0038DC003F038091C8FC050002F0CB -FC726277DF84> I 73 -D 76 -D I<943807FFFE4CB612F8041FEDFF80 -93B812F0030717FE031F717E037F18E04AB6D8000F14F8020702F0010014FE4A0280021F -7F023F49C8000714C04A01F803018091B500E06F6C7F494A707F494A707F4991CA6C7F49 -49717F494971804949718049497180A290B548727F48894B8448894B844889A24891CC6C -7FA2481E804A85A2481EC0A448497314E0A5B51DF0AF6C1EE06E61A46C1EC0A36E616C1E -80A26C1E006F60A26C656F606C656F606C656C6E95B55AA26D6D4D5C6D6D4D5C6D6D4D5C -A26D6D4D91C7FC6D6E4C5B6D02E0047F5B01006E93B512F06E6D4B5C6E01FE03075C6E6D -6C021F5C020702F091B548C8FC020102FF010F14F86E92B75A031F188003074DC9FC0300 -17F0041F1680040103F8CAFCDC000749CBFC6C6277DF7F> 79 D<943807FFFE4CB612F8 -041FEDFF8093B812F0030717FE031F717E037F18E04AB6D8000F14F8020702F0010014FE -4A0280021F7F023F49C8000714C04A01F803018091B500E06F6C7F494A707F494A707F49 -91CA6C7F4949717F4949718049497180494971804B8490B587484A727FA2484A727FA248 -91CC6C7FA248894A85481E80A348497314C0A4481EE0A24A85A3B51DF0AF6C1EE0A36E61 -A26C1EC0A46C6D4F1480A26C1E006E61A26C656F606C656FDA7FC05C6C932601FFF85E6C -6E010701FE4A5B051F7F6D6D4902C090B55A6D6D496E485C6D9326C07FF05D6F903AFF00 -0FF8036D6D01FC6D6C4891C7FC6DD9FF010203495B6DDAC1F8902601FE3F5B010002E16F -4813F06E01F96E90B55A6E01FD6F5C6ED9FFFC5F02076E4CC8FC02019126FF800FB512F8 -6E92B75A031F188003074DC812F00300F201F8161F040182DC0007D9FE0F7F94C802E013 -0376130F7401FE137F99B6FC1FF086A3861FE0A27416C0A2751580A2751500A2755C755C -66755C09015C7514800A3F90C7FCF40FF86D7B77DF7F> 81 D I<92267FFF8014780207B500FC14FC023F9138FF800191B7EAE0 -030103EEFC07010FEEFE1F49D9E001EBFFBF017F90C7000F13FFD9FFF8140148496E7E48 -01C0151F484981844890C91201485A84003F187F49173FA2007F181FA2190F12FF19077F -A27F190380808002F8705A6E93C8FC6CEBFF8015F0EDFF8016FC6CEDFFE017FF6C17F018 -FE6C717E6C18E019F86C846C18FF6C856D846D84010F846D840101846D7E021F831403DA -003F821501DB000F1680EE007F050315C0EF007F180F18037214E08485007E84B484A285 -A3857F1BC0A37F1B806D5F7F1B006D5F6D6001FF4D5A6E167F02E04C5A02F84B5B02FF03 -075B03F0021F5B9226FFC001B55A01F791B7C7FC01E117FCD9807F5ED9001F16E0480103 -168048D9003F02FCC8FC0078020014804B6277DF5E> I<001FBE12F8A6481DFC92C7003F -49C7FC02F0190F02C0190391C81700491B7F491B3F491B1F491B0FA2491B07007F1DFE49 -1B03A4491B01A648C9F000FFA5CA1900B3B3B00207BA12F0A7685C7ADB75> I I 87 -D<003FB800C0011FB712E0A7D8000192C9001F01FCC8FC6D6F030113C06E606E6E4B5B71 -4B90C9FC6E6E5E6E4E5A6E6E153F6E6E4B5A714B5A6E6E5E6E4D5B6F6E5B72495B6F6E49 -90CAFC6F5F6F6E495A6F6E495A72137F6F4C5A6F6E485B6F02FF5C07835B7014C77002CF -90CBFC70ECFFFE705D6282705D705D62705D83718086718083718071808671805F4D814D -814D81A24D81DD7FF78005FF814C13E34C01C1800680804C49814C6E804C487F4C486D80 -4D6D804C488204FF804B496D804B496D804D824B90C8814B824B486F804B48844C6F804B -488103FF70804A496F804A49844C6F804A90CAFC4A487180021F874A4871804A48834B71 -800107B57180B8033FB812E0A7735E7ADD7F> I I<0203B5FC027F14F80103B7FC010F16C0 -013F16F04916FC90B5D8000F7F4801F801016D7E6E6D80486D023F7F83486D82717FA271 -7FA3717F6C5BA26C5B6C5B6D5AEB0F8090C9FCA2043FB5FC031FB6FC0203B7FC143F49B8 -FC010715E3011FECF003017FEBFE0048B512F04814C04891C7FC4813FC485B485B5C5A5C -B5FC5CA45FA2806C5E6E5C5F6C6DEC7F7F6C6D02FFEBFFC06C01FED907FEECFFE06C9028 -FFC03FFC3F14F06C91B512F86CEEE01F6C6C4B7E010FED0003010102F8D9007F13E0D900 -0F01C091C8FC4C407BBE52> 97 D<90380FFF80B6FCA712017E7FB3A6EFFFFC041FEBFF -C093B612F8038315FF038F16C003BF8292B5C66C13F804F0010F7F04C001037F93C87F4B -6F7F03F86F7F4B6F7F4B834B8187A2737FA287A2737FA41C80AC1C00A44F5BA363A24F5B -A26F4B5B6F5F6F5D6F4B5B6F92B55A6F4A91C7FC04C001075B02FC01F0011F5BDB7FFE90 -B512F0DAF81FB75A4A6C1680DAE0034BC8FC4AC615F04A011F148090C8000301F0C9FC51 -617ADF5E> I<92380FFFF892B612C0020F15F8023F15FE91B81280010317C04917E0011F -DA000F13F04901F87F4901E04913F890B55A4891C74813FC5A5C485B5A5C5A7113F8485B -7113F07113E0487013C04A9138003E0095C7FCA2B5FCAD7E80A37E806C18FCF001FE6C7F -18036C6D16FC6E15076C6EEC0FF86C6E141F6C6EEC3FF06D6DEC7FE06D01FEEB01FF6D90 -26FFC01F13C06D91B612800103EEFE0001005E023F15F0020F15C002014AC7FCDA000F13 -E03F407ABE4B> I I<92380FFFE04AB512FE020FECFFC0023F15F091B712FC01038249D9FE017F011F90 -26F0001F7F49496D7F49018001037F90B5C76C7F48496E7F484982187F48498248173F85 -484981A2481980A25C4883A21AC0A2B5FCA291B9FCA51A8002E0CBFCA47EA280A27EA27E -6EEE1F806CF03FC0A26C7F6E167F6CF0FF806C6D5D6C6E4A13006D01E04A5A6D6DEC1FFC -6D01FE147F6D903AFFC007FFF8010391B612E06D5F6D6C5E021F4BC7FC020315F0DA007F -14C0030301F8C8FC42407BBE4D> I I I<90380FFF80B6FCA712017E7FB3A6 -94381FFF8094B512F8040714FE041F6E7E047F8193B77E0381D9E01F7F0387D9000F7FDB -8FF87FDB9FF06D7F16C0DBBF808103FFC7FC4B804B825DA25DA25DA35DB3AFB7D8E003B7 -1280A7516078DF5E> I I<903807FF80B6FCA712017E7FB3A795B612E0A7061FEBF00097C7FC4E -5A4E5A943801FFF04D5B050F5B4D90C8FC4D5AEFFFFC4C13F04C5B040F13804C90C9FC4C -5AEEFFF803815B03837F038F7F039F7F92B6FC8484A284043F7FDBFC1F7F4B6C7F4B6C7F -03C0804B6C804B6C8082717F717F717F717F717F857180718083727F727F727F727F1AFF -B76C90B612FEA74F607ADF59> 107 D<903807FF80B6FCA712017E7FB3B3B3B3A7B712C0 -A7226078DF2F> I I I<923807FFF092B67E -020715F0021F15FC91B87E49830107DA007F13F04901F001077F4901C001017F017F496D -13FF90B5C86C7F4A8148496F7F48496F7F4885A248496F7FA24885A248496F7FA34885A4 -B51980AC6C1A00A46C6D4B5BA26C61A26E5D6C616C616E5D6C6D4B5B6C6D4B5B6C6E91B5 -5A6D6D4991C7FC6D01F001075B6D01FE013F5B6D90B75A010317E001001780023F4BC8FC -020F15F802001580030701F0C9FC49407BBE54> I<90260FFF80EB7FFEB6010FB512E004 -7F14FC0381B7FC038716C0039F16F092B87EDD007F13FE000103F0010F7F6C03C06D806D -91C700018003FC804B6F7F4B834B6F7F4B81878587A28587A4731480AC1C0061A363A261 -63A24F5BA26F4B5B6F4B5B816F92B55A6F4A5C6F4A91C7FC04C0010F5B04F0013F5BDCFE -01B512F003DFB75A03CF168003C34BC8FC03C015F0041F1480040301F0C9FC93CCFCB3B7 -12E0A751597ABD5E> I 114 -D<913A3FFFC007800103B538FC1FC0011F91B5FC137F48B8FC48EBF0004890C7121FD80F -FC140748481401484880A24848157FA2173F12FFA27F7F6DED1F8001FF92C7FC14E0ECFF -8015FE6CECFFF016FE6C6F7E17E06C16F86C826C826C826C17806C6C16C0011F16E00107 -16F01300020F15F8EC003F1500041F13FC1603007E81B481177F173F6D151FA27F18F87F -A26DED3FF07F6DED7FE06D15FF6D6C4913C002E00107138002FC017F130091B65A5F01CF -15F0010315C048C66C91C7FC0078010F13E036407ABE43> I I<902607FFC0ED1FFFB60203B6FCA7 -0001EE00076C836D82B3B060A360A2607F60606D6D4A80DD01FE806D01F8D907FCECFF80 -6D01FEEB3FF86D90B65A6D5E6D6C1580021F5D020714F8DA003F01C002F8C7FC513F78BD -5E> I I I<007FB600C0027FB51280A7D8003F01F0C80007EBC000070190C7FC -6D6D4B5AA26D6D4B5AA26D6D4B5AA26D6D4B5AA26D6E4A5AA26D6E4A5AA26E6D4A5AA26E -6D4990C8FCA26E6D495AA26E6D495AA26E6D495AA26E6D495AA26E6E485AA26E6E485AA2 -6F6D485AA26F01F190C9FCA26FEBFBFEA26FEBFFFCA26F5CA26F5CA26F5CA26F5CA2705B -A27090CAFCA2705AA2705AA25FA24C5AA24C5AEA03F0D80FFC4A5AEA3FFF4C5A487F4B90 -CBFCB512C04B5AA24B5A4B5A151F4A485A6C4A5A4A485A263FFE035BD9FC1F90CCFC6CB5 -5A6C14F86C5C000114C06C6C90CDFCEB1FF051597DBC59> 121 D<000FB912F819FCA548 -49C714F802E016F002804914E091C74814C0494A1480495C494A140060494A5B4C5B4991 -B55A5D4B5C003F5F49495C4B91C7FC4B5B5D5FC8485B92B55A4A5C5C4A5C5F4A91C8FC4A -49EB03FC4A5B5C91B55A4C1307494A14F8495C495C5B4991C7FC4B140F495B4949141F90 -B5FC484AEC3FF05D484A147F484A14FF4891C75A4816074849141F4A49B5FC4890B8FCBA -FC19E0A47E3E3D7BBC4B> I I 127 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmbx10 20.74 12 -/Fi 12 125 df 77 D<030FB5FC0203B612F8021F15FF91B812E001 -0317F84917FE011F9026FC001F6D7E4901800103806F010080496D6E13F890B56F7F6F80 -727F486E6E7F8784878487A26C5C72806D5BA26D5B6D5BD907FEC9FCEB00F091CAFCA518 -3F0403B7FC93B8FC151F92B9FC140F023F150049B612C0010702FCC7FC4914E0013F1480 -4949C8FC48B512F84814E0485C5D4891C9FC485B5A5C5A5CA2B5FC5CA360A360806C5F6E -5D6C18DF6EED1F9F6C6D037F14FC6C6EDAFF1FEBFF806C02E0902603FE0FECFF806C02F8 -D90FFC16C06C02FF9038FFF8076C92B5487E013FEEC001010F4C7E01014BC7123FD9001F -02F002031480DA007F90CCFC5A507BCE60> 97 D<93383FFFE00307B67E033F15F04AB7 -12FE0207707E021F83027F8391B526FC003F7F010302E001077F490280497F4949C78049 -495C495B49494A7F90B55AA2485C5A5D5A92C86C5B5A725B485B725B48715B060013C007 -1EC7FC4895C8FC5CA4B5FCAF7EA280A27EA36C7FA2F20FC06CF11FE0816C193F6F17C06C -197F6C806FEEFF806C4E13006D6D5D6D6D4B5A6D6D4B5A6D6D6C141F6D02E0EC7FF86D02 -F8903803FFF0010002FF013F13C06E91B65A021F94C7FC020716FC020116F0DA003F15C0 -030702FCC8FCDB003F13C04B5079CE58> 99 D<93381FFFE00303B6FC033F15E092B712 -F8020716FE021F707E4AD9FC0114E091B526E0001F7F49028001077F010749C76C7F4949 -02007F49496F7E49496F1380494917C08590B5486F13E0485C487213F0A24891C914F885 -481AFC5C5A7313FE5AA25C5AA21BFF85A2B5FCA291BBFCA51BFE02FCCCFCA67EA3807EA3 -7EA26C7F1B7E1BFF6C807E6F5E6C1AFE6C6E16036FEE07FC6D180F6D6DEE1FF86D6DEE3F -F06D01FFEEFFE06D6E4A13C06D02E0020F1380010002FC023F13006E903AFFC007FFFE02 -1F91B65A020717F0020117C06E6C93C7FC030F15FC030115C0DB000701F8C8FC50507BCE -5B> 101 D 104 D 107 -D<902601FFFC913803FFF0B6033FEBFF804DB612E0050715F8051F15FE057F819426FFFC -07804CD9C001804C48C780C66CDA07F880011F4A48826DEC1FC04C486E7F4CC8FC047E83 -5EDBFDF881A2DBFFF0835EA25EA35EA493C9FCB3B3A6B8D8F001B812E0A8634E79CD6E> -110 D<93380FFFF04BB67E031F15F892B8FC020317C0020F17F0023F49C66C13FC4A01E0 -01077F49B5008001016D7E4949C86C7F49496F7F49496F7F49496F7F49496F7F49496F7F -90B5486F7F481B8092CAFC481BC0481BE04A83481BF0A2481BF8A348497113FCA3481BFE -A5B51AFFAE6C1BFEA46C1BFC6E5FA26C1BF8A36C6D94B512F0A26C1BE06F5D6C1BC06C1B -806F5D6C6E4B14006D6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D6C49B55A010102E00107 -14806D02FE017F91C7FC023F90B712FC6E5F020717E0020094C8FC031F15F8030315C0DB -000F01F0C9FC58507BCE63> I<902601FFF8903803FF80B6021F13F0057F13FC94B6FC04 -0315804C15C093260FFE0F13E093261FF01F13F005E014F8C66C91383F803F011FEC7F00 -6D027E4913FC16FEEDF9FC5E5E15FB5E03FF6E13F8A24C6D13F07213E07213C04C010113 -00F0007C96C7FC93CAFCA65DB3B3A2B812FCA8464E7ACD52> 114 -D<912603FFFEEB03C0027F9039FFE00FE00103B6EAFC3F010F92B5FC133F49EB00072601 -FFF0EB007F480180141F4890C812074848814981484881003F177F5B183F127FA2181F12 -FF7FA27F7F6D6CED0FC06E92C7FC14F814FF6C14FCEDFFE0EEFF806C16F017FC6C16FF18 -C06C17F06C836C836C836C836D1780011F17C0010717E0010117F06D7E020F16F8140003 -0315FCED000F1600051F13FE83007E1603B48283187F6D163FA36D161FA219FC7FA27F6D -EE3FF8A26D17F06D167F6D17E06E15FF02E0020313C06E4A138002FE021F1300913AFFC0 -03FFFE92B65A01E316F001C016C0D9003F92C7FC48010714F80078D9007F90C8FC3F5079 -CE4E> I<91B5933801FFFEB74AB6FCA8C66C93C7FC011F183F6D84B3B3A962A362A397B5 -FC6D5FA2616D6E5CF10FEF6DDD1FCF7F70DA3F8F14C06D6E02FFEDFFE06E6D0103130F6E -01FFEB1FFE6E91B512F8020716F0020116E06E6C1580030FECFC00DB007F01E003E0C7FC -634F79CD6E> 117 D 124 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmbx12 24.888 19 -/Fj 19 122 df[ 143 142 120 269 165 -66 D[<0803B500C0EE01F00703B600FE4C7E077FDBFFE015070607B800FC150F063F05FF -151F4DBA00E0143F050F07F8147F053F07FE14FF94BC5B04039326F8000FECC003040F4B -C86CEBF007043F03C0030F6D5A93B648C900036D5A4B03F09339007FFF3F030703C0051F -90B5FC4B92CB7E033F02FC18034B02F08492B648844A0380193F4A92CD7E4A4A864A4A86 -4A02F0864A4A864A8991B65A494B874992CF7E4C885B494A885E498B494A88A2495C8D90 -B65A8D5A5E48217FA24892D1FC223FA25A5DA248211FA3485C7C5A9FC9FCA25AA45DA3B6 -FCB27EA381A20A0FBB12F8A27EA46C80A36C98C96C02F8C7FCA2817EA36C81A27E827E82 -7FA26D80A26D806D80A26D806D80A26D816D816E806E806E806E6E97B6FC6E806E806E03 -C0606E816F02F8606F02FE60030F6E606F03E0173F030103F85F6F03FF933801FFFC043F -03E00307497E040F03FF033F497E040304FC0107B5EAE00F040093B8487E053FF2000105 -0F07FCEB007F050107F0141FDD003F06C01407060795C81201DE007F04F8ED0070070304 -8093C8FCDF000302E0CDFC> 157 146 115 271 183 71 D[ 74 142 122 269 87 73 D[ 121 -142 120 269 140 76 D[ 203 142 120 269 -220 I[<97B512F0077FECFFE00607B712FE067FEEFFE00503B912FC051FF0FF80057F19 -E00403BB12FC040F9226E0007F14FF043F02FCC7000315C04C02E0DA007F804BB6008003 -1F14F8030702FCC9000314FE4B4A70804B02E0706C80037F0280051F14E092B6CB6C804A -4A72804A4A72804A02F00600804A4A737F4A4A73804A8B4A4A738091B6CD6C80494A7480 -A2494A7480494A7480498C4C86498D4C87498D494A7580A290B68B4C87488EA24892CF6C -80A3488E4B88A2488EA3484A761580A34823C0A5484A7615E0A7B621F0B36C23E0A26F64 -A56C23C0A46F646C2380A36C23006F64A26C6AA270636C6AA26C6A70636C6A70636D69A2 -6D6E98B65AA26D6E505DA26D6E5092C7FC6D6870626D6E505C6D686D6F4F5C6E6E4F5C6E -6E4F5CA26E6E96B65A6E6E4E92C8FC6E6E4E5C020102FF060F14F86E6F4D5C6F6E4D5C6F -02F094B65A030F6E4C92C9FC6F02FE04075C03016E6C031F14F86F03F092B65A043F02FE -020715C0040FDAFFF090B7CAFC040392B812FC04001AF0051F198005074ECBFCDD007F17 -E0060F94CCFCDE007F15E0070002F0CDFC> 148 146 115 271 175 -79 D[ 162 144 120 269 179 85 D[ 229 144 123 269 240 87 D<93B512FC037FECFFF0 -0207B8FC023F17E091B912F84918FE0107727E499126C0007F14E04901E0C7000F80496D -020380496D020014FE6F6F7F90B570806F6F8085486E6F807380A27380A28885886C5CA2 -6D4982886D5B6D5B010713C0010190CAFC90CCFCA90603B7FC050FB8FC0403B9FC167F03 -07BAFC153F4AB7EA807F020FEDE000023F02FCC7FC91B612E0010392C8FC4914FC011F14 -F04914C0495C90B548C9FC485C485C485C485C5A5D485CA24891CAFCA3B6FC5CA397B6FC -A461806C60F107EF6C6E150F6F16CF6C183F6FDB7F8F806C6EDBFF0F14E06C02FCDA03FE -15FE6C6E91260FFC0791B5FC6C6E6CD93FF817806C923AF803FFF003013F91B6487E010F -EF8000010394C77E010004FC141F021F03F0140702010380DA007F1400DA000701F8CDFC -695F79DD71> 97 D[ 113 144 121 270 129 I<94387FFFC0040FB6FC93B712E0030716FC031F16FF037F -17C04AB912F00207DAF80380021F912680003F13FE4A49C7000F7F4A01F802038049B548 -6E804902C06E6C7F494A6F7F4991C9FC49727F4949707F4B84498490B548707F5A4B1980 -48855D481CC086481CE05D5A871DF05AA25D5AA21DF887A2B6FCA392BBFCA51DF00380CD -FCA77EA4817EA37EA2817EA26CF307F06FF00FF87E816C1B1F6F19F06C1B3F6D6DF07FE0 -6D7FF4FFC06D6E4C13806D6E5E6D02F04C13006D6EEE1FFE6D6E4C5A6D6C01FFEEFFF86E -02E002035B6E02FC021F5B02079126FFC003B55A6E92B7C7FC020060033F17F8030F17E0 -03011780DB003F03FCC8FC040315C0DC000F01F8C9FC5D5F7ADD6A> 101 -D[<95383FFF80050FB512F094B612FE040781041F16C0047F824BB87E0307DAF8077F03 -1FDAC00F7F4B49C6487F4B495B92B500F0814A4A5B4A5C4A93B612805F4A91C7FC5C5E5C -5E5C731400A24C6E5B91B56F5BA2735B070313E00700138097C8FCB3A4BA12F8A9C702FC -CBFCB3B3B3B3A2003FB9FCA9> 81 144 121 271 71 I[ -49 144 119 271 65 105 D[ 50 143 119 270 65 108 D<94381FFFF00407B612C0047F15FC0303B87E -030F17E0037F17FC4ABAFC4A9126FC007F80020F02C0010714E04A49C880027F01F8033F -13FC91B5486F7F4902C003077F494A6F804991C96C80494970804949717F49874949717F -A290B548717F48884B83481D80A2481DC04B83481DE0A2481DF0A3484A7114F8A4481DFC -A5B61BFEAF6C1DFCA56C6E4D14F8A36C1DF0A36C1DE06F5F6C1DC0A26C6E4D1480A26C1D -006F5F6C646D6D4D5B6F94B5FC6D636D6D4C5C6D6E4B5C6D6E4B5C6D02F0031F5C6D6E4B -91C7FC6D6C01FE92B512FC6ED9FFC001075C6E02FC017F5C020791B812C0020196C8FC6E -6C17FC031F17F003031780DB007F03FCC9FC040715C0DC001F01F0CAFC675F7ADD74> -111 D 114 D<92261FFFF814F80203B638C001FC023FEDFC0791B812 -1F010317FF130F013F9038F8001F4990C8FCD9FFF8153F4801E0150F4849150348498148 -90CAFC197F4848173F191F485AA2007F180FA31907487EA27FA28002E0705A6E93C8FC14 -FC14FF15F06CECFF8016FCEEFFF06CEEFF8018F06C17FE727E6C18E0856C18FC6C846C72 -7E6C856D84011F846D841303010084023F83140F020183EC001FDB007F16801603DC000F -15C01700183F060F14E0007F1703486C82727E857F85857FA2857F1BC07FA27F1B806D5F -7F1B006E5E6E5F6E163F6E4C5A02FC4C5A6E03035B6E6C4A5B03F0023F5B03FF0107B55A -01F991B7C7FCD9F07F16FCD9E01F16F0D9800716C0D9000193C8FC48D9003F14F8007C02 -0349C9FC4B5F78DD5C> I[ -72 132 124 258 90 I<007FB800C04AB71280A9D800034ACA000791C7FC6D080013F077 -5A6D6E4E5AA26E6E6064836E4F90C8FC836E4F5A836E4F5AA26E6E4C5AA26E6E5F1C3F6E -6E5F1C7F836E4F5A846F4D5B846F4D90C9FCA26F6E4A5AA26F6E5D1B0F846F4D5A846F4D -5A846F4D5AA26F6E4A5AA2706E5C627002C091CAFC6219E0704B5A19F0704B5AA2706E48 -5AA2706E485AA27002FE5B1A7F19FF704B5AA2715DA27192CBFCA2715CA2715CA3715CA2 -715CA2715CA2715CA2725BA27290CCFCA3725AA2725AA24E5AA24E5AA261187FA24E5AA2 -4D5B13FE2603FF804A90CDFC000F13E0486D4A5A487F486D4A5AA260B56C141F4D5AA24D -5A17FF604C5B4A4990CEFC6C5D4C5A6C49EB3FFC4A495A6C4948485A9026FE80075B270F -FFC03F5B6C90B6CFFC6C5D6C15F86C6C5C011F14C0010749D0FC9038007FE071857CDB7B -> 121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmr12 24.888 17 -/Fk 17 125 df[<95260FFFE0ED7FF00503B6913807FFFE053F03C0011FEBFF804CB700 -F0017F14E00407903EFC007FFC01FFF03FF0041F01C0902603FE0790388007F8DC7FFEC8 -D8FF8F9038000FFC922601FFF892263FDFFC131F4B01E06FB448EB3FFE030F49037F157F -4B90C9B54890B5FC4B484B5C4B485D4B484B5C4A5B4A49605C4A4995C7EA7FFE4CF23FFC -4AF41FF893C96C49EC0FF04A71EE03C07493C7FC4A48177FA2515A4A5AB3ACC012F0A6C7 -01FCCA01FCC9FCB3B3B3B3496D4C7F88496D4C80011F02E0031F14F8B800FC90B912C0A6 -> 120 145 123 272 118 11 D[<962603FFFC177096B600E016F0060F03FC1501067FED -FF800503B800E01403050F05F81407053FDAE00113FE94B500FCC7D80FFF140F040302C0 -020101C0131F040F49C96C7E4C01F8DC1FF0133F047F01E0EE07FC93B50080DC01FE137F -030349CB6C13FF4B01F8727E4B49F01FC1033F01C0F00FE34B49F007F392B5CC6CB5FC4A -49854A49854A5B4A49864A49864A49865E4A90CE7E91B587495B494987A2494987495B8B -495B491E7F5D5B4B1C3F90B5FC201F4891D0FCA25A4A1D0F5AA25C481F07A3485BA22003 -A25A5CA29DC9FC5AA45CA2B5FCB37E80A30A3FB912C0A27EA3806C98C7003FED80000C01 -02FCC7FC786C5B8B6C6D668BA27E80A27E807EA26C80A26D7FA26D7FA26D7F7F817F6D7F -817F6D7F6E7F8070626E7F6E7F6E6D626E7F6E6D97B5FC6E7F6F01C0606F6DF003FD030F -6DF007F96F01FCF00FF06F01FF95381FE07F03006EEF3FC07001E09438FF803F041F01FC -0403EB001F7001FFDC0FFE130F040302E0DB3FFC1307040002FE912603FFF01303053FD9 -FFF0017F491301050F91B70080130005034DC81270DD007F04F092C8FC060F1680060003 -F8CCFC070349CDFC> 138 149 117 272 159 71 D[ 57 -141 120 268 73 73 D[ 139 141 119 268 157 75 D[ 108 141 119 268 126 I[ 166 141 119 268 -185 I[<96381FFFE00603B6FC063F15F04DB712FE050F903AF8007FFFC0053F90C70003 -13F0DDFFF89138007FFC040301E0ED1FFF040F0180030713C0DC3FFEC9000113F04C4870 -7F922601FFF0EF3FFE4B49717E4B018005077F031F90CB6C13E04B48727F4B48727F4B48 -737E4A49737E4A49737E4A49737F4A894A49737F4A90CD6C7F4A48747FA24A48747F4949 -757E498A4B87498B4949757FA24949757FA24949757F498BA290B5CF6C7FA2488C4A88A2 -488C4A88482180A348497713C0A34821E0A24A89A24821F0A44821F84A89A6B520FCB26C -6D5313F8A76C21F06E65A36C21E0A36E9AB5FC6C21C0A36C6D521480A26C21006E64A26C -686F636C68A26D6D515BA26D6D515BA26D6D515B6D676F636D676F98B5FC6D9CC7FC6D6D -505B6D666F626E6D4F5B6E6D4F5B6E656E6D4F5B6E6D4F5B6E6D4F90C8FC6E6D4F5A6E6D -4E5B6F6C4E5B6F6D4D5B6F6D4D5B6F6D4D5B030301F8057F90C9FC6F6D4D5A6F6CB40403 -13F8706D4B5B040F01E0031F13C0040301FC92B5CAFC0400D9FF80010713FC053F01F801 -7F13F0050F90B712C005014CCBFCDD003F15F0060392CCFCDE001F13E0> 134 -149 117 272 157 79 D[ 199 145 124 268 208 87 D<93380FFFC093B512FC0307ECFF80031F15F0923A -7FFE007FFC912601FFF0EB07FE020701C0903800FF804A90C8EA3FC0DA1FFCED0FE0DA7F -F86F7E4A48ED01F849496F7E4949167E4949163E4990CA123F49EF03FF49484C13804A5E -017F5F49484C13C061485B5AA2485BA25A4A7013805A731300735A4849EE03F896C8FCA3 -5AA291CDFCA3B5FCAF7E80A47EA36C7FA36CF101F0807E1A036C6D18E0A26C6D17071BC0 -6C6D170F017F19806E171F013F19006D6C5F6D6D167E6D6D167C6D18FC6D6D4B5A6D6D4B -5ADA7FFC4B5A6E6CED1FC091260FFF804A5A6E6D02FEC7FC020101F8EB07FC6E01FFEB7F -F8031F90B512E003071580030002FCC8FC040F13C04C5E79DB5A> 99 -D 101 D 103 D[<14FCEB03FF010F13C049 -7F497FA2497FA86D5BA26D5B6D5B010390C8FCEB00FC91C9FCB3A9EC03F848B5FCB6FCA6 -C67E130F7F7FA27FB3B3B3AE5B81497F013FEBFFC0B812E0A6> 43 -138 121 265 57 105 D[ 97 143 123 270 107 107 D 110 D<153EA8157EA615FEA41401A31403A31407A2140FA2 -141F143FA2147F14FF5B5B5B5B133F90B912F01207BAFCA4C76C48C9FCB3B3AA193EB219 -7E023F167C81A36E16F88280F001F06E7FF003E06E7F6E6DEB07C06E150FDB7FFCEB1F80 -6F6CEB3F0092391FFFC1FE0307EBFFFC030114F06F6C5B040790C7FC3F817CFE4F> 116 -D 123 D I E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 600dpi -TeXDict begin -%%PaperSize: A4 - @landscape -%%EndSetup -%%Page: 0 1 -0 0 bop Black Black Black Black Fk 2459 910 a(MO) -6 -b(W) g(GLI) 1992 1151 y(Kic) g(k{O\013) 67 b(Meeting) g(|) p -Fj 1198 1882 a(Usabilit) -6 b(y) 75 b(of) j(MBase) g(for) g(MO) -6 -b(W) g(GLI) p Fi 2126 2627 a(Markus) 66 b(Mosc) -6 b(hner) p -Fh 1176 2897 a(Univ) h(ersit) g(y) 56 b(of) g(Saarbr) 5 -b(\177) -89 b(uc) -5 b(k) g(en,) 55 b(D-66123,) k(German) -5 -b(y;) 1811 3104 y(email:) 73 b(mosc) -5 b(hm@math) g(w) g(eb.org) p -Fg 4881 3761 a(15.Marc) l(h) 49 b(2002) p Black Black -90 rotate dyy eop -%%Page: 0 2 -0 1 bop Black Black Fh 258 96 a(First) 55 b(Glance) p -Black Ff 271 612 a(\017) p Black Fg 86 w(Managemen) l(t) 50 -b(of) f(mathematical) i(kno) l(wledge) p Black Ff 271 -922 a(\017) p Black Fg 86 w(Con) l(ten) l(t) f(language:) p -Fh 66 w(OMDo) 5 b(c) p Black Ff 271 1232 a(\017) p Black -Fh 86 w(Dev) -5 b(elopmen) g(t) 56 b(Graph) p Black Ff -271 1542 a(\017) p Black Fg 86 w(Implemen) l(tation) 51 -b(based) f(on) f(the) p Fh 430 1714 a(MathW) -14 b(eb) p -Fg 48 w(infrastructure) p Black Ff 271 2024 a(\017) p -Black Fg 86 w(Demo) 49 b(and) h(prerelease) g(a) l(v) -8 -b(ailable) p Black Black 90 rotate dyy eop -%%Page: 0 3 -0 2 bop Black Black Fh 258 96 a(Application) 55 b(of) i(MBase) p -Black Ff 271 567 a(\017) p Black Fg 86 w(Usage) 49 b(for) g(writing) h -(mathematical) h(do) t(cumen) l(ts:) p Black Fh 639 859 -a({) p Black Fg 86 w(Structured) f(rep) t(ository) h(of) d -(mathematical) j(concepts) p Black Fh 639 1082 a({) p -Black Fg 86 w(Storing) g(and) e(retrieving) i(mathematical) g(do) t -(cumen) l(ts) p Black Ff 271 1374 a(\017) p Black Fg -86 w(P) l(oten) l(tial) g(use:) p Black Fh 639 1666 a({) p -Black Fg 86 w(Uni\014cation) g(of) e(libraries) p Black -Fh 639 1889 a({) p Black Fg 86 w(Rep) t(ository) h(of) f -(\(standardized\)) p Fh 50 w(XML) p Fg({based) h(do) t(cumen) l(ts) p -Black Fh 639 2112 a({) p Black Fg 86 w(Seman) l(tics{based) h(retriev) --8 b(al) 50 b(of) f(distributed) i(mathematical) g(facts) p -Black Ff 271 2404 a(\017) p Black Fg 86 w(P) l(ossible) f(use) f -(within) h(MO) l(W) l(GLI:) 430 2576 y(lo) t(cal) h(rep) t(ositories) f -(for) f(a) g(uniform) h(data) f(exc) l(hange) p Black -Ff 271 2868 a(\017) p Black Fg 86 w(Systems) g(in) l(tended) i(to) e -(use) g(it) g(in) h(the) f(near) g(future:) p Black 609 -3160 a(1.) p Black 86 w(Activ) l(eMath) h(authoring) h(to) t(ol) p -Black 609 3383 a(2.) p Black 86 w(INKA) d(and) h(\012mega) g(pro) t(of) -g(planner) p Black 609 3607 a(3.) p Black 86 w(Other) p -Fh 49 w(MathW) -14 b(eb) p Fg 48 w(systems) p Black Black -90 rotate dyy eop -%%Page: 0 4 -0 3 bop Black Black Fh 258 95 a(F) -14 b(eatures) p Black -Fg 231 611 a(1.) p Black 85 w(Syn) l(tactic) 51 b(supp) t(ort) e(for) p -Fh 49 w(OMDo) 5 b(c) p Fg 49 w(1.1) p Black 231 921 a(2.) p -Black 85 w(W) -12 b(eb) 50 b(in) l(terface) p Black 231 -1231 a(3.) p Black 85 w(XMLRPC) e(in) l(terface) 430 -1403 y(\(libraries) j(for) e(imp) t(ortan) l(t) h(programming) h -(languages) g(exist\)) p Black 231 1713 a(4.) p Black -85 w(P) l(attern) e(matc) l(hing) h(\(\\case") g(in) p -Fh 49 w(Oz) p Fg(\)) f(|) 430 1885 y(core) h(of) e(seman) l(tics{orien) -l(ted) j(searc) l(h) p Black 231 2195 a(5.) p Black 85 -w(Con) l(ten) l(t) f(stored) f(in) g(SQL) h(database) p -Black 231 2505 a(6.) p Black 85 w(Distributions) h(for) e(Lin) l(ux) p -Black Black 90 rotate dyy eop -%%Page: 0 5 -0 4 bop Black Black Fh 258 96 a(Roadmap) p Black Ff 271 -612 a(\017) p Black Fg 86 w(Curren) l(t) 50 b(state:) 64 -b(database) 50 b(for) e(mathematical) j(con) l(ten) l(t) p -Black Ff 271 922 a(\017) p Black Fg 86 w(Ongoing) g(w) l(ork:) p -Black Fh 639 1232 a({) p Black Fg 86 w(Better) e(supp) t(ort) g(for) g -(seman) l(tics) p Black Fh 639 1473 a({) p Black Fg 86 -w(Con) l(ten) l(t) g(exc) l(hange) h(b) t(et) l(w) l(een) p -Fh 50 w(MBase) p Fg({serv) l(ers) p Black Fh 639 1714 -a({) p Black 86 w(Dev) -5 b(elopmen) g(t) 56 b(Graph) p -Fg 49 w(in) l(tegration) p Black Ff 271 2024 a(\017) p -Black Fg 86 w(F) -12 b(uture) 50 b(w) l(ork:) p Black -Fh 639 2334 a({) p Black Fg 86 w(F) -12 b(ul\014ll) 52 -b(pro) t(of) d(obligations) j(automatically) 809 2506 -y(\(via) p Fh 50 w(MathW) -14 b(eb) p Fg(\)) p Black -Fh 639 2747 a({) p Black Fg 86 w(Syn) l(tax) 50 b(transformators) p -Black Fh 639 2988 a({) p Black Fg 86 w(Logical) h(morphisms) p -Black Black 90 rotate dyy eop -%%Page: 0 6 -0 5 bop Black Black Fh 258 96 a(Dev) -5 b(elopmen) g(t) 56 -b(Graph) p Black Ff 271 612 a(\017) p Black Fg 86 w(Dev) l(elopmen) l -(t) 51 b(b) l(y) e(Dieter) g(Hutter) g(and) g(Serge) h(Autexier) p -Black Ff 271 922 a(\017) p Black Fg 86 w(Directed) g(\(acyclic\)) h -(graphs) e(with) p Black 609 1232 a(1.) p Black 86 w(theories) h(as) f -(no) t(des) p Black 609 1473 a(2.) p Black 86 w(morphisms) h(as) f -(edges) g(|) 809 1645 y(De\014nition) i(and) f(Theorem) f(Links) p -Black Ff 271 1955 a(\017) p Black Fg 86 w(Mec) l(hanism) h(for:) p -Black 609 2265 a(1.) p Black 86 w(F) -12 b(orm) l(ulating) 52 -b(theory) d(links) p Black 609 2506 a(2.) p Black 86 -w(Pro) l(ving) h(of) f(relations) h(b) t(et) l(w) l(een) f(theories) p -Black Ff 271 2816 a(\017) p Black Fg 86 w(Managemen) l(t) h(of) f -(Change:) 430 2988 y(Computation) i(of) e(pro) t(of) g(obligations) j -(after) c(c) l(hanges) p Black Ff 271 3298 a(\017) p -Black Fg 86 w(Realized) j(in) f(the) p Fh 49 w(MA) -14 -b(Y) g(A) p Fg 48 w(system) p Black Black 90 rotate dyy -eop -%%Page: 0 7 -0 6 bop Black Black Fh 258 95 a(URLs) p Black Ff 271 -611 a(\017) p Black Fh 86 w(MBase) p Black 639 921 a({) p -Black Fg 86 w(Homepage:) 66 b(h) l(ttp://www.math) l(w) l(eb.org/m) l -(base) p Black Fh 639 1162 a({) p Black Fg 86 w(Demo:) f(h) l(ttp://m) l -(base.math) l(w) l(eb.org:8080) p Black Fh 639 1403 a({) p -Black Fg 86 w(Bugtrac) l(king:) i(h) l(ttp://bugzilla.math) l(w) l -(eb.org:8000) p Black Fh 639 1644 a({) p Black Fg 86 -w(Users) 48 b(mailing) k(list:) 65 b(m) l(base) p Fe(@) p -Fg(math) l(w) l(eb.org) p Black Fh 639 1885 a({) p Black -Fg 86 w(Do) l(wnload) 50 b(of) f(prereleases) h(for) e(Lin) l(ux:) 809 -2057 y(h) l(ttp://www.math) l(w) l(eb.org/releases/m) l(base) 809 -2230 y(ftp://ftp.ags.uni-sb.de/math) l(w) l(eb.org/releases/m) l(base) p -Black Ff 271 2540 a(\017) p Black Fh 86 w(OMDo) 5 b(c) p -Fg 49 w(:) p Black Fh 639 2850 a({) p Black Fg 86 w(h) l -(ttp://www.math) l(w) l(eb.org/omdo) t(c/index.h) l(tml) p -Black Fh 639 3091 a({) p Black Fg 86 w(Mailing) 52 b(list:) 65 -b(omdo) t(c) p Fe(@) p Fg(math) l(w) l(eb.org) p Black -Ff 271 3401 a(\017) p Black Fh 86 w(Dev) -5 b(elopmen) g(t) 56 -b(Graph) p Fg(:) p Black Fh 639 3710 a({) p Black Fg -86 w(h) l(ttp://www.dfki.de/) 2114 3677 y(~) 2130 3710 -y(ink) -8 b(a/ma) l(y) l(a.h) l(tml) p Black Black 90 rotate -dyy eop -%%Page: 0 8 -0 7 bop Black Black Black Fh 639 103 a({) p Black Fg -86 w(h) l(ttp://www.dfki.de/vse/systems/ink) -8 b(a/ink) g(a5.h) l(tml) -p Black Ff 271 413 a(\017) p Black Fh 86 w(URLs) 57 b(for) f(Activ) -5 -b(eMath) p Black 639 723 a({) p Black Fg 86 w(Homepage:) 66 -b(h) l(ttp://www.math) l(w) l(eb.org/activ) l(emath/index.h) l(tml) p -Black Fh 639 964 a({) p Black Fg 86 w(Demo:) f(h) l(ttp://www.math) l -(w) l(eb.org/activ) l(emath/demo/) p Black Fh 639 1205 -a({) p Black Fg 86 w(Bugtrac) l(king:) i(h) l -(ttp://leibniz.ags.uni-sb.de:8000/) p Black Black 90 rotate -dyy eop -%%Page: 0 9 -0 8 bop Black Black Fh 258 96 a(Idea) 57 b(on) f(OMDo) 5 -b(c) p Black Ff 271 612 a(\017) p Black Fh 86 w(OMDo) g(c) p -Fg 98 w(=) p Fh 48 w(O) p Fg(p) t(en) 50 b(Markup) f(F) -12 -b(ormat) 50 b(for) p Fh 49 w(M) p Fg(athematical) p Fh -50 w(Do) 5 b(c) p Fg(umen) l(ts) p Black Ff 271 922 a(\017) p -Black Fh 86 w(XML) p Fg 49 w(based) p Black Ff 271 1232 -a(\017) p Black Fg 86 w(Extension) 50 b(of) p Fh 49 w(Op) 5 -b(enMath) p Fg 47 w(standard) p Black Ff 271 1542 a(\017) p -Black Fg 86 w(Univ) l(ersal) 51 b(format) d(for) h(mathematical) i(do) t -(cumen) l(ts) p Black Ff 271 1852 a(\017) p Black Fg -86 w(Flexibilit) l(y) j(for) 48 b(seman) l(tical) j(notions) p -Black Ff 271 2162 a(\017) p Black Fg 86 w(Separating) g(presen) l -(tation) g(and) e(con) l(ten) l(t) p Black Black 90 rotate -dyy eop -%%Page: 0 10 -0 9 bop Black Black Fh 258 96 a(T) -5 b(yp) 5 b(es) 57 -b(of) f(OMDo) 5 b(c) 56 b(items) p Black Ff 271 612 a(\017) p -Black Fg 86 w(Theories) 50 b(and) g(inheritance) p Black -Ff 271 922 a(\017) p Black Fg 86 w(Core) f(mathematical) i(ob) 8 -b(jects:) p Black Fh 639 1232 a({) p Black Fg 86 w(De\014nitions) 51 -b(and) f(sym) l(b) t(ols) p Black Fh 639 1473 a({) p -Black Fg 86 w(Assertions,) f(axioms) g(and) h(pro) t(ofs) p -Black Ff 271 1783 a(\017) p Black Fg 86 w(F) -12 b(or) 50 -b(Con) l(ten) l(t:) p Black Fh 639 2093 a({) p Black -Fg 86 w(metadata:) 66 b(Dublin) 50 b(Core) p Black Fh -639 2334 a({) p Black Fg 86 w(FMP:) f(formal) g(con) l(ten) l(t) p -Black Fh 639 2575 a({) p Black Fg 86 w(CMP:) f(natural) i(language) h -(con) l(ten) l(t) p Black Black 90 rotate dyy eop -%%Page: 0 11 -0 10 bop Black Black Black Ff 271 96 a(\017) p Black -Fg 86 w(ADT:) 48 b(abstract) h(data) g(t) l(yp) t(es) p -Black Ff 271 406 a(\017) p Black Fg 86 w(Auxiliary) j(elemen) l(ts:) p -Black Fh 639 716 a({) p Black Fg 86 w(System) d(sp) t(eci\014c) h(priv) --8 b(ate) 50 b(data) p Black Fh 639 957 a({) p Black -Fg 86 w(Applets) p Black Ff 271 1267 a(\017) p Black -Fg 86 w(Presen) l(tation) g(information) p Black Black -90 rotate dyy eop -%%Page: 0 12 -0 11 bop Black Black Fh 258 96 a(Usage) 57 b(of) f(OMDo) 5 -b(c) p Black Ff 271 612 a(\017) p Black Fg 86 w(Examples) 50 -b(of) f(use:) p Black Fh 639 1094 a({) p Black Fg 86 -w(Mathematical) i(b) t(o) t(oks) f(in) p Fh 49 w(OMDo) 5 -b(c) p Black 639 1335 a({) p Black 86 w(Activ) -5 b(eMath) p -Fg 48 w(group:) 66 b(a) 49 b(w) l(eb{based) h(learning) h(system) d -(for) h(mathematical) i(courses) 809 1508 y(\(sligh) l(tly) g(mo) t -(di\014ed) g(v) l(ersion\)) p Black Fh 639 1749 a({) p -Black 86 w(QMath) p Fg 43 w(b) l(y) 45 b(Alb) t(erto) h(Gonz\023) -73 -b(alez) 45 b(P) l(alomo) g(|) g(a) f(fron) l(tend) i(for) p -Fh 44 w(OMDo) 5 b(c) p Fg 44 w(\(needs) 45 b(dev) l(el-) 809 -1921 y(opmen) l(t\)) p Black Fh 639 2162 a({) p Black -Fg 86 w(Comm) l(unication) 51 b(standard) f(b) t(et) l(w) l(een) f -(\012mega) g(and) h(TPS) p Black Fh 639 2403 a({) p Black -Fg 86 w(V) -12 b(arious) 50 b(XSL) f(st) l(yle) g(\014les) h(for) e -(transformation) i(in) l(to) g(other) g(formats) p Black -Black 90 rotate dyy eop -%%Page: 0 13 -0 12 bop Black Black Fd 0 255 a() p -1 0 0 TeXcolorrgb 112 357 a() 204 450 y(The) f(Theory) -h(SEMIGROUP) 204 543 y(The) f(OMEGA) j -(system) 204 636 y(2001-5-28) 112 -729 y() p Fc 2308 297 a(9) 2308 359 y(>) 2308 -379 y(>) 2308 400 y(>) 2308 421 y(>) 2308 441 y(>) 2308 -462 y(=) 2308 586 y(>) 2308 607 y(>) 2308 627 y(>) 2308 -648 y(>) 2308 669 y(>) 2308 689 y(;) p Fb 2399 570 a(Metadaten) p -Black 0 1 0 TeXcolorrgb Fd 91 800 a(Semi-group) 40 -b(theory) p Fa 2058 817 a( ) p Fi -143 w(|) -29 -b(|) g(|) g(|) g(|) g(|) g(|) g(|) p Fb 60 w(Name) p -Black Fd 91 989 a() 183 -1162 y() 91 1334 y() p 0 0 1 TeXcolorrgb 112 1440 -a() 204 1533 -y(SEMIGROUP) 112 -1626 y() p Fc 1759 1370 a(9) 1759 1432 y(>) 1759 -1453 y(=) 1759 1577 y(>) 1759 1597 y(;) p Fb 1850 1558 -a(Sym) -5 b(b) 5 b(ol-Deklaration) p Black 0.55 1 1 0 -TeXcolorcmyk Black 0.55 1 1 0 TeXcolorcmyk 90 rotate -dyy eop -%%Page: 0 14 -0 13 bop 0.55 1 1 0 TeXcolorcmyk Black 0.55 1 1 0 TeXcolorcmyk -Fd 112 65 a() 204 158 y(Definition) e(of) 46 -b(a) f(Semigroup.) 204 251 y() 295 -344 y() 387 437 y() 478 530 y() 478 623 y() 478 716 y() 570 809 y() 570 902 y() 661 995 -y() 752 1088 y() 1073 -1181 y() o() -1301 1274 y(<) o(/OMA) o -(TP>) 752 1367 y() 661 1460 y() 661 -1553 y() 752 1646 y() 1073 -1739 y() o() -1301 1832 y() 1530 1925 y(<) o(/OMA) o -(TP>) 752 2018 y() 661 2111 y() 570 -2204 y() 570 2297 y() 661 2390 y() 661 2483 y() -661 2576 y() 752 2669 y() 752 -2762 y() 981 -2854 y() 752 -2947 y() 981 -3040 y() 661 -3133 y() 478 3226 y() 295 -3319 y() 204 3412 y() 112 3505 y() p -Fc 3634 31 a(9) 3634 93 y(>) 3634 114 y(>) 3634 134 y(>) 3634 -155 y(>) 3634 176 y(>) 3634 196 y(>) 3634 217 y(>) 3634 -238 y(>) 3634 258 y(>) 3634 279 y(>) 3634 300 y(>) 3634 -320 y(>) 3634 341 y(>) 3634 362 y(>) 3634 382 y(>) 3634 -403 y(>) 3634 424 y(>) 3634 444 y(>) 3634 465 y(>) 3634 -486 y(>) 3634 506 y(>) 3634 527 y(>) 3634 548 y(>) 3634 -568 y(>) 3634 589 y(>) 3634 610 y(>) 3634 630 y(>) 3634 -651 y(>) 3634 672 y(>) 3634 692 y(>) 3634 713 y(>) 3634 -733 y(>) 3634 754 y(>) 3634 775 y(>) 3634 795 y(>) 3634 -816 y(>) 3634 837 y(>) 3634 857 y(>) 3634 878 y(>) 3634 -899 y(>) 3634 919 y(>) 3634 940 y(>) 3634 961 y(>) 3634 -981 y(>) 3634 1002 y(>) 3634 1023 y(>) 3634 1043 y(>) 3634 -1064 y(>) 3634 1085 y(>) 3634 1105 y(>) 3634 1126 y(>) 3634 -1147 y(>) 3634 1167 y(>) 3634 1188 y(>) 3634 1209 y(>) 3634 -1229 y(>) 3634 1250 y(>) 3634 1271 y(>) 3634 1291 y(>) 3634 -1312 y(>) 3634 1333 y(>) 3634 1353 y(>) 3634 1374 y(>) 3634 -1395 y(>) 3634 1415 y(>) 3634 1436 y(>) 3634 1457 y(>) 3634 -1477 y(>) 3634 1498 y(>) 3634 1519 y(>) 3634 1539 y(>) 3634 -1560 y(>) 3634 1581 y(>) 3634 1601 y(>) 3634 1622 y(>) 3634 -1643 y(>) 3634 1663 y(>) 3634 1684 y(>) 3634 1705 y(=) 3634 -1829 y(>) 3634 1849 y(>) 3634 1870 y(>) 3634 1891 y(>) 3634 -1911 y(>) 3634 1932 y(>) 3634 1953 y(>) 3634 1973 y(>) 3634 -1994 y(>) 3634 2015 y(>) 3634 2035 y(>) 3634 2056 y(>) 3634 -2077 y(>) 3634 2097 y(>) 3634 2118 y(>) 3634 2139 y(>) 3634 -2159 y(>) 3634 2180 y(>) 3634 2201 y(>) 3634 2221 y(>) 3634 -2242 y(>) 3634 2263 y(>) 3634 2283 y(>) 3634 2304 y(>) 3634 -2325 y(>) 3634 2345 y(>) 3634 2366 y(>) 3634 2387 y(>) 3634 -2407 y(>) 3634 2428 y(>) 3634 2448 y(>) 3634 2469 y(>) 3634 -2490 y(>) 3634 2510 y(>) 3634 2531 y(>) 3634 2552 y(>) 3634 -2572 y(>) 3634 2593 y(>) 3634 2614 y(>) 3634 2634 y(>) 3634 -2655 y(>) 3634 2676 y(>) 3634 2696 y(>) 3634 2717 y(>) 3634 -2738 y(>) 3634 2758 y(>) 3634 2779 y(>) 3634 2800 y(>) 3634 -2820 y(>) 3634 2841 y(>) 3634 2862 y(>) 3634 2882 y(>) 3634 -2903 y(>) 3634 2924 y(>) 3634 2944 y(>) 3634 2965 y(>) 3634 -2986 y(>) 3634 3006 y(>) 3634 3027 y(>) 3634 3048 y(>) 3634 -3068 y(>) 3634 3089 y(>) 3634 3110 y(>) 3634 3130 y(>) 3634 -3151 y(>) 3634 3172 y(>) 3634 3192 y(>) 3634 3213 y(>) 3634 -3234 y(>) 3634 3254 y(>) 3634 3275 y(>) 3634 3296 y(>) 3634 -3316 y(>) 3634 3337 y(>) 3634 3358 y(>) 3634 3378 y(>) 3634 -3399 y(>) 3634 3420 y(>) 3634 3440 y(;) p Fb 3725 1812 -a(De\014nition) p Black Fd 0 3610 a() p Black -Black 90 rotate dyy eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/helm/mowgli/home/misc/kick-off/KM2002GO_mathweb.ps b/helm/mowgli/home/misc/kick-off/KM2002GO_mathweb.ps deleted file mode 100644 index 5c84872e4..000000000 --- a/helm/mowgli/home/misc/kick-off/KM2002GO_mathweb.ps +++ /dev/null @@ -1,506 +0,0 @@ -%!PS-Adobe-2.0 -%%Title: KM2002GO_mathweb.ps -%%Creator: fig2dev Version 3.2 Patchlevel 3c -%%CreationDate: Wed Apr 3 03:01:28 2002 -%%For: moschm@king (Markus Moschner) -%%Orientation: Landscape -%%Pages: 1 -%%BoundingBox: 0 0 595 842 -%%BeginSetup -%%IncludeFeature: *PageSize A4 -%%EndSetup -%%Magnification: 0.9200 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def -/col32 {0.000 0.000 1.000 srgb} bind def -/col33 {0.000 0.000 0.000 srgb} bind def -/col34 {0.000 0.000 0.000 srgb} bind def -/col35 {1.000 0.984 0.475 srgb} bind def -/col36 {0.937 1.000 0.000 srgb} bind def -/col37 {0.188 0.396 1.000 srgb} bind def -/col38 {1.000 0.286 0.286 srgb} bind def -/col39 {0.000 0.000 1.000 srgb} bind def -/col40 {1.000 0.984 0.475 srgb} bind def -/col41 {0.937 1.000 0.000 srgb} bind def -/col42 {0.188 0.396 1.000 srgb} bind def -/col43 {1.000 0.286 0.286 srgb} bind def -/col44 {0.000 0.000 1.000 srgb} bind def -/col45 {1.000 0.984 0.475 srgb} bind def -/col46 {0.937 1.000 0.000 srgb} bind def -/col47 {0.188 0.396 1.000 srgb} bind def -/col48 {1.000 0.286 0.286 srgb} bind def -/col49 {0.000 0.000 1.000 srgb} bind def -/col50 {1.000 0.984 0.475 srgb} bind def -/col51 {0.937 1.000 0.000 srgb} bind def -/col52 {0.188 0.396 1.000 srgb} bind def -/col53 {1.000 0.286 0.286 srgb} bind def -/col54 {0.000 0.000 1.000 srgb} bind def -/col55 {1.000 0.984 0.475 srgb} bind def -/col56 {0.937 1.000 0.000 srgb} bind def -/col57 {0.188 0.396 1.000 srgb} bind def -/col58 {1.000 0.286 0.286 srgb} bind def -/col59 {0.000 0.000 1.000 srgb} bind def -/col60 {1.000 0.984 0.475 srgb} bind def -/col61 {0.937 1.000 0.000 srgb} bind def -/col62 {0.188 0.396 1.000 srgb} bind def -/col63 {1.000 0.286 0.286 srgb} bind def -/col64 {0.000 0.000 1.000 srgb} bind def -/col65 {1.000 0.984 0.475 srgb} bind def -/col66 {0.937 1.000 0.000 srgb} bind def -/col67 {0.188 0.396 1.000 srgb} bind def -/col68 {1.000 0.286 0.286 srgb} bind def -/col69 {0.000 0.000 1.000 srgb} bind def -/col70 {1.000 0.984 0.475 srgb} bind def -/col71 {0.937 1.000 0.000 srgb} bind def -/col72 {0.188 0.396 1.000 srgb} bind def -/col73 {1.000 0.286 0.286 srgb} bind def -/col74 {0.000 0.000 1.000 srgb} bind def -/col75 {1.000 0.984 0.475 srgb} bind def -/col76 {0.937 1.000 0.000 srgb} bind def -/col77 {0.188 0.396 1.000 srgb} bind def -/col78 {1.000 0.286 0.286 srgb} bind def -/col79 {0.000 0.000 1.000 srgb} bind def -/col80 {1.000 0.984 0.475 srgb} bind def -/col81 {0.937 1.000 0.000 srgb} bind def -/col82 {0.188 0.396 1.000 srgb} bind def -/col83 {1.000 0.286 0.286 srgb} bind def -/col84 {0.000 0.000 1.000 srgb} bind def -/col85 {1.000 0.984 0.475 srgb} bind def -/col86 {0.937 1.000 0.000 srgb} bind def -/col87 {0.188 0.396 1.000 srgb} bind def -/col88 {1.000 0.286 0.286 srgb} bind def -/col89 {0.000 0.000 1.000 srgb} bind def -/col90 {1.000 0.984 0.475 srgb} bind def -/col91 {0.937 1.000 0.000 srgb} bind def -/col92 {0.188 0.396 1.000 srgb} bind def -/col93 {1.000 0.286 0.286 srgb} bind def - -end -save -newpath 0 842 moveto 0 0 lineto 595 0 lineto 595 842 lineto closepath clip newpath -18.5 51.0 translate - 90 rotate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/reencdict 12 dict def /ReEncode { reencdict begin -/newcodesandnames exch def /newfontname exch def /basefontname exch def -/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def -basefontdict { exch dup /FID ne { dup /Encoding eq -{ exch dup length array copy newfont 3 1 roll put } -{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall -newfont /FontName newfontname put newcodesandnames aload pop -128 1 255 { newfont /Encoding get exch /.notdef put } for -newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat -newfontname newfont definefont pop end } def -/isovec [ -8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde -8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis -8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron -8#220 /dotlessi 8#230 /oe 8#231 /OE -8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling -8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis -8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot -8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus -8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph -8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine -8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf -8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute -8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring -8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute -8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute -8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve -8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply -8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex -8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave -8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring -8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute -8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute -8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve -8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide -8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex -8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def -/Helvetica-Bold /Helvetica-Bold-iso isovec ReEncode -/Helvetica-Narrow-Bold /Helvetica-Narrow-Bold-iso isovec ReEncode -/Helvetica-Narrow /Helvetica-Narrow-iso isovec ReEncode -/Times-Bold /Times-Bold-iso isovec ReEncode -/Times-Roman /Times-Roman-iso isovec ReEncode - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -%%Page: 1 1 -10 setmiterlimit - 0.05795 0.05795 sc -%%Page: 1 1 -% -% Fig objects follow -% -% Polyline -15.000 slw -gs clippath -8373 6383 m 8432 6401 l 8480 6237 l 8416 6347 l 8421 6220 l cp -eoclip -n 8407 6378 m - 8870 4811 l gs col0 s gr gr - -% arrowhead -n 8421 6220 m 8416 6347 l 8480 6237 l 8421 6220 l cp gs 0.00 setgray ef gr col0 s -% Polyline -gs clippath -4886 4227 m 4886 4288 l 5056 4288 l 4933 4258 l 5056 4227 l cp -8329 4288 m 8329 4227 l 8159 4227 l 8282 4258 l 8159 4288 l cp -eoclip -n 8314 4258 m - 4901 4258 l gs col0 s gr gr - -% arrowhead -n 8159 4288 m 8282 4258 l 8159 4227 l 8159 4288 l cp gs 0.00 setgray ef gr col0 s -% arrowhead -n 5056 4227 m 4933 4258 l 5056 4288 l 5056 4227 l cp gs 0.00 setgray ef gr col0 s -% Polyline -30.000 slw - [45] 0 sd -n 6927 7861 m - 7670 7300 l gs col0 s gr [] 0 sd -% Polyline -15.000 slw -gs clippath -6770 2849 m 6712 2870 l 6770 3030 l 6758 2904 l 6828 3009 l cp -8015 6495 m 8073 6474 l 8015 6314 l 8028 6441 l 7957 6335 l cp -eoclip -n 8039 6471 m - 6747 2874 l gs col0 s gr gr - -% arrowhead -n 7957 6335 m 8028 6441 l 8015 6314 l 7957 6335 l cp gs 0.00 setgray ef gr col0 s -% arrowhead -n 6828 3009 m 6758 2904 l 6770 3030 l 6828 3009 l cp gs 0.00 setgray ef gr col0 s -% Polyline -gs clippath -6130 2612 m 6093 2563 l 5957 2667 l 6074 2617 l 5995 2716 l cp -4503 3781 m 4540 3830 l 4676 3726 l 4560 3777 l 4638 3677 l cp -eoclip -n 4534 3797 m - 6100 2597 l gs col0 s gr gr - -% arrowhead -n 4638 3677 m 4560 3777 l 4676 3726 l 4638 3677 l cp gs 0.00 setgray ef gr col0 s -% arrowhead -n 5995 2716 m 6074 2617 l 5957 2667 l 5995 2716 l cp gs 0.00 setgray ef gr col0 s -% Polyline -gs clippath -8582 3829 m 8623 3784 l 8498 3668 l 8568 3775 l 8456 3713 l cp -7309 2564 m 7268 2609 l 7393 2725 l 7324 2619 l 7435 2680 l cp -eoclip -n 7300 2597 m - 8592 3797 l gs col0 s gr gr - -% arrowhead -n 7435 2680 m 7324 2619 l 7393 2725 l 7435 2680 l cp gs 0.00 setgray ef gr col0 s -% arrowhead -n 8456 3713 m 8568 3775 l 8498 3668 l 8456 3713 l cp gs 0.00 setgray ef gr col0 s -% Polyline -gs clippath -7664 6689 m 7699 6639 l 7559 6542 l 7643 6638 l 7524 6593 l cp -4721 4592 m 4686 4642 l 4826 4739 l 4743 4644 l 4861 4688 l cp -eoclip -n 4716 4626 m - 7670 6656 l gs col0 s gr gr - -% arrowhead -n 4861 4688 m 4743 4644 l 4826 4739 l 4861 4688 l cp gs 0.00 setgray ef gr col0 s -% arrowhead -n 7524 6593 m 7643 6638 l 7559 6542 l 7524 6593 l cp gs 0.00 setgray ef gr col0 s -% Polyline - [60] 0 sd -gs clippath -2671 2365 m 2672 2458 l 2887 2457 l 2703 2412 l 2887 2364 l cp -eoclip -n 2687 2412 m - 5916 2400 l gs col0 s gr gr - [] 0 sd -% arrowhead -7.500 slw -n 2887 2364 m 2703 2412 l 2887 2457 l 2887 2364 l cp gs 0.00 setgray ef gr col0 s -% Polyline -15.000 slw - [60] 0 sd -gs clippath -6024 2089 m 6024 1996 l 5808 1996 l 5993 2043 l 5808 2089 l cp -eoclip -n 2687 2043 m - 6009 2043 l gs col0 s gr gr - [] 0 sd -% arrowhead -7.500 slw -n 5808 2089 m 5993 2043 l 5808 1996 l 5808 2089 l cp gs 0.00 setgray ef gr col0 s -% Polyline -30.000 slw - [45] 0 sd -n 2880 5165 m - 3623 4604 l gs col0 s gr [] 0 sd -% Polyline - [45] 0 sd -n 9054 6930 m - 10253 6930 l gs col0 s gr [] 0 sd -% Polyline - [90] 0 sd -n 10170 3780 m - 9630 3960 l gs col0 s gr [] 0 sd -% Polyline - [90] 0 sd -gs clippath -4455 7304 m 4284 7247 l 4179 7562 l 4350 7335 l 4349 7619 l cp -eoclip -n 4320 4815 m 4320 7425 l - 4365 7290 l gs col0 s gr gr - [] 0 sd -% arrowhead -n 4349 7619 m 4350 7335 l 4179 7562 l 4236 7676 l 4349 7619 l - cp gs 0.00 setgray ef gr col0 s -% Polyline -45.000 slw -gs clippath -11356 3729 m 11237 3711 l 11200 3956 l 11285 3803 l 11319 3975 l cp -eoclip -n 11295 3735 m - 11205 4320 l gs col0 s gr gr - -% arrowhead -n 11319 3975 m 11285 3803 l 11200 3956 l 11319 3975 l cp gs 0.00 setgray ef gr col0 s -% Polyline -75.000 slw -n 10584 4410 m 10389 4410 10389 5635 195 arcto 4 {pop} repeat - 10389 5830 12045 5830 195 arcto 4 {pop} repeat - 12240 5830 12240 4605 195 arcto 4 {pop} repeat - 12240 4410 10584 4410 195 arcto 4 {pop} repeat - cp gs col18 s gr -% Polyline -45.000 slw -gs clippath -1411 2964 m 1292 2946 l 1255 3191 l 1340 3038 l 1374 3210 l cp -eoclip -n 1350 2970 m - 1260 3555 l gs col0 s gr gr - -% arrowhead -n 1374 3210 m 1340 3038 l 1255 3191 l 1374 3210 l cp gs 0.00 setgray ef gr col0 s -% Polyline -75.000 slw -n 684 3627 m 519 3627 519 4634 165 arcto 4 {pop} repeat - 519 4799 1881 4799 165 arcto 4 {pop} repeat - 2046 4799 2046 3792 165 arcto 4 {pop} repeat - 2046 3627 684 3627 165 arcto 4 {pop} repeat - cp gs col18 s gr -/Times-Bold-iso ff 480.00 scf sf -4005 720 m -gs 1 -1 sc (MBase within MathWeb) col0 sh gr -/Times-Roman-iso ff 270.00 scf sf -9810 9135 m -gs 1 -1 sc (MS = Metaservice) col0 sh gr -/Times-Roman-iso ff 270.00 scf sf -10603 5271 m -gs 1 -1 sc (Knowledge) col20 sh gr -/Times-Roman-iso ff 270.00 scf sf -10603 4832 m -gs 1 -1 sc (Distribution) col20 sh gr -/Times-Roman-iso ff 270.00 scf sf -10620 5580 m -gs 1 -1 sc (Management) col20 sh gr -/Times-Roman-iso ff 270.00 scf sf -658 4067 m -gs 1 -1 sc (Metadata) col20 sh gr -/Times-Roman-iso ff 270.00 scf sf -658 4506 m -gs 1 -1 sc (Education) col20 sh gr -% Polyline -15.000 slw -n 11581 6390 m 9810 6390 l 9810 7740 l 11581 7740 l - cp gs col31 0.70 tnt ef gr gs col0 s gr -% Polyline -n 7920 7875 m 6149 7875 l 6149 9225 l 7920 9225 l - cp gs col31 0.70 tnt ef gr gs col0 s gr -% Polyline -n 3735 5175 m 1964 5175 l 1964 6525 l 3735 6525 l - cp gs col12 0.70 tnt ef gr gs col0 s gr -% Polyline -n 3825 7425 m 3555 7425 3555 8726 270 arcto 4 {pop} repeat - 3555 8996 4856 8996 270 arcto 4 {pop} repeat - 5126 8996 5126 7695 270 arcto 4 {pop} repeat - 5126 7425 3825 7425 270 arcto 4 {pop} repeat - cp gs col11 0.70 tnt ef gr gs col0 s gr -% Polyline -n 1386 1395 m 1116 1395 1116 2696 270 arcto 4 {pop} repeat - 1116 2966 2417 2966 270 arcto 4 {pop} repeat - 2687 2966 2687 1665 270 arcto 4 {pop} repeat - 2687 1395 1386 1395 270 arcto 4 {pop} repeat - cp gs col46 0.70 tnt ef gr gs col0 s gr -% Polyline -n 11970 2430 m 10199 2430 l 10199 3780 l 11970 3780 l - cp gs col46 0.70 tnt ef gr gs col0 s gr -% Ellipse -n 6615 2250 738 554 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr - -% Ellipse -n 4215 4272 738 554 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr - -% Ellipse -n 9044 4272 738 554 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr - -% Ellipse -n 8314 6931 738 554 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr - -/Helvetica-Bold-iso ff 270.00 scf sf -5271 4166 m -gs 1 -1 sc (forward request) col0 sh gr -/Helvetica-Bold-iso ff 270.00 scf sf -4163 4349 m -gs 1 -1 sc (Broker) dup sw pop 2 div neg 0 rm col0 sh gr -/Helvetica-Bold-iso ff 270.00 scf sf -9054 4349 m -gs 1 -1 sc (Broker) dup sw pop 2 div neg 0 rm col0 sh gr -/Helvetica-Bold-iso ff 270.00 scf sf -3517 2690 m -gs 1 -1 sc (accept/deny) col0 sh gr -/Helvetica-Bold-iso ff 270.00 scf sf -3794 1859 m -gs 1 -1 sc (request) col0 sh gr -/Helvetica-Bold-iso ff 270.00 scf sf -8314 7024 m -gs 1 -1 sc (Broker) dup sw pop 2 div neg 0 rm col0 sh gr -/Helvetica-Bold-iso ff 270.00 scf sf -5271 4811 m -gs 1 -1 sc 325.0 rot (\(un-\)register) col0 sh gr -/Helvetica-Bold-iso ff 255.00 scf sf -6615 2025 m -gs 1 -1 sc (Broker) dup sw pop 2 div neg 0 rm col0 sh gr -/Helvetica-Narrow-Bold-iso ff 255.00 scf sf -6615 2340 m -gs 1 -1 sc (Mosh) dup sw pop 2 div neg 0 rm col0 sh gr -/Helvetica-Narrow-Bold-iso ff 255.00 scf sf -6615 2655 m -gs 1 -1 sc (\(Oz\)) dup sw pop 2 div neg 0 rm col0 sh gr -/Helvetica-Narrow-iso ff 270.00 scf sf -6975 8415 m -gs 1 -1 sc (TPS) dup sw pop 2 div neg 0 rm col0 sh gr -/Helvetica-Narrow-iso ff 270.00 scf sf -11070 3150 m -gs 1 -1 sc (MBase) dup sw pop 2 div neg 0 rm col0 sh gr -/Symbol ff 330.00 scf sf -2362 5673 m -gs 1 -1 sc (W) col-1 sh gr -/Helvetica-Narrow-iso ff 270.00 scf sf -2598 5673 m -gs 1 -1 sc (mega) col-1 sh gr -/Symbol ff 330.00 scf sf -10199 6929 m -gs 1 -1 sc (W) col-1 sh gr -/Helvetica-Narrow-iso ff 270.00 scf sf -10476 6929 m -gs 1 -1 sc (mega) col-1 sh gr -/Helvetica-Narrow-iso ff 270.00 scf sf -10530 7425 m -gs 1 -1 sc (MS) dup sw pop 2 div neg 0 rm col0 sh gr -/Helvetica-Narrow-iso ff 270.00 scf sf -2745 6165 m -gs 1 -1 sc (Client) dup sw pop 2 div neg 0 rm col0 sh gr -/Helvetica-Narrow-iso ff 270.00 scf sf -4095 8190 m -gs 1 -1 sc (CAS) col0 sh gr -/Helvetica-Narrow-iso ff 270.00 scf sf -7020 8820 m -gs 1 -1 sc (MS) dup sw pop 2 div neg 0 rm col0 sh gr -/Helvetica-Narrow-iso ff 270.00 scf sf -1890 1755 m -gs 1 -1 sc (Active) dup sw pop 2 div neg 0 rm col0 sh gr -/Helvetica-Narrow-iso ff 270.00 scf sf -1890 2115 m -gs 1 -1 sc (math) dup sw pop 2 div neg 0 rm col0 sh gr -/Helvetica-Narrow-iso ff 270.00 scf sf -1890 2430 m -gs 1 -1 sc (Client) dup sw pop 2 div neg 0 rm col0 sh gr -/Helvetica-Narrow-iso ff 270.00 scf sf -1890 2790 m -gs 1 -1 sc (\(XMLRPC\)) dup sw pop 2 div neg 0 rm col0 sh gr -$F2psEnd -rs -showpage diff --git a/helm/mowgli/home/misc/kick-off/MoWGLI-LogiCal.ps b/helm/mowgli/home/misc/kick-off/MoWGLI-LogiCal.ps deleted file mode 100644 index d6244b7d4..000000000 --- a/helm/mowgli/home/misc/kick-off/MoWGLI-LogiCal.ps +++ /dev/null @@ -1,1919 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software -%%Title: expose-berlin.dvi -%%Pages: 13 -%%PageOrder: Ascend -%%Orientation: Landscape -%%BoundingBox: 0 0 596 842 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips expose-berlin.dvi -o -%DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2002.03.21:1951 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -%%BeginProcSet: pstricks.pro -%! -% PostScript prologue for pstricks.tex. -% Version 97 patch 3, 98/06/01 -% For distribution, see pstricks.tex. -% -/tx@Dict 200 dict def tx@Dict begin -/ADict 25 dict def -/CM { matrix currentmatrix } bind def -/SLW /setlinewidth load def -/CLW /currentlinewidth load def -/CP /currentpoint load def -/ED { exch def } bind def -/L /lineto load def -/T /translate load def -/TMatrix { } def -/RAngle { 0 } def -/Atan { /atan load stopped { pop pop 0 } if } def -/Div { dup 0 eq { pop } { div } ifelse } def -/NET { neg exch neg exch T } def -/Pyth { dup mul exch dup mul add sqrt } def -/PtoC { 2 copy cos mul 3 1 roll sin mul } def -/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } -def -/PathLength { flattenpath /z 0 def { /y1 ED /x1 ED /y2 y1 def /x2 x1 def -} { /y ED /x ED PathLength@ } {} { /y y2 def /x x2 def PathLength@ } -/pathforall load stopped { pop pop pop pop } if z } def -/STP { .996264 dup scale } def -/STV { SDict begin normalscale end STP } def -/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def -PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y -mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul -/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] -0 } ifelse setdash stroke } def -/DotLine { /b PathLength def /a ED /z ED /y CLW def /z y z add def a 0 gt -{ /b b a div def } { a 0 eq { /b b y sub def } { a -3 eq { /b b y add -def } if } ifelse } ifelse [ 0 b b z Div round Div dup 0 le { pop 1 } if -] a 0 gt { 0 } { y 2 div a -2 gt { neg } if } ifelse setdash 1 -setlinecap stroke } def -/LineFill { gsave abs CLW add /a ED a 0 dtransform round exch round exch -2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 -% DG/SR modification begin - Dec. 12, 1997 - Patch 2 -%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a -itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a -% DG/SR modification end -Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict -/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1 -% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) -% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } -% def -a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore -pop pop } def -% DG/SR modification end -/BeginArrow { ADict begin /@mtrx CM def gsave 2 copy T 2 index sub neg -exch 3 index sub exch Atan rotate newpath } def -/EndArrow { @mtrx setmatrix CP grestore end } def -/Arrow { CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 -scale } if w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill -grestore } def -/Tbar { CLW mul add /z ED z -2 div CLW 2 div moveto z 0 rlineto stroke 0 -CLW moveto } def -/Bracket { CLW mul add dup CLW sub 2 div /x ED mul CLW add /y ED /z CLW 2 -div def x neg y moveto x neg CLW 2 div L x CLW 2 div L x y L stroke 0 -CLW moveto } def -/RoundBracket { CLW mul add dup 2 div /x ED mul /y ED /mtrx CM def 0 CLW -2 div T x y mul 0 ne { x y scale } if 1 1 moveto .85 .5 .35 0 0 0 -curveto -.35 0 -.85 .5 -1 1 curveto mtrx setmatrix stroke 0 CLW moveto } -def -/SD { 0 360 arc fill } def -/EndDot { { /z DS def } { /z 0 def } ifelse /b ED 0 z DS SD b { 0 z DS -CLW sub SD } if 0 DS z add CLW 4 div sub moveto } def -/Shadow { [ { /moveto load } { /lineto load } { /curveto load } { -/closepath load } /pathforall load stopped { pop pop pop pop CP /moveto -load } if ] cvx newpath 3 1 roll T exec } def -/NArray { aload length 2 div dup dup cvi eq not { exch pop } if /n exch -cvi def } def -/NArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if -f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def -/Line { NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub -def n { Lineto } repeat CP 4 2 roll ArrowB L pop pop } if } def -/Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 } -ifelse { pop } repeat a } def -/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq -and { pop pop /n n 1 sub def } if } def -/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } -repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 -ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1 -moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto -Lineto pop pop closepath } ifelse } def -/Diamond { /mtrx CM def T rotate /h ED /w ED dup 0 eq { pop } { CLW mul -neg /d ED /a w h Atan def /h d a sin Div h add def /w d a cos Div w add -def } ifelse mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 -div /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx -setmatrix } def -% DG modification begin - Jan. 15, 1997 -%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { -%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2 -%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0 -%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx -%setmatrix } def -/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup -CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2 -div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0 -d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx -% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) -% setmatrix } def -setmatrix pop } def -% DG/SR modification end -/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth -def } def -/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth -def } def -/CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1 -def CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp -mul dy1 l0 c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos -abs b exp a mul dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def -/y2 y l0 dy mul m mul sub def /dx l1 dx mul m mul neg def /dy l1 dy mul -m mul neg def } def -/IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } -ifelse /a a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def } -def -/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def -/NC { CC x1 y1 x2 y2 x y curveto } def -/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def -/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def -/NAC { x2 y2 x y curveto CC x1 y1 } def -/EAC { x2 y2 x y ArrowB curveto pop pop } def -/OpenCurve { NArray n 3 lt { n { pop pop } repeat } { BOC /n n 3 sub def -n { NC } repeat EOC } ifelse } def -/AltCurve { { false NArray n 2 mul 2 roll [ n 2 mul 3 sub 1 roll ] aload -/Points ED n 2 mul -2 roll } { false NArray } ifelse n 4 lt { n { pop -pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse } def -/ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt { -CheckClosed } if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC } -repeat closepath pop pop } ifelse } def -/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def -/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def -/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore } -def -/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix -rotate matrix concatmatrix exch findfont exch makefont setfont } def -/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto -x1 y1 lineto closepath } def -/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1 -y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div -exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse -/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto -x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath } -ifelse } def -/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add -/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq { -pop pop Rect } { OvalFrame } ifelse } def -/BezierNArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop -} if n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat f { ] -aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def -/OpenBezier { BezierNArray n 1 eq { pop pop } { ArrowA n 4 sub 3 idiv { 6 -2 roll 4 2 roll curveto } repeat 6 2 roll 4 2 roll ArrowB curveto } -ifelse } def -/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { -6 2 roll 4 2 roll curveto } repeat closepath } ifelse } def -/BezierShowPoints { gsave Points aload length 2 div cvi /n ED moveto n 1 -sub { lineto } repeat CLW 2 div SLW [ 4 4 ] 0 setdash stroke grestore } -def -/Parab { /y0 exch def /x0 exch def /y1 exch def /x1 exch def /dx x0 x1 -sub 3 div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA -x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0 -y0 x0 2 mul x1 sub y1 ] def } def -/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } -if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if -/dx ED dy div round dy mul /y0 ED dx div round dx mul /x0 ED dy div -round cvi /y2 ED dx div round cvi /x2 ED dy div round cvi /y1 ED dx div -round cvi /x1 ED /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def /w x2 x1 sub -0 gt { 1 } { -1 } ifelse def b 0 gt { /z1 b 4 div CLW 2 div add def -/Helvetica findfont b scalefont setfont /b b .95 mul CLW 2 div add def } -if systemdict /setstrokeadjust known { true setstrokeadjust /t { } def } -{ /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add -exch itransform } bind def } ifelse gsave n 0 gt { 1 setlinecap [ 0 dy n -div ] dy n div 2 div setdash } { 2 setlinecap } ifelse /i x1 def /f y1 -dy mul n 0 gt { dy n div 2 div h mul sub } if def /g y2 dy mul n 0 gt { -dy n div 2 div h mul add } if def x2 x1 sub w mul 1 add dup 1000 gt { -pop 1000 } if { i dx mul dup y0 moveto b 0 gt { gsave c i a cvs dup -stringwidth pop /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse h 0 gt {b neg} -{z1} ifelse rmoveto show grestore } if dup t f moveto g t L stroke /i i -w add def } repeat grestore gsave n 0 gt -% DG/SR modification begin - Nov. 7, 1997 - Patch 1 -%{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash } -{ 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash } -% DG/SR modification end -{ 2 setlinecap } ifelse /i y1 def /f x1 dx mul -n 0 gt { dx n div 2 div w mul sub } if def /g x2 dx mul n 0 gt { dx n -div 2 div w mul add } if def y2 y1 sub h mul 1 add dup 1000 gt { pop -1000 } if { newpath i dy mul dup x0 exch moveto b 0 gt { gsave c i a cvs -dup stringwidth pop /z2 ED w 0 gt {z1 z2 add neg} {z1} ifelse h 0 gt -{z1} {b neg} ifelse rmoveto show grestore } if dup f exch t moveto g -exch t L stroke /i i h add def } repeat grestore } def -/ArcArrow { /d ED /b ED /a ED gsave newpath 0 -1000 moveto clip newpath 0 -1 0 0 b grestore c mul /e ED pop pop pop r a e d PtoC y add exch x add -exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c -mul neg d } def -/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def -/Rot { CP CP translate 3 -1 roll neg rotate NET } def -/RotBegin { tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } -def } if /TMatrix [ TMatrix CM ] cvx def /a ED a Rot /RAngle [ RAngle -dup a add ] cvx def } def -/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] -cvx def } def -/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def -/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def -/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def -/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s -abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b -div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } { -h1 abs h sub dup s mul abs } ifelse } def -/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s -mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q -{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add -exch } def -/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible -/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def -} if } ifelse } def -/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def -/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit -neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def -/IfVisible true def } def -end -% END pstricks.pro - -%%EndProcSet -%%BeginProcSet: pst-dots.pro -%!PS-Adobe-2.0 -%%Title: Dot Font for PSTricks 97 - Version 97, 93/05/07. -%%Creator: Timothy Van Zandt -%%Creation Date: May 7, 1993 -10 dict dup begin - /FontType 3 def - /FontMatrix [ .001 0 0 .001 0 0 ] def - /FontBBox [ 0 0 0 0 ] def - /Encoding 256 array def - 0 1 255 { Encoding exch /.notdef put } for - Encoding - dup (b) 0 get /Bullet put - dup (c) 0 get /Circle put - dup (C) 0 get /BoldCircle put - dup (u) 0 get /SolidTriangle put - dup (t) 0 get /Triangle put - dup (T) 0 get /BoldTriangle put - dup (r) 0 get /SolidSquare put - dup (s) 0 get /Square put - dup (S) 0 get /BoldSquare put - dup (q) 0 get /SolidPentagon put - dup (p) 0 get /Pentagon put - (P) 0 get /BoldPentagon put - /Metrics 13 dict def - Metrics begin - /Bullet 1000 def - /Circle 1000 def - /BoldCircle 1000 def - /SolidTriangle 1344 def - /Triangle 1344 def - /BoldTriangle 1344 def - /SolidSquare 886 def - /Square 886 def - /BoldSquare 886 def - /SolidPentagon 1093.2 def - /Pentagon 1093.2 def - /BoldPentagon 1093.2 def - /.notdef 0 def - end - /BBoxes 13 dict def - BBoxes begin - /Circle { -550 -550 550 550 } def - /BoldCircle /Circle load def - /Bullet /Circle load def - /Triangle { -571.5 -330 571.5 660 } def - /BoldTriangle /Triangle load def - /SolidTriangle /Triangle load def - /Square { -450 -450 450 450 } def - /BoldSquare /Square load def - /SolidSquare /Square load def - /Pentagon { -546.6 -465 546.6 574.7 } def - /BoldPentagon /Pentagon load def - /SolidPentagon /Pentagon load def - /.notdef { 0 0 0 0 } def - end - /CharProcs 20 dict def - CharProcs begin - /Adjust { - 2 copy dtransform floor .5 add exch floor .5 add exch idtransform - 3 -1 roll div 3 1 roll exch div exch scale - } def - /CirclePath { 0 0 500 0 360 arc closepath } def - /Bullet { 500 500 Adjust CirclePath fill } def - /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath eofill } def - /BoldCircle { 500 500 Adjust CirclePath .8 .8 scale CirclePath eofill } def - /BoldCircle { CirclePath .8 .8 scale CirclePath eofill } def - /TrianglePath { - 0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath - } def - /SolidTriangle { TrianglePath fill } def - /Triangle { TrianglePath .85 .85 scale TrianglePath eofill } def - /BoldTriangle { TrianglePath .7 .7 scale TrianglePath eofill } def - /SquarePath { - -450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto - closepath - } def - /SolidSquare { SquarePath fill } def - /Square { SquarePath .89 .89 scale SquarePath eofill } def - /BoldSquare { SquarePath .78 .78 scale SquarePath eofill } def - /PentagonPath { - -337.8 -465 moveto - 337.8 -465 lineto - 546.6 177.6 lineto - 0 574.7 lineto - -546.6 177.6 lineto - closepath - } def - /SolidPentagon { PentagonPath fill } def - /Pentagon { PentagonPath .89 .89 scale PentagonPath eofill } def - /BoldPentagon { PentagonPath .78 .78 scale PentagonPath eofill } def - /.notdef { } def - end - /BuildGlyph { - exch - begin - Metrics 1 index get exec 0 - BBoxes 3 index get exec - setcachedevice - CharProcs begin load exec end - end - } def - /BuildChar { - 1 index /Encoding get exch get - 1 index /BuildGlyph get exec - } bind def -end -/PSTricksDotFont exch definefont pop -% END pst-dots.pro - -%%EndProcSet -%%BeginProcSet: special.pro -%! -TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N -/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N -/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N -/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ -/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho -X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B -/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ -/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known -{userdict/md get type/dicttype eq{userdict begin md length 10 add md -maxlength ge{/md md dup length 20 add dict copy def}if end md begin -/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S -atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ -itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll -transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll -curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf -pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} -if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 --1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 -get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip -yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub -neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ -noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop -90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get -neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr -1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr -2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 --1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S -TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ -Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale -}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState -save N userdict maxlength dict begin/magscale true def normalscale -currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts -/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x -psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx -psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub -TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ -psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 -roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath -moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict -begin/SpecialSave save N gsave normalscale currentpoint TR -@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ -CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto -closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx -sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR -}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse -CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury -lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N -/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} -repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N -/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX -currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY -moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X -/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 -1 startangle endangle arc savematrix setmatrix}N end - -%%EndProcSet -TeXDict begin 55380996 39158280 2074 600 600 (expose-berlin.dvi) -@start -%DVIPSBitmapFont: Fa cmsy10 22.7103 5 -/Fa 5 95 df<003FC112F04820F8C212FCA46C20F86C20F0D5FCB3AC003FC112F04820F8 -C212FCA46C20F86C20F0D5FCB3AC003FC112F04820F8C212FCA46C20F86C20F07E5476D8 -93>17 D<1F0FF73F80F7FFC01E031E0F1E3F9BB512800B0714000B1F13FC0B7F13F052B5 -12C00A0791C7FC0A1F13FC0A7F13F051B51280090749C8FC091F13F8097F13E050B51280 -080749C9FC083F13F897B512E007031480070F49CAFC073F13F896B512E006031480060F -01FCCBFC063F13F095B512C0050391CCFC050F13FC057F13F04CB512C0040791CDFC041F -13FC047F13F04BB512C0030791CEFC031F13F8037F13E04AB51280020749CFFC021F13F8 -027F13E00103B51280010F49D0FC013F13F890B512E000031480000F49D1FC003F13F848 -13C0B5D2FC13FCA213FF6C13C06C13F8000F13FE00036D7EC614E0013F13F8010F13FE01 -036D7ED9007F13E0021F13F8020713FE02016D7E6E6C13E0031F13F8030713FF030114C0 -6F6C13F0041F13FC040713FF040114C0706C13F0050F13FC050313FF050014C0063F13F0 -060F13FC0603EBFF80060014E0073F13F8070F13FE07036D7E070014E0083F13F8080713 -FE08016D7E746C13E0091F13F8090713FE09016D7E756C13F00A1F13FC0A0713FF0A0114 -C0766C13F00B1F13FC0B0713FF0B0014800C3F13C01E0F1E031E00F73F80F70F009CC7FC -B3AC003FC0FC481F80C112C0A46C1F806C1F00729470F793>20 D<217F698EA2217FA28E -A3213F8EA2211F8EA27B7EA27B7EA27B7EA28E8D7B7F8F227F8F7C7E7C7E8F220F7C7E7C -7EA17E7C7F7C7F7D7EFB3FFC7D7E7D7E7D13C07D7F7D13F8A038007FFEA1383FFF80003F -C5B412E048A113F8C5B512FEA114FFA2A114FE6CA113F86CA113E0D7003F1380A1387FFE -00A03801FFF85913E0595B5990C7FC595A595AFB7FF0595A585B585BA1C8FC585A585A22 -1F6B585A585A6B22FF6B5790C9FC696AA2575AA2575AA2575AA26A213FA26A217FA36AA2 -21FFA29FCAFC8DA86276DFBD>33 D[<003C1D3C007E1D7EB41DFFA36D63007F1DFE6D1B -03A2003F1DFC6D1B07001F1DF8A26D1B0F000F1DF06D1B1FA200071DE06D1B3F00031DC0 -A26D1B7F00011D806D1BFFA26C1D006E61017F636E1903A2013F636E1907011F63A26E19 -0F010F636E191FA20107636E193F010363A26E197F0101636E19FFA26D90BBC7FCA26E61 -A36E61A3DA1FE0CAEA07F86F170F020F61A26F171F0207616F173FA20203616F177F0201 -61A26F17FF6E96C8FC705DA2037F5F701503033F5F701507A2031F5F70150F030F5FA270 -151F03075F70153FA203035F70157F03015FA27015FF6F94C9FC715BA2047F5D71130304 -3F5DA2711307041F5D71130FA2040F5D71131F04075DA271133F04035D71137FA204015D -7113FF7092CAFC1881A2057F5B18C3053F5BA218E7051F5B18FFA2715BA2715BA3715BA3 -715BA27190CBFCA3187E183C>104 135 128 258 105 56 D<183E187FA24E7EA24D7FA3 -4D7FA24D7FA24D7FA294381FF7FCA218E3053F7F18C1057F7FA2DDFF807FA24C496C7EA2 -4D133F0403814D131F040781A24C486D7EA24C486D7EA24D1303043F814D1301047F81A2 -4C486D7FA24B90C86C7EA24C153F0303834C151F030783A24B486F7EA24B486F7EA24C15 -03033F834C1501037F83A24B486F7FA24A90CA6C7EA24B173F0203854B171F020785A24A -48717EA24A48717EA24B1703023F854B1701027F85A24A48717FA24990CC6C7EA24A193F -0103874A191F010787A24948737EA24948737EA24A1903013F874A1901017F87A2494873 -7FA24890CE6C7EA2491B3F000389491B1F000789A24848757EA24848757EA2491B03003F -89491B01007F89A24848751380A290D0127FA2007EF53F00003C1D1E697576F07E>94 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmmi10 22.7103 8 -/Fb 8 121 df58 D<1F0FF73F80F7FFC01E031E0F1E3F9BB512800B -0714000B1F13FC0B7F13F052B512C00A0791C7FC0A1F13FC0A7F13F051B51280090749C8 -FC091F13F8097F13E050B51280080749C9FC083F13F897B512E007031480070F49CAFC07 -3F13F896B512E006031480060F01FCCBFC063F13F095B512C0050391CCFC050F13FC057F -13F04CB512C0040791CDFC041F13FC047F13F04BB512C0030791CEFC031F13F8037F13E0 -4AB51280020749CFFC021F13F8027F13E00103B51280010F49D0FC013F13F890B512E000 -031480000F49D1FC003F13F84813C0B5D2FC13FCA213FF6C13C06C13F8000F13FE00036D -7EC614E0013F13F8010F13FE01036D7ED9007F13E0021F13F8020713FE02016D7E6E6C13 -E0031F13F8030713FF030114C06F6C13F0041F13FC040713FF040114C0706C13F0050F13 -FC050313FF050014C0063F13F0060F13FC0603EBFF80060014E0073F13F8070F13FE0703 -6D7E070014E0083F13F8080713FE08016D7E746C13E0091F13F8090713FE09016D7E756C -13F00A1F13FC0A0713FF0A0114C0766C13F00B1F13FC0B0713FF0B0014800C3F13C01E0F -1E031E00F73F80F70F00726E70E593>60 D[129 135 122 262 141 65 D[<93BC12E04B1BFF20F020FC20FF6F1D -C0DC000702E0C800018005000280DB003F13F80D0F7F7290CA6C7F95B505017F22804F71 -14C08C4D7413E0A24F7213F0A24D1CF88C6122FC5FA261A25FA261A25F5613F861A25F56 -13F0615613E05F9DB512C096CCFC55148094B51B00555B4E60555B4C64555B4E4E5B555B -4C97B5C7FC0C035B4E4D5B5413F04C073F5B9BB512804E040349C8FC0B0F13F84C067F13 -E00A07B5C9FC95B912F81E804C19FCF6FFC006C0C9000F13F00B0113FC4C726CB4FC787F -4E7113E0787F4C737F787F95CB6C7F8C93B5848D4D737FA24B898B5F8D5DA25FA25DA25F -A25DA25F675D695F9CB5FC4B65664D63664B9AC7FC6694CC5C6692B54F5B684C4F5B664A -98B55A535C4C4E5C5391C8FC4A505B535B4C067F13F09AB55A4A07035C0A0F91C9FC4A49 -053F5B4A4EB512F849B56C041F14E0003FBE12804852CAFCBE12F01D800AFCCBFC6C98CC -FC>134 129 120 256 143 I[<98260FFFE016380803B6167C083F03E015FC4FB700F814 -01070F04FEEC03F8077F7014074EB6D8001F01C0130F060702C001006D131F061F49C8D8 -3FF8EB3FF0067F01F0DB0FFC137F4DB50080DB03FE13FF050749C96C7E4D01F870018113 -E0053F01E0EF3F834D018018C74CB5CBEA1FEF4C01FC72B512C0040F49844C49844C13C0 -4C497214804BB5CCFC4B49854B5B4B497413004B5B4B5B4B498692B548634A91CEFC4A49 -1B1F5C4A49645E4A5B4A1D0F4A496491B55AA2495C4991CF5BA2495B5B4B655B5D5B4B65 -491E1F90B55AA269484A1C0F9DC8FC485CA25A92D3FCA25A5CA25A5CA25AA25CA25AA25C -A4B5FC5CA65CA21F0F557EA29DC8FC67A31F7EA26C1E7C1FFCA2545AA2545A7E6E515A1E -0F6C661E1F6E515A6C9BC9FC666C6D1BFE535A666C6D1A036C525A6E505A6C525A6E505A -6D6D4FCAFC6D1BFE6D6DF003FC6F4E5A6D6D4E5A6D6D4E5A6D6DF07FC06D6D4D48CBFC6D -6D4D5A023F01C0EE0FF86E6DEE3FF06E01F8923801FFC0020301FF030F5B6E02E0DA7FFE -CCFC6E6C01FF90380FFFF8031F91B612E003071780030104FCCDFCDB003F15F0040392CE -FCDC001F13E0>134 137 119 260 135 I110 D112 D120 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmtt8 12.444 45 -/Fc 45 122 df40 -D<123C127EB47E7F6C7E6C7E6C7E6C7EEA03FE6C7E6C7F6D7E6D7E6D7E130F806D7E1303 -801301807F1580147FA215C0143FA215E0141FA415F0140FAC141F15E0A4143F15C0A214 -7F1580A214FF15005B5C13035C1307495A5C131F495A495A495A4890C7FC485AEA0FFC48 -5A485A485A485A5B007EC8FC123C1C5077C737>I43 -DI<003FB7FC481680B812C0A46C16 -806C16002A087AA337>II48 -D58 -D<003FB712F04816F8B812FCA46C16F86C16F0CBFCA8003FB712F04816F8B812FCA46C16 -F86C16F02E187CAB37>61 D<003FB67E4815F0B712FC82EEFF806C16C07E2701FE000113 -E09238003FF0161FEE0FF8160717FC1603A6160717F8160F17F0161FEE7FE0EEFFC00307 -138090B712005E16F88216FF178017C049C7EA7FF0161FEE0FF8EE07FC1603EE01FEA3EE -00FFA65EA217FE16031607EE0FFCEE3FF816FF003FB712F04816E0B812C01780EEFE006C -5D6C15E0303F7EBE37>66 DI< -007FB512FCB77E8216F082826C813A03FC001FFF03071380030113C081EE7FE0163FEE1F -F0A2EE0FF8160717FCA2160317FE1601A417FF82AC5E17FEA3160317FCA2160717F8160F -A2EE1FF0163FEE7FE016FF4B13C04B1380031F1300007FB65AB7FC16F85E5E16806C02FC -C7FC303F7EBE37>I<007FB712F8A2B87EA37EA2D801FEC71203A8705AA293C8FCA4ED0F -C0A24B7EA490B6FCA79038FE001FA46F5AA292C9FCA5173FA2EF7F80A9007FB8FCA2B9FC -A36C1700A2313F7DBE37>I<007FB712FCB8FC17FEA47ED801FEC71201A8EE00FCA21700 -A5ED07E0A24B7EA490B6FCA79038FE000FA46F5AA292C8FCAF387FFFFEB6FCA56C5B2F3F -7DBE37>I<263FFFF090B512C0486D4814E0B56C4814F0A36C496C14E06C496C14C0D801 -FEC73807F800B3A290B7FCA749C71207B3A4263FFFF090B512C0486D4814E0B56C4814F0 -A36C496C14E06C496C14C0343F7FBE37>72 D<007FB612F8A2B712FCA36C15F8A2260001 -FEC7FCB3B3AD007FB612F8A2B712FCA36C15F8A2263F78BE37>I78 D<90380FFFFC90B612C0000315F04881 -48814881A23A3FFE001FFF01F01303497F48486D1380A249147FA400FF16C090C8123FB3 -AC6D147FA2007F1680A36D14FFA26D5B003F160001F8130701FE131F6CB65AA26C5D6C5D -6C5DC615C0010F01FCC7FC2A417ABF37>I<007FB6FC16E0B712F882826C8117802701FE -000713C0030113E09238007FF0163F161FEE0FF81607A217FC1603A6160717F8A2160FEE -1FF0163F167F923801FFE0030713C090B7128017005E5E5E16E093C7FC49C9FCB2387FFF -F8A2B57EA36C5BA22E3F7DBE37>I<903903FF800F011F9038F81F80017FEBFE3F90B6FC -000315FF5A5A48130001F8131F48487F01C01303007F805B00FF8090C8FCA2167FA37FEE -3F006C6C91C7FCA26C7E13F8EA1FFEEBFFE06C13FF6C14F06C14FEC6ECFFC06D80011F14 -F8010380D9003F7F02037FDA001F13801503030013C0167FEE3FE0A2EE1FF0A2003E150F -127F5AA46D141F17E0A26D143F6DEC7FC001F814FF01FE4913809026FFE00F130091B55A -5E5E486C5C011F14C0D8FC0791C7FC3978007FF82C417BBF37>83 -D<003FB712FE5AB9FCA59039000FF000A8007E167EA2C71500B3B3A3010FB512F04980A5 -6D5C303F7DBE37>I87 D<263FFFC090B5FC486D481480B56C4814C0A36C496C14806C496C -1400000190C7EA3FE0A26C5E6E137F017F5D6E13FF013F92C7FC6E5AA26D6C485AA26D6C -485AA201075CECFC0F01035CECFE1F01015CA26D6C485AA2027F5BA26EB4C8FCA36E5AA2 -6E5AA26E5AB391B512C049804980A36D5C6D5C323F7EBE37>89 D<003FB7FC481680B812 -C0A46C16806C16002A087A7D37>95 D<90380FFF80017F13F048B512FC4814FF48814881 -4881D9F8017F9138003FF8150F6F7E6C481303A2D803C080C81201A3EC03FF91B5FC1307 -133F90B6FC12035A48EBFE014813C0383FFC00EA7FF013C0485A90C7FCA415037F007F14 -076D130FD83FF0133FD9FE01B6FC6CB8FC6C17807E6C4A7EC6DAF83F1300013FEBE007D9 -0FFEC9FC312F7BAD37>97 DI< -EC3FFE49B512C0010714F0011F804980498090B7FC48EBF0034813803807FE00485A4848 -6D5A5B4848EB00784991C7FCA2485AA312FF90CAFCA87F127FA27F123F6D143F6C6CEC7F -807F6C7E01FF14FF6C6D4813006CEBF80F6C90B55A6C5D6D5C011F5C010714C0010191C7 -FC9038003FF8292F79AD37>IIII104 -D<14F8497E497E497EA56D5A6D5A6D5A91C8FCA9383FFFFE5A80A47EC7FCB3AC007FB612 -F8B712FC16FEA316FC6C15F8274077BF37>I<007FB5FCA2B67EA37EA2C7127FB3B3AD00 -7FB71280A2B812C0A36C1680A22A3F7ABE37>108 D<91391F8003F03B3FF0FFE01FFCD8 -7FF39038F07FFEB66CB5FC03FD8092B6FC6C836C01E1EBFC3F000301809038F01FE04A13 -E0037F130F4914C0491480A4491400B3A43C3FFF81FFF03FFE4801C36D487EB500E301FC -1480A36C01C301F814006C0181496C5A392D81AC37>IIII<91397FC00FC0903803FFF8010F9038 -FE1FE0013FEBFF9F4914DF90B7FC5A48EBE03F48EB000F4848130301F87F48487F49147F -123F49143F127F5B161F12FF90C8FCA87F127F163F7F167F6C7E16FF6C6C5B7F6C6C1307 -6CB45B6CEBC07F6C90B6FC7E6D14DF6D141F010F13FC010313F00100138091C7FCAF031F -B512E0A24B14F0A36F14E0A234447CAC37>II<903907FFC0 -F0017FEBF9F848B6FC12075A5A5A387FFC0001C0131F4848130F90C712075AA46CEC03F0 -D87FC090C7FC13F8383FFFE06CEBFF806C14F86C14FE0001ECFF806C6C14E0010714F0D9 -003F13F8020013FC150F003EEC03FE007F14004815FF167F7FA36D14FF7F6DEB01FE6D13 -0701FFEB3FFC91B512F816F016E04815C0013F1400D8FC0F13FCD8780113E0282F79AD37 ->III<3B7FFFE007FFFEB56C4813FF6E5AA34A -7E6C496C13FED801FCC7EA3F80A26D147F00001600A26D5C6D5CA2EC8001013F5CA2ECC0 -03011F5CA2ECE007010F5CA2ECF00F01075CA2ECF81F01035CA2ECFC3F01015CA2ECFE7F -010091C7FCA291B5FC6E5AA36E5AA36E5AEC07E0302D7DAB37>I<277FFFF003B51280B5 -6C4814C0A56C496C1480D807F0C73803F800A36D140700035EA66C6C4A5AEC03F0EC07F8 -EC0FFCA2EC1FFED800FE4A5AA3EC3F3FA3017E5D027F139F017F14BFA2EC7E1FA2013F92 -C7FC02FE13FF4A7EA34A7E011F5CA26D486C5A6D486C5A322D7EAB37>I<3B7FFFE007FF -FE6E4813FFB56C5AA36C497E4A6C13FED801FEC7EA3F8012006D147F17007F6E5B013F5C -A26E485A131F14E0010F495AA214F00107495AA214F80103495A14FC13014B5A14FE1300 -5EEC7E3F147F93C7FC143F5DEC1FFEA36E5AA214075DA35DA2140F5DA2141F5DA2143FD8 -0FC05B381FE07FD83FF090C8FC5CEBF1FE13C3EBC7FCEBFFF87E5C6C5B6C5B6C90C9FCEA -01FC30447DAB37>121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmtt10 20.74 45 -/Fd 45 125 df40 -D<121FEA3FC0487EEAFFF87F13FF806C7F6C7F6C7F6C7F00037F6C7F6C7F013F7F6D7F6D -7F6D7F6D7F7F6D7F6E7EA26E7E6E7F80826E7F8082806E7FA26F7EA26F7EA2151F828117 -80A28117C0A281A217E081A317F0A281A417F8A2167FB016FFA217F0A45DA217E0A35D17 -C0A25DA217805DA217005D5E153FA24B5AA24B5AA24A5B5C5E5C4A5B5E5C4A90C7FC4A5A -A24A5A495B5B495B495B495B495B90B5C8FC485B485B000F5B485B485B485BB55A91C9FC -13FC5BEA7FE06C5A6CCAFC2D8671F75A>I44 D<001FBA12C04819E04819F0BB12F8A66C19F06C19E06C19C0450C76BA5A> -I<13FCEA03FF000F13C04813E04813F0A24813F8A2B512FCA66C13F8A26C13F0A26C13E0 -6C13C000031300EA00FC16165E955A>I48 D<13FCEA03FF000F13C04813E04813F0A248 -13F8A2B512FCA66C13F8A26C13F0A26C13E06C13C000031300EA00FC90C7FCB3AC13FCEA -03FF000F13C04813E04813F0A24813F8A2B512FCA66C13F8A26C13F0A26C13E06C13C000 -031300EA00FC164A5EC95A>58 DII<001FBB12C0481AE0481AF0BC12F8A66C1AF06C1AE0000F1A80CFFCAE000FBB -1280003F1AE0481AF0BC12F8A66C1AF06C1AE06C1AC04D267AC75A>I<121FEA3FC0487E -EAFFF87F13FF8014E0806C13FC6C13FF6C80000714E06C80C614FC6D7F011F6D7E6D8001 -0314F00100806E13FE021F7F6E14C00203806E14F86E6C7F6F13FF030F806F14E0030180 -6F14FC043F7F706D7E0407807014F00400807113FE051F7F7114C0050314E07114F0716C -13F884180FA2183F604DB512F04D14E0050F14C04D1400057F5B94B512F804035C4C14C0 -041F5C4C49C7FC93B55A4B14F003075C4B1480033F91C8FC4B13FC4AB55A4A14E0020F5C -4A91C9FC027F5B49B512F8495C010F14C0495C017F49CAFC90B55A000314F0485C001F14 -804891CBFC4813FCB55A14E0148091CCFC13FC5BEA7FE06C5A6CCDFC455876E05A>I65 -D67 D<001FBB12F0481AFC5A1BFEBCFCA37EA27E7ED800070180C9 -121FADF20FFCA2F203F097C7FCAAF01F80F07FE0A24E7EA792B7FCAB0380C7FCA7725AA2 -F01F8095C9FCB3A8001FB612FC48814881A2B87EA36C93CAFCA26C5D6C5D4F697CE85A> -70 D<001FB500FE023FB512FC007F6E6C90B7FCA2B76C481680A56C4B6C1600A2001F4A -C7003F14FC26001FFEC9D83FFCC7FCB3B091B9FCAB4AC9123FB3B3A2001FB500FE023FB5 -12FC007F6E6C90B7FCA2B76C481680A56C4B6C1600A2001F4AC7003F14FC51697CE85A> -72 D<001FB912E0007F18F8A2BA12FCA56C18F8A2001F18E0C8D87FF8C8FCB3B3B3B3AB -001FB912E0007F18F8A2BA12FCA56C18F8A2001F18E03E6972E85A>I<001FB612FC007F -15FF83B8FCA57E94CAFC001F15FCD800070180CBFCB3B3B3AAF207E0F20FF0F21FF8F23F -FCB0001FBBFC127FA2BCFCA56C1AF8A2001F1AE04E697BE85A>76 -D<0203B512FE91B712F8010716FF011F17C0017F17F090B97E48844884A2488448198092 -38C0001F02FCC712014801F06E6C13C002C0151F4A814890C96C13E0A24982A24982A200 -7F19F0A24982A700FF19F849177FB3B3A76D17FFA3007F19F0A56D5EA4003F19E06D5EA3 -6D5E6E5D6C6D4B13C06E5D6E5D6C01FC4AB51280DAFFE0133F92B8FC6C19006C60A26C60 -6C606D5F011F17C0010794C7FC010016F802034AC8FC456D76EA5A>79 -D<001FB812F0007F17FF19E0BA12F819FE85861AE06C8586001F85D8000F90C880060F7F -1803060014807313C0191F7313E0857313F0A2857313F8A21A7FA21BFC1A3FA91A7F1BF8 -A21AFFA24F13F061A24F13E0614F13C0197F96B5128006031400180F95B55A92B85A6262 -621A8097C7FC6119F819E096C8FC18F092CCFCB3AD001FB67E007F15E0A2B77EA56C5DA2 -001F15804E697CE85A>I<0203B512FE91B712F8010716FF011F17C0017F17F090B97E48 -844884A248844819809238C0001F02FCC712014801F06E6C13C002C0151F4A814890C96C -13E0A24982A34982007F19F0A34982A600FF19F8A249177FB3B3A76D17FFA2007F4AB46C -14F04B7F83A283A26D6D6D5AA26F13FC003F19E06D6E6C5AA2EE3FFF6D5E7013876C6D03 -8F13C06E6D13DF02F06D90B5FC6C01FC17809138FFC00392B8FC6C19006C60A26C606C60 -6D5F011F17C0010794C7FC010083140391C8000F7FA2717FA2717FA2717FA2717FA2727E -85841A80841AC0841AE084A27213C0721380458376EA5A>I83 D<001FB712E0007F16F8A2B812FCA517F8A2 -17E001F0C9FCB3B3B3B3B3B3A490B712E017F8A217FCA56C16F8A2001F16E02E865BF75A ->91 D<001FB712E0007F16F8A2B812FCA57EA2121FC9123FB3B3B3B3B3B3A4001FB7FC12 -7FA2B8FCA56C16F8A2001F16E02E867AF75A>93 D<001FBA12C04819E04819F0BB12F8A6 -6C19F06C19E06C19C0450C767B5A>95 D<91381FFFFE0103B612E0010F15F8013F15FE90 -B87E4817E0488318FC48838448849126F8000F804A1300053F7F050F7F836C4902017F83 -6C49826C49157F6C90C9123F013C8390CAFC181FA5EF7FFF93B6FC151F4AB7FC140F147F -49B8FC1307131F5B90B812DF489238F8001F4892C7FC4814E04891C8FC4813F814E0485B -91C9FC485A5B485AA25BA57F183F127F6D167F6D16FF6C6C5D6E14076C01E0141F02F891 -B612C06C9026FF801FEDFFF86C91B912FEA26C1AFF7E6C17F7013F16C36D16010107DBFC -0014FE010103F0131FD9003F0280010313F8020701F0CAFC504D77CB5A>97 -D<4BB512E0031F14FE92B77E020316E0020F16F8023F824A8249B8FC49835B49188049EC -80004901F8C77E4913E090B5128092C8FC4801FC6F1300485B4A6F5A48496F5A4A6F5A48 -EF01E04A92C8FC4890CCFCA2485AA25B127FA25BA212FFA25BAA7FA2127FA27FA26C7EA2 -7F6C183F6EEEFFC06C7F4E13E06C7F6E5D6C7F6C01FE4B13C06E5D6C02C04A13806D01F0 -5C6D01FC49B512006D9038FFC00F6D91B65A6D5F6D5F6D5F6D6C5E6E5E020F93C7FC0203 -15FC020015F0031F1480030101F8C8FC434D74CB5A>99 D<050FB5FC053F14C05F86A683 -170FEF0001B3923807FF80037F13F04AB512FE020FECFF814A15C1027F15F149B712F949 -93B5FC5B5B5B4914004901F0131F90B500C013074891C712014A804801F8814A81484981 -484981A248498191C9FC84485AA24982127FA25BA212FFA25BAA7FA2127F60A27F606C7E -A2606C7E6E5D6C5F806C6D5D6E92B5FC6C6D5C6E5C6C6D5C6C6D6C131F6D01E0137FDBFC -03B712FC6D90BAFC6D1A806D16FD6D16F9010116E16D16C1023F15816E4AC6FC020702F8 -1600020002E0013F13FCDB1FFECBFC516A7AE85A>I<923803FFE0033F13FE4AB67E0207 -15E0021F15F84A15FE91B8FC4917C0010783498349834914004901F0010F7F03C001037F -90B5C8FC48496F7E48498102F06F138048834A6F13C0485B4A6F13E04890C9FC84484818 -F0A24982127FA24918F8A200FF187F90BAFCA81AF0A21AC001F8CCFCA2127FA27FA2123F -7FA26C7E6EEE0FC06CF03FF0806C6DEE7FF8806C6D16FF806C6D4B13F06C6D6C5C6F020F -13E06D01F05C6D01FE027F13C06D9026FFE007B5FC6D91B712806D18006D5F01005F6E5E -021F16E00207168002014BC7FC6E6C14F8030F14C0030001FCC8FC454D76CB5A>I<9438 -03FFE0053F13FC4CB6FC040715C04C15E0163F4C15F093B7FC4B16F85D5D4BEBFE0317F0 -4BD9C00113F017804B90C713E04CEC7FC04B48EC3F8096C7FC5EAD001FB912FC4818FF5A -BB1280A56C1900A2001F18FCC8D87FF8C9FCB3B3B0000FB912C0488448844884A56C606C -606C60456A7AE95A>I<381FFFFE007F6D7EB6FC81A67E121FEA0003B3EF3FFE4CB512C0 -040F14F0043F14FC93B67E03C38103C78203CF8203DF8292B87EA2DDE00F7FEF000104F8 -7F4C6E7E16C04C143F93C87F5D5D191F5D5DA35DA45DB3B1001FB600F8017FB612C0007F -DBFE01B712F0B817F85FA5836C03FE17F0001F9226F8007F15C055697EE85A>104 -DI<381FFFFC007F13FFA2B67EA57EA2121FEA0001B3A2053FB6 -12F094B712FCA24C82A5705EA2053F15F0DD001F0180C7FC4E90C8FC4E5A4E5A4D5B4D5B -4D5B051F5B4D5B4D90C9FC4D5A4C5B4C5B4C5B4C5B4C13804C90CAFC4C5A4C5A15810383 -7F1587038F7F039F8003BF8092B6FC04FD7F04F97F04F07FEEE07F4C6C7E04807F4C6C7E -03FC6D7F4B7F4B814B6D7F4B6D7F4B7F727E85727E181F727E86727F84727F86727F737E -193F001FB600F8010FB6FC007F03FE013F15C0A2B84915E0A56C4B6D15C0A2001F03F801 -0F150053697DE85A>107 D<001FB612FC4815FF5AB87EA57E7E7EC81207B3B3B3B3AB00 -1FBA12E04819F04819F8BB12FCA56C19F86C19F06C19E0466976E85A>IIIII<922603FFC0EB0FC0033F01F8EB3F -F04AB6FC02079238C07FF8021F15E04A15F891B712FC4916FE010716FF4917FF5B49EC80 -7F499038F8000F03E0130390B500807F4849C87E4849814A81485B4A814849815C488391 -C9FC484882A24982127FA25B197F12FFA25BAA7FA2127F19FF7FA2003F5F7FA26C6C5EA2 -6E5D6C6D5D606C7F6E5D6C6D5D6C6D92B5FC02FF14036C6E5B6D01F0131F6DD9FE01B6FC -6D90B8FC6D177F6D16FE6D16FC6D16F86D6C15F06E15C0020F1500020314FCDA007F13F0 -030F90C7FC92C9FCB3A80507B71280051F16E0A24D16F0A57116E0A205071680547179CA -5A>I<953801FFF0001FB500FC021F13FE4802FF91B6128048040315C0DC800F15E0B749 -15F0057F15F894B7FC6C038316FC16876C158F6C039F1481C7000701BFEBF80193B512C0 -95C713F85F05F8EC7FF04DEC1FC04DEC07004D91C7FC5F94CAFC5EA25E5EA25EA35EA35E -A45EB3A9001FB9FC48844884A2BA7EA36C60A26C606C95C8FC4E4B7BCA5A>I<0203B513 -1F027F9138F03FC00103B6EAFC7F010F03FF13E0013F16FF90B9FC5A5A5A5A5AED000748 -01E0EB007F0280141F4848C87E01F88100FF825B4981A56D6F13C07F6C6CEE3F006D93C7 -FC6C6C7E14F06C13FF6C14FCEDFFF06CEDFF80000116F86C16FF013F16C0010F16F00103 -16FC010082021FEDFF80020016C0030315E0DB000F14F0EE007F050F13F8050113FCD81F -8081D83FE0EE3FFE007F171F487EF00FFFA26D82A37FA26D5E7FF01FFE806E153F02F0ED -FFFC6E5C02FE020F13F89126FFE001B5FC92B712F019E019C01980190001E75E01E316F8 -01C016E0007F013F1580D9800702FCC7FC001FC76C1380404D73CB5A>I<157EEDFF805C -4A7FB2001FBA12804819E05ABB12F0A56C19E0A2001F1980C7000301C0C9FCB3B1F101F8 -F107FEA2F10FFFA661821AFE6E163F70147F70ECFFFC6E6D5B70010713F892397FFFE03F -94B612F06F16E01AC06F16806F16006F5D6F15F803005D043F14C0040F49C7FC040013F0 -48607CDE5A>I<261FFFFE92B512F0007F6D6C010314FCB65C6F82A66C82001F1600D800 -03EE001FB3B3A5193FA3197F19FFA26F5C606D6D140F6003FC91B5FC6D9026FFC00791B5 -12C093B912F06E19F8A280806E16DF6E161F0201EDFC0F6E6C02F015F0031FDA800314C0 -030101FCCAFC554B7EC95A>I<001FB500FE020FB6FC007F6E6C013F15C0B718E0705BA5 -4C7F6C1BC0001F4AC7000F1500C601E0CA13E0017F61A56E5E013F61A56D6C4C90C7FCA6 -6D6C4C5AEE03FCEE0FFF4C1380A24C13C06D6C4C5AA24C13E0A393B5FC6D6C6F485A17BF -179F4B14F8A36D01815E0383ECFC3F171F170F158718FE6D609238C7FE0703CF157FA218 -FF027F496C5CA3EDDFF803FF6D13FFA26E5F4C7EA44C7F6E94C8FC5E6E6F5A4C131FDA03 -FEC7EA07F8534B7DC95A>119 D<000FB60103B612C0003FDB800F15E0704815F04815E0 -1BF8A31BF06C15C04C6C15E0000FDB000315C0D8000101E09026003FFCC7FC6D7F6E6C4A -5A6E6C4A5A616E6C5B6E6C495B6E4A5B048091C8FC6E6D5A6E6D485A6E5D6F6C485AEEF8 -7F6F6C485A031F5C6FB55AA26F5C6F91C9FC6F5B815F705A705A83167F4C7E4B7F835D4B -80DB0FFC7F844B486C7E92383FF03F037F804C6C7E4B486C7E4A14074A01807F4C6C7F4A -6E7F4A5A4A486D7F727E4A486E7E4A488102FF151F4B6E7E49498149707F001FB500FE91 -B612F0007F6E010315FC1680B76C4815FEA56C4B6C15FC1600001F4A010015F04F4A7BC9 -5A>I124 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmr10 20.74 20 -/Fe 20 118 df45 D65 D<95260FFFE0ED03804DB500FE1507051FDAFFC0140F94B700F8141F -040316FE041F70143F047FDA800F01C0137F93B500F0C77F03030280DA1FF813FF030F01 -FCC83807FC014B01F0ED03FE4B01C0923800FF0392B5CAEA7F874A49EF1FC74A01F8EF0F -EF4A4971B5FC4A49834A49834A5B4A90CCFC4A4885494985495B49498589495B4949855B -4B855B92CDFC90B586485B895A5C481D7F5CA25A1E3F5C5AA348491B1FA45A9BC7FCA35C -B5FCB27E80A47EF60F80A36C7FA37E801E1F6C1E00A2807E6E636C1D3EA26C6D1B7E6D1C -7C6F1AFC7F6F626D1B016D6D626D6D1903535A6D7F6D6D4F5A6D6D4F5A6E7E6E6D4EC7FC -6E6D187E6E6D606E6D17016E6D4D5A6E01FEEF0FF06E6D4D5A033F01C04C5A6F01F0EEFF -806F01FCDB03FEC8FC0303D9FF80EC0FFC030002F0EC7FF870903AFF800FFFE0041F91B6 -1280040394C9FC040016F8051F15E0050192CAFCDD000F13E0697E77F97C>67 -D73 D76 -D78 -D82 D97 D<923801FFF0031F13FF92B612E0020315FC020F9038803FFE913B3F -FC0001FF80DA7FF09038003FC0494848EC0FE04901806E7E4990C87F4948151F49484B7E -013F167F49484B7E49485CA2485B5A5C5AA248496E5B725A48715A725A4890CCFCA35AA3 -5BA212FFAE127F7FA37EA36C7FA2F10F806C7FA26C181F6E17006C606C6D163E197E6C6D -167C6D6C16FC013F5F6D6C15016D6C4B5A6D6D4A5A6D6D4A5A6D6DEC3F806D01F802FFC7 -FCDA3FFEEB03FE913A0FFFC01FF86E90B55A020015C0033F49C8FC030113E0414F7ACC4D ->99 D<923807FFC0033F13FC4AB67E020715E0021F01017F913A7FF8003FFCDAFFE0EB0F -FE49496D7E0107496D7F4990C76C7F49486E7F49488249486F7E01FF163F4A824849151F -48845C48717EA2485B1A804883A24890C9FCA21AC05A845BA312FF90BAFCA31A8049CCFC -AA127FA27FA27EA36C7FF10380F107C07E6E160F7E6C6DEE1F80A26CF03F006C7F6E167E -017F17FE6D6C5E6D6C4B5A6D6C15036D6D4A5A6D6D4A5A01006DEC3FC0DA7FF802FFC7FC -DA1FFEEB03FE913A0FFFC03FF8020390B55A020015C0031F49C8FC030113F0424F7BCC4D ->101 D103 -D -105 D108 D<023FDA1FFEEE3FFC0003B591B500E04AB512C0B6010702FC020F -14F8041F6E023F8093283FE01FFF8090397FC03FFF93267F00036D9026FE00077F04FC6D -9026E001F86D7FDB03F06D9026F007E06D7FC64A48027F49487F011F4A03F849816D4948 -6E6C48C86C7E4BC8143E6D013E031F49153F033CDCFE7882037C17F84B705A4B6F49151F -8C4B5FA34B5FA44B94C9FCB3B3A6496D4B6D4B7EA2017F01F892B500F04AB512E0B7D8FC -01B7D8F803B712F0A6844C7ACB8F>I<023FEC1FFE0003B591B512E0B6010714FC041F80 -933A3FE01FFF8093267F00037F04FC6D7FDB03F06D7FC64A48147F011F4A816D49486E7E -4BC8FC6D013E151F033C82157C5D4B150F865DA35DA45DB3B3A6496D4B7FA2017F01F892 -B512F0B7D8FC01B712F8A6554C7ACB60>II<922601FFE0143E -031F01FE147E92B67E020381020F9026E01FF013FE023F90380003F8DA7FFCEB00FCDAFF -F0EC7E01010349141F4949EC0F834949EC07C34990C813E34948ED03E74948ED01F701FF -17FF4A815A4849167FA24849163F5A5C48181F5CA25AA291CAFC5AA4485AAE6C7EA47EA2 -80A27E807EA26C6D163FA26C6D167F7E6E16FF6C5F6D7E6D6C5D011F5E6D6CED0FDF6D6D -EC1F9F6D6DEC3F1F6D6D14FE6D01F8EB01FCDA3FFEEB0FF8913A1FFF807FE0020790B512 -C002011500DA003F13F8030313C092C9FCB3A44F7EA24EB512E00503B712F0A6546D7ACB -5B>113 D<023FECFF800003B5010713F0B6011F7F4C13FE9338FF83FF923801FC079226 -03F00F1380DB07E014C0C64B5A011FEB0F806DEB1F00151E6D133E153C037C6D13800378 -6D130003F86D5A4B6D5A94C8FCA25DA35DA65DB3B3A2497F81017F13FCB87EA63A4C7CCB -43>I116 DI E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmr6 12.444 17 -/Ff 17 116 df48 DIIIIII<121E121F13F090B812C0A35A188018005F5FA2 -5F007EC8EA01F0007C4B5A4C5A00785E160F4CC7FC163E485D167816F8C8485A4B5A4B5A -5E150F4BC8FC153EA25D15FC5D14015D14034A5AA2140FA25D141FA2143F5DA2147FA314 -FFA34990C9FCA65BAA6D5AA2EB0078324878C53F>II -I77 D80 D<903807FFE0013F13FE90B67E0003 -15E02607FC007F49EB1FF8486CEB07FC6F7E6F7E83816C48816C48147F6C5AC9FCA492B5 -FC143F0103B6FC011FEBFC7F90387FFE003801FFF04813804848C7FC485AEA1FF0485A12 -7F5B00FF17785BA316FFA26D5B127F6D5B6C6C90390FBFE0F0D81FFC90383F1FF1270FFF -01FEEBFFE06C9038FFFC0F000102F014806C6CD9C0071300903A0FFE0001F8352F7AAD3F ->97 D101 D103 D<01FFEB3FC0B5EBFFF0020313F84A13FC91380FE7FE0003EB1F876CEB -3E076C133C1478ED03FC9138F001F89138E000F01600A25CA35CB3A54813E0B612E0A427 -2D7BAC32>114 DI E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmr10 22.7103 62 -/Fg 62 123 df[95 -133 124 260 105 12 D[<943801FFFE053FEBFFF04CB6EAFE07040F92B5FC043FEBC003 -DCFFFCC7123F030313E04B01805CDB1FFEC8B5FC4B485CED7FF04B5A4A495C4A5B4A90C8 -FC4A825D4A5A023F825D027F173F864B82A214FF5DB3A9BDFCA6C701F0C9120FB3B3B3AC -496D4C7F496D4C7F011FD9FF804AB512F8007FB7D8E007B712FEA5DAC03FEEFC03>95 -133 124 260 105 I[<17C0EE03E01607EE0FC0EE1F80EE3F005E16FE4B5A4B5A4B5A4B -5A4B5A153F4B5A4BC7FCA24A5A4A5A14075D4A5A141F5D143F4A5A5D14FF92C8FC5B495A -A213075C130F5C131F5CA2133F5C137FA25C13FFA2485BA35A91C9FCA35A5BA2120FA25B -A2121FA35BA2123FA55B127FA9485AB3AA6C7EA9123F7FA5121FA27FA3120FA27FA21207 -A27F7EA3807EA36C7FA2137F80A2133F80131FA280130F801307801303A26D7E7F81147F -816E7E141F81140F6E7E8114036E7E6E7EA26F7E6F7E151F6F7E6F7E6F7E6F7E6F7E167F -82EE1F80EE0FC0EE07E01603EE00C0>43 188 109 268 73 40 D[<126012F87E127E7E -6C7E7F6C7E6C7E6C7E6C7E6C7E137F806D7E6D7EA26D7E6D7E8013036D7E807F816E7E14 -3F81141F816E7EA28114078114038180A2828082A2157F82A26F7EA382151FA382150FA2 -82A21507A282A381A21780A58117C0A96F13E0B3AA4B13C0A917805DA51700A25DA35EA2 -150FA25EA2151F5EA3153F5EA34B5AA25E15FFA25E5C93C7FCA25C5D14075D140F5DA24A -5A5D143F5D147F4A5A92C8FC5B5C495A13075C495A495AA2495A495A91C9FC13FE485A48 -5A485A485A485A5B48CAFC127E5A5A1260>43 188 118 268 73 -I43 DIII48 D<167816FC150115031507151F157FEC01FF1407143F49B5FC133FB7FC5C14F814C0 -49C6FC13C0C8FCB3B3B3B3B3A84A7F4A7F4A80027F14F8007FB912F8A5ED80073D7E6FFD -5E>I<923807FFC092B512FE0203ECFFE0021F15F84A15FE91B87E49D9F00314E0010790 -C76C7FD90FFC020F13FCD91FF06E7FD93FC002017F49486E8049C96C7F4848707F484884 -4848707F4982484884727F48488286485A72148090CAFCD87FFE826D6C18C08080B56C82 -1BE080A86C5BA26C5B6C5B6C5B6C90CA14C0D800F894B5FC90CBFCA34E1480A21B0060A2 -6260624E5BA24E5B6260624E5B97C7FC95B5FC4D5B614D5B4D5B614D5B4D5B4D90C8FC60 -4D5A4D5A4C5B4C13C0604C90C9FC4C5A4C5A4C5A4C5A4C5A4B138094CAFC4B5A4B5A4B5A -4B5A4B5A4B5A4B48ED03E04A90C9FC5D4A48EE07C04A5A4A5A4A5A4A5A4A5A4ACA120F4A -1880495A495A4948171F495A495A4948EF3F0049CA48B4FC90BBFCA25A5A5A48615A5A5A -BBFCA362A34B7E77FD5E>I<923801FFF8033FEBFF804AB612F0020715FE021F6F7E027F -D9007F13E0DAFFE0010F7F010390C7000313FCD907FC6E7FD90FF06E7F49486F7FD93F80 -6F7F49C96C7F017E8401FE707F485AD9FFC06F7F4813F002FC83806E81488581A86C91C8 -FCA26C495F6C495D6D5AEB1FE090CA5CA26062A26260624E5BA24E5B97C7FC4E5A614D5B -4D5B4D13C04D5B4D90C8FCEF7FFC933801FFF04BB512C092B6C9FC4A8118F06E15FE92C7 -6C6C7E050F7F050313F07113FC717F727E7213C0727F86727F727FA2727F86A27214801B -C0A2841BE0A21BF0A285A21BF8A21378EA03FF000F13C0487F487F487FA2B57EA41BF0A2 -96B5FCA21BE05C7E4A4B14C05C028018806C90C95A018019006C6C606D5E6C6C606C6C4C -5B6D4C5B6C6C606C6C4C5B6C6D4B5BD97FE092B5C7FCD91FF84A5B6DB44A13F8010301E0 -010F5B6D01FE017F13C06D6CB7C8FC021F15FC020315F0DA007F1480030301F0C9FC4D82 -78FD5E>I<190F4F7E193F197FA219FF60A26060A26060A26060A295B5FC5FA25F5F18DF -EF0F9F171F181F173E177E177C17F8160117F0EE03E0160717C0EE0F80161F1700163EA2 -5E5EA24B5A4B5AA24B5A4B5AA24BC7FC153EA25D5DA24A5A14035D4A5A140F5D4AC8FC5C -143E5C14FC5C495A13035C495A130F5C49C9FC5B133E5B13FC5B485A12035B485A120F5B -48CAFC5A123E5A12FCBD12E0A6CB003F0180C7FCB3A44E7FA295B57E050F14FE93B912E0 -A5F0F00153807BFF5E>I55 D58 -D[<92B57E020F14FC027FECFFC049B712F80107D9C00713FED90FFCC76C7ED93FE0020F -13C0D97F8002037FD801FEC86C13F8D803F86F7F4848707E498348488248481880003F71 -13C090CAFC01F018E0EA7FFC6D827FB56C17F080A86C5B606C90C914E0EA0FFC6C5ACB48 -13C0A24E1380A295B51200614D5B4D5B4D5B4D5B4D13804D90C7FCEF7FFC604D5A4C5B60 -4C5B4C90C8FC5F4C5A5F4C5AA24C5A5F167F5F4CC9FCA25E15015EA25E15035EA34B5AA4 -5EB36FCAFC92CBFCB0ED0FC0ED3FF0EDFFFC4A7F4A7FA24A80A86E91C9FCA26E5B6E5BED -3FF0ED0FC0>68 133 118 260 89 63 D[ -128 135 122 262 141 65 D[116 -129 121 256 134 I[<96263FFF80ED01C0060FB500FCED03E095B76C1407050716E005 -3F04F8140F94B800FE141F0403913AFC003FFF80040F028001036D133F043F01FCC8D87F -F0137F4C01E0DB1FF813FF4BB50080ED07FE4B49C93801FF01030F01F87013834B01E0EF -7FC3037F49EF1FE792B54871B5FC4A49CB7E4A49844A49844A49844A5B4A49854A8791B5 -48854991CDFC4949868A495B4949865B4B865B4B865B90B5481B7FA2485C1F3F5A92CFFC -1F1F5A5C5A1F0FA2485BA3481E075CA348F603C09CC7FCA45CB5FCB37E80A57EF701C0F7 -03E0807EA36C7FA21F077E6E1DC07EA26F1B0F7E20806C6E1B1FA26D6D1C006D65816D1D -7E816D1DFE6D6D636D6D1A01676D6D505A6D6E19076E6D626E1B0F6E6D4F5A6E6D4F5A6E -6D4FC7FC6E6D19FE6E6D18016E6D6C4D5A6F6D4D5A031F6D4D5A6F01F8EF3FE0030301FE -EFFF806F6D6C4B90C8FC6F6C01E0ED0FFE7001FCED3FF8040FD9FF8049B45A040302FC01 -3F13C0040091B7C9FC053F16FC050716F0050016C0060F02FCCAFCDE003F1380>115 -137 118 260 136 I[126 129 121 -256 144 III[128 -129 122 256 141 72 D[57 -129 123 256 68 I[102 129 121 256 118 76 D[156 129 120 -256 173 I[128 -129 122 256 141 I[<953801FFFE063FEBFFF00503B7FC051F16E0057F16F80403B5D8 -800713FF040F01F8C76C13C0043F01C0020F13F04C90C800037F922601FFFC030013FE4B -01F0EE3FFF030F497013C04B018004077F4B90CA6C7FDBFFFE7113FC4A49717F4A49727E -4A49727F4A49727F4A49727F4A49727F4A90CC6C7F91B5874B854949737F49894949747F -4B86498A4949747FA24949747FA24949747F90B589A24891CE6C7FA2488B4A87A2482080 -A248497514C0A34820E0A24A88A24820F0A44820F84A88A5B51FFCB26C6D5213F8A66C20 -F0A26E99B5FCA26C20E0A36C6D5114C0A36C20806E63A26C20006F626C67A26C6E505BA2 -6D666F626D666F626D666D6D505BA26D6D97B55A6D9BC7FC6D6D4F5B6F616D656E6D4E5B -6E6D4E5B6E6D4E5B6E6D4E5B6E646E6D4E90C8FC6E6D4E5A6E01FF05035B6F6D4C5B031F -6D4C13E06F6D4C5B6F01F8047F5B03016D4C48C9FC6F6CB4030313F87001E0021F5B040F -01F8027F13C004039026FF8007B5CAFCDC007F90B612F8051F16E0050393CBFCDD003F14 -F0060149CCFC>126 137 118 260 147 I[110 129 121 256 128 I[130 133 121 256 139 82 D[<922603FFF01538033FD9FF80147C4AB600F014FC -020715FC021F03FF1301027FD9001FEBC003DAFFF0010013E0010301C091381FF8074990 -C8EA07FCD90FFC923801FE0F4948923800FF1F4948EE3F9F4948EE1FFF49488248498248 -8491CA7E484883A24848187F001F193FA249181F123F1A0FA248481807A31A0312FFA21A -01A27FA21A007FA37F1B7C7F6C7FA26E18386E95C7FC806C7F806C13FF8115F06C14FEED -FFE06C15FE6CEDFFE017FE6CEEFFE06C17FE6DEEFFC06D17F86D17FE6D717E6D846D18F0 -0100846E17FE021F83020784020184DA003F83030383ED003F040382DC003F811703DD00 -3F801803DE007F7F191F73148019037314C085867413E0A28686A200707313F012F886A3 -86A37E86A47E1CE0A27EA2626D1AC0A27F6D4E1380A26D4E13007F505A7F6D4E5A6D616E -173F6E4D5A02F04D5A6E4C5BD9E7FE4C5B9026E3FF804B90C7FC01C001E04B5A9026807F -FCED3FFC91261FFFC049B45A496C01FF010F13E0020391B65A48010094C8FC48023F15FC -030715F048DA007F14800070030101F8C9FC>84 137 118 260 105 -I<000FC012F8A5488B03E0C76C91C7120302FCC8001F01FCEC001F02E06F49150302801B -0049C9193F491D1F491D0F491D07491D03A24848777EA2491D00A390CA1A7EA3003E1F3E -A3007E1F3FA3007C8BA848F70F80A5CB97C7FCB3B3B3B3A34E7F4E7F4E7F050FB612F803 -7FBBFCA59538F8000F798079FF88>I[128 133 122 256 141 I[134 133 125 256 -141 I[<261FFFF890B500FE4AB539E00FFFF091B795B6FCA5D8000304C0DA001F03F8C7 -FCD9003F4AC9000392C8FC020F02F87014F86E4A7014E06E4A7113806E7448C9FC6E6366 -6F6D715A6F6D4D5A666F6D606F6D177F9BCAFC6F6D17FE6F6E1501656F6E4B5A6F6E1507 -65706D4B5A72151F7060706D4B5A724BCBFC82706D15FE515A7080706E495A515A708071 -6D495A515A717F716D495A51CCFC717F716D13FE505A71148171ECC3F8F2C7F07114E772 -EBFFE06384725C98CDFC8484A27280878472808785737FA24F7F8796B5FC4E8088F003FB -DE07F18007F0804E5A4E486C7F063F6D7F19804E486C7F4E6D7F604D486D7F05036E8060 -4D486D80050F6E80604D486E7F053F834E804DC86C7F4D834D814C486F7F16034D6F804C -486F80160F4D6F804C48707F163F4D707F4CCA6C7F5E4C717F4B48717F15034C71804B48 -7180150F4C7180031F737F4B5A037F737F03FF737F5C4A747F4A88021F6D874A6D4E8049 -B56C4E80010F02FE95B67E90B76C040715FFB800F893B912F0A5DA003F9738FC007F> -132 129 124 256 141 88 D[<0007BD12F81DFCA504F8C9003F13F84BCA4813F015F003 -8094B512E04ACA5A4801F81AC04A4D14805C4A4D14004A4D5B91CBFC494E5B494E5BA249 -4E5B4995B5FC644F5C5B4F5C494D91C7FCA24F5B4F5B5B4F5B001F606396B55AA290CA48 -5C4E5CA24E91C8FC60624E5BCBFC4E5B4E5BA295B55A4D5CA24D5C5F97C9FC4D5BA24D5B -4D5BA24D5B94B5FC614C5C5E614C91CAFCA24C5B4C5BA24C5B5E6093B55AA24B5C4B5CA2 -4B91CBFC4B49173EA24B5B5D5F4B5BA292B548177E4A4A177CA24A5C5C94CBFC4A5BA24A -5B4A4918FCA24A5B91B55AA2494A17015B5E4991CB12031DF8495B49491807A24949180F -495B1C1F90B548183F481B7F5D484A18FF1B034891CB5A4849601B3F484995B5FC481907 -4A053F14F04849041FB6FC91BCFCBEFCA57E>95 129 118 256 115 -90 D[26 -188 107 268 52 I[26 -188 124 268 52 93 D<92381FFF804AB512F8020F14FF027F15E0902701FFF80313F849 -90C76C7ED90FF8EC1FFFD91FE002077FD93F806E7F49C86C13F0496C6E7F02E0157F4801 -F8826E6F7E6E6F7E5A6E6F7FA28684A286846C5BA26C5B6D5AEB1FE090CAFCA794B6FC16 -3F0307B7FC153F4AB5EAF80302071400023F13F091B512804949C7FC010713F8011F13E0 -495B4990C8FC495A485B485B485B5A5C485B5A5C481BF8A291C9FCA2B5FC5B60A460A26D -5EA26C173E6E157E953A7C7FF001F06C6D15F86C16016C6D913B03F03FF803E06C6DDA07 -E0EBFC076C6D913B0FC01FFE0FC06C01FEDA3F8090B512806C6C6C6C9026FF000F14006D -9026F00FFC6D5B010F90B5486D5B010103E0010013F0D9003F0280EC3FC0020101F8CBFC -555679D35E>97 D[93 -133 123 258 105 I<93383FFF800303B512FC031FECFFC0037F15F04AB712FC0207D9F8 -007F021F0180903803FF804A48C8EA7FC04A48ED1FE0902601FFF0ED7FF04949EC01FF49 -494A13F849495C4990C814FC495E495A5C13FF485B5A5C487113F85C487113F07213E048 -499238007F8096C7FCA25A5CA25AA491CCFCB5FCAF6C7FA57E80A27E6E170E6C191FA26C -6D173FA26C6D177EA26C6D17FC7E6E1601017F18F86D6CEE03F06D6D15076D6DED0FE06D -6DED1FC06D6DED3F806D6DED7F006D6D15FEDA3FFFEC03FC6E01C0EB1FF802079039FC01 -FFE06E90B65A020093C7FC031F14FC030314E09226003FFEC8FC48567AD354>I[93 133 122 258 -105 II[<933801FFC0040F13FC047F13FF4BB612 -804B9038C07FE0923A0FFE000FF0DB1FF8EB3FF8DB7FF013FF4B484813FC4A13C04A4948 -13FE16005C4A5AA24A5AA24A486D13FCA2027F6E13F84BEC7FF0F01FC095C7FC14FF5DB3 -AAB912C0A6C701F0C9FCB3B3B3AB815B497F010FEBFFC0007FB712FCA5ECC01F>63 -133 123 260 58 II[ -94 131 122 258 105 II[40 131 121 258 -53 108 DII -II< -DC1FFE153C4BB500E0147C030F14F8037F14FE4AB714FC0207D9FE0113C04A903AF0003F -E001023F0180EB0FF04A90C7EA03F8DAFFFC913801FC03010349EC00FE4949ED7F074949 -ED3F874949151F4949ED0FCF5B92C9EA07FF495A4884485B4A825A4A825AA24849177FA2 -485BA21A3FA2485BA4B5FC91CBFCAE6C7FA56C7FA37E806C197FA26C7F1AFF6C7F616C7F -6C606E5E137F6D6C5E6D6D5D6D7F6DEF3F7F6D6D157E6D6D15FC6D6DEC03F8DA3FFEEC07 -F06E6CEC1FE0020701C0EB7F8002019039F807FF006E6CB512FC031F14F0030314C09226 -003FFCC7FC93C9FCB3A8507E4F7F070F14E0063FB712F8A5F2E00F5D787AD264>II<912603FFF8130E027F01FF131F49B6EAE03F010F6F5A499039001F -FDFFD97FE00101B5FCD9FF806D7ED803FEC8121F4848814848814981484881123F498112 -7F4982A28412FFA36D82A27FA27F7F6D160E6C6C93C7FC6D7E14F06C13FEECFFF06CECFF -8016FC6CEDFF806C16F06C16FC6C16FF6C83013F16E06D820107820101826D6C81020781 -DA007F1580030115C0ED000F040114E0EE003F050F13F000708200F8827113F86C82187F -183FA2181F7EA2180F7EA27F19F0A27F181F6D17E07FF03FC07F6DEE7F806D16FF6D4B13 -006E4A5A6E4A5AD9CFF0EC1FF8D987FCEC7FE0903B01FFC007FFC0486C90B6C7FC48013F -14FC48010714E00070010001FCC8FC3D567AD34A>I<15F8A81401A61403A31407A3140F -A3141FA2143F147FA214FF5B5B5B5B5B5B90B9FC120FBAFCA4C701F8C9FCB3B3A5F003E0 -B0180781027F16C0A2180FA26E6C1580181F6E7EF03F006E7F6E6D137E705B6EEBF00102 -009038FC0FF86FB55A031F5C6F1480030149C7FC9238001FF83B767DF349>II<28FFF803FFFC913A07FFC07FE090B6 -94B5FCA5C692C9ECFE00011F01FC043F13F06D497013C06D497090C7FC745A6D616D61A2 -6F5F7F6F5F147F636F160F023F606F161F6E95C8FCA2705D6E173E70157E6E177CA27015 -FC6E5F7014016E5FA27014036E5F701407037F5EA270140F033F5E70141F6F93C9FCA271 -5B6F153E71137E6F157CA27113FC6F5DEFF0016F5DA2EFF8036F5DEFFC07047F5CA2EFFE -0F043F5CEFFF1F7091CAFCA218BF7013BE18FE705BA3705BA2705BA3705BA2715AA3715A -A271CBFC5B537CD064>I<2EFFFC03FFFC01FFE01FFFE0903A7FFF01FF8090B692B693B5 -FCA5C692C7000102F0C70007ECF000011F01F86E6C01C0020014806D496F496F90C7FC6D -7190C9EA3FFC4B755A6D83795A6F6F606D85686D6D81755E4F171F6E6C99C8FC876F4B5F -023F1C3E876F4B177E6E057F167C8770DA3E3F16FC6E64077E7F70DA7C1F15016E6407FC -7F70DAF80F15036E725D18016E6D4A6C4B5A880603170F6E6D4A6C5E88700107171F037F -4B6C93C9FC8870010F5F033F4B6C153E887049C7007F147E6F1A7C4E81DD803E023F14FC -6F62067E81DDC07C021F13016F06FE5B18FC6F6D48020F495A1CFF05E117076FD9F1F06E -5C1D8705F3178F6FD9FBE06E5C1DCF05FF17DF70496E91CAFC1DFF4E807060A295C9127F -7060A24D163F040F60A27048705AA37048705AA37048705A81537DD088>I<287FFE01FF -FE913A3FFF80FFF090B694B5FCA5D8001F02F0020FECFC0001034A020314C001004A4CC7 -FC6E496E13F86E18E06E606E607093C8FC6E6D15FC6E6D4A5A80704A5A6E6D4A5A6F6C4A -5A6F6C5D6F4BC9FC715B6F6D13FE6F6D5B6F4A5A71485A6FEBF8076F6D485A047F5C7148 -5A706C48CAFC7013FF705B705B60705B707F8284717E717E5F94B57E854C80DC03F37FEE -07F1DC0FE17F05C07F4C486C7E93383F003F4C8004FE6D7F4C6D7F4B487F4B488103076E -7F4B486D7F4C6D7F4B48147F4BC87F4B6F7E03FE6F7F4A48810203844A486F7F020F707F -021F82023F8402FF84498501076D4B7F013F1AC00003B6030F14F8B700C0027FECFFFEA5 -D9F01FF0807F5F517ED064>I<28FFF803FFFC913A07FFC07FE090B694B5FCA5C692C9EC -FE00011F01FC043F13F06D497013C06D497090C7FC6D725A636D6181636D6181147F6F4C -5A023F60A26F161F6E95C8FC705D6E173E821A7E6E177C7015FC6E5F8219016E5F701403 -6E5F701407037F5EA270140F033F5E70141F6F93C9FCA2715B6F153E71137E6F157C8319 -FC6F5DEFF0016F5DEFF8036F5DA2EFFC07047F5CEFFE0F043F5CA2EFFF1F7091CAFC18BF -7013BE18FEA2705BA2705BA3705BA2705BA2715AA3715AA271CBFCA25F173E177E177CA2 -17FC5F16015F16035FA216075F486C140FD80FF05DEA3FFC161F486C92CCFCB55C163E16 -7E167C5E1501495C007F140349495A49495A6C48495A90C748CDFC6C6C137E390FE001FC -3907F807F86CB55AC614C0013F90CEFCEB07F85B787CD064>I<0007BA12F81AFCA30380 -C7000313F802F0C85A02C04B13F091C914E048484C13C0495E494C1380491800494C5A5F -4D5B495F4D5B5F494B5B614D5B5F94B5C7FC001F5F90C8485B5E4C5B604C5B5EC9485B60 -5E93B5C8FC4B5B5F5D4B5B4B5B5F5D4B5B4B5B94C9FC92B5FC4A49157C4A5B5E5C4A5B5E -4A4915F85C4A5B93C9FC4A5A5B495B4B1501495B5B495B4B1503494916F05B90B5C91207 -5C4849160F48181F485B4A163F484916FF485F484915074A153F4890C80003B512E0BBFC -A47E46517BD054>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmbx12 29.8656 34 -/Fh 34 122 df58 D[192 173 119 300 211 65 D[172 -170 118 297 198 I[<0A03B500E0F00F800907B76CEF1FC098B800F8173F081F05FF17 -7F4FBA00E016FF070F07FC5D077F07FF5D0603BC00C05C060F09F05C063F09FC5C4DBE5C -05079426FC00036F90B5FC4D4CC8001FECE001053F04C003016E5A94B700FCCA003FEBFC -07040304E0050F6D5A4C93CB00036D5A041F03FC060014BF4C03F0073F90B6FC4C03C019 -0F4BB7CD7E4B03FC864B4B1A004B03E0874B4B87037F4B8792B7CF7E4A03FC884A4B884E -884A4B884A8D4A5D4A4B894A92D17E4D8A91B6FC494B8A495DA17E494B8AA2494B8A5B4D -8B5B5F498FA290B7D37EA25A4C8CA25A5E48A17EA35A5EA17F5AA35E48A16C1380A190C8 -FCA45AA35EA4B7FCB3A27EA482A37EA57E82A1ECFF80A14913C07EA2827EA36C81A26CA1 -5AA11580827EA26D6F67A115007F71676DA15A836D231F6D6F68A1133F6D8171555A7F6D -6F555A6E6971686E6F535B6E6F656E6F676E6F656E5790C7FC72535A6E03FE535A6E6F1D -FF6F6F515B031F6F515B6F03F0090F5B6F6F515B6F03FE515B6F6F98B5C8FC6F6C03C04F -5B7003F007075B7003FC071F5B0407DBFF80067F13E07004E04DB55A040004FC050F5C05 -3FDBFFC0047F49C9FC050F04FE0307B55A71DCFFFC49B612F0050194B95ADD003F1C8006 -0F51CAFC06031BF8DE007F1AC0070F97CBFC070119F8DF001F18C008004DCCFC090716C0 -E1000302F0CDFC>170 176 113 300 201 I[164 169 -118 296 183 69 D[197 170 118 297 218 72 D[145 170 118 297 168 76 D[ -244 170 118 297 265 I[<0903B512F050B712E0087FEEFF800707B912F8073F18FF4E -BB12E0060F1AFC063F1AFF4DBD12E00507DCC00016F8051F03F0C7000315FE057F0380DA -007F6E7E94B600FCC9000F81040303F0040315F0040F0380DC007F14FC4C92CB6C80047F -02FC060F6E7E93B600F00603814B4B728103074B7215F84B92CD003F804B4A74804B4A74 -804B4A748192B64874814A4B74814A4B74814A4B75804A8E4A92CF6C804D884A8E4A4A76 -8191B6487681A2494B768149A17E4D8849A17E494B7681A2494B7780A249A17E94D17E49 -A17FA290B6487881A248A1804C8AA248A180A3484B7881A348A180A24C8A48A180A448A1 -80A44C8AA248A11580A7B7A112C0B3A36CA11580A37066A56CA11500A470666CA15CA46C -A15CA270666CA15CA36C6F545DA36CA15C70666CA15CA271656DA15BA26D6F9AB7C7FCA2 -6D6F525DA26DA15A6D6F525DA26D6F525D6DA15A71646D6F525D6E6B71646EA0C8FC6E6F -515C6E6F98B65A6E6F505D6E6A6E6F505D6E6F505D6F6E505D6F6E5092C9FC6F6E505C6F -6F4F5C6F03E04EB65A6F6F4E5D03006F4E15C07002FE061F5D706E6C057F92CAFC040F6F -94B612FC7003F004035D040103FE041F15E0706CDAFFC092B71280051F03F802074BCBFC -0507DBFFC090B712F8050193B912E0716C1B80060F08FCCCFC06031AF0DE003F96CDFC07 -0718F8DF007F1780080304F0CEFCE0000302F0CFFC>178 176 113 -300 209 79 D[165 -170 118 297 191 I[196 -173 118 297 208 82 D[<0007C5B5FCA648A11480A505C0C700034BC8121F04F0C8F200 -7F04801E0F03FCC91B0103F0797E4B8C0380200F4891CA7614C04A8D02F82100A24A8E4A -8E4A8EA24A8EA291CB89A248A114E0498FA3498FA5498FA2007FA114F0A449A1127FA848 -48A1EA3FF8A6CD9BC7FCB3B3B3B3B3A8047FBF12F0AA08E0C9123F>173 -168 118 295 194 84 D<94B6FC93B712FE031FEEFFE092B912FE0203727E020F19F002 -3F19FC91BCFC499226C0001F814902E0C7000115E0494A6E6C80496E031F14FC70030780 -497280706F81496E6F817580498570857580878A8A878AA26D4A828BA26D5C876D4A866D -5C6D5C6D5C6D6C48CAFCEC1FF891CCFCAA98B7FC073FB8FC063FB9FC050FBAFC94BBFC16 -0F93BCFC03071781031FEE800192B7EAF000020393C7FC020F15F0023F158091B648C8FC -4915F8010715E0491580494AC9FC495C495C90B65A485D485D485D5A93CAFC485CA2485C -A2485CA4B65AA363A463A26F5F7E63816CF23FBF6F177F6C6EDDFF3F80F201FE6C6FDB03 -FC15F86C6F030F16FE6C03F0DB1FF8EDFFE06C6FDB7FF0EEFFFC6C03FE4A48487E6D6E6C -010F496C16FE6DDBF801B51280010F92B648487E01034E7F010006F07F023F05C06D7E02 -0794C8121F020004FC030315FC030703E0ED003FDB000F01FCCEFC7F7178EF88>97 -D[137 173 120 299 155 I<061FB57E0507B7FC94B812F8040717FF043F18 -C093BA12F0030319FC030F85033F737E92B648C7814A03E00203804A92C84880020F02FC -5D4A4A844A02E05D4A4A4B8091B65A4992C9FC494A4C80495C5B495C5E5B495CA290B648 -705C5A5E48745CA248745C93CA6C5C48745C755C756C48C7FC484AF01FF899C9FCA25AA4 -485CA5B6FCB17EA381A37EA46C80A37E827EF6FF806C6F4E13C0A27E70606C1E8070606D -1D006D6E6070616D1B1F6D6E4E5A6D806D6F4D5A6D6F4D5A6D6F5E6E6E04075B6E02FC4C -5B6E6E043F5B6E6E6C4B90C7FC6E03E0913803FFFE020103FC021F5B6E9226FFE001B512 -F0033F92B75A030F61030396C8FC030018FC043F17F00407178004004CC9FC050F15E0DD -001F01F8CAFC6A7177EF7C>I[137 173 119 299 -155 I<95383FFFF0050FB612C04CB712FC040FEEFF80047F17F04BB912FC030718FF031F -19C0037FDAFC00814AB600C0010F14F84A92C70003804A02FC020080021F02F06F7F4A4A -031F804A02806F8091B6C96C80494A7080494A82494A85497380494A838A494A8349884C -1A8090B684485D7614C05A93CB15E05A88481EF05DA248871FF8A25AA35D5A7614FCA4B6 -FCA392BDFCA51FF8A203FCCFFCA87EA481A27EA37EA2817EA36C6FF10FF8A26CF51FFC82 -6C1D3F7E70F17FF87F70F1FFF07F6D6E4E13E06D6E60704E13C06D5113806D6E606D03C0 -4D13006D6F4D5A6E6E4C485A6E02FC4C5B6E6E040F5B02076E6C033F5B6E03F092B55A6E -03FE02075C6E6CDAFFF090B6C7FC031F92B712FC030761030119E06F6C1880040F05FCC8 -FC040117F0DC003F1680050303F8C9FCDD000749CAFC6E7178EF7F>I[<96381FFFE0060F -B512FE95B712C0050716F0053F8294B812FE040383040F1880043FDAFC0014C04CDAE001 -14E04BB6C64814F04B02FC5B4B4A4914F84B14E04B4A4914FC5D4B4A16FE92B6C75A5F5C -4A5CA24A5CA25C4D6E14FCA24A7114F8A27414F04A4A6E14E07414C0741480751300F30F -F898C8FCB3AABCFCABC7003F02F0CBFCB3B3B3B3B0007FBA7EAA02F0C7121F>95 -173 119 300 85 II[138 172 -118 299 155 I[58 173 118 300 77 I[60 172 118 299 77 108 D<922601FFC092260FFFF8 -96387FFFC0013FB64BB600E0050FB6FCB8030F03FC057F15E0083F03FF4CB712F84FB800 -C0030F16FE4F05F04B707E070F71037F83073F05FE4AB912F04FD9E00F6E4ADA007F8096 -27FFFC00016F4901E0010F80060301E06D6F011F90C76C804E01806E6ED93FFC6E804E48 -C86CDC7FF080D8000FDC1FF86F6ED9FFC06E8101014C48724849846D4C486F4B90C97E07 -8006FC01FC856E4BC94C5ADDC1FE704B4882DDC3FC734848854E63DDC7F0505A05CFE0FF -7F864E98CAFCDDDFC07003FE83A2DDFF8062A18495CA5EA24D63A24D63A34D63A54D63B3 -B3B3A6BA00F80107BA00C0013FB912FEAA02F0C76C952680000306FCC7121FD76F76EEE8 ->I<922601FFC092380FFFF8013FB64BB612E0B8030F15FC083F15FF4FB812C04F17F007 -0F83073F17FE4FD9E00F809627FFFC000181060301E06D814E01806E804E48C87ED8000F -DC1FF86F8001014C48846D4C48810780846E4BC9FCDDC1FE82DDC3FC8560EFC7F005CF86 -60DDDFC082A2EFFF808D95CAFCA25FA25FA35FA55FB3B3B3A6BA00F80107BA12C0AA02F0 -C76C95388000038A6F76EE9B>I<95380FFFFC0507B612F8057FEDFF800403B812F0041F -17FE93BA12C0030319F0030F19FC033F9126FE001F14FF4B02E00101814AB6C8003F14E0 -4A02FC030F80020F02F0030314FC4A02C00300804A4A707F4A91CA6C8091B5487180494A -7180494A7180494A7180494A718049894C834989494A7280A290B68893CC7E488B488BA2 -484A7380A3488BA2488BA24B85A2488BA4482080A6B61EC0B06C2080A56C20006F61A36C -67A36C67A26F616C67A26C6770606C67A26C6F95B65A6D66705F6D9BC7FC6D6E4D5CA26D -6E4D5C6D6E4D5C6D6E4D5C6D6E4D5C6D6F4C5C6E6E93B65A6E02F0030392C8FC020F02FC -030F14FC6E02FF033F5C6E03E049B65A020003FE011F15C0033F91B9C9FC6F61030719F8 -030019C0043F95CAFC040717F8DC007F1680050703F8CBFCDD000F01FCCCFC7A7178EF8B ->II<95261FFFF0EE03FF0507B65E057F03E05D0407B712FC041F04FF5D93 -B912C00303725C030F06F85C033F844BDBC00F01FF91B5FC4AB600FCC76E5A4A03E0021F -13C0020F038002076D5A4A92C8000113F04A02FC6F6D5A4A4A706C5A91B648EE1FFE4903 -C0706C5A49745B494B18BF4992CA6C90B6FC494A83494A83A2494A8490B6855E48885E48 -885E4888A2485D895A93CCFCA25AA25DA25AA55DB6FCB07EA281A47EA3817EA36C81A27E -A2826C64A26C6F60A26C6F606D63826D636D6E95B7FC6D6E5F646D6E5F6D6F5E6D6F5E6D -6F5E6E6E5E6E6E923801FFF76E6E030713E7020702FF4B13C76E03C0027F1387020003F0 -0103B512076F02FF013F13FC031F92B612F8030718E0030118806F6CEEFE00040F16F804 -0116C0DC001F4AC7FCDD007F13C095CAFCB3B2090FBA1280AA9BC71207899F77EE93>I< -4BB46CEC3FFC013FB64AB512C0B8020714F8071F14FE077F6E7E4EB77E4E16F04E824ED9 -E03F7F4EEB007FDE3FFC90B57E95267FF0018019C0D8000F4C484815800101038113006D -4C4915C0EF83FC6EEC87F8A2EF8FF060179F60A2DDBF806D1580A205FFC76C1500A2745C -4D6F5B755B755B4D030713C0090190C7FC98C9FC5FA55FA65FB3B3B2BBFCAA02E0C7123F -626F78EE72>I<93263FFFFCEC03E0031FB600E0EB0FF092B700FE133F02079338FF807F -023FEFE1FF91BBFC1303499138F0000F011F01FCC8FC4901E0151F49018015034948C97E -4849707E4849834849834A8348855C48854A835AA24885A4B56C187FA3808080806E725A -6E6C94C8FC15E015FCEDFF806C15F8EEFFE0EFFF806C17FCF0FFE06C18FCF1FF806C19F0 -1AFC6C19FF6C866C1AE06C866D19FC6D856D856D860103866D866D6C85021F8514070201 -85DA003F841507DB007F831601DC000F1780EF003F1801DE001F15C019071901736C14E0 -D83FC0181F486C8400FF85866D8486A2877FA2877F1DC07FA27F1D8080636E1A00806E4E -5AA26E616E5F6E4D5B6E6C4C5B6F5E6F4C5B03F8047F5B03FF4BB55A04E0021F91C7FC02 -BF01FE0103B512FC021F90B85AD9FE0718E0D9F8036049C695C8FC01C0013F16F8490107 -16C090C84BC9FC007C030791CAFC5B7177EF6E>I[87 -158 123 284 108 III<267FFFC049B500C0912607FFFC903801FFF891B894B7FCAAC700 -0F0380C9001F4AC8FC6E6F040391C9FC7713FC6E6F606E6F4C5B6E6F4C5B6F6E5E535B6F -6E4C5B6F6E4C90CAFC6F6F4B5A6F6F5E6F4E5B734A5B6F6F5C6F6F4A5B706E4A5B706E4A -5B9BCBFC706E4A5A706F495A706F5A706F485B704C5B74485B706F485B7102FC5C716E48 -90CCFC716E485A1BFF715E715E715E715E715E647292CDFC84847281A272817281728172 -81858896B67E884E824E82604E824E824E824E6D804F7EDEFFFC814D496C804D6E814D49 -6C814D496C814D13C04D496C8196C7814D486E804D486E804C824C49834C496E814C496E -814E6E814C496E814C90C8FC4C486F8104FF71804B4970804B4970804B5B4D70814B4970 -814B4970814B72814B90CB814B5A4A49728002076D728049B600E07180B9047FB912C0AA -9026FC000108F8C77E8A6E7CED93>120 D<267FFFC049B500C0922603FFF8EB1FFE91B8 -95B6FCAAC76C02F8CB0007ECF00071DE007F90C7FC6EF43FFC836E525A836E525A846E51 -5BA2725F6E65846E515B846E5190C8FC846F505A846F505AA26F6E4D5AA27217FF6F6385 -6F4F5B856F4F5B856F4F5B856F4F90C9FCA2735D706185704E5A85704E5A85704E5A8670 -4D5BA2745B706186704D5B86704D90CAFC86714C5A86714C5AA2716E495AA27413FF715F -877103815B1BC17103C35B1BE37103E75B1BF77192B5CBFCA3725DA2725DA2725DA2725D -A2725DA3725DA2725DA27292CCFCA2735BA2735BA2735BA3735BA2735BA2735BA24F5BA2 -4F90CDFCA26162A24F5AA24F5AA24F5AEB7FE02601FFF84B5B000713FE486D5D486E5E48 -6E5C6248804E90CEFCA2B66C4A5A183F614E5AA24E5A4D5B5F6C4A495B4D5B4D90CFFC6C -4A5B4B495A6C91C7485A4A01035B6C01BC010F5B6C01F0013F13C0DAFC01B55A6C90B7D0 -FC6C16FC6C6C5D6D15E0010F158001034AD1FC010014F0020F90D2FC879F7BED93>I -E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 600dpi -TeXDict begin -%%PaperSize: A4 - @landscape -%%EndSetup -%%Page: 1 1 -1 0 bop -45 -282 5906 7 v -45 -44 a Fh(The)93 b(LogiCal)i(team)p --45 11 V -45 636 a Fg(Lo)5 b(cated)63 b(on)g(t)-5 b(w)g(o)63 -b(sites)-45 1097 y(-)g(INRIA-Ro)5 b(cquencourt)62 b(\(4)i(p)5 -b(ermanen)-5 b(t)61 b(+)h(3)h(PhD)g(studen)-5 b(ts\))-45 -1455 y(-)63 b(Orsa)-5 b(y)62 b(Univ)-5 b(ersit)g(y)61 -b(and)h(CNRS)h(\(4)h(p)5 b(ermanen)-5 b(t)61 b(+)h(4)i(PhD)f(studen)-5 -b(ts\))-45 1916 y(Both)63 b(close)f(to)i(P)-5 b(aris)5860 -4036 y - 0 setgray - 5860 4036 a -45 3997 5906 10 v -45 4204 a Ff(15)43 -b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5 -b(cquencourt)1179 b Ff(P)m(age)43 b(1)p eop -%%Page: 2 2 -2 1 bop -45 -282 5906 7 v -45 -44 a Fh(LogiCal:)126 b(main)94 -b(activities)p -45 11 V -45 636 a Fg(-)63 b(F)-16 b(undamen)-5 -b(tal)61 b(researc)-5 b(h)62 b(on)h(pro)5 b(of)63 b(theory)-45 -994 y(-)g(Dev)-5 b(elopmen)g(t)60 b(of)i(the)h(Co)5 b(q)63 -b(pro)5 b(of)63 b(assistan)-5 b(t)-45 1351 y(-)63 b(Pro)5 -b(of)63 b(dev)-5 b(elopmen)g(t)60 b(in)i(Co)5 b(q)5860 -4036 y - 0 setgray - 5860 4036 a -45 3997 5906 10 v -45 4204 a Ff(15)43 -b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5 -b(cquencourt)1179 b Ff(P)m(age)43 b(2)p eop -%%Page: 3 3 -3 2 bop -45 -282 5906 7 v -45 -44 a Fh(The)93 b(Co)8 -b(q)94 b(pro)8 b(of)94 b(assistan)-8 b(t)p -45 11 V -45 -636 a Fg(Based)63 b(on)g(the)f(Calculus)g(of)h(Inductiv)-5 -b(e)60 b(Constructions)-45 994 y(-)j(A)g(logical)f(strength)h -(comparable)e(to)i(ZF)-45 1351 y(-)g(The)f(functional)f(expressivit)-5 -b(y)61 b(of)h(\(a)i(higher-order\))d(ML)-45 1709 y(-)i(The)f(logical)g -(expressivit)-5 b(y)60 b(of)j(natural)f(deduction)g(and)g(inductiv)-5 -b(ely)59 b(de\014ned)-45 1985 y(prop)5 b(ositions)-45 -2549 y(Not)64 b(as)f(automatized)f(as)i(PVS,)g(A)-5 b(CL2,)63 -b(...)85 b(for)63 b(pro)5 b(of-of-programs)-45 2907 y(Pro)g(of)64 -b(scripting)d(not)i(as)h(mathematician-readable)59 b(as)64 -b(Mizar)5860 4036 y - 0 setgray - 5860 4036 a -45 3997 5906 10 v -45 -4204 a Ff(15)43 b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g -(Ro)5 b(cquencourt)1179 b Ff(P)m(age)43 b(3)p eop -%%Page: 4 4 -4 3 bop -45 -282 5906 7 v -45 -44 a Fh(A)93 b(Co)8 b(q)94 -b(script)p -45 11 V -45 649 a Fd(Fixpoint)g(minus)e([n:nat])h(:)e(nat)h -(->)f(nat)g(:=)136 893 y([m:nat]Cases)k(n)c(m)g(of)1040 -1137 y(O)g(_)f(=>)i(O)769 1381 y(|)e(\(S)i(k\))f(O)g(=>)g(\(S)g(k\))769 -1625 y(|)f(\(S)i(k\))f(\(S)g(l\))g(=>)g(\(minus)i(k)e(l\))678 -1868 y(end.)-45 2356 y(Lemma)i(minus_plus_simpl)j(:)678 -2600 y(\(n,m,p:nat\)\(\(min)q(us)h(n)91 b(m\)=\(minus)j(\(plus)e(p)f -(n\))g(\(plus)h(p)f(m\)\)\).)-45 2844 y(Proof.)136 3088 -y(Induction)j(p;)d(Simpl;)i(Auto)f(with)g(arith.)-45 -3331 y(Qed.)5860 4036 y - 0 setgray - 5860 4036 a -45 3997 5906 10 -v -45 4204 a Ff(15)43 b(Mars)g(2002)812 b Fe(LogiCal)60 -b(team)d(-)h(INRIA)g(Ro)5 b(cquencourt)1179 b Ff(P)m(age)43 -b(4)p eop -%%Page: 5 5 -5 4 bop -45 -282 5906 7 v -45 -44 a Fh(A)93 b(Co)8 b(q)94 -b(script)p -45 11 V -45 635 a Fd(Coq)e(<)f(Print)h(minus_plus_simpl.) --45 879 y([n,m,p:nat])46 1123 y(\(nat_ind)h([n0:nat]\(minus)j(n)91 -b(m\)=\(minus)j(\(plus)e(n0)f(n\))h(\(plus)g(n0)f(m\)\))226 -1366 y(\(refl_equal)k(nat)d(\(minus)g(n)f(m\)\))226 1610 -y([p0:nat;)j(IHp:\(\(minus)h(n)90 b(m\)=\(minus)k(\(plus)f(p0)e(n\))g -(\(plus)i(p0)e(m\)\)\)]IHp)i(p\))407 1854 y(:)e(\(n,m,p:nat\)\(minus)97 -b(n)91 b(m\)=\(minus)j(\(plus)e(p)f(n\))g(\(plus)i(p)d(m\)\))5860 -4036 y - 0 setgray - 5860 4036 a -45 3997 5906 10 v -45 4204 a Ff(15)43 -b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5 -b(cquencourt)1179 b Ff(P)m(age)43 b(5)p eop -%%Page: 6 6 -6 5 bop -45 -282 5906 7 v -45 -44 a Fh(Rendered)94 b(b)-8 -b(y)93 b(HELM)p -45 11 V -45 602 a Fc(DEFINITION)54 b -(minus_plus_simpl\(\))-45 744 y(TYPE)h(=)339 886 y(for)g(all)f -(n:nat.for)g(all)h(m:nat.for)f(all)g -(p:nat.\(\(n-m\)=\(\(p+n\)-\(p+m\)\)\))-45 1028 y(BODY)h(=)339 -1170 y(lambda)g(n:nat)449 1313 y(lambda)f(m:nat)559 1455 -y(lambda)g(p:nat)669 1597 y(We)g(prove)h -(\(\(n-m\)=\(\(p+n\)-\(p+m\)\)\))669 1739 y(by)f(induction)g(on)h(p)888 -1882 y(Case)g(O)1108 2024 y(\(refl_equal)e(.)i(.\))1163 -2166 y(we)f(proved)109 b(\(\(n-m\)=\(n-m\)\))888 2308 -y(Case)55 b(\(S)f(n0:nat\))1108 2450 y(By)g(induction)g(hypothesis,)g -(we)h(have:)1108 2593 y(\(H\))f(\(\(n-m\)=\(\(n0+n\)-\(n0+m\)\)\))1108 -2735 y(H)669 2877 y(we)g(proved)g(\(\(n-m\)=\(\(p+n\)-\(p+m\)\)\))394 -3019 y(we)h(proved)109 b(for)54 b(all)h(n:nat.)f(for)h(all)f(m:nat.)h -(for)f(all)h(p:nat.)f(\(\(n-m\)=\(\(p+n\)-\(p+m\)\)\))5860 -4036 y - 0 setgray - 5860 4036 a -45 3997 5906 10 v -45 4204 a Ff(15)43 -b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5 -b(cquencourt)1179 b Ff(P)m(age)43 b(6)p eop -%%Page: 7 7 -7 6 bop -45 -282 5906 7 v -45 -44 a Fh(Main)93 b(Co)8 -b(q)94 b(libraries)p -45 11 V -45 647 a Fg(-)63 b(Arithmetic)e(\(P)-5 -b(eano)63 b(n)-5 b(um)g(b)5 b(ers)61 b(and)i(binary)e(in)-5 -b(tegers\))-45 1004 y(-)63 b(Axiomatized)e(real)h(n)-5 -b(um)g(b)5 b(ers)61 b(\(deriv)-10 b(abilit)-5 b(y)-16 -b(,)59 b(trigonometry)-16 b(,)62 b(series,)h(...\))-45 -1362 y(-)g(Algebra)f(\(algebraic)g(structures,)i(fundamen)-5 -b(tal)60 b(theorem)i(of)h(algebra,)-45 1638 y(categories,)g(...\))-45 -1996 y(-)g(Sets,)g(relations,)g(orders,)g(logics)-45 -2353 y(-)g(Planar)f(geometry)-45 2711 y(-)h(Computer)f(science)f -(structures)i(\(b)5 b(o)g(oleans,)64 b(lists,)f(maps,)g(automatas,)h -(...\))-45 3068 y([13)g(standard)f(libraries)e(+)h(70)i(extra)e(user)h -(con)-5 b(tributions])5860 4036 y - 0 setgray - 5860 4036 a -45 3997 -5906 10 v -45 4204 a Ff(15)43 b(Mars)g(2002)812 b Fe(LogiCal)60 -b(team)d(-)h(INRIA)g(Ro)5 b(cquencourt)1179 b Ff(P)m(age)43 -b(7)p eop -%%Page: 8 8 -8 7 bop -45 -282 5906 7 v -45 -44 a Fh(The)93 b(Bologna)i(HELM)d(exp)8 -b(erimen)-8 b(t)p -45 11 V -45 636 a Fg(Exp)5 b(ort)63 -b(of)g(Co)5 b(q)63 b(formal)e(pro)5 b(ofs)64 b(to)f(XML)g(format)-45 -994 y(Application)e(of)i(XSL)-16 b(T)63 b(\014lters)g(for)f(output)h -(in)-45 1351 y(-)g(Natural)g(language)-45 1709 y(-)g(MathML)g(Con)-5 -b(ten)g(t)-45 2066 y(-)63 b(MathML)g(presen)-5 b(tation)-45 -2424 y(Computation)62 b(of)h(the)g(dep)5 b(endency)60 -b(graph)5860 4036 y - 0 setgray - 5860 4036 a -45 3997 5906 10 v -45 -4204 a Ff(15)43 b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g -(Ro)5 b(cquencourt)1179 b Ff(P)m(age)43 b(8)p eop -%%Page: 9 9 -9 8 bop -45 -282 5906 7 v -45 -44 a Fh(Our)93 b(problems)p --45 11 V -45 636 a Fg(-)63 b(Classi\014cation)-45 994 -y(-)g(Retrieving)-45 1351 y(-)g(Pro)5 b(of)63 b(rendering)-45 -1709 y(-)g(Mo)5 b(dularit)-5 b(y)5860 4036 y - 0 setgray - 5860 4036 -a -45 3997 5906 10 v -45 4204 a Ff(15)43 b(Mars)g(2002)812 -b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5 b(cquencourt)1179 -b Ff(P)m(age)43 b(9)p eop -%%Page: 10 10 -10 9 bop -45 -282 5906 7 v -45 -44 a Fh(Classifying)p --45 11 V -45 647 a Fg(-)63 b(Thematically)d(\(but)j(sometimes)e(at)j -(the)e(in)-5 b(tersection)62 b(of)g(sev)-5 b(eral)62 -b(\014elds\))-45 1004 y(-)h(By)f(author)-45 1362 y(-)h(By)f(v)-5 -b(ersion)61 b(of)i(Co)5 b(q)-45 1719 y(Curren)-5 b(tly)-16 -b(,)62 b(classi\014ed)f(b)-5 b(y)62 b(v)-5 b(ersion,)62 -b(site,)h(theory)g(+)f(thematic)g(cross)-45 1996 y(classi\014cation) -5860 4036 y - 0 setgray - 5860 4036 a -45 3997 5906 10 v -45 4204 a -Ff(15)43 b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5 -b(cquencourt)1116 b Ff(P)m(age)43 b(10)p eop -%%Page: 11 11 -11 10 bop -45 -282 5906 7 v -45 -44 a Fh(Retrieving)p --45 11 V -45 647 a Fg(-)63 b(By)f(pattern)h(\(but)g(ho)-5 -b(w)62 b(to)i(iden)-5 b(tify)60 b Fb(n)53 b(<)f(p)41 -b Fg(+)h(1)63 b(and)g Fb(n)52 b Fa(\024)g Fb(p)p Fg(\))-45 -1004 y(-)63 b(By)f(isomorphism)e(\(e.g.)85 b Fb(A)53 -b Fa(!)f(8)p Fb(x:B)9 b Fg(\()p Fb(x)p Fg(\))53 b Fa(!)f -Fb(C)66 b Fa(\021)52 b(8)p Fb(x:B)9 b Fg(\()p Fb(x)p -Fg(\))42 b Fa(^)g Fb(A)53 b Fa(!)e Fb(C)13 b Fg(\))-45 -1362 y(-)63 b(By)f(name)g(\(but)h(no)f(standard:)85 b(e.g.)f(comm)-5 -b(utativit)g(y)60 b(is)j(sometimes)e(called)-45 1638 -y(symmetry\))5860 4036 y - 0 setgray - 5860 4036 a -45 3997 5906 10 -v -45 4204 a Ff(15)43 b(Mars)g(2002)812 b Fe(LogiCal)60 -b(team)d(-)h(INRIA)g(Ro)5 b(cquencourt)1116 b Ff(P)m(age)43 -b(11)p eop -%%Page: 12 12 -12 11 bop -45 -282 5906 7 v -45 -44 a Fh(Pro)8 b(of)94 -b(rendering)p -45 11 V -45 647 a Fg(-)63 b(T)-16 b(o)63 -b(b)5 b(e)63 b(able)f(to)i(render)d(a)i(pro)5 b(of)63 -b(in)f(h)-5 b(uman-understandable)60 b(format)i(\(cf)-45 -923 y(HELM)h(and)g(Natural)g(exp)5 b(erimen)-5 b(ts\),)61 -b(but)i(still)e(problem)g(with)i(the)f(detail)-45 1199 -y(lev)-5 b(els)-45 1557 y(-)63 b(Con\015ict)f(b)5 b(et)-5 -b(w)g(een)62 b(v)-5 b(erb)5 b(osit)-5 b(y)61 b(and)i(automation)5860 -4036 y - 0 setgray - 5860 4036 a -45 3997 5906 10 v -45 4204 a Ff(15)43 -b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5 -b(cquencourt)1116 b Ff(P)m(age)43 b(12)p eop -%%Page: 13 13 -13 12 bop -45 -282 5906 7 v -45 -44 a Fh(Mo)8 b(dularit)-8 -b(y)p -45 11 V -45 636 a Fg(-)63 b(Curren)-5 b(tly)61 -b(no)i(mo)5 b(dule)-45 994 y(-)63 b(T)-16 b(o)63 b(b)5 -b(e)63 b(able)f(to)i(express)e(theories)g(indep)5 b(enden)-5 -b(tly)59 b(of)k(a)g(sp)5 b(eci\014c)-45 1270 y(implemen)-5 -b(tation)-45 1628 y(Relations)62 b(with)h(OMDo)5 b(c?)5860 -4036 y - 0 setgray - 5860 4036 a -45 3997 5906 10 v -45 4204 a Ff(15)43 -b(Mars)g(2002)812 b Fe(LogiCal)60 b(team)d(-)h(INRIA)g(Ro)5 -b(cquencourt)1116 b Ff(P)m(age)43 b(13)p eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF \ No newline at end of file diff --git a/helm/mowgli/home/misc/kick-off/lemme2.ppt b/helm/mowgli/home/misc/kick-off/lemme2.ppt deleted file mode 100644 index 4d686a39c..000000000 Binary files a/helm/mowgli/home/misc/kick-off/lemme2.ppt and /dev/null differ diff --git a/helm/mowgli/home/misc/proposal/MOWGLI.xls b/helm/mowgli/home/misc/proposal/MOWGLI.xls deleted file mode 100644 index 7b22c586e..000000000 Binary files a/helm/mowgli/home/misc/proposal/MOWGLI.xls and /dev/null differ diff --git a/helm/mowgli/home/misc/proposal/mowgli.pdf b/helm/mowgli/home/misc/proposal/mowgli.pdf deleted file mode 100644 index 0dbd1ec59..000000000 Binary files a/helm/mowgli/home/misc/proposal/mowgli.pdf and /dev/null differ diff --git a/helm/mowgli/home/misc/proposal/mowgli.ps b/helm/mowgli/home/misc/proposal/mowgli.ps deleted file mode 100644 index c1a623589..000000000 --- a/helm/mowgli/home/misc/proposal/mowgli.ps +++ /dev/null @@ -1,9679 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software -%%Title: mowgli.dvi -%%Pages: 49 -%%PageOrder: Ascend -%%BoundingBox: 0 0 596 842 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips -o mowgli.ps mowgli.dvi -%DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2001.11.26:1651 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -%%BeginProcSet: special.pro -%! -TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N -/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N -/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N -/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ -/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho -X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B -/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ -/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known -{userdict/md get type/dicttype eq{userdict begin md length 10 add md -maxlength ge{/md md dup length 20 add dict copy def}if end md begin -/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S -atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ -itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll -transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll -curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf -pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} -if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 --1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 -get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip -yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub -neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ -noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop -90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get -neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr -1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr -2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 --1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S -TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ -Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale -}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState -save N userdict maxlength dict begin/magscale true def normalscale -currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts -/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x -psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx -psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub -TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ -psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 -roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath -moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict -begin/SpecialSave save N gsave normalscale currentpoint TR -@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ -CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto -closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx -sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR -}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse -CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury -lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N -/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} -repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N -/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX -currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY -moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X -/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 -1 startangle endangle arc savematrix setmatrix}N end - -%%EndProcSet -TeXDict begin 39158280 55380996 1000 600 600 (mowgli.dvi) -@start -%DVIPSBitmapFont: Fa cmcsc10 10.95 39 -/Fa 39 119 df<140C141C147814F0EB01E0EB03C0EB0780130F1400131E133E5B137813 -F85B1201485AA212075BA2485AA2121FA290C7FC5AA3123E127EA65AB2127EA6123E123F -A37E7FA2120FA26C7EA27F1203A26C7E12007F1378137C7F131E7F14801307EB03C0EB01 -E0EB00F01478141C140C165A76C328>40 D<12C07E12787E7E7E6C7E7F12036C7E7F6C7E -1378137C133C133E7FA21480130FA2EB07C0A214E0A2130314F0A3130114F8A6EB00FCB2 -EB01F8A614F01303A314E01307A214C0A2EB0F80A2131F1400A2133E133C137C137813F8 -485A5B485A12075B48C7FC121E5A5A12E05A165A7AC328>I45 -D<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A77891D>I65 -DIIII71 DI<0107B6FCA3D9000113 -C06E1380157FB3B3A6123F487E487EA4EDFF005B6CC75A007C13010038495A003C5C6C49 -5A6C6C485A3903E03F802600FFFEC7FCEB1FF028407BBD34>74 D76 DII80 D83 D97 DIIIIII -II<90383FFFFCA3903800 -7FC0EC3F80B3AD1218127EB4FCA3EC7F005A007C137E007813FE383C01F8381F03F03807 -FFC0C648C7FC1E307CAE27>III< -D8FFFE923807FFF0A3D803FF92380FFC006C5FD9DF80141DA3D9CFC01439A2D9C7E01471 -A3D9C3F014E1A2D9C1F8EB01C1A3D9C0FCEB0381A2027EEB0701A36E130EA291381F801C -A391380FC038A2913807E070A3913803F0E0A3913801F9C0A2913800FF80A3486CEB7F00 -487E486C013E497EB5008091B512F0A2151C3C2F7CAE44>IIIIII<90383FC00C9038FFF81C -0003EBFE3C390FE03FFC381F8007EB0003003E1301481300157C5A153CA36C141CA27E6C -14006C7E13E013FE383FFFE06C13FE6CEBFF806C14E0000114F06C6C13F8010F13FC1300 -EC07FE14011400157F153F12E0151FA37EA2151E6C143E6C143C6C147C6C14F89038C001 -F039FBF807E000F1B512C0D8E07F130038C007FC20317BAF2A>I<007FB712F8A3903980 -1FF0073A7E000FE00000781678A20070163800F0163CA348161CA5C71500B3A8EC3FF801 -1FB512F0A32E2E7CAD36>III E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmtt10 10.95 46 -/Fb 46 121 df<007FB612F0A2B712F8A36C15F0A225077B9E30>45 -D<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C0C6E8B30>I<16F01501ED -03F8A21507A2ED0FF0A2ED1FE0A2ED3FC0A2ED7F80A2EDFF00A24A5AA25D1403A24A5AA2 -4A5AA24A5AA24A5AA24A5AA24AC7FCA2495AA25C1303A2495AA2495AA2495AA2495AA249 -5AA249C8FCA2485AA25B1203A2485AA2485AA2485AA2485AA2485AA248C9FCA25AA2127C -A225477BBE30>I<14FE903807FFC0497F013F13F8497F90B57E48EB83FF4848C6138049 -137F4848EB3FC04848EB1FE049130F001F15F0491307A24848EB03F8A290C712014815FC -A400FEEC00FEAD6C14016C15FCA36D1303003F15F8A26D1307001F15F0A26D130F6C6CEB -1FE0A26C6CEB3FC06C6CEB7F806D13FF2601FF8313006CEBFFFE6D5B6D5B010F13E06D5B -D900FEC7FC273A7CB830>I -III<49B4FC011F13F0017F13FC90B57E0003ECFF804815C048010113E03A1FF800 -3FF049131FD83FC0EB07F8A24848EB03FC90C71201A56D1303003F15F86D13076C6CEB0F -F06C6CEB1FE0D807FCEB7FC03A03FF83FF806C90B512006C6C13FC011F13F0497F90B512 -FE48802607FE0013C0D80FF8EB3FE0D81FE0EB0FF04848EB07F8491303007F15FC90C712 -014815FE481400A66C14016C15FC6D1303003F15F86D1307D81FF0EB1FF06D133F3A0FFF -01FFE06C90B512C06C1580C6ECFE006D5B011F13F0010190C7FC273A7CB830>56 -D<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA7FE0A2 -EAFFF0A4EA7FE0A2EA3FC0EA0F000C276EA630>58 D64 D<003FB512E04814FCB67E6F7E6C816C813A03 -F8007FF0ED1FF8150F6F7E6F7E15016F7EA2EE7F80A2163F17C0161FA4EE0FE0AC161F17 -C0A3163F1780A2167F17005E4B5A15034B5A150F4B5AED7FF0003FB65A485DB75A93C7FC -6C14FC6C14E02B387FB730>68 D<007FB7FCB81280A47ED803F8C7123FA8EE1F0093C7FC -A4157C15FEA490B5FCA6EBF800A4157C92C8FCA5EE07C0EE0FE0A9007FB7FCB8FCA46C16 -C02B387EB730>I<003FB712804816C0B8FCA27E7ED801FCC7121FA8EE0F8093C7FCA515 -3E157FA490B6FCA69038FC007FA4153E92C8FCAE383FFFF8487FB5FCA27E6C5B2A387EB7 -30>I<3B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E0D803F8C7EA -FE00B290B6FCA601F8C7FCB3A23B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F0 -6C496C13E02D387FB730>72 D<007FB6FCB71280A46C1500260007F0C7FCB3B3A8007FB6 -FCB71280A46C1500213879B730>I<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE -0F80EE1FC0A9003FB7FC5AB8FCA27E6C16802A387EB730>76 DI<007FB512F0B612FE6F7E16E0826C813903F8003FED0FFCED03 -FE15016F7EA2821780163FA6167F17005EA24B5A1503ED0FFCED3FF890B6FC5E5E16804B -C7FC15F001F8C9FCB0387FFFC0B57EA46C5B29387EB730>80 D<003FB57E4814F0B612FC -15FF6C816C812603F8017F9138003FF0151F6F7E15071503821501A515035E1507150F4B -5A153F4AB45A90B65A5E93C7FC5D8182D9F8007FED3FE0151F150F821507A817F8EEF1FC -A53A3FFF8003FB4801C0EBFFF8B56C7E17F06C496C13E06C49EB7FC0C9EA1F002E397FB7 -30>82 D<90390FF803C0D97FFF13E048B512C74814F74814FF5A381FF80F383FE001497E -4848137F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C -13FF6C14E0000114F86C80011F13FF01031480D9003F13C014019138007FE0151FED0FF0 -A2ED07F8A2007C140312FEA56C140716F07F6DEB0FE06D131F01F8EB3FC001FF13FF91B5 -1280160000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB830>I<003FB712C04816E0 -B8FCA43AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC4980A46D91C7FC2B387EB7 -30>I<3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8C7EA3F80B3B16D147F000116 -00A36C6C14FE6D13016D5CEC800390393FE00FF890391FF83FF06DB55A6D5C6D5C6D91C7 -FC9038007FFCEC1FF02F3980B730>I<3A3FFF01FFF84801837F02C77FA202835B6C0101 -5B3A01FC007F806D91C7FC00005C6D5BEB7F01EC81FCEB3F8314C3011F5B14E7010F5B14 -FF6D5BA26D5BA26D5BA26D90C8FCA4497FA2497FA2815B81EB0FE781EB1FC381EB3F8181 -EB7F0081497F49800001143F49800003141F49800007140FD87FFEEB7FFFB590B5128080 -A25C6C486D130029387DB730>88 D97 DII<913801FFE04A7F5CA28080EC0007AAEB03FE -90381FFF874913E790B6FC5A5A481303380FFC00D81FF0133F49131F485A150F48481307 -90C7FCA25AA25AA87E6C140FA27F003F141F6D133F6C7E6D137F390FF801FF2607FE07EB -FFC06CB712E06C16F06C14F76D01C713E0011F010313C0D907FCC8FC2C397DB730>I<49 -B4FC010713E0011F13F8017F7F90B57E488048018113803A07FC007FC04848133FD81FE0 -EB1FE0150F484814F0491307127F90C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003F -EC01F06DEB03F86C7E6C7E6D1307D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14 -806DEBFE00010713F8010013C0252A7CA830>IIII<14E0EB03F8A2497EA36D -5AA2EB00E091C8FCA9381FFFF8487F5AA27E7EEA0001B3A9003FB612C04815E0B7FCA27E -6C15C023397AB830>III<387FFFF8 -B57EA47EEA0001B3B3A8007FB612F0B712F8A46C15F025387BB730>I<02FC137E3B7FC3 -FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F13872607FE07EB03F801FC13FE -9039F803FC01A201F013F8A301E013F0B3A23C7FFE0FFF07FF80B548018F13C0A46C486C -01071380322881A730>II<49B4FC010F13E0013F13 -F8497F90B57E0003ECFF8014013A07FC007FC04848EB3FE0D81FE0EB0FF0A24848EB07F8 -491303007F15FC90C71201A300FEEC00FEA86C14016C15FCA26D1303003F15F86D13076D -130F6C6CEB1FF06C6CEB3FE06D137F3A07FF01FFC06C90B512806C15006C6C13FC6D5B01 -0F13E0010190C7FC272A7CA830>II<49B413F8010FEBC1FC013F13F14913FD48B6FC5A481381390FFC007F49131F48 -48130F491307485A491303127F90C7FC15015A5AA77E7E15037FA26C6C1307150F6C6C13 -1F6C6C133F01FC137F3907FF01FF6C90B5FC6C14FD6C14F9013F13F1010F13C1903803FE -0190C7FCAD92B512F84A14FCA46E14F82E3C7DA730>II<90381FFC1E48B5 -129F000714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E007F91C7FC13E06CB4FC -6C13FC6CEBFF806C14E0000114F86C6C7F01037F9038000FFF02001380007C147F00FEEC -1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC5D5D00FC14F0D8F83F13 -C026780FFEC7FC222A79A830>III<3B3FFFC01FFFE0486D4813F0 -B515F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE00015DEC0F80 -EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FBA290393FF07F -E0A3ECE03FA2011F5C90390F800F802D277FA630>119 D<3A3FFF81FFFC4801C37FB580 -A26C5D6C01815BC648C66CC7FC137FEC80FE90383F81FC90381FC3F8EB0FE3ECE7F06DB4 -5A6D5B7F6D5B92C8FC147E147F5C497F81903803F7E0EB07E790380FE3F0ECC1F890381F -81FC90383F80FE90387F007E017E137F01FE6D7E48486D7E267FFF80B5FCB500C1148014 -E3A214C16C0180140029277DA630>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmmi10 10.95 3 -/Fc 3 83 df<133F14E0EB07F0EB03FC13016D7EA3147FA26E7EA36E7EA36E7EA36E7EA3 -6E7EA26E7EA36E7EA3157FA36F7E157F15FF4A7F5C913807CFE0EC0F8FEC1F0F91383E07 -F0147C14FC49486C7EEB03F0EB07E049486C7EEB1F80EB3F00496D7E13FE4848147F485A -485A4848EC3F80485A123F4848EC1FC048C8FC4816E048150F48ED07F0007015032C407B -BE35>21 D<49B712F018FF19C0D9000190C76C7EF00FF84BEC03FC1801020382727E5DA2 -14071A805DA2140F4E13005DA2021F5E18034B5D1807023F5E4E5A4B4A5A4E5A027F4B5A -06FEC7FC4BEB03FCEF3FF091B712C005FCC8FC92CBFCA25BA25CA21303A25CA21307A25C -A2130FA25CA2131FA25CA2133FA25C497EB612E0A3413E7DBD3A>80 -D<49B77E18F818FFD90001D900017F9438003FE04BEC0FF0727E727E14034B6E7EA30207 -825DA3020F4B5A5DA24E5A141F4B4A5A614E5A023F4B5A4B4A5A06FEC7FCEF03FC027FEC -0FF04BEBFF8092B500FCC8FC5F9139FF8001FE92C7EA7F80EF1FC084496F7E4A1407A284 -13035CA2170F13075C60171F130F5CA3011F033F5B4AEE038018E0013F17071A004A021F -5B496C160EB600E090380FF01E05075B716C5ACBEAFFE0F03F8041407DBD45>82 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmti10 10.95 52 -/Fd 52 123 df<933807FF80043F13E09338FE00F8DB01F0133EDB07E0130E4B48131F4C -137F031F14FF4BC7FCA218FE157E1878180015FE5DA31401A25DA414030103B712F0A218 -E0903A0003F000070207140F4B14C0A3171F020F15805DA2173F1800141F5D5F177EA214 -3F92C712FE5FA34A1301027EECF81CA3160302FEECF03C4A1538A21878187013014A0101 -13F018E0933800F1C0EF7F804948EC1F0094C7FCA35C1307A2001E5B127F130F00FF5BA2 -49CAFC12FEEAF81EEA703CEA7878EA1FF0EA07C0385383BF33>12 -D39 D44 D<387FFFFCA3B5FCA21605799521>I<120FEA3FC0127FA212FFA3 -1380EA7F00123C0A0A77891C>I<15FE913807FF8091381F07C091387C01F0ECF0004948 -13F8494813780107147C495A49C7FC167E133E137EA25BA2485AA2000315FEA25B000715 -FCA2491301120FA34848EB03F8A44848EB07F0A448C7EA0FE0A316C0007E141F12FE1680 -153FA2481500A2157EA25DA25D4813015D6C495A127C4A5A4A5A6C49C7FC143E6C5B380F -C1F03803FFC0C648C8FC273F76BC2E>48 D<15FE913803FFC091380F01F091383C00F84A -137C4A7F4948133F49487F4A148049C7FC5BEB0E0C011E15C0EB1C0EEB3C061338137813 -70020E133FD9F00C148013E0141C0218137F00011600EBC0384A13FEEC600102E05B3A00 -E3C003F89039FF0007F0013C495A90C7485A5E037FC7FC15FC4A5A4A5AEC0FC04AC8FC14 -7E14F8EB03E0495A011FC9FC133E49141801F0143C48481438485A1678485A48C85A120E -001E4A5AD83FE0130301FF495A397C3FF01FD8780FB55AD8700391C7FCD8F0015B486C6C -5A6E5AEC07C02A3F79BC2E>50 D<131EEB3F80137FEBFFC05AA214806C13005B133C90C7 -FCB3120FEA3FC0127FA212FFA35B6CC7FC123C122777A61C>58 D<171C173C177CA217FC -A216011603A21607A24C7EA2161DA216391679167116E1A2ED01C1A2ED03811507160115 -0EA2031C7FA24B7EA25D15F05D4A5AA24A5AA24AC7FC5C140E5C021FB6FC4A81A20270C7 -127FA25C13015C495AA249C8FCA2130E131E131C133C5B01F882487ED807FEEC01FFB500 -E0017FEBFF80A25C39417BC044>65 D<9339FF8001C0030F13E0033F9038F803809239FF -807E07913A03FC001F0FDA0FF0EB071FDA1FC0ECBF00DA7F806DB4FC4AC77E495AD903F8 -6E5A495A130F4948157E4948157C495A13FF91C9FC4848167812035B1207491670120FA2 -485A95C7FC485AA3127F5BA312FF5BA490CCFCA2170FA2170EA2171E171C173C17381778 -6C16706D15F04C5A003F5E6D1403001F4B5A6D4AC8FC000F151E6C6C5C6C6C14F86C6C49 -5A6C6CEB07C090397FC03F8090261FFFFEC9FC010713F0010013803A4272BF41>67 -D<49B712C018F818FE903B0003FE0003FF9438007F804BEC1FC0F00FE0F007F014074BEC -03F8F001FCA2140F4BEC00FEA3141F4B15FFA3143F5DA3027F5D5DA219FE14FF92C81203 -A34917FC4A1507A219F813034A150F19F0A20107EE1FE05CF03FC0A2010FEE7F804A1600 -6060011F4B5A4A4A5A4D5AA2013F4B5A4AEC3FC04DC7FC017F15FEEE03FC4AEB0FF001FF -EC7FE0B8128004FCC8FC16E0403E7BBD45>I<49B812F8A390260003FEC7121F18074B14 -031801F000F014075DA3140F5D19E0A2141F4B1338A2EF7801023F027013C04B91C7FCA2 -17F0027F5CED80011603160F91B65AA3ED001F49EC07805CA3010392C8FC5CF003804C13 -070107020E14005C93C75A180E010F161E4A151C183CA2011F5E5C60A2013F15014A4A5A -1707017F150F4D5A4A147F01FF913807FF80B9FCA295C7FC3D3E7BBD3E>I<49B812F0A3 -90260003FEC7123F180F4B1403A2F001E014075DA3140F5D19C0A2141F5D1770EFF00302 -3F02E013804B91C7FCA21601027F5CED8003A2160702FFEB1F8092B5FCA349D9003FC8FC -4A7F82A20103140E5CA2161E0107141C5CA293C9FC130F5CA3131F5CA3133F5CA2137FA2 -5C497EB612E0A33C3E7BBD3B>I<9339FF8001C0030F13E0033F9038F803809239FF807E -07913A03FC001F0FDA0FF0EB071FDA1FC0ECBF00DA7F806DB4FC4AC77E495AD903F86E5A -495A130F4948157E4948157C495A13FF91C9FC4848167812035B1207491670120FA2485A -95C7FC485AA3127F5BA312FF5BA30303B512FC90C7FCA2DB000190C7FCA25FA216035FA3 -16076C5E7FA2003F150F6D5D121F6D141F000F153F6C6C4A5A6C6C14F76C6CEB01E36CB4 -EB07C1903A7FC03F81C090391FFFFE00010701F890C8FC010013803A4272BF46>I<49B6 -48B6FC495DA2D9000390C7000313004B5D4B5DA2180714074B5DA2180F140F4B5DA2181F -141F4B5DA2183F143F4B5DA2187F147F4B5DA218FF91B8FC96C7FCA292C712015B4A5DA2 -170313034A5DA2170713074A5DA2170F130F4A5DA2171F131F4A5DA2173F133F4A5DA201 -7F157FA24A5D496C4A7EB66CB67EA3483E7BBD44>I<49B6FC5BA2D9000313005D5DA314 -075DA3140F5DA3141F5DA3143F5DA3147F5DA314FF92C7FCA35B5CA313035CA313075CA3 -130F5CA3131F5CA3133F5CA2137FA25C497EB67EA3283E7BBD23>I<4AB61280A2180091 -C713C0167F5FA216FF94C7FCA35D5EA315035EA315075EA3150F5EA3151F5EA3153F5EA3 -157FA25EA215FFA293C8FCA25CA25DA2380F8003EA3FC0D87FE05BA21407D8FFC05B140F -01805B49485A12FC0070495A4A5A6C01FEC9FC383C01FC380F07F03807FFC0C648CAFC31 -4079BD30>I<49B612C0A25FD9000390C8FC5D5DA314075DA3140F5DA3141F5DA3143F5D -A3147F5DA314FF92C9FCA35B5CA313035C18C0EF01E0010716C05C17031880130F4A1407 -18005F131F4A141EA2173E013F5D4A14FC1601017F4A5A16074A131F01FFECFFF0B8FCA2 -5F333E7BBD39>76 D<49B5933807FFFC496062D90003F0FC00505ADBBF805E1A771AEF14 -07033F923801CFE0A2F1039F020FEE071F020E606F6C140E1A3F021E161C021C04385BA2 -F1707F143C023804E090C7FCF001C0629126780FE0495A02705FF00700F00E0114F002E0 -031C5BA2F03803010116704A6C6C5D18E019070103ED01C00280DA03805BA2943807000F -13070200020E5C5FDB03F8141F495D010E4B5CA24D133F131E011CDAF9C05CEEFB80197F -013C6DB4C7FC013895C8FC5E01784A5C13F8486C4A5CD807FE4C7EB500F04948B512FE16 -E01500563E7BBD52>I79 D<49B77E18F018FC903B0003FE0003FEEF00FF4BEC7F80 -F03FC00207151F19E05DA2020F16F0A25DA2141FF03FE05DA2023F16C0187F4B1580A202 -7FEDFF00604B495A4D5A02FF4A5A4D5A92C7EA3FC04CB4C7FC4990B512FC17E04ACAFCA2 -1303A25CA21307A25CA2130FA25CA2131FA25CA2133FA25CA2137FA25C497EB67EA33C3E -7BBD3E>II<49B612FCEF -FF8018F0903B0003FE000FF8EF03FE4BEB00FF8419800207ED3FC05DA219E0140F5DA302 -1FED7FC05DA2F0FF80143F4B15004D5A60027F4A5A4B495A4D5AEF3F8002FF02FEC7FC92 -380007F892B512E01780499038000FE04A6D7E707E707E0103814A130083A213075CA25E -130F5C5F1603131F5CA3013F020714404A16E05F017F160119C04A01031303496C1680B6 -D8800113079438FE0F009338007E1ECAEA3FFCEF07F03B407BBD42>I<92391FE00380ED -7FFC913A01FFFE0700913907F01F8F91390FC007DF4AC66CB4FC023E6D5A4A130014FC49 -5A4948147CA2495AA2010F15785CA3011F1570A46E91C7FCA2808014FE90380FFFE015FC -6DEBFF8016E06D806D806D6C7F141F02037FEC003FED07FF1501A281A282A212075A167E -120EA2001E15FE5EA25E003E14015E003F14034B5A486C5C150F6D495A6D49C8FCD8F9F0 -137C39F8FE01F839F03FFFF0D8E00F13C026C001FEC9FC314279BF33>I<48B9FCA25A90 -3AFE001FF00101F89138E0007FD807E0163E49013F141E5B48C75BA2001E147FA2001C4B -131C123C003814FFA2007892C7FC12704A153C00F01738485CC716001403A25DA21407A2 -5DA2140FA25DA2141FA25DA2143FA25DA2147FA25DA214FFA292C9FCA25BA25CA21303A2 -5CEB0FFE003FB67E5AA2383D71BC41>I<277FFFFE01B500FC90B512E0B5FCA200039026 -80000790C7380FFC006C90C701FCEC07F049725A04035EA26350C7FCA20407150EA2040F -5D1A3C041F153862163B6216734F5A6D14E303014B5A6C15C303034BC8FC1683DB070314 -0E191E030E151C61031C7F61ED380161157003F04A5A15E002014B5A15C0DA03804AC9FC -60DA0700140E60140E605C029C5D14B8D97FF85D5C715A5C4A5DA24A92CAFC5F91C7FC70 -5A137E5F137C5F137801705D53406EBD5B>87 D<91B690383FFFFC605E020101E0010F13 -006E49EB07F84C6D5A19C06F6C495A96C7FC033F140E705B183C031F5C705B4D5A030F5C -70485A4DC8FC0307130EEEFC1E5F03035BEEFE705F6F6C5A5FA26F90C9FC83A2707EA216 -FF4B7F5DED079FEE1FF0150EED1C0F03387F1578EDF007DA01E07F15C09138038003DA07 -007F140E021E13014A805C02707F4A81495A4948147F01078249C8FC013F6F7E496C147F -2603FFC049487EB500F8011FEBFFE0A261463E7CBD44>I<147E49B47E903907C1C38090 -391F80EFC090383F00FF017E137F4914804848133F485AA248481400120F5B001F5C157E -485AA215FE007F5C90C7FCA21401485C5AA21403EDF0385AA21407EDE078020F1370127C -021F13F0007E013F13E0003E137FECF3E1261F01E313C03A0F8781E3803A03FF00FF00D8 -00FC133E252977A72E>97 DIIII<167C4BB4FC923807C78092380F83C0ED1F87161FED3F -3FA2157EA21780EE0E004BC7FCA414015DA414035DA30103B512F8A390260007E0C7FCA3 -140F5DA5141F5DA4143F92C8FCA45C147EA414FE5CA413015CA4495AA4495AA4495A121E -127F5C12FF49C9FCA2EAFE1EEAF83C1270EA7878EA3FE0EA0F802A5383BF1C>III<1478EB01FCA21303A3 -14F8EB00E01400AD137C48B4FC38038F80EA0707000E13C0121E121CEA3C0F1238A2EA78 -1F00701380A2EAF03F140012005B137E13FE5BA212015BA212035B1438120713E0000F13 -78EBC070A214F0EB80E0A2EB81C01383148038078700EA03FEEA00F8163E79BC1C>I<15 -07ED1FC0A2153FA31680ED0E0092C7FCADEC07C0EC3FF0EC78F8ECE07CEB01C01303EC80 -7EEB0700A2010E13FE5D131E131CEB3C01A201005BA21403A25DA21407A25DA2140FA25D -A2141FA25DA2143FA292C7FCA25CA2147EA214FEA25CA213015CA2121C387F03F012FF49 -5A5C495A4848C8FCEAF83EEA707CEA3FF0EA0FC0225083BC1C>IIIIII<9039 -03E001F890390FF807FE903A1E7C1E0F80903A1C3E3C07C0013C137801389038E003E0EB -783F017001C013F0ED80019038F07F0001E015F8147E1603000113FEA2C75AA201011407 -17F05CA20103140F17E05CA20107EC1FC0A24A1480163F010F15005E167E5E131F4B5A6E -485A4B5A90393FB80F80DA9C1FC7FCEC0FFCEC03E049C9FCA2137EA213FEA25BA21201A2 -5BA21203A2387FFFE0B5FCA22D3A80A72E>I114 DII<137C48B4141C26038F80137EEA0707000E7F001E15FE121CD83C0F5C12381501EA -781F007001805BA2D8F03F1303140000005D5B017E1307A201FE5C5B150F1201495CA215 -1F0003EDC1C0491481A2153F1683EE0380A2ED7F07000102FF13005C01F8EBDF0F000090 -38079F0E90397C0F0F1C90391FFC07F8903907F001F02A2979A731>I<017CEB01C048B4 -EB07F038038F80EA0707000E01C013F8121E001C1403EA3C0F0038EC01F0A2D8781F1300 -00705BA2EAF03F91C712E012005B017E130116C013FE5B1503000115805BA2ED07001203 -495B150EA25DA25D1578000114706D5B0000495A6D485AD97E0FC7FCEB1FFEEB03F02529 -79A72A>I<017C167048B491387001FC3A038F8001F8EA0707000E01C015FE001E140300 -1CEDF000EA3C0F0038177C1507D8781F4A133C00701380A2D8F03F130F02004913381200 -5B017E011F14784C137013FE5B033F14F0000192C712E05BA2170100034A14C049137E17 -031880A2EF070015FE170E00010101141E01F86D131C0000D9039F5BD9FC076D5A903A3E -0F07C1E0903A1FFC03FFC0902703F0007FC7FC372979A73C>I<903903F001F890390FFC -07FE90393C1E0E0F9026780F1C138001F0EBB83FD801E013F89039C007F07FEA03800007 -14E0D9000F140048151C000E4AC7FCA2001E131FA2C75BA2143F92C8FCA35C147EA314FE -4A131CA30101143C001E1538003F491378D87F811470018314F000FF5D9039077801C039 -FE0F7C033A7C0E3C078027783C1E1EC7FC391FF80FFC3907E003F029297CA72A>I<137C -48B4143826038F8013FCEA0707000E7F001E1401001C15F8EA3C0F12381503D8781F14F0 -00701380A2D8F03F1307020013E012005B017E130F16C013FE5B151F1201491480A2153F -000315005BA25D157EA315FE5D00011301EBF8030000130790387C1FF8EB3FF9EB07E1EB -00035DA21407000E5CEA3F80007F495AA24A5AD8FF0090C7FC143E007C137E00705B3878 -01F0383803E0381E0FC06CB4C8FCEA03F8263B79A72C>II E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmsy10 10.95 1 -/Fe 1 16 df15 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmr8 8 1 -/Ff 1 66 df<4A7E4A7EA34A7EA24A7EA3EC1BF81419A2EC30FCA2EC70FEEC607EA24A7E -A349486C7EA2010380EC000FA201066D7EA3496D7EA2011FB57EA29038180001496D7EA3 -49147EA201E0147F4980A20001ED1F801203000716C0D80FF0EC3FE0D8FFFC0103B5FCA2 -302F7EAE35>65 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmbx12 12 61 -/Fg 61 122 df12 D<157F913803FFC0020F -7F4A7F91383FE1F891387F80789138FF007C49143C495A163E4948131EA3130FA3163E16 -3C167C16786E13F84B5A4B5A15075E6D6C485A4BC70003B512E0153E15FC6D5B5D4B9139 -0007C0004B5E6D6D150F4FC7FC6D6D151E49173E496D5D491778496D15F890261FBFFE4A -5AD93F3F5E9026FE1FFF1403D801FC6E495A00036D5E48486C6D130F000F6F49C8FC001F -6D6D133E48486C6D133C187C007F6D6D5B6F6C485A00FF6E6C485A6FEB87C06F13CFEFFF -806F91C9FC6D6D5B6F49EC01E06F7F6C6CEC3FFF706D13036C6C4A6DEB07C06C6C91B500 -F0130FDA800702FCEB1F806C9026E03FF89039FF80FF00000390B5D8F03FEBFFFE6CDBC0 -0F5C6C6CDA00035C011F01F8D9007F13E001030180020790C7FC4B477BC557>38 -DII<12F07E127E7E6C7E6C7E6C7E7F6C7E -6C7E12007F137F80133F806D7EA26D7EA26D7EA2801303A2801301A280A27F1580A4EC7F -C0A615E0A2143FAE147FA215C0A6ECFF80A415005BA25CA213035CA213075CA2495AA249 -5AA2495A5C137F91C7FC13FE5B1201485A485A5B485A485A48C8FC127E12F85A1B647ACA -2C>I44 D46 DI49 DII<163FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC -0F87EC1F07143E147E147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A -485A485A120F5B48C7FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280A531417DC0 -38>I<0007150301E0143F01FFEB07FF91B6FC5E5E5E5E5E16804BC7FC5D15E092C8FC01 -C0C9FCAAEC3FF001C1B5FC01C714C001DF14F09039FFE03FFC9138000FFE01FC6D7E01F0 -6D13804915C0497F6C4815E0C8FC6F13F0A317F8A4EA0F80EA3FE0487E12FF7FA317F05B -5D6C4815E05B007EC74813C0123E003F4A1380D81FC0491300D80FF0495AD807FEEBFFFC -6CB612F0C65D013F1480010F01FCC7FC010113C02D427BC038>I<4AB47E021F13F0027F -13FC49B6FC01079038807F8090390FFC001FD93FF014C04948137F4948EBFFE048495A5A -1400485A120FA248486D13C0EE7F80EE1E00003F92C7FCA25B127FA2EC07FC91381FFF80 -00FF017F13E091B512F89039F9F01FFC9039FBC007FE9039FF8003FF17804A6C13C05B6F -13E0A24915F0A317F85BA4127FA5123FA217F07F121FA2000F4A13E0A26C6C15C06D4913 -806C018014006C6D485A6C9038E01FFC6DB55A011F5C010714C0010191C7FC9038003FF0 -2D427BC038>I<121E121F13FC90B712FEA45A17FC17F817F017E017C0A2481680007EC8 -EA3F00007C157E5E00785D15014B5A00F84A5A484A5A5E151FC848C7FC157E5DA24A5A14 -035D14074A5AA2141F5D143FA2147F5D14FFA25BA35B92C8FCA35BA55BAA6D5A6D5A6D5A -2F447AC238>III65 DIIII -IIII75 DIII<923807FFC092B512FE0207EC -FFC0021F15F091267FFE0013FC902601FFF0EB1FFF01070180010313C04990C76C7FD91F -FC6E6C7E49486F7E49486F7E01FF8348496F7E48496F1380A248496F13C0A24890C96C13 -E0A24819F04982003F19F8A3007F19FC49177FA400FF19FEAD007F19FC6D17FFA3003F19 -F8A26D5E6C19F0A26E5D6C19E0A26C6D4B13C06C19806E5D6C6D4B13006C6D4B5A6D6C4B -5A6D6C4B5A6D6C4A5B6D01C001075B6D01F0011F5B010101FE90B5C7FC6D90B65A023F15 -F8020715C002004AC8FC030713C047467AC454>II82 -DI<003FBA12E0A59026FE000FEB -8003D87FE09338003FF049171F90C71607A2007E1803007C1801A300781800A400F819F8 -481978A5C81700B3B3A20107B8FCA545437CC24E>II87 -D<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7E -A26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC0100 -0313E0000F1380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013E -EBFFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97 -DIIIIIII<137C48 -B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA007C90C7FCAAEB7FC0EA7FFF -A512037EB3AFB6FCA518467CC520>IIII<90277F -8007FEEC0FFCB590263FFFC090387FFF8092B5D8F001B512E002816E4880913D87F01FFC -0FE03FF8913D8FC00FFE1F801FFC0003D99F009026FF3E007F6C019E6D013C130F02BC5D -02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B60003B512FEA5572D7CAC5E>I<90397F -8007FEB590383FFF8092B512E0028114F8913987F03FFC91388F801F000390399F000FFE -6C139E14BC02F86D7E5CA25CA35CB3A7B60083B512FEA5372D7CAC3E>II<90397FC00FF8B590B57E02C314E002CF14 -F89139DFC03FFC9139FF001FFE000301FCEB07FF6C496D13804A15C04A6D13E05C7013F0 -A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C13E06E15C06E5B6E4913806E4913006E49 -5A9139DFC07FFC02CFB512F002C314C002C091C7FCED1FF092C9FCADB67EA536407DAC3E ->I<90387F807FB53881FFE0028313F0028F13F8ED8FFC91389F1FFE000313BE6C13BC14 -F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3A5B612E0A5272D7DAC2E>114 -D<90391FFC038090B51287000314FF120F381FF003383FC00049133F48C7121F127E00FE -140FA215077EA27F01E090C7FC13FE387FFFF014FF6C14C015F06C14FC6C800003806C15 -806C7E010F14C0EB003F020313E0140000F0143FA26C141F150FA27EA26C15C06C141FA2 -6DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13E026E007FEC7FC232F7CAD2C ->IIIIIII E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmsl10 10.95 16 -/Fh 16 88 df44 D<007FB5FCA2B512FEA418 -067C961E>I48 D<157015F014011407143F903803FFE0137FEBFFCFEBF80F1300 -141F15C0A5143F1580A5147F1500A55C5CA513015CA513035CA513075CA5130F5CA3131F -497EB612F8A31D3D78BC2D>III<01061403D90780 -131F90390FF801FE91B512FC16F816F016E0168049EBFE0015F890381C7FC091C8FCA313 -3C1338A513781370A2EC1FE0ECFFF8903873E03E9038FF001F01FCEB0F804914C049EB07 -E04914F049130390C7FC16F8A61507A21206EA3F80487EA2150F00FF15F0A24914E090C7 -121F00FC15C000F0143F00701580ED7F0012786C14FE4A5A6C495A390F800FE03907E03F -C06CB5C7FCC613FCEB1FE0283F7ABC2D>53 DI<4BB46C1370031F01F013F0037F9038FC -01E0913A03FF807E03913A0FF8000F83DA1FE0EB07C7DA7F80EB01EF4AC812FFD903FE16 -C04948157F4948153F495A4948151F495A4948168091C9120F5A485AA2485A000F180049 -82121FA248485EA295C7FC485AA412FF5BA6043FB512E05BA29339001FFC00715AA2607F -127FA2171F123F6D5EA2121F7F000F163F6C7E6C6C4B5A7F6C6C15FF6C6DEB01EFD93FC0 -EB07C7D91FF0EB1F87D907FE9038FE03800101B5EAF8016D6C01E0C8FCDA07FEC9FC3C42 -76BF47>71 D<011FB512FC5BA29039003FF8006E5AA25DA5143F5DA5147F5DA514FF92C7 -FCA55B5CA513035CA513075CA5130F5CA5131F5CA3133F497E007FB512F0A2B6FC263E7E -BD21>73 D<013FB512FEA25E9026007FF8C8FCEC3FE0A25DA5147F5DA514FF92C9FCA55B -5CA513035CA513075CA21838A21870130F5CA218E0A3011F15014A15C01703A21707EF0F -80013F151F4A143F177FEFFF00017F140301FF143FB9FC5FA2353E7DBD39>76 -D<90263FFFF093381FFFF85013F0629026007FF8EFF000023F4D5AA2023B933801DFC0A2 -DA39FCED039FA2F1073F14790271040E5BEC70FE191C19381A7F02F01670DAE07F94C7FC -19E0A2F001C06201016D6C495A02C05FF00700A2180E6F6C14010103161C028003385BA2 -18706F7EF0E00313070200DA01C05BA2923907F00380A294380700075B010E902603F80E -5C5FA25F190F011E6D6C5A011C605FA2EEFDC0DB00FF141F013C5D013860013C92C7FC01 -7C5C01FE027E143F2607FF80017C4A7EB500FC037FB512E004785E4A1338553E7CBD53> -I<923803FF80031F13F09238FE01FE913903F0003FDA0FC0EB1FC0DA3F80EB07E0027EC7 -6C7E49486E7E49488149486E7E4948157F495A013F17804948ED3FC049C9FCA24848EE1F -E012035B000718F05B120FA2485A19F8123F5BA2127FA219F04848163FA5F07FE0A35BF0 -FFC0A219805F19007F4D5A127F4D5A60003F160F6D5E001F4C5A4D5A6C6C4B5A95C7FC6C -6C15FE00034B5A6C6C4A5A6C6C4A5A017FEC1FC06D6C495AD90FE001FEC8FC903903F807 -F80100B512C0DA0FFCC9FC3D4276BF47>79 D<9238FF80070207EBE00F021FEBF81E9138 -7F00FE02FCEB1F3ED903F0EB0FFE49481307494813034AEB01FC49C7FC491400133E137E -177C491578A57F1770A26D1500808080EB7FFEECFFE06D13FEEDFFC06D14F06D14FC0103 -80010080143F02031480DA003F13C015031500EE7FE0163F161FA2160F121CA31607160F -003C16C0A31780003E151F1700007E5D007F153E6D5C16FC01E0495AD87DF0495AD8FCFC -EB0FC03AF87F803F8027F01FFFFEC7FCD8E00713F839C0007FC030427BBF33>83 -D<0007B912F0A33C0FFE000FF8003F01F0160F01C04A13034848160190C7FC121EF000E0 -48141F5E1238A212781270153F5E5AA3C81600157F5EA515FF93C9FCA55C5DA514035DA5 -14075DA5140F5DA3141FEC7FFC0003B7FCA33C3D76BC42>I87 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmbx10 10.95 61 -/Fi 61 122 df12 -D45 DI<161C163E167EA216FE16FC150116F8A2150316F0A2150716 -E0150F16C0A2151F1680153F1600A25D157E15FE5DA214015DA214035D14075DA2140F5D -141F5DA2143F92C7FC5C147EA214FE5CA213015C13035CA213075C130F5CA2131F5C133F -91C8FCA25B137EA213FE5B12015BA212035B12075BA2120F5B121F5BA2123F90C9FCA25A -127E12FE5AA25A1278275B7AC334>II<140F14 -3F5C495A130F48B5FCB6FCA313F7EAFE071200B3B3A8007FB612F0A5243C78BB34>I<90 -3803FF80013F13F890B512FE00036E7E4881260FF80F7F261FC0037F4848C67F486C6D7E -6D6D7E487E6D6D7EA26F1380A46C5A6C5A6C5A0007C7FCC8FC4B1300A25E153F5E4B5AA2 -4B5A5E4A5B4A5B4A48C7FC5D4A5AEC1FE04A5A4A5A9139FF000F80EB01FC495A4948EB1F -00495AEB1F8049C7FC017E5C5B48B7FC485D5A5A5A5A5AB7FC5EA4293C7BBB34>I<9038 -01FFE0010F13FE013F6D7E90B612E04801817F3A03FC007FF8D807F06D7E82D80FFC131F -6D80121F7FA56C5A5E6C48133FD801F05CC8FC4B5A5E4B5A4A5B020F5B902607FFFEC7FC -15F815FEEDFFC0D9000113F06E6C7E6F7E6F7E6F7E1780A26F13C0A217E0EA0FC0487E48 -7E487E487EA317C0A25D491580127F49491300D83FC0495A6C6C495A3A0FFE01FFF86CB6 -5A6C5DC61580013F49C7FC010313E02B3D7CBB34>II<00071538D80FE0EB01F801FE133F90B6FC5E5E5E5E93C7FC -5D15F85D15C04AC8FC0180C9FCA9ECFFC0018713FC019F13FF90B67E020113E09039F800 -7FF0496D7E01C06D7E5B6CC77FC8120F82A31780A21207EA1FC0487E487E12FF7FA21700 -A25B4B5A6C5A01805C6CC7123F6D495AD81FE0495A260FFC075B6CB65A6C92C7FCC614FC -013F13F0010790C8FC293D7BBB34>II<121F7F13F890B712F0A45A17E017C0178017005E5E5A007EC7EA01F84B5A007C -4A5A4B5A4B5A93C7FC485C157E5DC7485A4A5AA24A5A140F5D141F143F5D147FA214FF92 -C8FC5BA25BA3495AA3130FA5131FAA6D5A6D5A6D5A2C3F7ABD34>II<903801FFE0010F13FC013F13FF90B612C04801E07F489038003FF048486D7E00 -0F6E7E485A6F7E123F48488081178012FFA217C0A517E0A4007F5CA4003F5C6C7E5D6C7E -00075C3903FF80FB6C13FF6C6C13F36D13C3010F018313C090380008031400A24B1380EA -03F0487E486C1500487E4B5AA25E151F4B5A495C6C48EBFFE049485B2607FC0F5B6CB6C7 -FC6C14FC6C14F06D13C0D90FFEC8FC2B3D7CBB34>II<16FCA24B7EA24B7EA34B7FA24B7FA34B7FA24B7F -A34B7F157C03FC7FEDF87FA2020180EDF03F0203804B7E02078115C082020F814B7E021F -811500824A81023E7F027E81027C7FA202FC814A147F49B77EA34982A2D907E0C7001F7F -4A80010F835C83011F8391C87E4983133E83017E83017C81B500FC91B612FCA5463F7CBE -4F>65 D -I<922607FFC0130E92B500FC131E020702FF133E023FEDC07E91B7EAE1FE01039138803F -FB499039F80003FF4901C01300013F90C8127F4948151FD9FFF8150F48491507485B4A15 -03481701485B18004890CAFC197E5A5B193E127FA349170012FFAC127F7F193EA2123FA2 -7F6C187E197C6C7F19FC6C6D16F86C6D150119F06C6D15036C6DED07E0D97FFEED0FC06D -6CED3F80010F01C0ECFF006D01F8EB03FE6D9039FF801FFC010091B55A023F15E0020715 -80020002FCC7FC030713C03F407ABE4C>IIII<9226 -07FFC0130E92B500FC131E020702FF133E023FEDC07E91B7EAE1FE01039138803FFB4990 -39F80003FF4901C01300013F90C8127F4948151FD9FFF8150F48491507485B4A15034817 -01485B18004890CAFC197E5A5B193E127FA34994C7FC12FFAB0407B612FC127F7FA3003F -92C7383FFE00A27F7EA26C7FA26C7F6C7FA26C7F6C7FD97FFE157F6D6C7E010F01E014FF -6D01F813036D9038FF801F010091B512F3023F15C00207ED803E02009138FE000E030701 -E090C7FC46407ABE52>III76 -DIIIIII<903A03FFC001C0011FEBF803 -017FEBFE0748B6128F4815DF48010013FFD80FF8130F48481303497F4848EB007F127F49 -143F161F12FF160FA27F1607A27F7F01FC91C7FCEBFF806C13F8ECFFC06C14FCEDFF806C -15E016F86C816C816C816C16806C6C15C07F010715E0EB007F020714F0EC003F15030300 -13F8167F163F127800F8151FA2160FA27EA217F07E161F6C16E06D143F01E015C001F8EC -7F8001FEEB01FF9026FFE00713004890B55A486C14F8D8F81F5CD8F00314C027E0003FFE -C7FC2D407ABE3A>I<003FB912FCA5903BFE003FFE003FD87FF0EE0FFE01C01603491601 -90C71500197E127EA2007C183EA400FC183F48181FA5C81600B3AF010FB712F8A5403D7C -BC49>IIII<903807FFC0013F13F848B6FC48812607FE037F260FF8007F6DEB3FF048 -6C806F7EA36F7EA26C5A6C5AEA01E0C8FC153F91B5FC130F137F3901FFFE0F4813E0000F -1380381FFE00485A5B485A12FF5BA4151F7F007F143F6D90387BFF806C6C01FB13FE391F -FF07F36CEBFFE100031480C6EC003FD91FF890C7FC2F2B7DA933>97 -D<13FFB5FCA512077EAFEDFFE0020713FC021FEBFF80027F80DAFF8113F09139FC003FF8 -02F06D7E4A6D7E4A13074A80701380A218C082A318E0AA18C0A25E1880A218005E6E5C6E -495A6E495A02FCEB7FF0903AFCFF01FFE0496CB55AD9F01F91C7FCD9E00713FCC7000113 -C033407DBE3A>IIIII<903A03FF8007F0 -013F9038F83FF8499038FCFFFC48B712FE48018313F93A07FC007FC34848EB3FE1001FED -F1FC4990381FF0F81700003F81A7001F5DA26D133F000F5D6C6C495A3A03FF83FF8091B5 -C7FC4814FC01BF5BD80F03138090CAFCA2487EA27F13F06CB6FC16F016FC6C15FF17806C -16C06C16E01207001F16F0393FE000034848EB003F49EC1FF800FF150F90C81207A56C6C -EC0FF06D141F003F16E001F0147FD81FFC903801FFC02707FF800F13006C90B55AC615F8 -013F14E0010101FCC7FC2F3D7DA834>I<13FFB5FCA512077EAFED1FF8EDFFFE02036D7E -4A80DA0FE07F91381F007F023C805C4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A5333F7C -BE3A>III<13FFB5FCA512077EB092380FFFFEA5DB01FEC7FC4B5AED07F0ED1FE04B5A4B5A4B -C8FCEC03FC4A5A4A5A141F4A7EECFFFCA2818102E77F02C37F148102007F826F7E6F7E15 -1F6F7E826F7F6F7F816F7FB5D8FC07EBFFC0A5323F7DBE37>I<13FFB5FCA512077EB3B3 -AFB512FCA5163F7CBE1D>I<01FFD91FF8ECFFC0B590B5010713F80203DAC01F13FE4A6E -487FDA0FE09026F07F077F91261F003FEBF8010007013EDAF9F0806C0178ECFBC04A6DB4 -486C7FA24A92C7FC4A5CA34A5CB3A4B5D8FE07B5D8F03FEBFF80A551297CA858>I<01FF -EB1FF8B5EBFFFE02036D7E4A80DA0FE07F91381F007F0007013C806C5B4A6D7E5CA25CA3 -5CB3A4B5D8FE0FB512E0A533297CA83A>II<01FFEBFFE0B5000713FC021FEBFF80027F80DAFF8113F09139FC007FF8000701 -F06D7E6C496D7E4A130F4A6D7E1880A27013C0A38218E0AA4C13C0A318805E18005E6E5C -6E495A6E495A02FCEBFFF0DAFF035B92B55A029F91C7FC028713FC028113C00280C9FCAC -B512FEA5333B7DA83A>II<3901FE01 -FE00FF903807FF804A13E04A13F0EC3F1F91387C3FF8000713F8000313F0EBFFE0A29138 -C01FF0ED0FE091388007C092C7FCA391C8FCB3A2B6FCA525297DA82B>I<90383FFC1E48 -B512BE000714FE5A381FF00F383F800148C7FC007E147EA200FE143EA27E7F6D90C7FC13 -F8EBFFE06C13FF15C06C14F06C806C806C806C80C61580131F1300020713C01400007814 -7F00F8143F151F7EA27E16806C143F6D140001E013FF9038F803FE90B55A15F0D8F87F13 -C026E00FFEC7FC222B7DA929>IIII< -B53CFC3FFFFC03FFFEA50003D980009039C0000F806E161F6C037F15006E496C5B6C183E -836E48157E017F177C6E486D13FC013F02EF5C83DAFC071401011F02C75CDAFE0FEBFE03 -010F02835C17FFDAFF1F14076D02015C03BF148F6DD9BE005C18CF03FE14DF6D49017F90 -C7FC18FF6D496D5AA36E486D5AA26E486D5AA36E486D5AA26E486D5A47287EA74C>III E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmbx12 14.4 45 -/Fj 45 122 df12 D47 D<913803FFC0023F13FC91B6FC010315C001 -0F018113F0903A1FFC003FF849486D7E49486D7E49486D7E48496D138048496D13C0A248 -17E04890C813F0A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A5007F17FEA600 -3F17FCA26D15FFA26C17F8A36C17F0A26C6D4913E0A26C6D4913C06C17806E5B6C6D4913 -006D6C495AD91FFCEB3FF8903A0FFF81FFF06D90B55A01011580D9003F01FCC7FC020313 -C0384F7BCD43>I<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF800 -C7FCB3B3B3A6007FB712FEA52F4E76CD43>II<9138 -0FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED803 -F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC16 -80C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80DA -000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218FE -A2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001F0 -4A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F15800103 -02FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F167F -A216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC01580EC -1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A1207485A -485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>III<121F7F7FEBFF8091B81280A45A1900606060A260606048 -5F0180C86CC7FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A4C5A94C8FC16FEC812 -014B5A5E4B5A150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D1407A2140FA25D141FA2 -143FA4147F5DA314FFA55BAC6D5BA2EC3FC06E5A395279D043>I<913807FFC0027F13FC -0103B67E010F15E090261FFC0113F8903A3FE0003FFCD97F80EB0FFE49C76C7E48488048 -486E1380000717C04980120F18E0177FA2121F7FA27F7F6E14FF02E015C014F802FE4913 -806C7FDBC00313009238F007FE6C02F85B9238FE1FF86C9138FFBFF06CEDFFE017806C4B -C7FC6D806D81010F15E06D81010115FC010781011F81491680EBFFE748018115C048D900 -7F14E04848011F14F048487F48481303030014F8484880161F4848020713FC1601824848 -157F173FA2171FA2170FA218F8A27F007F17F06D151FA26C6CED3FE0001F17C06D157F6C -6CEDFF806C6C6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612F06D5D010F15800101 -02FCC7FCD9000F13C0364F7ACD43>I<91380FFF8091B512F8010314FE010F6E7E490103 -7F90267FF8007F4948EB3FF048496D7E484980486F7E484980824817805A91C714C05A70 -13E0A218F0B5FCA318F8A618FCA46C5DA37EA25E6C7F6C5DA26C5D6C7F6C6D137B6C6D13 -F390387FF803011FB512E36D14C30103028313F89039007FFE03EC00401500A218F05EA3 -D801F816E0487E486C16C0487E486D491380A218005E5F4C5A91C7FC6C484A5A494A5A49 -495B6C48495BD803FC010F5B9027FF807FFEC7FC6C90B55A6C6C14F06D14C0010F49C8FC -010013F0364F7ACD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7FA3 -4C8083047F80167E8304FE804C7E03018116F8830303814C7E03078116E083030F814C7E -031F81168083033F8293C77E4B82157E8403FE824B800201835D840203834B800207835D -844AB87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A24A82010385 -4A82010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547BD366>65 -D<932601FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F92B8EA803F0203 -DAE003EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901 -F8824949824949824949824949824990CA7E494883A2484983485B1B7F485B481A3FA248 -49181FA3485B1B0FA25AA298C7FC5CA2B5FCAE7EA280A2F307C07EA36C7FA21B0F6C6D19 -80A26C1A1F6C7F1C006C6D606C6D187EA26D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A -6D01FC4C5A6D6DEE7F806D6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1FF80203903AFFE0 -01FFF0020091B612C0033F93C8FC030715FCDB007F14E0040101FCC9FC525479D261>67 -DII73 D<93380FFFC00303B6FC031F15E092B712FC0203 -D9FC0013FF020F01C0010F13C0023F90C7000313F0DA7FFC02007F494848ED7FFE4901E0 -ED1FFF49496F7F49496F7F4990C96C7F49854948707F4948707FA24849717E48864A8348 -1B804A83481BC0A2481BE04A83A2481BF0A348497113F8A5B51AFCAF6C1BF86E5FA46C1B -F0A26E5F6C1BE0A36C6D4D13C0A26C6D4D1380A26C1B006C6D4D5A6E5E6C626D6C4C5B6D -6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B90C7FC6D6D4B5A6D01FF02035B023F01E001 -1F13F0020F01FC90B512C0020390B7C8FC020016FC031F15E0030392C9FCDB001F13E056 -5479D265>79 DI82 -D<91260FFF80130791B500F85B010702FF5B011FEDC03F49EDF07F9026FFFC006D5A4801 -E0EB0FFD4801800101B5FC4848C87E48488149150F001F824981123F4981007F82A28412 -FF84A27FA26D82A27F7F6D93C7FC14C06C13F014FF15F86CECFF8016FC6CEDFFC017F06C -16FC6C16FF6C17C06C836C836D826D82010F821303010082021F16801400030F15C0ED00 -7F040714E01600173F050F13F08383A200788200F882A3187FA27EA219E07EA26CEFFFC0 -A27F6D4B13806D17006D5D01FC4B5A01FF4B5A02C04A5A02F8EC7FF0903B1FFFC003FFE0 -486C90B65AD8FC0393C7FC48C66C14FC48010F14F048D9007F90C8FC3C5479D24B>I<00 -3FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001E08449197F49193F90 -C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A55351 -7BD05E>I87 -D97 -DI<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE0001 -FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A48 -92C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC -3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7FC -020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC91 -B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F484980 -485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C6C -6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0FD9 -003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C04901 -817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C0488191 -C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE01 -F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE -903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>IIII<137F497E -000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3 -A6B612E0A51B547BD325>I<157FEDFF80020313E04A13F0A24A13F8A76E13F0A26E13E0 -02001380ED7F0092C7FCADED1FF891B5FCA51401EC007FB3B3B1EA0780EA1FE0487E487E -486C13FF16F0A216E05C16C04A13806C4848130049485A003F495A000FB512F06C5C0001 -148026001FFCC7FC256C87D329>IIIII<913801FFE0021F13FE91B612C0010315F0010F9038 -807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890C8 -6C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5FA2 -6C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF80 -7FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5010F -13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F -92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F61 -6E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F14 -80031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<90397FE003FEB590380F -FF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013FEC6ECC07FECE78014EF -150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612FCA52F367CB537>114 -D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307D81FE0130148487F4980 -127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C -816C816C81C681013F1580010F15C01300020714E0EC003F030713F015010078EC007F00 -F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FF -C00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB635>I<143EA6147EA414 -FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3A9EE -07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B0203 -13802A4D7ECB34>III121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmr12 14.4 32 -/Fk 32 121 df<000F141ED83FC0EB7F80486CEBFFC0486C4813E001F814F0A301FC14F8 -A2007F7FD83FDCEB7FB8D80F1CEB1E3800001400A5013C147801381470A3017814F00170 -14E001F013014914C000011403A24848EB07804848EB0F00A248C7121E001E5C485C485C -0030146025237CD23B>34 D<15E01401EC03C0EC0780EC0F00141E5C147C5C495A13035C -495A130F5C131F91C7FC133E137EA25BA2485AA25B1203A2485AA3120F5BA2121FA25BA2 -123FA290C8FCA35AA5127EA312FEB3A3127EA3127FA57EA37FA2121FA27FA2120FA27F12 -07A36C7EA212017FA26C7EA2137EA2133E7F80130F8013076D7E8013016D7E147C143C80 -80EC0780EC03C0EC01E014001B7974D92E>40 D<12E07E12787E7E7E6C7E7F6C7E6C7E7F -1200137C137E133E133F7F6D7E80A26D7EA26D7EA2130180A26D7EA380147EA2147FA280 -A21580A2141FA315C0A5140FA315E0B3A315C0A3141FA51580A3143FA21500A25CA2147E -A214FE5CA3495AA25C1303A2495AA2495AA25C49C7FC5B133E137E137C5B12015B485A48 -5A5B48C8FC121E5A5A5A5A1B797AD92E>I45 -D<14075C5C147F5C1307133F000FB5FCB6FC13F913C1EAF0011200B3B3B3A7497F010F13 -E0B712FEA4274F75CE3B>49 D65 D68 DII80 D82 DI<003FBB12C0A449 -C79038F0000701F06E48130001C0183F48C8EE0FE0007E1907007C1903A200781901A400 -701900A500F01AF0481A70A6C91700B3B3AC4C7E030313FC027FB712E0A44C517CD055> -I87 -D<01301460017814F049EB01E04848EB03C04848EB07804848EB0F00A248C7121E001E5C -A2001C1438003C147800381470007814F000705CA300F01301485CA5D8E3C0EBC780D8EF -F0EBDFE0D8FFF8EBFFF001FC14F8A2007F7FA3003F147F6C48EB3FF06C48EB1FE0D803C0 -EB078025236FD23B>92 D97 D99 D<17FF4BB5FCA4ED0007160182B3A6EC0FF8EC7FFF49B512E0 -903907FC03F090391FE0007C49487F49C7120F01FE80484880485A000781484880A2485A -A2485AA2127FA35B12FFAB127FA27FA2123FA27F121FA26C6C5C00075D7F6C6C5C6C6C5C -6C6C021E7F6D6C017C13E0D91FC049EBFF8090390FF807E00103B512800100495ADA1FF0 -91C7FC39547CD241>II<157F913803FFE0020F13F0 -91383FC0F891387F01FC903901FE03FE903803FC0714F81307EB0FF0A290391FE003FCED -01F892C7FC495AB3B612FEA426003FC0C7FCB3B3A580EBFFF0007FEBFFF8A427547DD324 ->III<1378EA01FE -487E487FA66C90C7FC6C5AEA007890C8FCB0EB7F80B5FCA41203C6FC137FB3B3A43801FF -E0B61280A419507CCF21>I107 D<01FFD907FEEC03FFB590261FFFC0010F13E0037F01F0013F13F8912701F8 -0FFC9038FC07FE913D03C003FE01E001FF000390260700019038038000C6010E6D6C48C7 -6C7E6D48DA7F8E6E7E4A159CA24ADA3FF86E7E02605D14E04A5DA34A5DB3AD2601FFE0DA -FFF0EC7FF8B6D8C07F9026FFE03FB512F0A45C347CB363>109 D<01FFEB07FCB590383F -FF8092B512E0913901F00FF8913903C007FC000349C66C7EC6010E13016D486D7E5C1430 -02706E7E146014E05CA35CB3AD2601FFE0903801FFE0B600C0B612C0A43A347CB341>I< -EC0FFC91387FFF8049B512E0903907F807F890391FE001FE90393F80007F017EC7EA1F80 -496E7E48486E7E00038248486E7EA248486E7EA248486E7EA2003F82A24848ED7F80A400 -FF17C0AB007F1780A26D15FFA2003F1700A2001F5E6D1401000F5E6D140300075E6C6C4A -5A6C6C4A5AA2D8007FEC3F806D6C49C7FC90391FE001FE903907F807F86DB55AD9007F13 -80DA0FFCC8FC32367CB43B>I<90397F8007FCB590387FFF800281B512E0913987F00FF8 -91398F8003FC000390399E0001FFC601BC6D7FD97FF86E7E4A6E7E4A6E7E4A140F844A6E -7EA2717EA3717EA4711380AB4D1300A44D5AA24D5AA2606E140F4D5A6E5D6E4A5A6E4A5A -02BC4AC7FC029E495A028FEB07FC913987E01FF00281B512C0DA807F90C8FCED0FF892CA -FCB13801FFE0B612C0A4394B7DB341>I<01FFEB1F80B5EB7FF0913801FFF8913803E1FC -91380783FE0003EB0F07C6131EEB7F1C1438143091387003FC91386000F0160014E05CA4 -5CB3AA8048487EB612F0A427347DB32E>114 DII<007FB5D8 -800FB51280A4C69026FC0003EBF000D93FF86D1380011F4BC7FC010F15F801075D6D6C5C -6E495A6D6C5C6D14076E6C48C8FCEDC01E6E6C5A021F133891380FF0786F5A913807FDE0 -02035BEC01FF5E80157F6F7E824B7E15FFEDE7F802017F913803C3FEEC07814AC67E020E -80021E6D7E4A133F4A6D7E4A80707E4948130749486D7E010781010F6E7E013F8201FF82 -00076D010713F0B500F8011FEBFFE0A43B337FB23E>120 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmr10 10.95 91 -/Fl 91 128 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907 -F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7 -FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11 -DIIIII<127C12FC7E7EA2EA7F80EA3FC0EA1FE0120FEA07F0EA03F81201EA007C133E -131F130E1304101176BE2D>18 D<133E133F137F13FFA2EA01FEEA03FCEA07F813F0EA0F -E0EA1FC01380EA3E005A5A1270122010116EBE2D>I<001E130F397F803FC000FF137F01 -C013E0A201E013F0A3007F133F391E600F3000001300A401E01370491360A3000114E049 -13C00003130101001380481303000EEB070048130E0018130C0038131C003013181C1C7D -BE2D>34 D<013F1603D9FFC04B7E2601E0E0150F2607C070151F48486C4BC7FC023E157E -48486C15FE48D90FC0EB03FC003ED90EF0EB0FF8DA0F3F13FD007E903A070FFFF1F0007C -0200EB03E0160000FC6D6C495A170F604DC8FC5F173E5F17FC5F4C5A1603007CD907005B -4C5A007E150F003E495C020E49C9FC003F5D6C49133E260F803C5B023813FC6C6C485B3A -01E0E001F03800FFC090273F0003E0133F90C70007ECFFC09339C001E0E0923A0F8007C0 -70031F49487E0400143C033E90381F001C037E497F037C133E4B150F0201027E7F4B137C -4A5A020702FCEB03805D4A5A141F92C7FC143E147E147C5CA2495A0103037CEB07005C49 -48147E010F033E5B4A160E49C8123F496F5B013E92380F803C49173801FC6F6C5A499238 -01E0E0496FB45A0160043FC7FC41497BC34C>37 DI<121EEA7F -8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A120E5A1218 -123812300B1C79BE19>I<1430147014E0EB01C0EB03801307EB0F00131E133E133C5B13 -F85B12015B1203A2485AA2120F5BA2121F90C7FCA25AA3123E127EA6127C12FCB2127C12 -7EA6123E123FA37EA27F120FA27F1207A26C7EA212017F12007F13787F133E131E7FEB07 -801303EB01C0EB00E014701430145A77C323>I<12C07E12707E7E121E7E6C7E7F12036C -7E7F12007F1378137CA27FA2133F7FA21480130FA214C0A3130714E0A6130314F0B214E0 -1307A614C0130FA31480A2131F1400A25B133EA25BA2137813F85B12015B485A12075B48 -C7FC121E121C5A5A5A5A145A7BC323>I<1506150FB3A9007FB912E0BA12F0A26C18E0C8 -000FC9FCB3A915063C3C7BB447>43 D<121EEA7F8012FF13C0A213E0A3127FEA1E601200 -A413E013C0A312011380120313005A120E5A1218123812300B1C798919>II<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>IIIIII<150E151E153EA2157EA215FE1401A21403EC077E1406140E141CA21438 -1470A214E0EB01C0A2EB0380EB0700A2130E5BA25B5BA25B5B1201485A90C7FC5A120E12 -0C121C5AA25A5AB8FCA3C8EAFE00AC4A7E49B6FCA3283E7EBD2D>I<00061403D8078013 -1F01F813FE90B5FC5D5D5D15C092C7FC14FCEB3FE090C9FCACEB01FE90380FFF8090383E -03E090387001F8496C7E49137E497F90C713800006141FC813C0A216E0150FA316F0A312 -0C127F7F12FFA416E090C7121F12FC007015C012780038EC3F80123C6CEC7F00001F14FE -6C6C485A6C6C485A3903F80FE0C6B55A013F90C7FCEB07F8243F7CBC2D>II<1238123C123F90B612FCA316F85A16F016E000 -78C712010070EC03C0ED078016005D48141E151C153C5DC8127015F04A5A5D14034A5A92 -C7FC5C141EA25CA2147C147814F8A213015C1303A31307A3130F5CA2131FA6133FAA6D5A -0107C8FC26407BBD2D>III<121EEA7F80A2EAFFC0A4EA7F -80A2EA1E00C7FCB3121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619>I<121EEA7F -80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121E127FEAFF80A213C0A4127F121E1200A41201 -1380A3120313005A1206120E120C121C5A1230A20A3979A619>I<007FB912E0BA12F0A2 -6C18E0CDFCAE007FB912E0BA12F0A26C18E03C167BA147>61 D63 -D<15074B7EA34B7EA34B7EA34B7EA34B7E15E7A2913801C7FC15C3A291380381FEA34AC6 -7EA3020E6D7EA34A6D7EA34A6D7EA34A6D7EA34A6D7EA349486D7E91B6FCA24981913880 -0001A249C87EA24982010E157FA2011E82011C153FA2013C820138151FA2017882170F13 -FC00034C7ED80FFF4B7EB500F0010FB512F8A33D417DC044>65 DIIIIIIII<011FB512FCA3D9000713006E5A1401B3B3A6123FEA7F80EAFFC0A44A5A1380D8 -7F005B007C130700385C003C495A6C495A6C495A2603E07EC7FC3800FFF8EB3FC026407C -BD2F>II -IIIIIIII<003FB91280A3903AF0007FE001018090393FC0003F48C7ED1FC0007E1707127C -00781703A300701701A548EF00E0A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42> -IIII<007FB5D8C003B512E0A3C649C7EBFC00D93FF8EC3FE06D48EC -1F806D6C92C7FC171E6D6C141C6D6C143C5F6D6C14706D6D13F04C5ADA7FC05B023F1303 -6F485ADA1FF090C8FC020F5BEDF81E913807FC1C163C6E6C5A913801FF7016F06E5B6F5A -A26F7E6F7EA28282153FED3BFEED71FF15F103E07F913801C07F0203804B6C7EEC07004A -6D7E020E6D7E5C023C6D7E02386D7E14784A6D7E4A6D7F130149486E7E4A6E7E130749C8 -6C7E496F7E497ED9FFC04A7E00076DEC7FFFB500FC0103B512FEA33F3E7EBD44>II<003FB712F8A391C7EA1FF013F801E0EC -3FE00180EC7FC090C8FC003EEDFF80A2003C4A1300007C4A5A12784B5A4B5AA200704A5A -A24B5A4B5AA2C8485A4A90C7FCA24A5A4A5AA24A5AA24A5A4A5AA24A5A4A5AA24990C8FC -A2495A4948141CA2495A495AA2495A495A173C495AA24890C8FC485A1778485A484815F8 -A24848140116034848140F4848143FED01FFB8FCA32E3E7BBD38>II<486C13C00003130101001380481303000EEB070048 -130E0018130C0038131C003013180070133800601330A300E01370481360A400CFEB6780 -39FFC07FE001E013F0A3007F133FA2003F131F01C013E0390F0007801C1C73BE2D>II -96 DII<49B4FC010F13E090383F00F8017C131E4848131F4848137F0007ECFF80485A5B121F -A24848EB7F00151C007F91C7FCA290C9FC5AAB6C7EA3003FEC01C07F001F140316806C6C -13076C6C14000003140E6C6C131E6C6C137890383F01F090380FFFC0D901FEC7FC222A7D -A828>IIII<167C903903F801FF903A1FFF078F8090397E0FDE1F -9038F803F83803F001A23B07E000FC0600000F6EC7FC49137E001F147FA8000F147E6D13 -FE00075C6C6C485AA23901F803E03903FE0FC026071FFFC8FCEB03F80006CAFC120EA312 -0FA27F7F6CB512E015FE6C6E7E6C15E06C810003813A0FC0001FFC48C7EA01FE003E1400 -48157E825A82A46C5D007C153E007E157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE -017FC7FC90383FFFFC010313C0293D7EA82D>III<1478EB01FE -A2EB03FFA4EB01FEA2EB00781400AC147FEB7FFFA313017F147FB3B3A5123E127F38FF80 -7E14FEA214FCEB81F8EA7F01387C03F0381E07C0380FFF803801FC00185185BD1C>III<2701F801FE14FF00FF902707 -FFC00313E0913B1E07E00F03F0913B7803F03C01F80007903BE001F87000FC2603F9C06D -487F000101805C01FBD900FF147F91C75B13FF4992C7FCA2495CB3A6486C496CECFF80B5 -D8F87FD9FC3F13FEA347287DA74C>I<3901F801FE00FF903807FFC091381E07E0913878 -03F000079038E001F82603F9C07F0001138001FB6D7E91C7FC13FF5BA25BB3A6486C497E -B5D8F87F13FCA32E287DA733>I<14FF010713E090381F81F890387E007E01F8131F4848 -EB0F804848EB07C04848EB03E0000F15F04848EB01F8A2003F15FCA248C812FEA44815FF -A96C15FEA36C6CEB01FCA3001F15F86C6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80 -D8007EEB7E0090383F81FC90380FFFF0010090C7FC282A7EA82D>I<3901FC03FC00FF90 -381FFF8091387C0FE09039FDE003F03A07FFC001FC6C496C7E6C90C7127F49EC3F805BEE -1FC017E0A2EE0FF0A3EE07F8AAEE0FF0A4EE1FE0A2EE3FC06D1580EE7F007F6E13FE9138 -C001F89039FDE007F09039FC780FC0DA3FFFC7FCEC07F891C9FCAD487EB512F8A32D3A7E -A733>I<02FF131C0107EBC03C90381F80F090397F00387C01FC131CD803F8130E4848EB -0FFC150748481303121F485A1501485AA448C7FCAA6C7EA36C7EA2001F14036C7E15076C -6C130F6C7E6C6C133DD8007E137990383F81F190380FFFC1903801FE0190C7FCAD4B7E92 -B512F8A32D3A7DA730>I<3901F807E000FFEB1FF8EC787CECE1FE3807F9C100031381EA -01FB1401EC00FC01FF1330491300A35BB3A5487EB512FEA31F287EA724>I<90383FC060 -3901FFF8E03807C03F381F000F003E1307003C1303127C0078130112F81400A27E7E7E6D -1300EA7FF8EBFFC06C13F86C13FE6C7F6C1480000114C0D8003F13E0010313F0EB001FEC -0FF800E01303A214017E1400A27E15F07E14016C14E06CEB03C0903880078039F3E01F00 -38E0FFFC38C01FE01D2A7DA824>I<131CA6133CA4137CA213FCA2120112031207001FB5 -12C0B6FCA2D801FCC7FCB3A215E0A912009038FE01C0A2EB7F03013F138090381F8700EB -07FEEB01F81B397EB723>IIIII< -B539E00FFFE0A32707FE000313006C48EB01FC6F5A00015D7F00005DA2017F495AA2EC80 -03013F5CA26D6C48C7FCA26E5A010F130EA26D6C5AA2ECF83C01031338A26D6C5AA2ECFE -F001005BA2EC7FC0A36E5AA36EC8FCA2140EA2141E141C143C1438A2147800181370127E -B45BA2495AA248485AD87E07C9FCEA780EEA3C3CEA1FF8EA07E02B3A7EA630>I<001FB6 -1280A2EBE0000180140049485A001E495A121C4A5A003C495A141F00385C4A5A147F5D4A -C7FCC6485AA2495A495A130F5C495A90393FC00380A2EB7F80EBFF005A5B484813071207 -491400485A48485BA248485B4848137F00FF495A90B6FCA221277EA628>II<001C130E007FEB3F8039FF807FC0A5397F003F80001CEB0E001A0977BD2D> -127 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmr17 17.28 18 -/Fm 18 90 df<150E151E153C157815F0EC01E0EC03C01407EC0F80EC1F00143EA25C5C -13015C495A13075C130F5C131F91C7FC5B133E137E137C13FCA2485AA3485AA3485AA312 -0F5BA3121F5BA3123FA390C8FCA25AA5127EA312FEB3A7127EA3127FA57EA27FA3121FA3 -7F120FA37F1207A36C7EA36C7EA36C7EA2137C137E133E133F7F80130F8013078013036D -7E801300147C80A280EC0F80EC07C01403EC01E0EC00F01578153C151E150E1F8F73EA33 ->40 D<12E07E12787E7E7E6C7E7F6C7E6C7E6C7EA2137C7F133F7F6D7E80130780130380 -130180130080147C147EA280A3EC1F80A3EC0FC0A315E01407A315F01403A315F8A31401 -A215FCA51400A315FEB3A715FCA31401A515F8A21403A315F0A3140715E0A3140F15C0A3 -EC1F80A3EC3F00A3147EA2147C14FC5C13015C13035C13075C130F5C49C7FC5B133E5B5B -A2485A485A485A5B48C8FC121E5A5A5A5A1F8F7AEA33>I<170FA34D7EA24D7EA34D7EA3 -4D7EA34C7F17DFA29338039FFC178FA29338070FFE1707040F7FEE0E03A2041E80EE1C01 -A2043C80EE3800A24C80187FA24C80183FA24B4880181F0303814C130FA203078193C712 -07A24B81030E80A24B8284A24B8284A24B82197F03F0824B153FA20201834B151FA20203 -8392B8FCA24A83A292C91207020E8385A24A8485023C84023882A20278840270177FA202 -F0844A173FA24948841A1FA24948841A0FA249CB7F1A074985865B496C85497E48486C4D -7F000F01F8051F13F0B60407B612F0A45C657DE463>65 D67 D69 -DIIII76 DII<933801FFE0043F13FF4BB612E003079038003FF8DB1FF0EB03FEDB7FC0903800FF -804A48C8EA3FE0DA03FCED0FF0DA0FF0ED03FC4A486F7E4A486F7E4A48707E4ACA6C7E49 -48717E4948717E4948717E4948717E4948717E013F854A83017F864948727EA24890CC6C -7EA24848737EA24848737EA2000F87491907001F87A34848737EA4007F1C80A24985A400 -FF1CC0AF6C6C4F1380A5003F1C006D61A3001F63A26D190F000F63A26C6C4F5AA36C6C4F -5AA26C6D4E5A6C636E18FF017F626D6C4D90C7FC6E5F011F616D6C4D5A6D6C4D5A010361 -6E171F6D6C4D5A6D6D4C5ADA3FC04CC8FCDA1FF0ED03FE6E6C4B5A6E6C4B5ADA01FFED3F -E09126007FC0ECFF80DB1FF0D903FEC9FCDB07FFEB3FF8030190B512E0DB003F91CAFC04 -0113E05A667AE367>II82 DI<003FBC12F8A49126C000039038 -C0000301FCC76C49EB007F01F0190F01C019074848F103FC90C81701007E1A00007C1B7C -A300781B3CA400701B1CA600F01B1E481B0EA7C91800B3B3B3A54C7FA2041F13F84AB87E -A457627CE160>I -89 D E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 600dpi -TeXDict begin -%%PaperSize: A4 - -%%EndSetup -%%Page: 1 1 -1 0 bop 562 536 a Fm(INF)l(ORMA)-11 b(TION)45 b(SOCIETY)f(TECHNOLOGIES) -1784 718 y(\(IST\))1481 901 y(PR)l(OGRAMME)833 2896 y -@beginspecial 0 @llx 0 @lly 1623 @urx 1196 @ury 2662 -@rwi @setspecial -%%BeginDocument: istlogo.eps -%!PS-Adobe-1.0 EPSF-1.2 -%%BoundingBox: 0 0 1623 1196 -%%Creator: Jasc Software, Inc. -%%Title: C:\temp\Logocmyk.eps -%%CreationDate: 0 -%%EndComments -/width 1623 def -/height 1196 def -/pixwidth 1623 def -/pixheight 1196 def -/picstr width string def -/psppic { -gsave width height 8 -[width 0 0 height 0 height neg] -{currentfile picstr readhexstring pop} -image grestore } def -0 height neg translate pixwidth pixheight scale -psppic -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9A09A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A99999999999A9A9A999A9A9A9A9A9A9A9A9A9A999999999999999999999999999999999999999999999999999999999999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9999999A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999A9A9A9A9A9A9A9A99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD654100202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201010101020101010202020202010202020202020202020202020202020202020202020202020202020202020202020101020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201010101010101020202020201010101010102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010202020201020201010101010101010101010101010101010101010101010101020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5BB581102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201020202020202020201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101020201020102010101010101010101010101010101010101010101010101010201020201010101010101010101010202020202020202010101010202020202020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101020202010202020202020202020202020202020202020202020202020202020202010101010101010101010101010101010101010101010101010101010101010101020202020202020202020202020202020202020202020202020202020202020202020101010101010102010101010101020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201010101010202020202020202020202020202020101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C39B490D01010101010101010101010101010101010101010101010101020202020202020202020202020202020202020202020202020202020202020202020101010101010102010101010101020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201010101010202020202020202020202020202020101010101010101010101010101010101010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102020202020202020202020101010102020101010101010202020202020202020202020202010202020202010202020202020202020202020202020202020202020202020202010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102010101010101010101010101010101010101010101010101010201020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010101010201010102020202020102020202020202020202020202020202020202020202020202020202020202020201010202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1CEA44C0F020202020201020202020201020202010202020201020202020202020202020202020202020202020202020201010101020101010101010101010101010202010101010101010102020202010102020202010101020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102020202020202020201010102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCB6B8B390450D01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010202010201020101010101010101010101010101010101010101010101010102010202010101010101010101010102020202020202020101010102020202020202020201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010202020102020202020202020202020202020202020202020202020202020202020101010101010101010101010101010101010101010101010101010101010101010202020202020202020202020202020202020202020202020202020202020202020201010101010101020101010101010202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010101010102020202020202020202020202020201010101010101010101010101010101010101010101010102010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101020202020202020202020201010101020201010101010102020202020202020202020202020102020202020102020202020202020202020202020202020202020202020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C6C6C5BF97460D010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101020101010101010101010101020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020102010101010202010101010101010102020202020101010101010101010101010101020202020101010101010101010101010101010101010101010101010101010202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201010102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201010101010101010101010101010101010201010101010101010101010101010101010101010101010101010101010101020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED6D7D7D5CBA44C0E010101010101010101010101010101010102010101010101010101010101010101010101010101010101010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102010101010101010101020201010101010102020101020202020202020201020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010202020202010202020102020202010202020202020202020202020202020202020202020202010101010201010101010101010101010102020101010101010101020202020101020202020101010202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3C4C1BFBCBDB38E410C0101010101010101010101010101010101010101010101010101010101010101010102020101020201020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010101010102020201020202020202020202020101010101010101010101010101010101010101010101010101010101010102020202020202020202020202020202020202020202020202010101020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8C9C9C9CBCBCBC49C490D01010101010102010101010101010101010101010101010101010101010101010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102010101010101010101020201010101010102020101020202020202020201020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010202020202010202020102020202010202020202020202020202020202020202020202020202010101010201010101010101010101010102020101010101010101020202020101020202020101010202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB9BCB8B6B8B8B6B28E410C010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010202020201020201010101010101010101010101010101010101010101010101020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102010102020201020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010101010101010101010101020202020202020202020202020202010202020202020202020202020202020202020202020202010101020202020202020101010101010201010101020201010101010102010101010101010101010101010101010101010101010102020202020202020201020101010101020102020202020202020202020202010201010101010202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED3D4D7D7DADAD9D9D1A54F100202020201010101010101020202020201010101010102020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010202020201020201010101010101010101010101010101010101010101010101020202020101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102010102020201020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202010101010101010101010101020202020202020202020202020202010202020202020202020202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C4C1C0C4C4C3C4C1BC9C5D302424242424242424242424242424242524242525242424252626262626262626262626262625252424252524252424252525242424232323232424242424252525242425262626262628282826292929292929292929292929292A2929292929292828292929292929282626262626262626262626262626262626262626262525252525262526262626262828292929292829292929282929292A2A2B2B2B2B2A292A2929292929292928292826262626262626282626262626262828292A2A2A2A2A2A2B2C2C2C2C2C2C2C2C2C2D2E2E2E2D2C2D2C2C2C2D2C2C2C2C2C2C2C2C2C2C2C2B2C2C2C2C2C2C2C2B2A2B2A2A2B2B2B2A2A2B2B2A2B2B2B2B2B2B2B2A2A2A2A29292A2A2A2A2A2A292826262626262829292928282829292929282828282626262626262626262626262525252524242425262626262826262626262626262626262626262525252424242424252424252525252526262626262626262625252425252525262626262626262626262628292929292929282828282626262629292626262626262829292929292929292928282828262828282828262829292929292A2A29292A2A2B2C2C2B2B2B2B2A2A2A292929282626262626262626262626262626262626252525252625252525242525262626252525252525262626252626262626252626262626262625252524242424242425252524252525252424242424242424242424242424242423232324242425252626262626292626262626262626262626252526262626262626262626262629262828292829292A2A2A2A2A2A2A2B2B2B2A2A2A2B2B2A2A2A2A2A2B2B2B2B2C2C2B2B2C2C2C2C2D2E2E2D2D2D2D2D2E2E2F2F2F2E2E2E2E2E2E2E2F2E2E2E2F2E2E2D2D2D2C2C2D2D2E2D2D2E2E2F2F2F2F2F2E2F260E02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCBBBCBCBBB9B6B9B9BBB8BFBCB3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B823010102020101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8C9C9C9CACBD0CBCBCACBD3EBC6B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC1C0C0BFC1C3C5C6C9C9D1E7C3B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E43D02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3C3C5C3C0C4C1C4C5C8CAD1E6C6B1B3B3B6B6B9BCBCBDBDC0C1C0BCB9BDC0C1C3C4C8CAC8C5C1C1C4C4C4C8C8C6C9C6C4C3C3C5C4C4C4C1C1C1C1C0C0C0C0BFBFBDC0C0C0BFBCB9B9BBB8B9B9B9B9B9B9BCB9B8B8B9B9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBF3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCECACACED1CFCECED1DFF3CEBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B52D01010101010202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCB6B9BBB6BBBDBCBDBDBBC4D7B5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED3D4D4D3D4D1D0CFD1D1DBF1CBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D03502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCBCC0C3C0C1C3C0C0C1C4D0E4BFABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E63F02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E4E1E4E4E6E9E4E4E6E3ECFCDCD4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBC3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E1E1E1E1E4E6E4E3E7E9F6FFDFD3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABAB2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E1DFDCDBE1E1DFE1E3E4EFF9D7C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCB3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C6C6C5C6C6C8C9C9C6D5E6C0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB02B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9D5D5D6D4D0CBCECECBD7ECC9B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECB3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DADBD7D7D9D7D1D3D3D1DAEFCAB9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDB3A02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C6C6C6C5C6C9C8C9C6CAD0E3C0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0AC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E1DFDFDBDCD9D9DBDEDEE9F8D7C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7D4D5D5D5D9DAD9D6D6E1F6D0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8C9CECECBCBC9CACACECED6EBC6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFE1DEDADBDBDADBD9D7E1F7D0C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACAC2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CFD0D0CBCBC9CBD0D1D3DEF3CEC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D03502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E6EAEBE7E6E9E6E7E4E4EFFDDECECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BC30020202020202020202020299FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEB9BBB9B9BDBFBFC4C6C6CEDFBFB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAAC2B010101010101010201010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D7D9D6D9DCD9DADEDEE9F7D5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBF3002020202010202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CACFD1D0D4D1CFCFD1D1D7EFC9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B92F01010102020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBDEE1E3E4E2E1DFDEDEE7F8D7C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C53202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6C4C0C1C4C3C4C4C1CBE2BCACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D33702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD0D4D7D6D5D5D7D7DBDEEAF7D5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0AB2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0DBDCDEDFE3E4E1E2DFDEE7F7D7C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E4E2E2E1E1DFDEDFE2E2EBF8D7C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0CFD3CFD0D4D3D4D4D1DFF3CEBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7E6E9E6E7E3E3E3E7E9EFFCDBCBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBF30020202020202020201020199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD0D5D1D0D0D0D1D3D3D3DEF3CBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C63202020202020101020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CBC9CBCBD0D0CBC9C9C9D6ECCBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADBDCDEDFDFDBDADBD7DFF3CBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D43702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBCACAC8C9C9C8C9CECEDAF2CBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBB30010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED1D7D7D7D7DAD6D7D7D7E3F3D1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B62F01020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCED1CBD1D4D0D4D4D4DFF3CEBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E1DFDCD9D7D7D7D7D9D7E1F3D0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C8C9C6C6C6C5C0C1C4C6D0E2BBAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E43D02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D9DEE1DFE2E2E4E2E7E6F1FBDAC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D73902020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CBD1D1D0D3D5D3D4D6D4DFF3CFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7EAE9EAEAEBEAECEEEFF8FFE2D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBC3002020202010101010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0C0C4C4BFC0C1C3C6CACAD5EAC6B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC93302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEBEAECE9E9E9E7E7E6E6EFFBD7C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBB2E02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6C9C9C9CBD0D0D3D7D7DAE1F6D3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B92F010202020202010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E1E1E4E1E3E3E4E7E6E7F2FDDED3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB12B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D4D0D4D4D0D1D1D3DEF3CEB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC03002020202020202010202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9D5D3D1D3D1D0D1D6D1DCF1C9B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D3D5D5D5D4D3D4D3D3DEF4D0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C26010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C5C9C9C9C6C6C9CBCECEDCEECBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B52C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED5D5D5D5D4D4D1D5D6D6DFF2CAB9BBB8B9B9B9B9B9B9BCB9B8B8B9B9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBC3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E3E6E6E1E4E4E3E1E2E2EFF9D9CACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBC30020202020201020101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBCFCBC9C9C9CBCBCBD0CBD6EAC6B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C030020202020201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E3E3E3E3E6E6E9EAEAE7F3FCDCD1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F27010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDBDCDBDAD7D7D5D5D6D9E3F6D0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B12B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1BFC0C0BFBFC3C0C1C4C4CEE3C0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B62D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF2F3F3F4F7F6F2F3F7F7FBFFE7E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C93402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E4E4E2DEDFDCDBDCDEDFEAF9D7C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BC2F01010101020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D7D5D5D1D0D5D6D1E1F4D1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CECFCFCFCBD0D1D3D4D1DFF4D0C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DADCDCD9DCDCDADBD9D9E1F4D0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0DCDEDEDBDCDCDADBDBDEE9F7D5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB2B1B5B5B8B8B6B8BBBBC0D5B1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BB2E02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E1E2E1E3E2E1DBDCDEDBE4F7D5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CE3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8C9C6C9C6C4C3C4C4C6CBE3C0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCBCBDB9B9B6B6B6B8B9B9C0D1B19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E1E2E6E7E9E6E6E7E7E6ECF9D7C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6CACBCECECBCBD1D1DCF2CEBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A52A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBD9D9D6D4D4D0CFCECED7EAC6B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A72A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D4D1D0CED1CBCACBCBD9F2CAB9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D4D1CECFD0CBCED0D0DAEFCABCB9B8B8B9B9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CEC49B6E4A271F200400112020204C5578A8CAD1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C33302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CACECAC6CACECBCFCECED6ECC6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DED784340400000000000000000000000000000000002969B3D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDC3A02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBE1E1E1E2E2E1E2E1E4ECF9D4C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3B34C0300000000000000000000000000000000000000000000001F6BC1C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D33702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E1E3E1DCDEDEE1E1E1E1E7F8D9CAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBF6B030000000000000000000000000000000000000000000000000000000972C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECE3602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC1C5C5C6C6C6C4C6C6C8D3E6C3B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3AC3000000000000000000000000000000000000000000000000000000000000000289BB1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B62D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CACED1CECFCFD0D4D4D3DAF3D0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDB6240000000000000000000000000000000000000000000000000000000000000000000385B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBF3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C1C0C3C4C5C6C6C6C5C6D0E7C5B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6AB210000000000000000000000000000000000000000000000000000000000000000000000036BB1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B52E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8D0CECACACACED0CFD0D0DCF3CFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBF4C000000000000000000000000001532496A6A6967674E4023030000000000000000000000000387B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0D0D3CFCBC9C9C9CECED7EFC6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9A200000000000000000000003C84C3D0D1D0D0D1D1D0D3D0D1D1D3A76711000000000000000000000ABCD3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C432020202020202020201010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEBBBCBCBBBDBDBFBCBDBBC3D7B8A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B924000000000000000000339CB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B973150000000000000000002BBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BF30010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D5D4D3D7D5D5D1D1D6E1F2D0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D09E00000000000000000472D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0B95500000000000000000076BFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C63302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8CBC9C9CBCBCBCBCACAD5EAC1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCB4A00000000000000007AD3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D07800000000000000001AD7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9D7D7D7D7D7D6D7D7D3DCF1CBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5090000000000000051C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E17A000000000000000096DEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECE3602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBDFDFDEDCDAD7D4D1D1DCF2CABDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B59900000000000000039FACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABAC260000000000000028B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBF3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CACEC9CBCECBCBC9CBCBD9ECC6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A35A000000000000002DAAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E81000000000000000097A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACAC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0CED1D0D1D4D0CED1D1DBECCBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E69B54545656555656A5E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADA4E000000000000007CC8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C43302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8C9CAC9C9CBCECECBCAD5EAC6B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B18D0000000000000038B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B02C010101010101020101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD1D4D5D5D5D5D1D3D3D6E1F2CEBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C61100000000000011CBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D3CFCECFCACECECACED9EFCAB9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABAC3500000000000000A7B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBC30020201020202010202020299FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D5D9DADBDED9DEDEDFECF9D9C9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B96C0000000000000090C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE23D02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E1E1E1DCDBDFDEE1E1DEE4F7D7C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABAB9C86837C5F7684848DA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7A28682825F748386AAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F817C7B617283808DA3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5A59CA17E92A5A2BFCED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4CBAAA8A7779CA7B9D0D0D0D4D1D3D3D6D4D1D1A10000000000000078CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBF9D9B9B766D9B9B98B5B9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B69790686967676767898FAEB6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C33302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7E9E9E4E6E9E7EAE7EAF2FCDBCECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C18A70454343435B6B94A7BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABA26B3E1A00000000000000000000001528567DB2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A16D411F030000000000000000000C2A51899F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBA263330F000000000000000000001C4A73ACBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B08D5A2E0E000000000000000000001A466DA2B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCB57C54240900000000000000000024548DBCBBBBBDBDBDBD9E000000000000005FB3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BF9B5C330800000000000000000000031C4071A2B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBBB7E401800000000000000000000000009265883BCC5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B32D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CFCBCBC9CBD0CFD3D3D3DEF4CEB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACAB9F43030000000000000000000019A8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B36D2800000000000000000000000000000000000000023376AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC17E34030000000000000000000000000000000000226EB3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1670000000000000094BCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBD1C00000000000000B9B6B6B5B5B5B9BBBBBFC1C1C3990000000000000075CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C976000000000000009BC1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1B35F1D0000000000000000000000000000000000002B72B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B84100000000000000B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3A556150000000000000000000000000000000000002A78B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBB8C3303000000000000000000000000000000001067BDC8C9C6C5C60000000000000041B9B9B8B5B5B5B2B2B1B1B1B3B3B3640000000000000088B0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1904D0E000000000000000000000000000000000000001A539FABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB168230000000000000000000000000000000000000000032A7BB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D13702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6C6C9CACACACACBCBD9EFCEBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3A20F0000000000000000000000001EC9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C86909000000000000000000000000000000000000000000000000177DC9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B97215000000000000000000000000000000000000000000001676C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C572000000000000009CC5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC92000000000000000D0CECACECECBCBCACAC9C9C9CAA20000000000000072C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C672000000000000009BC1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6A7470300000000000000000000000000000000000000000000155EB5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B23D00000000000000A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABAB9D4303000000000000000000000000000000000000000000001467ACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0721A0000000000000000000000000000000000000000000861B0ACACB1000000000000003FB3B1B2B2B2B3B3B1B1B0B1B2B1B165000000000000008DB5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB89738000000000000000000000000000000000000000000000000003A9BBBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1AE4D03000000000000000000000000000000000000000000000000000863BBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B52D01010202020201010202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCACAC8C9C9C8C9C8C8D0E4C1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B19F08000000000000000000000000001AB3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B28D15000000000000000000000000000000000000000000000000000000001A97B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBC9D250000000000000000000000000000000000000000000000000000219BB1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0AC600000000000000088ACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8AB1A00000000000000ABABABABA8A8A8ABA8A8A8A8A8840000000000000061ACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2670000000000000096BBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C37809000000000000000000000000000000000000000000000000000021A5D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D14E00000000000000D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D17A0A00000000000000000000000000000000000000000000000000001D99BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCA72C0000000000000000000000000000000000000000000000000034B6BFBB0000000000000043BBBCBDBBBBBCBFBCBCBDC0C3C3C06F0000000000000097BFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDB653030000000000000000000000000000000000000000000000000000000357B1B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3BC5603000000000000000000000000000000000000000000000000000000000018A3C9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C53402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBD1D1CBCBCAC9C9CBD0DCF2CEBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C03C00000000000000000000000000001DB9B9B9B8B5B5B5B2B2B1B1B1B3B3B35600000000000000000000000000000000000000000000000000000000000000035AB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACAC6703000000000000000000000000000000000000000000000000000000000378B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3670000000000000092BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C41E00000000000000C9CED0D0CECECECECED0D0D3D3A8000000000000007BD0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D67C00000000000000B1DBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8BF380000000000000000000000000000000000000000000000000000000000005ABBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BF4500000000000000C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9B52B0000000000000000000000000000000000000000000000000000000000005CC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1810300000000000000000000000000000000000000000000000000000023AEB60000000000000034C0C0C0C3C3C3C4C5C6C9C9C9C9C87400000000000000A1C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACEB21F000000000000000000000000000000000000000000000000000000000000001FB3CBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4AE1700000000000000000000000000000000000000000000000000000000000000000056B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A529010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9CBCECBC9C9C5C5C3C3CBE4C1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5AC0000000000000000000000000000001AB5B5B8B8B8B9B6B6B5B5B5B9BBB3440000000000000000000000000000000000000000000000000000000000000000000047C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C54700000000000000000000000000000000000000000000000000000000000000006ABBBDBDBDBDB9B9B9B9B9B9B9B6B6B367000000000000008CB1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABAB1900000000000000B0B0B0B2B3B3B2B5B5B5B2B2B1890000000000000065B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5670000000000000096C0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFA50F000000000000000000000000000000000000000000000000000000000000000028ACB1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B13D00000000000000B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8930D00000000000000000000000000000000000000000000000000000000000000002FACB5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B54D00000000000000000000000000000000000000000000000000000000000025BC000000000000001EC6C9C9C9C9CED0D0CECECECECED07800000000000000A7D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CE9B04000000000000000000000000000000000000000000000000000000000000000000129CCECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C89309000000000000000000000000000000000000000000000000000000000000000000000044C1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C33002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C3C3C5C8C5C5C4C5C8C5D3EBC6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B14D00000000000000000000000000000025A3A3A1A19E9E9E9F9FA3A29F991E0000000000000000000000000000000000000000000000000000000000000000000000003BA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B53F0000000000000000000000000000000000000000000000000000000000000000000075CECACECED0D1CECECECBCBCED0D47800000000000000A7D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D42100000000000000D0D1D0D0D0D4D1D3D3D6D4D1D1AA0000000000000078CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6670000000000000093BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFA7100000000000000000000000000000000000000000000000000000000000000000000023ACB8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B84000000000000000B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9A20F0000000000000000000000000000000000000000000000000000000000000000000024B9C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C347000000000000000000000000000000000000000000000000000000000000000045000000000000001EC3C1C1C1C1C3C3C3C3C3C0C1C1BD6E000000000000009BC3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8860300000000000000000000000000000000000000000000000000000000000000000000000397BFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4AE090000000000000000000000000000000000000000000000000000000000000000000000000047C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3C0C1C1C1C6C9CBCBD0CED3E9C6B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0280000000000000000000000000000003EB3B2B2B2B2B6B9B9B9B9B8BB3B000000000000000000000000001D435A68678F7E676A5B330F000000000000000000000000005AB9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C95700000000000000000000000000153F5F65758C756456380E00000000000000000000000076ACB0B1B1B1B1B1ACACACACB1B364000000000000008CB2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A81900000000000000A8A8A5A7A7AAACACACB1B3B5B5900000000000000065B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C16F000000000000009BC1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5AE110000000000000000000000000A3C5F7B78A794787A4C280000000000000000000000000028C8CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADA4F00000000000000D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8AE11000000000000000000000000093556726F99886D6D44240000000000000000000000000024B1B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C16F0000000000000000000000002657729C999797836941160000000000000000000000000000000000001DC1BFC0C0C1C1C1C1BFBFBFBFBFC16D0000000000000099C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BF9B03000000000000000000000000092C4C6C697790676969411C000000000000000000000000000FA7C0C0C0C3C3C3C4C5C6C9C9C9C9C8C81E0000000000000000000000000010264A7878779C9C77766D49280400000000000000000000000077CECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBF30020202020202020201010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E3E3E2E1DFDCD9D7D9D9E3F6D0C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C10900000000000000035B98C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B95200000000000000000000002978AAB8B8B5B6B6B9B8B6B6B6B2B69C4D0E000000000000000000000083BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C57A0000000000000000000000156CABB9B9B9B9B9BDBDBFBFC1BF97450300000000000000000009A3BBBBBFBFBFBCBCBCBBBDBDBF6F000000000000009FC6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C41F00000000000000C5C6C9C9CBCECECED1D3D1D3D4AA0000000000000078D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D47C00000000000000ABD6DADADADADBDBDBD9D9D9DBDCDFDFD51A000000000000000000000451A8DEE1E1DFDFDCDCDCDCDFE1D7962C000000000000000000000041E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E15400000000000000D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1C91200000000000000000000044AA5CECECED0D0D4D0D0CECECAC37C2600000000000000000000003DC1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB883000000000000000000000856A2B0B0ACABABB0B1B1B1B2B69C56080000000000000000000000000000001AACACACACACACACACAAAAAAA7A7A75E0000000000000080A3A5A5A3A3A1A3A3A3A7A7A7AAA8AA940D0000000000000000000007457CA19C9B9C9E9E9C9C9C9E9E9E9E652A00000000000000000000001FAAA8ACACA8A8A7A7A7A7ABA7A7AA600000000000000000000000184E87A7A8ACACACACACB0B2B2B2B2B0B08145080000000000000000000290A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B52E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C1C4C4C1BFC3C3C6C6C6D0E4BFACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8000000000000000081ACACACABABABABA8A8A8ABA8A8A8A8A8A8A884000000000000000000002997B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B167080000000000000000000FB3BDBBBDBFC1C1C1C1C1C1C3C4C4C4AA030000000000000000000978C5C8C8C5C6C9C9C9C9CED0D0CECECECEB5300000000000000000003BD0D3D0D1D1D3D0D0CECECBCA7500000000000000AAD3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D12100000000000000C8C6C9C9C9C9C9C9C9C6C8C9C89F000000000000006FBFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBC6D0000000000000098C1C1C1C1C1C1C4C3C5C5C5C6C9C9C92E0000000000000000000041ACBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0901D0000000000000000000054C1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBD4300000000000000BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C32C0000000000000000000049ABB9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C093160000000000000000000061C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0B60400000000000000000051C6D0D0D3D4D1D0D1D0D0CECECED0D1CEC65C040000000000000000000000000020D0D1D1D0D0D0D0CECACAC9C8C5C975000000000000009CC4C1BFBFBBBFC0C0BDBBB9B9B9B8B92A000000000000000000035FACB3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8902B0000000000000000000055A3A5A5A5A8ABABABABAAAAA7A2080000000000000000001F7AA5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A15808000000000000000034ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD5D5D3D1D1D3D1D3D0CED6EEC9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6A70000000000000028B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFB61600000000000000000472C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDAE3B0000000000000000004ABCC0C0C0BFBFBBBBBBBFBFBFBCBC2B00000000000000000026B5C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C34600000000000000000093C4C6C6C8C5C5C6C4C5C5C67600000000000000A7D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D62200000000000000D4D4D4D4D4D4D4D4D6D6D4D6D6AE000000000000007ED9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDC8300000000000000B5E1E1E1E4E2E2E2E4E4E3E2E2E4E28600000000000000000014A1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D16700000000000000000000A7D1D3D0D3D0CECECECECED0D0D4D0D0CE4A00000000000000C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1700000000000000000000F94B8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABAB54000000000000000000039BB6B6B2B2B2B2B2B2B1B1B1B1B1ACACAC2F00000000000000000275A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7820D000000000000000000000000189F9F9F9F9FA19C9B9C9E9E9C9C9C58000000000000007EA5A5A7A5A5A5A5A7AAAAA8ACACA85F0000000000000000001F90A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B27D03000000000000000003A5B3B1ACACAAA8A7A7A5A5A86700000000000000000361ACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9AC240000000000000000A8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B830020202020202020201010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9D7D4D3D0D4D5D5D3D1DAEFCAB8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1AC880000000000000039A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8AB5A0000000000000000027DABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A34700000000000000000297A5A7A7A8ABACB0ABA7AAAAAA7E0000000000000000001FA2AAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0AC3E000000000000000020ACACB1B2B2B5B5B8B8B8B3670000000000000094B9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBB1C00000000000000B5B1B2B0ACB1B3B1B1B1B1B2B18D0000000000000064B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A55E000000000000007EA1A19E9E9E9F9FA3A29F9FA2A5970200000000000000000D8DA3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA77603000000000000000014AAACACB1B3B1B2B1B1B5B5B3B8B6B6B23E00000000000000B8BBB8B8BBBBBBB8BBBDBDBDBDC1A703000000000000000018B5CED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D38C04000000000000000018D0CED0D0D3D0D3D3D3D4D4D4D4D4D38F0000000000000000049FD0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBB51100000000000000000000001DC1C0BFBDB9BDB9B9B8B6B9B6B2B6670000000000000093BCBCBCC0BDBFBFBBBBBBBBBBB9B208000000000000000025B9BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9A20F00000000000000004AB9B5B3B3B6B8BBB8B8B5B628000000000000000389B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9B51C000000000000005CBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C93502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6C6C9C9C8C9C6C6C6C4C1CAE3C0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0AC88000000000000005FB5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0AC9D0800000000000000006DA7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBC6D00000000000000004CC1C0C0BCC0BCBCBBBBBDBDBD16000000000000000015ACB3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3AC2300000000000000008CBCBCBCBCB9BCBCC0C3C3720000000000000097BCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C11E00000000000000CACACACACED0D0D0CECACECACAA20000000000000074C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6720000000000000098C3C1C3C1C1C1BDBBB9B6B3B3B84100000000000000000FA5B9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACAC840300000000000000005FB2B2B6B3B3B1B1B1B1B1ACABABABAB3B00000000000000B0B2B3B3B2B5B5B5B2B2B1B0ACB13600000000000000000FA2B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B58700000000000000000076BDBBBBBBBBB9B9B9B9B9BBB8BBBD16000000000000000081C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B19B0E000000000000000000001BACB0B0ACAAACB0B1B1B1B1B1ACAC61000000000000008DB3B1ACB1B2B5B6B6B5B2B0B0B05A000000000000000019A5ACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACAC9F0E0000000000000003A8B5B3B2B5B6B6B3B3B1A800000000000000006FB8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C39B000000000000002EC8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D43702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7D7D5D1D5D7D6D4D3D1DAEFCAB9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBC98000000000000006AB8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B96400000000000000003FB6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BF440000000000000003BFC9C5C5C3C1C1BFBCBBB98800000000000000000393B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFAE03000000000000003DC3C3C6C3C6C4C4C8C6C472000000000000009CC4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C91F00000000000000D3D4D4D1D3D3D1D4D0D0D0D0D0A7000000000000007CD1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DA8000000000000000AEDBDCDFDFDCDCDADAD7DBDBDBB9000000000000000004B3DFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E28800000000000000000AD7DEE1E1E3E3E1DFDBDAD7D4D4D4D74F00000000000000D1D1D1D1D1D1D1D1D1D1D0D0D1B1000000000000000004B0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C067000000000000000008B9BCBCBBB8B9BDBDBBBBB9BBBB72000000000000000043ABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1830000000000000000000019A7A7A7A7A3A19EA2A2A3A3A3A3A55D0000000000000082A7AAA8AAAAAAA7A5A39F9FA39F060000000000000002899E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACAC93080000000000000049AAA7A7A7A5A7A7ABA7760000000000000020ACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A81900000000000000B1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B22D01010101010101010102019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8C9C9CACAC9C9C9CACAD7EEC9B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBC940000000000000072C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8150000000000000003A5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACE1F0000000000000075C9C8C8C9C8C8C6C9C9C94000000000000000004DC4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C16D0000000000000003B5BCB9B9BBBDBDBDBDB96A000000000000008DB3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B31A00000000000000ABABABAAACACACB0B0B0B0B0B28D0000000000000064B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B969000000000000008FB5B6B9BCBCBCBCBCBDC0C0BD4A00000000000000006CB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B93200000000000000005DB3B3B3B1B5B1B0B0B0B0B1ACB0B03D00000000000000B1ACACACACB1B3B1B1B1B1B3B336000000000000000064B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A82D000000000000000061ACB1B3B5B5B6B9BCB9B8B8B522000000000000000EAAB1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3560000000000000000001EC3C1C4C4C4C5C8C8C5C6C9C9C9C97700000000000000A5D0D3D3D3D0D1D0D0D1D1D0D381000000000000000051CACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDB920000000000000012D1D1D0CECECECEC9C8610000000000000082C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B84100000000000000A3B9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBB3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DBDCD9DBDEDEDEE2E3E6ECFBDBCECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C99F0000000000000072C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C49E000000000000000051C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1A2000000000000002CC1C1C0C0C0C1C1BFC0B6030000000000000003AEBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C516000000000000007EC1C4C1C3C5C3C4C6C874000000000000009EC6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACA2000000000000000D0D0D3D3D1D1D0D0D0D0CED0D0A50000000000000078D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B96D0000000000000097C0C0C1BFBFBFBFC1BFC0BFB603000000000000001DB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6A7080000000000000015B2B6B2B2B2B6B9B9B8B5B5B8B9BB4300000000000000C1C3C6C4C6C9C5C5C3C1C1BFAC030000000000000023B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFA703000000000000001EC3C6C3C6C4C4C8C6C4C4C5AC00000000000000007BC6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9C40A000000000000000021D3D3D1D4D0D0D0D0D0D0D0D0D0D37A00000000000000AAD6D6D7DBDBD7D4D4D4D3D4D4320000000000000004C6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDE3F000000000000009FDFE1DFDCDCDFDFE15300000000000000DBE4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D74F00000000000000A7D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D9DCDCDADBD7D7D5D6D6E3F6D3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B38D0000000000000064B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B24D000000000000000097ACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A72500000000000000969F9FA3A5A39F9F9F670000000000000000359C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7650000000000000033A5A7A7ABA7A7A7A7A75C0000000000000088B0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B11B00000000000000ABACB1B1B2B2B1B1B1B1B2B3B18D0000000000000069BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6690000000000000090B9B9B9B5B5B5B9B9B9BCBB7300000000000000008CBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B05C000000000000000087ABAAAAAAAAAAA8A8ABA8ABB0AC3D00000000000000B5B5B5B5B5B5B3B3B1B2B1B16400000000000000007EB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB94A000000000000000097BFBFBFC1C0C0BCC0BCBC520000000000000015B9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B35800000000000000001DB9BCBCBCBCB9BCBCC0C3C3C5C5C5720000000000000094BCBCBBBDBBB8B5B5B5B8B8B103000000000000003ABFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACA9B0000000000000057C9C9C9C9C9C8C8C51E0000000000001DC3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B83A0000000000000086BDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D4D1D3D4D0D1CED1D9EBC6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3980000000000000072C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECE18000000000000002FCBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C19E6E6D6D6E6E6F6EB2C3C3C3C0C0C1BFBB49000000000000000090B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8080000000000000FBBBFBFC1BDBDBCBDBD6D000000000000009CC6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C51E00000000000000C8C5C5C5C5C5C1C1C1C4C1C3C398000000000000006DBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1640000000000000087A8A8A8A8A8ACABA8AAA8A52C0000000000000018A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A39F020000000000000045A5A5A7A3A7AAACB1B0B1B1B5B53F00000000000000B3B3B5B6B5B5B8B9B9B6B5B529000000000000001DBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6B6040000000000000061C6C9C9C9C6C4C1BFBCBC1D000000000000005CBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8AA00000000000000001CB8B5B5B5B5B2B2B5B8B9BBBCBCB967000000000000008CB0B0B0B1B1B1B2B2B1B2B577000000000000000083BBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBF766E6F6F6F727081C5C9C8C8C6C5C5C63E1F1F1F1E1F1F40C8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C1090000000000000082C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9DEDEDFDEE1DFDEDBDBE6F7D5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C99E0000000000000070C5C9C5C5C3C5C5C8C9CACAC9C9C6C9C4000000000000000060C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C31E0000000000000010C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C63F00000000000000B1C9C9C9CED0D0D1D07800000000000000A5CACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D02100000000000000C6C4C1C1C1C1C1C1C0BDC0C1C197000000000000006DBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBD6A0000000000000093B9BBBBB9BDBDBDB9B9BCB903000000000000005FB6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1450000000000000010C1C1BFBCBBB9B8B6B9BCBBBBB94100000000000000BFC1BFBFC1BFBFBFBBBBBCB900000000000000006DBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C63F000000000000001FC5C5C5C4C4C6C6C8C5B60000000000000000B5CECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3320000000000000021D4D4D3D4D4D4D4D4D4D4D4D6D6D47C00000000000000B0D9D9D9DBDCDFDFDCDCDADA610000000000000004DEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECE650000000000000000A2CAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B32D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D7D7D3D7D7D1D3D3D3E1F4D3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C49E0000000000000074C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9990000000000000000A5CBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C100000000000000003BBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0904343434343434199B6B9B9B8B9B9B9B96C0000000000000094B9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B81A00000000000000BFBFC0C1C1C1C3C6C4C6C9C5C59B0000000000000067B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBF6C0000000000000094BBBDBDBFC1C3C3C6C3C69C0000000000000000AEC5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6900000000000000000C3D4D4D1D3D3D1D4D0D0D0D0D04C00000000000000D4D1D4D3D4D4D6D6D7DBDBA50000000000000000C5D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDC970000000000000000D7DCDCDCDCDFE1DFDC96000000000000001CE2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4740000000000000022D4D1D1D1D1D1D1D1D1D1D1D0D0D17A00000000000000A5CED0D0D4D0D0CECECACAC82E000000000000002EC6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19E540000000000000000008CA3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A529010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFD0D0CFD0CECBCECED1D7ECC9B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C49B0000000000000072C4C4C1BFBFBBB9B9BCBCB9BCBCBCBB6B0000000000000003C0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C19C00000000000000006FBFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C67500000000000000A2CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D12000000000000000C6C8C9C9CAC8C8C9CBCBD0D1D1A50000000000000074C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B968000000000000008DB5B3B6B3B1B1ACACB1AC5A0000000000000013A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5020000000000000075A7A7A7A7A5A3A5A5A7A3A5A73900000000000000A5A5A7A7A8ABACB0ABA7AA51000000000000001FA7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0A7000000000000000087B8B8B8B3B3B8B9BC53000000000000004DB5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B68F000000000000001AB1B1B1B1B2B1B3B6B6B5B5B2B1B1640000000000000089B1B2B2B5B5B1B2B2B3B1B10E0000000000000050A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B685210000000000000000000FB8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D33802020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7B0AEAEB2AEB2B1B1B6B9C4DAB6A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B18F0000000000000064B5B2B2B2B5B8B8BBB8B8BBBBBBB8BB53000000000000001EC5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3970000000000000000AAD4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBD6A000000000000008DB6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC11E00000000000000B9B9B9BBBBBBBBBCB9B6B6B9BC940000000000000069B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6670000000000000092B8B6B9BCBCBFBCBBB9BB410000000000000043B9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C125000000000000005FC0C0C0C3C0C3C5C4C4C1C3C64800000000000000C9C9CBCECECAC9C9CAC9C8400000000000000052C9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C01E000000000000006CB9B9B8B6B8B8B8B82A000000000000006EB3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBF000000000000001DBCBFBFC1C1C4C6C4C6C6C4C4C3C472000000000000009BC1C3C1C1C4C4C8C8C8C6C600000000000000008FC9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A572450C0000000000000000000000369A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B32C010101010101010102010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFCBCECECFCFCECFD1D0D7ECCAB9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C094000000000000006DC1C0BCB9B8B8B3B3B3B8B9B9B8B8B63F000000000000003FB5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A75C000000000000000097A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBF6D000000000000009FC8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C81F00000000000000CAC9C9C6C6C3C3C5C8C8C8C8C89F0000000000000077CBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C974000000000000009CC1C1C0BDBCBCBFBFBFC1250000000000000076C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C64E0000000000000045C1C1C0C1C1C0C0C0C1C1BFC04300000000000000C0BFBFBFBDBDBDC0C0C0C11D000000000000006FC1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8470000000000000047C6C6C9C6C8C9C9C91800000000000000A5CBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCE1200000000000020CECBCBC9C6C4C1C1C1C1C1C1C0BD6E0000000000000093B9B9BDBFBFBDBDBDC1BF9D00000000000000009DC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6936A380400000000000000000000000000009BB9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C63202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6C5C5C6C6C8C6C8CAD1E7C6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B28D0000000000000067B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5230000000000000052BBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAA580000000000000000ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1640000000000000090BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBD1D00000000000000B5B3B3B3B6B6B3B5B5B5B5B8B9900000000000000064B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C16D0000000000000094BBBDBBB8B5B5B5B8B8B815000000000000008CBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9740000000000000026C9C9C8C8C5C3C5C3C1C4C4C44500000000000000C6C5C5C4C1C1C1C1C0C0C3100000000000000090B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1610000000000000032B8B3B3B5B5B6B2B20000000000000000ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B21A0000000000001CBBBCBCBCBCBCBDB9B9B9B9B9B9B9690000000000000090B9BCBCBCBCBCBDC0C0BD940000000000000000BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B19D754D200300000000000000000000000000000000004BABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B12C01010101010101010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9D7D9DBD9DADBDCDEDEE6F8D7C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBC94000000000000006DBFBCBFBFBCBCBCBDBDBDBDB9B9B9B61C0000000000000022404040404041414141434341413F40403F3F3F3F3F3F3F404141434341403F3F3F3F3F3F3F3E3D3D3D3EB1B1B2B2B1B2B5400000000000000016BBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C57200000000000000A2C8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC91F00000000000000C6C6C8CAC8C9C6C9C5C5C5C8C59C000000000000006BB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C06D0000000000000094BFBDBDBDC1C3C4C8C5C500000000000000009CC5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECE8B0000000000000020CACAC9C9C9CACAC9C8C8C9C94700000000000000C6C9CAC9C8C5C5C5C6C6C90000000000000000ABC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B667000000000000001CB9B6B8B8B9B8B5A20000000000000000B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABAB1900000000000018A8ABACACACACACABACB0B1B1ACAB61000000000000008CB3B3B2B2B2B1ACACB0B18C00000000000000003B3B3B3D3D3D3D3E3E3E3D3D3D3E3D3D3D3E3E3E3F3E3D3B3B3D3D3D3D3B3B3D3B3B3D3D3D3D3B3B3B3B81B1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0AC996944260800000000000000000000000000000000000000000022B1B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBD3002020102020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C9CECFD0D4D6D7DAD7E4F6D5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACAA20000000000000075C9C9C9C9C8C8C5C3C5C3C1C4C4C4C11E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B3B3B3B3B2B2B13E000000000000001AB8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1640000000000000092B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBC1D00000000000000BBBBBBB9B9B9B9B9BBB8BBBDBD97000000000000006FC4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1670000000000000089B0ACAAACB0B1B1B1B1B10000000000000000A2B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8840000000000000019A8A8A5A7A7AAACACACB1B3B53F00000000000000B3B2B5B6B6B3B3B1B1B1B10000000000000000B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C89F0000000000000020D0CECECECECED0A50000000000000021D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D63D00000000000023DBD9D9DBD9D6D3D6D3D1D1D1D0CE7700000000000000A2C9C9C9C9C6C8C9C8C8C49C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9AC6B3308000000000000000000000000000000000000000000000000002CB9BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B92F02020202020101010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D3CFCED1CFCACECACED9ECC9B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B893000000000000006FC1C1C3C6C4C6C9C5C5C3C1C1BFBCBB1C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C4C4C8C6C4C4C547000000000000001EC6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D07800000000000000AAD1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DA2200000000000000D9DBDCDFDFDCDCDADAD7DBDBDBB00000000000000084E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E48600000000000000B2DFDEE1E1E3E3E1DFDBDA0000000000000000D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECEA20000000000000009C6C3C6C6C5C5C1C1C0C0C0C14500000000000000BCC0BCBCBBB8B9BDBDBBBB0000000000000000B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACAC880000000000000018A7A7A3A19EA2A2800000000000000017A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C2300000000000017A3A5A5A7A5A5A5A5A7AAAAA8ACAC5F0000000000000083AAAAA7A7A7A5A7A7ABA783000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061B1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B1682A0000000000000000000000000000000000000000000000000000000357B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B52C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8F9F9F9FCF9F8F9FCF9FCFFE7E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7AC000000000000007AD1D1D1D1D1D0D0D1D1D3D0D3D0CECE200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BBBBB9B6B6B3B33E000000000000001AB1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A55B0000000000000082AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E1700000000000000A5A7A5A5A5A5A7AAAAA8ACACA8840000000000000060AAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B064000000000000008CACACAAA8A7A7A5A5A8AA0000000000000000ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5900000000000000000B2B2B3B8B8B6B6B6B6B6B9B94100000000000000B9B9B5B5B5B9B9B9BCBBBB0000000000000000BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACAC870000000000000019AAAAAAA8A8ABA8870000000000000019B0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7190000000000001AB1ACACB0B1B5B1B5B8BBBBBBB9BC6B0000000000000097BFBFBFC1C0C0BCC0BCBC9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006BBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFAE4A03000000000000000000000000000000000000000000000000000000034EB6C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C33202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9D7D4D3D0D4D5D5D3D1DAEFCAB8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1AC88000000000000005DA3A3A1A1A3A5A5A7A3A3A3A3A3A5A51F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002A7A8ABACB0ABA7510000000000000018A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3670000000000000094B9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBB1C00000000000000B5B1B2B0ACB1B3B1B1B1B1B2B18D0000000000000064B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A55E000000000000007EA1A19E9E9E9F9FA3A29F00000000000000009F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABAB870000000000000014B3B1B2B1B1B5B5B3B8B6B6B23E00000000000000B8BBB8B8BBBBBBB8BBBDBD0000000000000000C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6AB0000000000000020D3D0D3D3D3D4D4AA0000000000000020D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC91F0000000000001DC1C0BFBDB9BDB9B9B8B6B9B6B2B6670000000000000093BCBCBCC0BDBFBFBBBBBB94000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067B3B6B8BBB8B8B5B6B3B6B5B8B8AA47030000000000000000000000000000000000000000000000000000001661ACBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C93502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CECFCFCECFCFD1D3D4D4E1F3CFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBD970000000000000072C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020D3D1D1D1D4D1D47B000000000000001AD4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE18400000000000000B5DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDE2400000000000000DBDAD7D4D4D4D7DAD6D4D7D7D7AC000000000000004CD1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C575000000000000009CC1C1C0C0C0C1C1C3C0BD00000000000000009CB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B68D000000000000001BB1B1ACACACACACACACACAAAA3B00000000000000A2A2A3A3A3A3A5A5A3A3A10000000000000000A2AAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5740000000000000019A8ACACA8A8A7A783000000000000000DA7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B31A00000000000018A5A5A8AAABB0B1B1B0ABACB1ACAC61000000000000008CB1B1B2B3B1B2B5B2B2B69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006BBBBBBBBBBBBBB8B8B5B8BBBB7C0900000000000000000000000000000000000000000000000000000E4C88ACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA829010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DADBDCD9DBDBDBE1E1E3EFFBDBD1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1AA000000000000007EDBDBD7D4D4D4D3D4D4D4D4D4D4D4D44D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024E1E1E1E1E4E2E2900000000000000000E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D07700000000000000A7D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBD1D00000000000000B8B9BDBDBBBBB9BBBBB9B6B6B38D000000000000003EB1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACAC610000000000000082A3A19EA2A2A3A3A3A3A5020000000000000082A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA25C0000000000000018A5A7AAAAA8ACACA8A8A7A7A73A00000000000000A7A5A7A7ABA7A7A7A7A7A3000000000000000089B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1AC61000000000000001BB1B1B1B2B3B1B28F0000000000000000BCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BB000000000000001AB5B5B9B9B9BCBBBBBBBBBBBBB8B8670000000000000098BDB9B9B8B8B6B2B6B6B6B2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075B3B1B2B1B1B0B0ABABB0AC6900000000000000000000000000000000000000000000000003295D97B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB12C01010101010102020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0BFC0C4C4C5C5C6CAC8C8D1E7C6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAA86000000000000005AA2A3A3A3A3A5A5A3A3A1A3A3A3A7A75E000000000000001E5A5A5B5D5B5A5A5A5A5A5A585658585858585858585858585A5C5A5B5D5D5E5D5D56000000000000002DA8A7A7A7A7ABA7830000000000000000A3A7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABAC640000000000000075B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B51A00000000000000B2B3B8B8B6B6B6B6B6B9B9BBB994000000000000003FB5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B665000000000000008FB1B2B2B0ACACB0B0B0B0190000000000000067ABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B05C0000000000000034B0ACACAAAAA8A7A7A7A7AAAA3B00000000000000B0B1B5B1B5B8BBBBBBB9BC1D0000000000000086BFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B550000000000000003DACB1B1B1B3B5B68D0000000000000000BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8A1000000000000001CBBBBBFC1C1C3C1C3C3C5C9CACAC97500000000000000A5CECACECACACACBCACACACA040000000000000075767676767474727072706F7272726F70727270727272727272726F6F6F6F6E6E70250000000000000090B3B3B8B9BDBCBCB9B9BB9E0300000000000000000000000000000000000000000E2F5A80ACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B830020202020202020202020199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5DFE3E3E3E3E6E3E6E6E2EFFCDACBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAA10000000000000076CBCBCBCBCBC9CECBC9C6C6C6C4C4C483000000000000002CC1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B88F000000000000003FB1B2B2B2B5B8B6AA000000000000000090B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1640000000000000061B0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB11A00000000000000ACACACA8A8ACABABACB0B0ACAB870000000000000022B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B265000000000000008CB1B2B3B3B3B3B3B3B8B330000000000000004FB1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BC3B0000000000000041BDBDBBBDC0C0C0C0C1C1C5C54600000000000000BBBFBFC1C1BDC1C1C1BFBD24000000000000005CBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0350000000000000053BCBDB9B8B3B3B8B2000000000000000090B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC190000000000000001EC5C5C3C3C0BDBDC1C1C1C1C0BFC17200000000000000A1C9C9C9C9C8C8C9C9C9C9C91F00000000000000A3D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDC4000000000000000D0DCDBDBDBDBDBDADBD9D92A00000000000000000000000000000000133E6D9AC3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5CAC6C6CAC9C9C5C6C6C5D0E2BCABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0AC8C0000000000000065B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9A20000000000000008B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC177000000000000006AC5C6C6C3C3C1BFBF080000000000000065B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5650000000000000041ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AA1900000000000000B9BCB9B8B8B5B3B2B5B6B6B3B38C000000000000000EB2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C370000000000000009FC8C5C6C9C9C9C9CED0D05C000000000000003CD3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3190000000000000080DBDBDBDBDBD9D9DBD9D6D3D64D00000000000000CEC9C8C6C9C9C9C9C9C9C94E000000000000003EC4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBF100000000000000077C1C1C1C1C1C4C3C5000000000000000081C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C15F000000000000001DBDC1C1C1C1C4C1C1C1C1C1BFC1C06D000000000000009BC1BFC1C1BFBFC1C1C4C4C4460000000000000063B9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C91700000000000004C3C4C6C6C9C9C9C9C5C8A700000000000000000000000000185188BFD0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B92E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADEDEDBDBDEDFE1DEDBE6F7D5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBB920000000000000065B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B008000000000000008CA8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A993A00000000000000759E9E9EA1A2A2A3A525000000000000002BA5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC06E0000000000000025C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C91F00000000000000BCBCB9BDBBBBBFBFBFBFBCBFBF940000000000000000B2B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5670000000000000094BCB9B6B3B5B5B5B2B5B3750000000000000008B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9AE000000000000000094BCBFC0C0C1C1C1C5C3C3C5C94700000000000000C6C8C5C8C8CAC8C5C8C4C3780000000000000009C0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5AC00000000000000009EBDBCB9B9B9B9B8B81C0000000000000054C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C82D000000000000001EC5C5C5C5C3C3C6C6C6C6C4C6C6C97600000000000000A3C9CBCAC9C9CAC9CEC9CECE6E0000000000000039CBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C10000000000000028CBC9C6C6C6C4C4C4C5C35F000000000000000000001C6CA2B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A72A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D9DADBDADBDCDAD9DBDBE4F7D4C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C59E000000000000007BD1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D030000000000000005FD3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDB2B00000000000000CBDCDADAD7DBDBDBDB6F000000000000000ADFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1D0B5B5B5B2B3B2B3D5E1E1E3E3E1DFDBDA7E0000000000000004D0D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D02000000000000000C8C8C5C9C5C6C6C3C6C6C5C5C19B00000000000000007CBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABAB54000000000000008DB2B6B9B6B6B2B2B2B2B29C000000000000000078ACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AA5F0000000000000002A3A5A39F9F9F9F9FA19C9B9C9E36000000000000009EA2A3A2A3A5A5A7A5A5A588000000000000000083A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2560000000000000008B3B3B3B1ACACAAA8A73A0000000000000021B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCB503000000000000001CB5B5B5B8B8B5B5B5B2B2B3B8B8B6670000000000000094BBB9B9B8B9B9B9B5B5B5B9920000000000000003B1B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACAC7B0000000000000044ABABABABABAAAAAAAAAA1F0000000000000000147EABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBD30020202020101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CECFCFCECFCFD1D3D4D4E1F3CFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBD970000000000000072C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C66A0000000000000010C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1C40000000000000018D0D3D1D1D1D4D1D4D3AA000000000000000098D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDF5A00000000000000D3DCE1E1DFDEDEDEE1840000000000000000A2DCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDE1400000000000000DBDAD7D4D4D4D7DAD6D4D7D7D7AC00000000000000004CD1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C548000000000000009CC1C1C0C0C0C1C1C3C0BDBD0F0000000000000040B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B61B0000000000000030B1B1B1ACACACACACACACACAAAA3B00000000000000A2A2A3A3A3A3A5A5A3A3A1A30D0000000000000041AAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A313000000000000002DAAA8ACACA8A8A7A7A75800000000000000009FA7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B16E000000000000000018A5A5A8AAABB0B1B1B0ABACB1ACAC61000000000000008CB1B1B2B3B1B2B5B2B2B6B8B808000000000000006FB8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B851000000000000007ABCBBBBBBBBBBBBB8B8B50F000000000000001DB2B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA829010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D5D5D0D1D0CFCECECED9ECC9B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B087000000000000005FAAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A38D000000000000000072999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A75C000000000000004FB5B5B2B5B3B3B3B1B1B3080000000000000038B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C61600000000000004C8C4C4C4C6C6C8C9CE77000000000000000038C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9AB0000000000000000B9B9B5B6B6B6B8B8B9BBBBBBBC94000000000000000003ABB2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B21A0000000000000093BDBBBBBBBBBCBDC1C3C6C4560000000000000004B6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C496000000000000000074C4C3C3C3C3C3C1BFC0BDBDC0C34700000000000000CACAC9CAC9C9C9C9CACACBC9510000000000000009BDC5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C190000000000000000080C0C0BDBFBDBDBDC0BF9D00000000000000007CC5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCB2800000000000000001FCEC9CECECECED0CED0CECACECECB7700000000000000A2C8C8C9C9C8C8C4C6C9C8C4C83F0000000000000026C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBC0800000000000000A8B8B6B3B3B6B6B6B6B6B600000000000000009BB8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1AC2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D0D3D0CFD1D4D0D1D3D6E4F6D0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C19B000000000000006DBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C11D0000000000000015B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C617000000000000008DC3C4C6C6C9C9C9C9C5C8500000000000000000ACC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9B10000000000000026C8C9CBCBD0D1D1D0D078000000000000000000A8C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B878000000000000000EB3B6B3B1B1ACACB1ACACB1ACAB8400000000000000000056A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5000000000000000083A7A7A7A7A7A5A3A5A5A7A381000000000000000040A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0210000000000000003A2B1B1B0B0B0ACB1B2B1B1B0B0B03D00000000000000B5B5B8B8B8B3B3B8B9BCBCBB88000000000000000061B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1220000000000000003A2B1B2B1B3B6B6B5B5B2B10E0000000000000021B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A57A00000000000000000018A29F9FA2A5A5A29F9F9E9F9EA2A35F000000000000007A9B9B9F9B9F9E9EA2A3A7A7A775000000000000000067ABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B871000000000000002ABDBDBDBDC1BFC1C1C5C5C50000000000000020D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D64D4E4D4C4C4A4C81D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCB3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D3D3CECFCFCECECECED6EBC5B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5900000000000000064B1B1ACABABABABAAACACACB0B0B0B0B0B26700000000000000006AACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B972000000000000000EB5B6B9BCBCBCBCBCBDC0C09E000000000000000032BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBC490000000000000046B1B1B1B3B3B3B1B5B1640000000000000000002FB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B54D0000000000000019ABACACACABACACACACABABABAB8400000000000000000008A2A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B37B00000000000000008DB5B8B8B9BCB9BBBBBDBBBDBF1D0000000000000003ACC1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECE88000000000000000042D0D1D1D0D3D0D1D1D3D0D0CECECB4900000000000000D1D4D3D4D3D3D0D3D3D4D4D6D61A0000000000000004BFD9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C984000000000000000045BFBFBFBFBFBCBCB9BBBBBB52000000000000000088B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5260000000000000000001DBBB9B9BCBCB9BCBCBCBBBCBDBBBB6B0000000000000098C1BFC0C0C1C1C1C1BFBFBFBFBF100000000000000016B9C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0160000000000000067B6B9B9B9B9B9B9B9B9B9B6000000000000003CC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9B90000000000000070CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D03602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E9E7EAE9EAEBEAEBECEBF4FFDFD4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0A30000000000000077CBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB203000000000000000397B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1B60F0000000000000051BBBBBBBBBCB9B6B6B9BCBCBC24000000000000000078BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6AE080000000000000078B8B6B9BCBCBFBCBBB96C000000000000000000007BBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBF09000000000000002CBFC0C0C0C3C5C3C0C0C0C3C0C39C0000000000000000000047C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8470000000000000000C3C3C1C1C1C1C3C3C3C3C3C0C16F00000000000000002CC3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8A80F000000000000000086B2B2B1B2B3B3B3B5B8B6B8B3B3B84100000000000000BDBCBDBDBFBCBFBFC1C1C4C6C46A000000000000000035C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9B009000000000000000099C3C3C0BDBFC0C0C0C0BDBD9E000000000000000023B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0640000000000000000000019A5A5A5A7A8A8A5A5A3A3A3A3A3A35B000000000000007B9A999997979796979B9B9E9E9E4B000000000000000035A8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3670000000000000003A5B5B5B5B5B9B9B9B9BCBCBC0900000000000024BCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CE8A0000000000000097C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBB30020201010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9D7D5D5D4D3D3D0D4D4E1F4CEC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBC94000000000000006CB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C15F000000000000000015ACB3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B83A0000000000000003ACB8B8B8BBBBBDBFC1C1C1C1C390000000000000000003A5BDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9480000000000000004C8D1D4D6D7DADBDEE1E1840000000000000000000004C4DFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE18B000000000000000058D9DADAD6D4D4D4D4D6D4D7DBDBB000000000000000000000007AD1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5AB03000000000000000FBDBDBDBDC0C0BDC0C0BFC1C1C1C116000000000000000056C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C52600000000000000002CC4C6C9CBCECEC9C9C9CBCBD0D0D3D34D00000000000000CECBCBCBCBCBD0CBCECECECED0C90A000000000000000065D0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D02B00000000000000004AE2E4E3E1DFDCDCDCDCDFDCDBDB2B000000000000000077DEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3C0040000000000000000000025E2E4E4E4E4E2E2DFDCDADADADADA8100000000000000AED7D7D4D1D0CBCBC9C8C8C6C5C5BD09000000000000000072C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA88902000000000000003D9E9FA2A2A2A29F9F9E9E9E9B1D000000000000079E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A72C00000000000003AAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C33202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFD1D1CECAC9C9C9CAC8D5E9C1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBB940000000000000072C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCB509000000000000000026B9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C365000000000000000050C4C8C8C9CACACAC9CAC9C9C9C9CA27000000000000000011AEC9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B97B000000000000000034C1C1C1BDBFBFBFC1C1C16E00000000000000000000000FA5BDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6AE0400000000000000007DCBCBCBCBCBC9CBCAC9C9CAC9CEA20000000000000000000000047FCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C927000000000000000038CBCBCBCBCBC9CECBC9C6C6C6C4C4780000000000000000006FC1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B84000000000000000000093B0B1B0B1B2B2B1B2B2B2B5B8B6B9B63F00000000000000B8B6B2B5B8B8B9B9B5B5B2B2B0AC690000000000000000005EA8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1AC2200000000000000000090AAAAAAA7A7A7AAABA8ABACACAC8100000000000000000381B1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACAB960D00000000000000000000001AB5B1B1B5B1ACACACB0ACACB1B0AC64000000000000008DB2B2B3B3B1B1B0B1B2B1B1B2B3B35F00000000000000000068B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9A10F0000000000000000A5BBB9B9BCBFBFBDBDBDBBB9B94A0000000000000076C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBD860000000000000033BCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B82F010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E1E2DFDEDCDCDCE1DEE1E7F8D5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBC93000000000000006FBDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBF6D000000000000000000109CC5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCB51000000000000000004B9CAC9CEC9CECECECED0CED0CECACEAC0400000000000000001197C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C68D0400000000000000009BC9C6C6C6C4C4C4C5C3C36F0000000000000000000000000E87B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9AE23000000000000000000A2B2B2B1B2B2B2B5B8B6B9B6B2B6920000000000000000000000000058B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACAC5300000000000000000061ACABABABACACB1B1B3B3B2B2B2B1AC260000000000000000004EAAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1AB2800000000000000000043ABABACB0B0ACABABABABACB1B2B6B6B53F00000000000000B5B1ACACACB0ACACB1B0ACB0ACACAC1A0000000000000000005DB0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5A52200000000000000000050B9BBB8B5B6B6B3B5B9B8B8B9BCB9B92A00000000000000000386BDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C39B100000000000000000000000001DC1BFBDBDBDBDBDC0BDBDC0BDBBBC6B0000000000000094BFBCB9BBBBBBB8BBB9BCBCB9B9B9B5160000000000000000004DBCC1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5970F000000000000000048B5B5B5B8B9B9B9B9B8B9B9BBBD7B0000000000000009A8C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC193040000000000000086C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DF3A02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E6E9E6E4E6E6E9EAE9EBF4FDDED6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3AA0000000000000077D0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECE30000000000000000000004DBCC3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2971B00000000000000000064BCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBF5F0000000000000000000051B3BBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B14900000000000000000024B9B5B3B3B6B8BBB8B8B5B667000000000000000000000000000049AAB8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9A2230000000000000000002CBDBDBFBCBCB9BCB9B6B6B6B9BCB993000000000000000000000000000025A0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9C44A00000000000000000000BBC9C9CAC9C8C9C8C9CBCACAC9C9CBC9B10400000000000000000035ABC1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C08A0F00000000000000000015B1B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B34000000000000000B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8960300000000000000000033ACBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C48F1000000000000000000016BDC4C8C8C8C6C6C6C5C5C5C8C8C6C5C8B10400000000000000000056B9C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBB5A03000000000000000000000000001AB1B1B1B1ACACB1B0B0B0ACACACB0640000000000000087A8AAA8A5A5A5A7A8A8A5A5A3A3A3A3800000000000000000000011709997979796979B9B9E9E9E9EA1A2A2A3A59F4E020000000000000000089DA7AAACB1B0B1B1B5B5B5B2B5B3AC08000000000000000EA1B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C064030000000000000009C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBC30020202020202020102010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFE2E3E3E1DFDFE1DFDEEAF8D7CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C19B000000000000006DC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6A10F00000000000000000000034790B8B8B8BBB9B8B5B5B5B3B3B2B27B30000000000000000000001CB9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C42600000000000000000000095FA7C0C0C3C1C3C1C1C4C4C8C8C8AE61090000000000000000000097C5C5C5C5C5C1C1C1C4C1C370000000000000000000000000000000034992B9B9B8B8B5B5B2B5B5B5B5B5A44D030000000000000000000069B0B0ABA8A8A8A8A8ACABA8AAA8A58100000000000000000000000000000000236E979F9E9A999997979796979B945F120000000000000000000035A8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B56F000000000000000000000347A5B5B8B9B9B6B5B5B5B5B5B9B9B9B9943B000000000000000000000397C0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C44500000000000000CBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBC6A000000000000000000000353ACBDBDBDBDB9B9B9B6B9B9B5B9B9B98C2300000000000000000000039CB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBC5A00000000000000000000085CA2B1B1B2B2B1B2B5B6B6B6B6B6AE69150000000000000000000000000000001FC8C8C9C8C6C9C6C3C3C3C3C3C1BD6B000000000000009BC5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5630000000000000000000000257DB9BDBDC0C3C5C5C8C4C8C8C9CABB64090000000000000000000082C6C8CAC8C9C6C9C5C5C5C8C5C5C1C15F00000000000000000361B1B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBF761D00000000000000000064C0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D5D3D4D4D3D4D9D6E1F2D0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5670000000000000000000000000000000000000000000000000040B2B6B9B9BCBCBCBCB9BCBCBC8D030000000000000000000000000F3B6B7B94949494966C503003000000000000000000000003A3BFC1C1C3C1C3C3C5C9CACAC9C9CACACACACEC8110000000000000000000000001848748FA29F9F9E9776481800000000000000000000000046C5C5C3C4C4C6C6C5C5C4C1C16F0000000000000045000000000000000000000F335A72949696969672512A00000000000000000000000015B1B1B1B1ACACACACB1B5B8B8B9B8B38D000000000000003F0000000000000000000003264A6181898989897D5F300800000000000000000000000396B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB951000000000000000000000000306F9BBCBCBCBCBCBDC0C08D5A1C0000000000000000000000007DBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C14400000000000000B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0460000000000000000000000032F6997ACB1B3B1B1B1B1AC8656140000000000000000000000007DA8A8ABACACACABACACACACABABABABA8A8A8AB2D000000000000000000000000204B6B8D97B5B6AA9481582A0300000000000000000015000000000000001AB8B8B9BCB9BBBBBDBBBDBFC1C1C16F000000000000009BC3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C93800000000000000000000000004295F78A7A5A5A7A7967B4C1900000000000000000000000053CED0D1D4D3D4D3D3D0D3D3D4D4D6D6DAD10A000000000000000000043D7BABCAD1D1D1D0CECECEBDA2743F090000000000000000000010BDC4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C13202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7DADEDEDCDBDBDCDADAE1F3CFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B367000000000000000000000000000000000000000000000000003FB1B1B1B1B3B3B1ACB1B2B5B6B6870300000000000000000000000000000000000000000000000000000000000000000000027BAAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B69D0E0000000000000000000000000000000000000000000000000000000000000000000016BFC6C3C3C3C3C1C4C4C4C5C8C87200000000000000A5530000000000000000000000000000000000000000000000000000000000000000009CD1D4D3D4D3D3D0D3D3D4D4D6D6DADAAE00000000000000AE6E00000000000000000000000000000000000000000000000000000000000000000055C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BB40000000000000000000000000000000161D1D1D1E1000000000000000000000000000000072C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBF4300000000000000BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1450000000000000000000000000000001E1E1E1D1E100000000000000000000000000000006CB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCB32400000000000000000000000000000000000000000000000000000000000000004A78000000000000001FCECACACACED0D0D3D4D1D0D1D0D07700000000000000A3C9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1C828000000000000000000000000000000000000000000000000000000000000000000000023B1B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1780000000000000000000000000000000D1918180D0000000000000000000000000000000075A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A72A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD0D1D3CECBC9C8CBD0CBD6E9C6B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5670000000000000000000000000000000000000000000000000045C3C3C3C5C5C3C3C0BDBDC1C1C1C1900300000000000000000000000000000000000000000000000000000000000000000096E1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDAC314000000000000000000000000000000000000000000000000000000000000000012BCD7DBDBDBDCDBDBDCDBD9D6D3D07A00000000000000A2CA4A000000000000000000000000000000000000000000000000000000000000005CC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C49B000000000000009EC6480000000000000000000000000000000000000000000000000000000000000028C1C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCB4A0000000000000000000000000000000000000000000000000000000000000000000078D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E25500000000000000DFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDE510000000000000000000000000000000000000000000000000000000000000000000492E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4B91100000000000000000000000000000000000000000000000000000000000021A561000000000000001AB0ACA8A7A3A3A3A1A19EA1A19E9E5A000000000000007B9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7A21F00000000000000000000000000000000000000000000000000000000000000000020A5ACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBB6A0000000000000000000000000000000000000000000000000000000000000000000056C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACAC9CBCBCB3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9D9D5D6D7D3D5D3D3D6E1F6D0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B868000000000000000000000000000000000000000000000000003EB2B3B3B3B5B8B6B8B3B3B8B9B9B9BB970F000000000000000000000000000000000000000000000000000000000000038BC1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5B6260000000000000000000000000000000000000000000000000000000000000E9CB5B5B5B5B5B2B1B1B1B1ACACB1B0640000000000000084A8A851000000000000000000000000000000000000000000000000000000000034999997979796979B9B9E9E9E9EA1A2A2A3810000000000000082A3A55D00000000000000000000000000000000000000000000000000000000000E9EB5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C167000000000000000000000000000000000000000000000000000000000000000992BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBD4300000000000000B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B958000000000000000000000000000000000000000000000000000000000000000E84B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6AE26000000000000000000000000000000000000000000000000000000002EC0C672000000000000001FC8CAC8C5C8C4C3C3C3C3C3C1BFC06D000000000000009FC8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8C350000000000000000000000000000000000000000000000000000000000000002CB9C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBF5B00000000000000000000000000000000000000000000000000000000000000004ACBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC93302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFC0C0BDBFBCBBBCBDBDC6DFB8A7A5A5A5A7A5A5A5A7AAA7A7A7A7A75F000000000000000000000000000000000000000000000000003AAAAAAAABA7A7AAAAA7A7A7A5A7AAAAAA9C2D000000000000000000000000000000000000000000000000000000001488B1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B24E0300000000000000000000000000000000000000000000000000000028A4B0ACB1B3B1B1B1B1B2B1B3B6B6B5B565000000000000008FB3B2B07508000000000000000000000000000000000000000000000000000038A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F7B0000000000000080A29F9F670700000000000000000000000000000000000000000000000000001994ACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BB880F000000000000000000000000000000000000000000000000000000002FB3CED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D64E00000000000000D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D19E12000000000000000000000000000000000000000000000000000000002DABC0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9B53B000000000000000000000000000000000000000000000000000049B9BBBB6C000000000000001DBCBBBCBCB9B6B9B9B9B9B9BBB8B5680000000000000090B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B97208000000000000000000000000000000000000000000000000000000004BBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C18103000000000000000000000000000000000000000000000000000000000477CECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C332020202020201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E1E1E3E4E6E6E3E1E4E2ECF9DACACACACACAC9C8C8C9C8C8C6C9C9C9760000000000000000000000000000000000000000000000000045C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BD7B16000000000000000000000000000000000000000000000000004CA8ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABAB8D26000000000000000000000000000000000000000000000000035EB2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB96A0000000000000094B9B8B6B59E2900000000000000000000000000000000000000000000000376BCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BF97000000000000008FB2B2B1B1A2380000000000000000000000000000000000000000000000003DA5B1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACA54B030000000000000000000000000000000000000000000000000869ACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B13F00000000000000B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3BF4E00000000000000000000000000000000000000000000000000118BD3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D48E1200000000000000000000000000000000000000000000048ED6D3D1D17A000000000000001FC9C9C9C9C9C9C9C6C8C9C8C8C4C46F0000000000000097BFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBAC4100000000000000000000000000000000000000000000000000178DC4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3B33C00000000000000000000000000000000000000000000000000003DA0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C03202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5DFE1E1E1E2E1E3E3E2E2EFF9D7C8C8CAC9C9C9C6C9CACAC9C9C6C6C3700000000000000000000000000000000000000000000000000049CACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C57A170000000000000000000000000000000000000000003FA7C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C997360000000000000000000000000000000000000000034BAEBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C16D0000000000000099C3C4C6C9C9C9942600000000000000000000000000000000000000003FACC8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9A200000000000000A5CBCBCBCECACAAC400000000000000000000000000000000000000000189CCBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9AB490300000000000000000000000000000000000000000F64B5C0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB94100000000000000B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5A548030000000000000000000000000000000000000000166BB3B9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFB36308000000000000000000000000000000000000044EB5C4C5C5C5C672000000000000001FC3C3C3C6C6C6C6C8C5C5C5C4C4C672000000000000009EC9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0B0540400000000000000000000000000000000000000000A73D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBA73E0000000000000000000000000000000000000000000453BDE1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D03502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2BFC0C4C1C1C3BFC0C4C3CBDEBBA8A7A7A7A7AAAAAAACACB1B1B1ACAC9264676467686C6C6C51000000000000003C6D6D6D6D6D6F6E6E8DC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B68D4F150000000000000000000000000000001A589EB2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8A567290000000000000000000000000000001E65B3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACA75000000000000009FC8C9C8C8C6C9C9C9B164260000000000000000000000000000104DA5C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3A86A6D6B6B6A6A6CAEBDBDBDB9B9B9B9B9AA69290300000000000000000000000000032F7CB5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2AC75280300000000000000000000000000000E3F80B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B64100000000000000C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C07D2E0400000000000000000000000000000E3F7DB1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3AC75260300000000000000000000000000195A9FACACABACACACAC7E3B3B3B3B3B3B3B51A8A8A8A8A8A8A8A5A7A7AAACACAC9267676767696B69A8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBB37C3309000000000000000000000000000004368BC3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1B967290000000000000000000000000000000A3A8DCED3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D3D3D0D3D3D1CFCECBD9EEC9B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6920000000000000065B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFB5836340291C1D1C1C1C1C415A7AABBDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C494724F3F1E1E1E1E1E1E475782B3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C97600000000000000A8D4D4D1D3D3D1D4D0D0D0D0C996704C3021212121203B4D7BB3D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBA7815D4024232323242C537AA8DCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFB180583C2121222222214E6189BDD4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECE4900000000000000C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBD8C6C49331C1C1B1B1A1A3E4C6A97ABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A17554381E181818181831456796A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7AB8C65483A181818181919263D618FB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1A87D5E3E281B1B1A1A1B1A3F4D7597B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BB30020202020202020101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCDEDFDCDCDFDBD9DADAE4F6D0BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C69F0000000000000072C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCB7700000000000000A2C9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABAB3D00000000000000B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C33202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0C1C3C0C1C0C0BFC0C0BFC9DEBBAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B38C0000000000000064ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBD6C0000000000000093B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B53F00000000000000B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADB3902020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8CBCBCED1D0CFCBCEC9D6EBC6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B18D0000000000000064B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C57200000000000000A5D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B84000000000000000B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B82D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E1E2DFDEDBDAD9D9D6D6E1F6D0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBC98000000000000006CB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C16D0000000000000098C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C64700000000000000C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B62E01020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADADCDBDADAD9DEDEE1E9F9D7C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C19C0000000000000076C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C97600000000000000A3CBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B84000000000000000B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB930020101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E4E4E2DEDFDCDBDCDEDFEAF9D7C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C69F000000000000006DC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAA600000000000000089ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F3500000000000000A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BC2F01010101020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED6D9D9D9D9D9D5D7D7D3E1F3CEC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3900000000000000068B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1610000000000000088B0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBC4300000000000000B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0D0CBCED3D3CFD0D0D1DBEEC6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B28D0000000000000064B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3670000000000000082A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B03B00000000000000B0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9A7908F8F8F929494AEC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EAECECEFF1F1EFF2F2F2F7FFE2DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFB20000000000000081DFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0610000000000000090B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACAC3D00000000000000B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0650000000000000067B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C33202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C1C4C4C1BFC3C3C6C6C6D0E4BFACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0AC840000000000000061ACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCA7500000000000000AAD3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBD4300000000000000BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9750000000000000072C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C0C0C1C3C5C5C1C0C0C3C9DFBCACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAAB840000000000000064ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBF6D0000000000000096BDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C94800000000000000D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C172000000000000006FC1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E33E02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDB6BBBCB9B6B9B9BDC0C1CAE1BFACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB994000000000000006DBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C976000000000000009CC1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D34D00000000000000C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B96A000000000000006FBFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDE3B02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFE2E2DFE2E2E1E2E3E1ECF9D7C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CAA20000000000000072C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACAC610000000000000087ABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBD4300000000000000BDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C070000000000000006DBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D4D4D0D5D5D1D3D1D3DEF3CAB8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C67200000000000000A3CED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D04D00000000000000C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E580000000000000058A2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBB2E01010102020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9DBDCD9DBDBDADBDBDAE4F7D4C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2650000000000000083A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B94000000000000000B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B869000000000000006CBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD5D5D7D5D7D9D9D9D6D6E1F3CBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA85F0000000000000084A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B54100000000000000B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8740000000000000075C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CB3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7D9D7D1D3D3D0CFD0D0D9ECC9B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8680000000000000090B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0AC3D00000000000000B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BC6B000000000000006CBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDA3A02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECCFCECED0D1CFD0D1D1D1DCF3CBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CA841F1F2020202121AED0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0541A191A1A1B1B1AB0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA26B1817171717171768A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CE3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4DEDFDCDBD9D9DADEDEDEE9F8D7C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFDEDED9DAD7D9DAD7D7E1F3CFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECE3602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2C3C4C5C4C6C6C6C6C8CAD6EBC6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B92F01010101010101010202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D9DADBDADBDCDAD9DBDBE4F7D4C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBD30020202020101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D9D7D7D3D1D0CECBCBCEDCF1CBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0AB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8D0D0CECBD1D4D3D3D3D3DBEFC9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B62F020202020202020202010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEBDC1C3C4C9C6C6C6C6CAD5E9C9B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D3D0CECFCFCBCECECED9ECC9B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C93402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEBDBFBFB9B9B6B2B2B6BBC0D1B09F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C332020202020201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7D7D7D7D7D7D7D7D6D9E3F4D0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAA29010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D1CFCBCECBC9C9CAC8D1E6C1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAA2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB9BBB9B9B9B9BBBFBFBDCAE1B9A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFC3C0BFC0C1C1C6C6C9D3E7C3B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E33E02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCECBCBCACACACAC9C5D3EAC5B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9D9D7D6D7D7D9D9DADAE4F4D0C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C43302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EAEAE7E9ECEAE9ECEEEEF6FFDCD0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B62F010101010202010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D1D5D5D5D5D7D7DBDBDAE4F4D0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C43202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9DADCDEDFDFDADBDBDAE4F7D1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A72A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6CACECBCBC9C9CBD0D1DCF4CFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA82B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E4E2E3E1E4E2E1DFDFDBE4F6D3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B52E01010101010102020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCDBDBDADBDBD7D7D7DBE1F6D3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8C9C9C8CBC9C9CBCECED7EAC6B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA82A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CBCBCACACAC6CAC6C8C8D6E7C3B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D7D3D6D7D7D6DAD7D7E1F4D1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B62E01010102020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADEDEDCDADEDFE1E3E3F1FBDCCED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6AB6945222222222247639ED0D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD63802020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C8C6C5C5C6C9C8C6C3C6D1EAC6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A70000000000000000000000023F99A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B930020201020201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7EAE7E9E7E4E4E4E6E6F2FDDFD0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACE00000000000000000000000000047CC6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B12C010101010101010101010299FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D6D9DBDAD9DAD9DCDEDBE6F7D1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBD00000000000000000000000000000070C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCBCBCAC6CACACAC8CAD5E9C6B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B50000000000000000000000000000000081B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACA3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2C3C5C6C3C4C4C0C5C8C6D0E3C0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC00000000000000000000000000000000008B1B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CFCECFCFD4D4D3D7D9D4DFF6D1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBB000000000000000000000000000000000043BCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C33302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED1D7D7D7D4D3D1D3D3D3E1F3CEC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A700000000000000000000000000000000000086A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C43202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CECFCFCECFD1CECBCED0DAF2D0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B21547729290A5AC908C5208000000000000003DC3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBE1E1DFE1E2E3E3E2DFEBF9D7C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCAB23000000000000009CBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CB3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD7D9D7D9D7D3D0D3D1D1DEEFC9B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9AB0F0000000000003DC1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C63302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD1D4D4CFD0D0CFD0CED0DBF3CFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5810000000000000097B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C8CBCBCBCBCECFCBCACBD6E9C6B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B53000000000000035ACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A82A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBCECFCFCECECECBCACBC9D3E9C5B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5A500000000000004B6C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D03602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CBCBCECBC9C6C5C4C5C4D0E7C3B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C32500000000000057C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D73802020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E9EAE6E9EAEAEAECEEF1F8FFE3DBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A575000000000000069CA1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B12D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6C6C6C6C6C5C6C5C3CBE2BFACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9150000000000006DB6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB92E01010101020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9DBDCD9DBDBDADBDBDAE4F7D4C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDC8100000000000024DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CBCED1D0D0D3D5D5D6D6E4F6D3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0B60900000000000089B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB82D010102020101010101010299FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9DCDCDCE1E3E4E2E3DFE7F7D4C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B14D00000000000038B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C13302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD7D5D4D1CFD3CECFCECBD9EBC3B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFB58F6445251E1F10091F1E1E35456984B5C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3B17C6445251D1D1D1D1D455E74A5BBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A588644E3B1F1818181824394E7296A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8A278573F291A1A1A1C1C3A415B749CBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9B1B1C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B67200000000000003A5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC13202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCDEDBDADBD9D9DCDEDFEAF8D7C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B59B582100000000000000000000000000000000000E3E7CB3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A57A380C00000000000000000000000000000C366F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABA26D2C080000000000000000000000000000235EA2B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1727272757575779BCECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6974D0A0000000000000000000000000000000A3C7CC4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBAC5B200000000000001E2D4590C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9240000000000000063BBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B82E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C6C6C9CBCED0D0D1D0CBD3EAC6B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1772500000000000000000000000000000000000000000000000851A8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B16A1500000000000000000000000000000000000000000858A2A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B292430300000000000000000000000000000000000000003690ACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACAB000000000000003BABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACA25C08000000000000000000000000000000000000000000003086B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6AE4700000000000000000000000043BBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1A5000000000000000016BBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBD2F010101010201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADEE1DFDEDBDADBDBDBE3F4D0C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B66F15000000000000000000000000000000000000000000000000000000034EB9BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C58409000000000000000000000000000000000000000000000000046DCAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3B94B000000000000000000000000000000000000000000000000004CB6C1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C30000000000000047C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CB6E04000000000000000000000000000000000000000000000000000026A7C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C1260000000000000000000000000045C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8480000000000000000008CB8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACAC2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBD0D4D3D7D3D1D1D3D3DFF2CFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5971B000000000000000000000000000000000000000000000000000000000000000E85B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDA32A00000000000000000000000000000000000000000000000000000000169CBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC88D0900000000000000000000000000000000000000000000000000000011A2CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C50000000000000043B9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1A51D00000000000000000000000000000000000000000000000000000000000057C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCB5A00000000000000000000000000004BCECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C10900000000000000000035C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CED0CBCBCFCFCECFD0D1DAECC9B9B9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C99904000000000000000000000000000000000000000000000000000000000000000000006FC1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBF8F0F000000000000000000000000000000000000000000000000000000000000047AC5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8630000000000000000000000000000000000000000000000000000000000000475CECACECECED0CED0D0D0D3D3D1D1D0D0D0D0000000000000004AD0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C18003000000000000000000000000000000000000000000000000000000000000000024B5C0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDA500000000000000000000000000000041B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BB740000000000000000000000B6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C9C9C5C6C6C3C1C1C4CEE3C0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBD860000000000000000000000000000000000000000000000000000000000000000000000000065B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB064000000000000000000000000000000000000000000000000000000000000000000004ABCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBC4300000000000000000000000000000000000000000000000000000000000000000072C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1000000000000003EB0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1AC6100000000000000000000000000000000000000000000000000000000000000000000000E96ABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACAC5300000000000000000000000000000040B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBB1D00000000000000000000005FC1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D43702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4CACACACACACECBD1D0D0DCF2CEC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBC9D0300000000000000000000000000000000091D1D1E1D1E0000000000000000000000000000000083C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C06D000000000000000000000000000000031C1C1C1C080000000000000000000000000000003DB0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A53900000000000000000000000000000007171717170200000000000000000000000000005AA2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3000000000000003FB5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B96900000000000000000000000000000000161D1D1D16000000000000000000000000000000001FC0C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C41E00000000000000000000000000000054BCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B69000000000000000000000000008B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C63402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB9B8BBBDC1C5C3C6C6CAD5EAC3B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B91C0000000000000000000000001D5F80A2C1BDBFBFBFC1C1C1B1986433090000000000000000000003ABC4C8C5C5C5C4C4C5C6C3C5C5C5C5C5930300000000000000000000001F6492C4CBCBC9CBCAC9C19B642000000000000000000000000064CBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9740000000000000000000000002F6C9BCBCBCBCBC9CECBBB8D57100000000000000000000003A2C1C1BDBCBBBBB9B5B5B5B8B8B8B8B60000000000000040B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0840000000000000000000000001B5A81ABB8B9B6B8B6B2B5B188612A00000000000000000000000026A5A3A7A7A8ABACACACACACABACB0B1B1ACABABAC0000000000000000000837466461616493B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACAC3D0000000000000000000000000070ACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B32D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E1E1E1E4E7E7E9EBE9E7F3FDDCCECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B56D00000000000000000000085DA4B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABAB651F00000000000000000030A19E9E9E9F9FA3A29F9FA2A5A5A2890200000000000000000000307C9F9C9B9B9F9B9F9E9EA2A3A7A7A78C3400000000000000000000006DAAAAACACB1B3B1B2B1B1B5B5B3B8B6B68D0000000000000000000000489CBBBBB8BBBDBDBDBDC1BFC1C1C5C57A1100000000000000000018C6CBCBCED0D4D0D1D0D0D0D0D3D3D1000000000000004DD6D6D4D3D0D0CED0D0D3D0D3D3D3D4BC04000000000000000000044AACD0D1D0D0D0D4D1D3D3D6D4D1D1D4D0C3670A0000000000000000000075C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B69200000000000000005ABCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0B5030000000000000000000000000024BCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B92F01020102020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C1C3C5C0C1C5C0C0BDC0C6DCB5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA71400000000000000000353A8B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B87B08000000000000000096BDC1BFC1C1C5C5C5C9CACACECA2000000000000000000018A1D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6AB2100000000000000000004BBD4D4D4D4D4D3D4D4D4D4D4D3D0CEC61800000000000000000019A7D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C13E0000000000000000005CB9BDB9B9B8B6B9B6B2B6B6B6B6B60000000000000043C0BDBFBFBBBBBBBBBBB9B9BBBFBFBF2C000000000000000000239BBBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9AA4100000000000000000003A5B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5900000000000000023B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBD6D0000000000000040000000000000009DBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5CBCED0D0D1CFCAC9CACAD5E7C6B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C494000000000000000010A2BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6A20F000000000000003EB0B1B0B1B2B2B1B2B2B2B5B85700000000000000000029B1B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A79F3900000000000000000026ACB0B1B1ACABABACABABABACACB14D00000000000000000021AAACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACAC3D0000000000000000039DABABACACACACA8A8ACABABACB0000000000000003EB2B6B6B5B5B8B5B1B5B5B1B1B5B1690000000000000000003DACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B37503000000000000000038B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6770000000000000061B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C11700000000000009B60F0000000000004DC1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B32D010201010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBC9CACACAC9C5C9C6C8CEE2C1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBF540000000000000003A7BFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBC940000000000000008B9BBB8B5B8B8BBBBB9B5B3960300000000000000003FB8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BB4100000000000000000074BFBCBFBFBFBFBFBDBDBFBCBCAA03000000000000000023B5BFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C02D00000000000000005BC9C6C6C9C9C9C9CBCECECAC9C90000000000000049CAC9C9CBC9C9C8C8C4C5C6C4C1BB10000000000000000046C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B98803000000000000000097B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3670000000000000067B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C696000000000000004EC15E00000000000009BDC4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EBECF1EFF1F1F2F2F3F3F9FFE2DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CE180000000000000076C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6300000000000000096B1B1ACACB1ACACB1ACAB3400000000000000001E9FA5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA73A00000000000000000DA2A7A7A7A7A7A5A3A5A5A7A34000000000000000000890A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAA2140000000000000008ACB0ACB0B0B0B1B1B0B0B0ACB1000000000000003BABACACB1B2B2B5B5B8B8B8B3B361000000000000000023B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBB8803000000000000003EB2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5650000000000000067B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A733000000000000007B9E89000000000000005DA29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B22C01010101010101010201019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCFCFCECED0CFCFD3D3DEEFCABCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3D9000000000000001ADAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECE810000000000000077CACAC8C8C8C5C9C5C6A5000000000000000009B1C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6AC1A00000000000000005DB1B2B6B2B2B2B2B6B9B6AE0800000000000000006DB1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A37A00000000000000006DA7AAA8AAAAAAA7A5A39F9FA300000000000000379C9B9C9E9E9C9C9C9E9E9E9E9E12000000000000000288A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A76D0000000000000003A5ACB0B2B2B2B2B0B0B0B0B0B0B1B3B367000000000000005DA5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1A4030000000000001CBCBCB92A0000000000001CB5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B62D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2C6C6C6C6C4C4C3C4C4C4D0E9C5B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBC8D000000000000005BC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6900000000000000055C1C3C1C3C3C5C9CACA5100000000000000008BCECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3A5030000000000000017C3C4C4C6C6C5C5C4C1C181000000000000000025BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B63F000000000000002FB1B1ACACACACB1B5B8B8B9B80000000000000040B3B3B1B1B1B1B1ACABABABAB7E000000000000000046B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBC330000000000000072B9B9BCBCB9B8B6B5B5B6B9BCBCBCBC6B000000000000006CB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3670000000000000061B5B5B5750000000000000084B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAB9B9BBB6BBBFC0C5C4C6D0EAC6B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BD6D0000000000000088B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0970000000000000046C4C8C5C5C5C4C4C5BF090000000000000026C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED05300000000000000009BC9C9C9CACAC9C8C8C938000000000000000082C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5AB0000000000000003C1BDBCBBBBB9B5B5B5B8B8B80000000000000040B6B6B9B8B6B9B9B6B8B8B9B84F000000000000000093B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0AC90000000000000002BA7A7A8ABACACACACACABACB0B1B1AC610000000000000064B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB014000000000000039DACB1B1A80800000000000035ACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B12D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFC1C3C5C6C9C8C6C8C8D0E1BDB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B86100000000000000B1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9750000000000000048C9C9C9C9C9CBCED08D0000000000000000ABE1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DED0040000000000000050DBDADBD9D9D9DADAD60A0000000000000013DBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C63F000000000000008BC1C1C0C0C0BDBDBDBDBDBD0000000000000045C1C1C1C1C4C4C3C1C1C4C4C4100000000000000026C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CB3000000000000004C9D3D3D3D0D0D0CED0D0D0CECBCBCB770000000000000078D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D096000000000000003DD9D7DBDBDE5100000000000004D3E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E43D02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD7D9D9D9D5D5D6D4D1CED9ECC6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C89672747472727272C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBF160000000000000043BDB9B9B9B6B9B9B5410000000000000015B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B23F0000000000000008B2B2B1B2B5B6B6B690000000000000000052BCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBF870000000000000061C9C8C8C6C5C5C6C4C6C6C80000000000000045C3C3C3C3C3C1BFC0BDBDC0AB00000000000000006DCAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BD6D000000000000006DBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C535000000000000008DC4C6C6C9C9A3000000000000006CCBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCB3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBC9CAC8CAC9CBCBCECBD6EAC6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACAB3B000000000000000047A5A3A3A3A3A3A3A30C0000000000000048999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A786000000000000000094B5B3B3B3B1B1B36700000000000000007EB5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3BD040000000000002DC4C4C6C6C8C9CECECBCBC90000000000000045C1BFBCBCBCBCB9BDBBBBBF7D0000000000000000A5BDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0640000000000000065B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8B90000000000000009C3C3C3C1BDBCBC1D00000000000010C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C83402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0C0C5C4C3C4C1C1C3C4C4C9DCB9A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8B5370000000000000000007DC9CACACBC9C9C6B60000000000000000A5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBF09000000000000006DBDBDBDC0BFBFBC440000000000000000BDC5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACE0000000000000048CACAC9C8C8C9C9C8C8C4C65A0000000000000009C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8670000000000000067B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B658000000000000004FB5B2B2B0ACACAB5A0000000000000075A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1AC2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9D7DAD9D7D7D6D4D4D4DFF3CEBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A57A3902000000000000000000009BA8ABA7A7A5A5A56D0000000000000008A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA733000000000000003BAAAAAAAAABB0B01B000000000000001AB1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8000000000000003FB3B8B8B9BCBBBBB8B8B3B640000000000000002FB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A15A000000000000005A9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B070000000000000093A8ABA7A7ABA7AB9D030000000000002EACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCE3602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBDCDAD9DADBD9D9D9D9E3F4D0C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDA7753A080000000000000000000000002ABBBBB8BBB9BCBCB963000000000000002CC1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B861000000000000001CB9B9B8B9B9BBBD15000000000000003DC1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D10000000000000053E1E1DFE2E2E2E2E3E1DEE1230000000000000063DCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0770000000000000076C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBD7E0000000000000025C1C1C4C4C3C1C1C4C43600000000000000ACC6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCB3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADBDBDADBDBDAD7D9D6DEF2CEBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFA06F3D100000000000000000000000000000000092BCBBBBB9B9B9B9B9410000000000000045BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6930000000000000010C4C4C4C6C6C6C3000000000000000058C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6000000000000004ED3D4D4D4D4D4D4D4D4D6D6200000000000000081DBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1840000000000000083E1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1300000000000000078D1D1D3D0D3D0CECECE93000000000000005CCACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD6D3D1D1D1D1D1CFCEC9D3ECCAB6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3B084562804000000000000000000000000000000000000005ED1D4D7D7D9D9D7DBDB340000000000000086E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1B50000000000000000E6E3E3E3E6E6E4000000000000000088E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BF000000000000003FB1ACACABABABACACB0B0B000000000000000005A7B7D7D7B7B7C7E7E7E7E7C7C7B7B7B787B7B7B787A7A7A7D7B7C7E808383838386868784838383808188A7A7A3A3A3A3A3A7A7A7A7A8A8A85F0000000000000064B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBA20000000000000003BBC1C3C3C6C4C1C4C4C3C30F00000000000009BBC1C4C1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C5C6C4C5C6C5C4C6C9C9D3E9C5B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6C5905A2B0000000000000000000000000000000000000000000000004AC9C9C6C6C6C6C6C6C8C51E000000000000006DBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C60000000000000000C0BDBDBDC0C1C1000000000000000070C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECE000000000000004CD1CECED0D0D0D0D0D0D0D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024E1E1E2E4E3E3E4E6EAE6E6E3E3E3880000000000000088E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDA63000000000000004ACBC9C8C8C6C5C5C5C3C1C1550000000000000077BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9F28010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C5C6C6C6C6C4C0C0C0BDC3DAB6A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6A15A1C0000000000000000000000000000000000000000000000000000005AB9BBBBB8B9B9B9B9B9B9BC1C000000000000007DBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C00000000000000000A8C3C6C9CBCBC9000000000000000077CAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C10000000000000041B9B9B8B6B8B8B8B8B8B8B300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001DC4C6C4C6C6C4C4C3C4C4C8C4C3C16E0000000000000072C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5BD09000000000000008DBFC0C0C0C0BDBDBDC0C0BCA50000000000000023B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E26010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E4E1E4E4E6E9E4E4E6E3ECFCDCD4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC17D2800000000000000000000000000000000000000000000000000000000249EC0C0C1C0C1C3C3C3C0C0C1BF1C0000000000000090B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3000000000000000096BDBCBDBDBFBC000000000000000096C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BD0000000000000043C0C0BCBCBBBBB9B9B9B9B8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018A1A19E9E9E9E9F9E9A999997979754000000000000005AA2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B06D000000000000000EB3B1B1B3B3B5B6B5B5B8B9B9B629000000000000009BBCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBC3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C9C6C4C3C4C4C5C3C4C4CBDEBFB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9BF6909000000000000000000000000000000000000000000000000000000003C90C1C1C1C1BFBFBFBFBFC1BDC1C1C11D000000000000009BC0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9000000000000000090B6B6B9B9BCBC000000000000000078C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CE000000000000004AC9C9C6C6C6C8C9C9CAC8C800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001AB1B3B5B3B6B3B1B1ACACB1ACACB161000000000000005BA1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA71F000000000000004EA5A5A7A5A5A5A7AAA7A7A7A7A765000000000000003AA3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0AC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C4C5C6C8C9C9C8C9C9CED3EAC9B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D498120000000000000000000000000000000000000000000000000000002065BCCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C11D000000000000006DBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C30000000000000000B9C1C1C5C5C3C3000000000000000072C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1000000000000004CD0D0D0D0D0D0D1D4D7D7D9220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036E3E4E6EAE6E6E3E3E3E6E6E4E4E4880000000000000088E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAB50000000000000000B9C6C5C5C5C3C1C1C1C1BFC0C3C4BD0300000000000003AEB5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A72A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBCED1D0CECFCBCFCBCED5EAC9B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACA5A00000000000000000000000000000000000000000000000000002664A7C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C51E0000000000000070C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3A50000000000000000ACACACACB1B5B80F0000000000000065B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B80000000000000041B9B9B9B9B9B9B9BCBCB9B81B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041B9B9B8B5B5B5B2B2B1B1B1B3B3B3640000000000000061B0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1470000000000000029B5B2B0B0B0ACA8A8A8A8ABACACACAB3D000000000000005FA8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BB3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEBDBDC1C0BDBDBBBCBDBDC9DBB8AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B55F0000000000000000000000000000000000000000000000224775AEB9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C144000000000000005BBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACAA20000000000000000CACACACBCACACA1F0000000000000057C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBC0000000000000041B9B9B9B9B9B9B6B6B3B3B330000000000000001419191A1B1A1C1C1C1C1A1A1A1A1B1A1A1B1A1A1B1B1B1A1A1A19191919191A191914000000000000003FB5B5B5B2B2B1B0ACB1B1B1B1B3B2650000000000000068BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6AC08000000000000007CC0C0BDBBBBBBBBB9B9B9B9B9BBB8BB960000000000000016C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACAC2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDADFE1E1DFDFE1E1E2E2EFFCDCD0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B59403000000000000000000000000000000000000142E517DA2ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8470000000000000036B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C382000000000000001EC4C5C8C8C5C6C940000000000000004ACECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADB000000000000004ED6D3D6D3D1D1D1D0CECECE4A000000000000006BC9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BB780000000000000069BCBCBFC1C1C1BFC0BDBDC0C1C1C16F0000000000000072C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBC6D0000000000000009BCC3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1160000000000000090C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B93002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CAC9C9CACACACACACBD0D7EBC9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BD3A00000000000000000000000000000833588CB2BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B967000000000000001CB8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C156000000000000002DC3C0BDBDC1C1C155000000000000001FC9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDA0000000000000053E1E1DEE1E1DEDEE1DCDBDB810000000000000047DAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCB6F000000000000007BC6C6C8C5C5C3C3C1C1C0C0C0BDBD6D000000000000006EC0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C11D000000000000004EC3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3670000000000000040CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D13702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD9DBDBDCDADEDCDFE2E2ECF9D9C9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABA5030000000000000000000000285A8FB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABAB880000000000000000A5B0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB026000000000000004DB2B3B3B1B1B0B1750000000000000000ACB8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBD0000000000000041BDC0C0C0C0C1C1C5C5C3C3990000000000000016C1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBB3A000000000000009BBCBCBCB9BBBDC1C1C0C1C3C1C3C16D0000000000000067B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B890000000000000000093B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1B30000000000000000B3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E23D02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7B6B5B2B2B5B9B9B5B3B3BBD1ACA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6770000000000000000000864ACBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBF00000000000000007DC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC1000000000000000088CAC9C9CBC9C9C8B000000000000000008BC3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8000000000000003FB5B3B3B2B2B1B2B3B3B3B5B10000000000000000A3BFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C31600000000000000C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8720000000000000072C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBB41000000000000001AB5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACAC2F0000000000000053ABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA82A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCE1E3E4E6E2E4E4E4E1ECF9DBCACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0AC55000000000000000038AEB5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A51E0000000000000030A3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA26300000000000000009DA7ABABABABAAA7A70D000000000000003EB1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC11D1E1E1E1E1E1F64CACECACECED0D1CECECECB000000000000004BD0D0D3D3D1D4D3D0D3D6D3D32A0000000000000067D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6BB0000000000000028CED0D0CBCECBCECBCBC9C9C5C4C3C36E000000000000006DB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCB5030000000000000063BBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B983000000000000000FBCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B930020202020202020102010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5CAC6C6CAC9C9C5C6C6C5D0E2BCABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D04D0000000000000021C9D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DB6D0000000000000004C6CECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBF240000000000000023B9B9B8BBB8B8B8B9B94A0000000000000009B9BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB989000000000000005BBDBBBBBCBFBCBCBDC0C3C30000000000000045C1BFBFBFBFBFC1BDC1C1C1C160000000000000000FBDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B667000000000000005AB9B9B6B6B6B9B9BCBCBBBDC0C0C0C0700000000000000075C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C86C0000000000000004BBCACECACACACED0D0D3D4D1D0D1D0D0CECECED0D10A0000000000000082C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B92E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBCECBC9C8CBCFCACAC9CAD3E9C6B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD04A0000000000000097D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3BF00000000000000007ADCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3B0000000000000000075E4E4E4E4E3E3E4E2E2A500000000000000008BDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C55F0000000000000078C4C1C1BFBCBCBCB9B9B6B5000000000000003DACB0B0B0B0ACA8A7A3A3A3A184000000000000000061A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7180000000000000077A3A7A7A7A7A8A8A8A7AAAAAAAAAAAB610000000000000064B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9150000000000000034C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C158000000000000002DC1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACAC9CBCBCBCECECA3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFD0CECBCECAC8C6C6C6D0E3C0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBD4300000000000000C1C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C82600000000000010C8C8C6C6C9C6C8C9C9C9C91F000000000000000ABCCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CB280000000000000000BDCBCBC9C6C4C1C1C1C1C1100000000000000015B2B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0160000000000000099B6B9B9B8B9B9B9B9BBBBB90000000000000040B9B5B9B9B8B8B5B6B6B9B8B6B61B0000000000000015ABB6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C18F000000000000000FBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BF6D000000000000006DBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C39600000000000000008DC5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5AC0000000000000000A5C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D43702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D5D7D9D7D9DBD9DBDEE7F8D4C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C54700000000000000C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC91800000000000039CACECECBCBCACAC9C9C9CA7E000000000000000047C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C67200000000000000003DC1C1C1C1BDBCBBBBB9B5B558000000000000000057B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2850000000000000003B9B9B8B9B6B8B6B2B5B8B8B9000000000000003DABABABA7A7A7A5A3A7A7A8ABAC6100000000000000004BABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A719000000000000004CB1B1ACACB0B1ACACACB1B1B1B2B1ACAB610000000000000061ABACB0B0ACABABABABACB1B2B6B6B5B5B8380000000000000008ACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1210000000000000047B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBF3002020202020102020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB6B8B8B6B9B9B9BDC0C0C9DFBBAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B64E0000000000000097B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACEAA0000000000000064CBCED0D4D0D1D0D0D0D0D3CA0A000000000000000090D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0AC040000000000000000A1D6D4D1D1D4D0D3D0CECECEC00400000000000000049CC4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9230000000000000033BFBFBBBBBBBBBBB9B9BBBFBF0000000000000045BCB9B9B9B9BBBBBBBBBCB9B6B6B108000000000000000078B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B86100000000000000009BB9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B969000000000000006BBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6AA030000000000000051BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1700000000000000009C1C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DBDADCDBE1E1E1E2E1E3ECFBDACBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B16D000000000000005FB3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B83A00000000000000A2B8B8B9BCB9B9B9B6B6B9BCBB6900000000000000000389BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFA81000000000000000003CBDC0BDBDC0BDBBBCBCBCBCBCBC4900000000000000000FA1BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBC5C00000000000000007AB6B6B3B5B3B3B5B5B8B8B6B6000000000000003FB5B8B9B9B9B9B8B9B9BBBDBBB8B86100000000000000000390C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C997040000000000000040C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDE840000000000000086E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1700000000000000000C5DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D0040000000000000088D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C03002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEACFCBCFD1D3D0CFCFD1D1D9EBC6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B59D000000000000000EA7B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0610000000000000015B5B5B5B5B5B5B3B3B1B2B1B1B0B01400000000000000000381AAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5A10F0000000000000000039DC0BFBFBFBFBFC1C0C0BCC0BCBCAC0800000000000000000E9CB5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACAC81030000000000000008B2BCBCBCBCB9BCBCBCBCB9BCBC0000000000000045BFC1BFBFBCBCBCBCBCBBBDBBB8B5AC0E00000000000000000381BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D09C040000000000000000AACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5700000000000000070C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0100000000000000023B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B33F000000000000001AB1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B22D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E3E6E9EAEAEBE9EAE7EAF4FFDFD6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C81F0000000000000028C9CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBB6400000000000000005AB9B9B9B8B8B6B6B6B6B3B1B3B5B390000000000000000000036FA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5740800000000000000000050A8A8ABA7A7A5A5A5A7A5A5A5A7AAA76D000000000000000000026BA7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA76703000000000000000041A5A7AAAAAAAAAAABB0B0B1B0B0000000000000003EB0B0B0ACB1B2B1B1B0B0B0B0ABABAC780000000000000000000050B2BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B96803000000000000000048B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0AC640000000000000067B6B6B5B5B2B1B1B1B3B1B3B5B5B3B27B000000000000000067B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E75000000000000000081A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACAC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9D7D9D9D5D3D3D5D6D6E1F3CEBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBB6400000000000000001FA7C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFA034000000000000000004B9C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8560000000000000000000034A4C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9BB490000000000000000000026C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B932000000000000000000002590C1C1C1C1BDBFBFBFC1C1C1C0C0BDBF9E2400000000000000000003B3C4C8C5C5C5C4C4C5C6C3C5C5C50000000000000047C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCA51000000000000000000001178C6CACECECBCBCACAC9C9C9CACAC9C8C8972600000000000000000011C3C9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9720000000000000070C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5300000000000000003AEB6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2150000000000000041B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C1C5C4C1C4C1C1C3C5C9D3E4C3B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCD514000000000000000000479EDBDBDBDADBD9D9D9DADAD6D4D4C48E3D0000000000000000000058D6D3D0D1D1D1D1D0D0D0CECACACBCBCECB2F00000000000000000000003E8BC1C1C0C0C0BDBDBDBDBDBDBD9045030000000000000000000010B2C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5BC1E00000000000000000000001E619BC3C3C3C3C3C3C1C1C49E6B20000000000000000000000072D0D0D0CED0D0D0CECBCBCBCBCBD0000000000000004CD3D3D3D0D3D1D0CECED0D0D0D1D1D4D1C92900000000000000000000000A4E90C8D9D7DBDBDEDBDEDED9AB721C0000000000000000000000A7DBDBDBDCDEDEDEDEDEDEA7838483838383838348000000000000004A88888B8888878787C4E6E4E4E4E4D3000000000000000056E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9630000000000000003B1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A228010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D7D4D7D3D4D1D0D1D1D1DBF3CBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B072000000000000000000000003213E5A6161616467644536150000000000000000000000000EA7ACA8A8A8A8ABACACACABACACACACABABABA314000000000000000000000000082C516188888C8D6F5830080000000000000000000000000392B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDA71000000000000000000000000000001E2546463D1E1E000000000000000000000000000030CECECED0D0D3D3D3D0D1D0D0D1D1D0000000000000004ACECBCACACBCED0CECED0D1D4D3D4D3D3D0C31200000000000000000000000000001323464D4D4D211900000000000000000000000000005AC9C9C6C8C9C8C8C4C4C1C445000000000000000000000000000000000000000000000000006ABCBBBBB9BC53000000000000000090C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9AC000000000000000064BCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BF3202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CECFCFD1D4D4D1D3D3D7DFF3D0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDC5A00000000000000000000000000000000000000000000000000000000000000000000009CD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1C929000000000000000000000000000000000000000000000000000000000000000000001094C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8A20F0000000000000000000000000000000000000000000000000000000000000000000E9CB2B2B1B1B1B1B1ACACACACACACACAC0000000000000039A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7900D0000000000000000000000000000000000000000000000000000000000000000000038A5A5A7A5A5A5A5A7AAAAA8AC3D000000000000000000000000000000000000000000000000005EA8ACACACAC08000000000000000EB0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACAC2E0000000000000015B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB930020101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E7E4E4E4E2E2E4E7EBE7F3FCDCD0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C94A0000000000000000000000000000000000000000000000000000000000000000006EC1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8AC2200000000000000000000000000000000000000000000000000000000000000000FA3BFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4AC170000000000000000000000000000000000000000000000000000000000000010ACC5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C00000000000000041BBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B19B19000000000000000000000000000000000000000000000000000000000000000039A3A3A3A1A19E9E9E9E9F9E9A9934000000000000000000000000000000000000000000000000005DA5A7A3A76F000000000000000056B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBD7C000000000000000086C0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBB3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFCBC9CBCBD0CFCECAC9D3EBC9BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBD4B0000000000000000000000000000000000000000000000000000000000000361ACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A33F000000000000000000000000000000000000000000000000000000000000249FA5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5AC30000000000000000000000000000000000000000000000000000000000016A5BDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C60000000000000047C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCB53A00000000000000000000000000000000000000000000000000000000000057B6B6B8B8B9BBBBBBBCBCB9B9B5B8400000000000000000000000000000000000000000000000000064B1B1B2B2280000000000000000AAB9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1090000000000000035C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC0C1C1C0BDBDC0C0C0C1CEE3BFABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4900A0000000000000000000000000000000000000000000000000000001AB3DCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6981200000000000000000000000000000000000000000000000000000977CBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBD7E09000000000000000000000000000000000000000000000000000047C1C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C30000000000000045C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D08C1100000000000000000000000000000000000000000000000000001297D4D1D1D1CECED0D0D0D0D0D0D0D0D14E0000000000000000000000000000000000000000000000000081DBDBDBC1000000000000000034E1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3670000000000000000D4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C130020202010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CAC9C9CBCFD3D0D1D0D0DBF3CEBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFB14D0300000000000000000000000000000000000000000000001E7BC9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3C9700A00000000000000000000000000000000000000000000045AC9DADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C15A0900000000000000000000000000000000000000000000158CBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C10000000000000045C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCB5630800000000000000000000000000000000000000000000034DB6BFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C144000000000000000000000000000000000000000000000000006EC3C3C14C00000000000000007AB9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5A500000000000000005AC5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C83402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFD3D7D6D5D7D9D7DAD7DEF2CEBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0BF64110000000000000000000000000000000000000A389BD0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1D77B25000000000000000000000000000000000000126FCEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3DB7C240000000000000000000000000000000000002B8CDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C11D1D1D1E1E1E1E5FBFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A39D5C2400000000000000000000000000000000000007448D9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A75018181819191818180C000000000000000D191919191919191972B1ACAC26191A1A1A1A1A1A23B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3341E1D1D1D1D1E1E2DC1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C93402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6CACBCECECBCBD1D1DCF2CEBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3AB69300A00000000000000000000092F5A8FC9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCA363320F0000000000000000000009345F99C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1A76E3C1600000000000000000000092C5FA8C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDB1764516000000000000000000000026588DC5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0780000000000000077CECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A52A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C3C5C5C4C3C3C3C5C3C1CBE4C1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9BBA2907677778BA7AAC6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBAEB07E7E7E80AEABCED4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0A796866D6D6D7596A7C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3BBA8967878778BA5B8CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CE770000000000000078D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCB3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D9DAD7D9DAD7D6D7D4D4DFF3CFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A35A000000000000005A9F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCB3602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEBCBDBDB9BBBBBDC1C1C3D0E9C6B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A75D0000000000000061A7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B22C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D7D7D7D7D7D7DADEDFEBF9D7C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DF81000000000000007CD4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B22D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDBBBCC0BBBCBFBDBCBBBBC3DAB8ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B968000000000000006AB9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B32D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED6D5D5D7D7DADCDFDEDBE7F7D3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBB6D0000000000000068B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAA2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDBBBCBCBFBCBCBDBFBDBBC4D7B6A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B969000000000000006DB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B12D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7D7D7D5D7D7D5D5D6D9E3F3D0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C572000000000000006FC0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9F28010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED6D9D9D9D9D9D5D7D7D3E1F3CEC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0AA454547464647487CC8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B968000000000000006DC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C5C6C4C1C5C9C4C5C5C5D1E4C5B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBA20000000000000047C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3670000000000000069B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DEDCDCD9D9DBDCDEDEDEE9F8D4C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C89C0000000000000047C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DB810000000000000081DBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D5D9DAD9D5D5D5DAD6E4F7D3C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B38F000000000000003DB0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC872000000000000006FBFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D4D1D3D3D5D5D6D9E1F3D0C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEB30000000000000054DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBC6E000000000000006CBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9E28010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFBCBCBBB9B8B9BBBDC0CBE1BDACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBA50000000000000047C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4A575777777767676ABCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDF3C02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C8C9C9C6C6C9CBCBCED1D9F1CBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A380000000000000003BABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B12D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EFF1F1EFF2F2F1EFEFEFF8FFE7DFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACAC88000000000000003BAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C93402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DFE1E1DFE2E3E3E1DFE1ECF8D7C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6900000000000000043BDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCA3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CACACECBCECFCECFD0D0D9EBC6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B18D0000000000000040B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BC3002020202020101010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0CFD1D0D1D1CED1D1D6E4F6D5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0BD7777777778787BA1D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CED0D3D1D3D3CECFD0D0D9EEC9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD03702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFE1DCDCE1DEDCDADBD9E4F7D0C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECE3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBCBCBCBD0CBC9CACBC9D5EEC9B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AA2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB5B2B2B1B2B1B5B8BDB9BFD7B19F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7D7D7D7D7D7D7D5D9D9E1F4D0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAB9B9BBB9B9B9B9BCBFBFC6E1BDA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAAC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD3D7D7D6D7D7D6D9DBDBE4F6D1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBBBBFBFBDBFBFBFC4C4C6CEE3BDB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD5D5D7D3D0CECBCBCBCED7ECC9B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC93302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6B2B1B5B6BCB8B5B8B6B3BDD1AC9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAAC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFE1DFDCDFDEDFE2E2E2EBF8DAC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECE3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBCECECACAC9C8C9C9C9D1E7C1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC93302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7C8CBC9C8C9C9C8C9CECED7ECCBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C130020202020201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D1D3D3D1D3D3CFCECAC8D5EAC5B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBB2F01020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFD3D3CFD3D5D5D5D6D9E3F7D5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B93002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D5D4D3D4D3D1D3D6D6E1F6D0BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E26010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD3D3D3D1D7D9D9DEDBDBE6F7D3C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C63302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEB9B6B9B9BBB8B9BFC1C5CEE6C1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B22C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5B2AEB2B1B1B5B6BBBBBBC6DCBCA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B32D010101010102010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC0C3C6C5C9C9C6C6C8C5CAE1C0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E23E02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CECFCFCED0CBCFD3D3D4DCF3D0C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7E9E7E4E4E4E3E1DEDEEAF8D7C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CBC9C9CBCFCECBD0D4D4E1F3CEBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B82E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBCAC9C8CACACACACBCBDAECC6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D13702020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C9C9C9C9CBCBCACBD0DAECC9B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACAC9CBCBCBCECECACECECACBCBCBC9C6C93402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C5C6C4C5C6C5C4C6C9C9D3E9C5B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9F28010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C6C6C5C6C9C5C9CACAD3E7C0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACAB2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED3D5D5D5D9DBD9D5D6D6E4F4D3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DADBD9D9DBD7D7D4D4D4E1F6D3C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AA2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E4E6E2E4E4E3DFE1E2E6ECF9D9CED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBF3002020202010201010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEBCB9B6B6B3B3B6B9BBBDC1D7B3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C1C3C0C1C5C5C6C6C6C5D0E6C3B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B22D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DEDBDAD9D9D5D5D5D9D6DFF3CABDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B93002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C3C6C6C5C5C5C1C3C3C3D0E9C1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB12D01010101010101010102029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DBDADADADBDBDBDBDADBE4F7D3C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBD30020202020201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9DEE1DCDBD7D7DADBDBE9F8D4C9C6C4C3C3C5C4C4C4C1C1C1C1C0C0C0C0BFBFBDC0C0C0BFBCB9B9BBB8B9B9B9B9B9B9BCB9B8B8B9B9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B5B6B5B8B8B9B5B5B6B9B9BBBBB9B9B9B6B3B1B1B1B1B0B0ACACB0B1B1B1B1ACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5A8ABACACACACACACACACACACACACB1ACB0B2B5B5B5B8B8BBBBB8B8BBBBB9BCBCBFC0C0C0C0C1BFBFBFBFBFBFBFC1C3C5C5C5C5C5C8C8C8C4C8C9C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACAC9C9C6C6C3C3C5C8C8C8C8C8C8C6C6C3C6C8C8C9CBCBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D5D7D6D7D7D1D4D4D4E1F4D0C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDC3A02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D3D3CECFCFCECECECED6EBC5B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D03602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D7D3D5D4D3D1D6D6DEF3CEBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBB3002020201010101020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6C9C9C9C9C9CECBCECED1DCF2CEBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB82D010101010101010202010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9D5D5D6D4D0CBCECECBD7ECC9B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECB3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0DCDEDFE1E1E1DFE1DFDFEBF9D9CACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE13B02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6C9CBCACECAC6CBCED9EFC9B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E43D02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDADBDBDBDFDFDEDCDBDBE1F3CFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8979090898D8C8DACB3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B69B89696868686F90A5B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F8D7C7B7B7E808290A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D03802020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0D1D1CFD3D0CBC9CACAD7ECC9B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBC9C64331600000000000000000008235281B3BDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBB9654250000000000000000000003255782BCC3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9885428200A2020539CD0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CEC59275514A4A4B7780A5C9D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9B684511F04000000000000000000163B6DA7BCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C432020202020202020202020199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCDCDFDFE1E1DFDEDEDBE4F7D3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABAB190000000000001AB0B0B0B2B3B3B2B5B5B5B2B2B1B0000000000000003FB2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B58F000000000000006DC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBD0000000000000045C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3A2580E0000000000000000000000000000000000032F81ACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8610000000000000088ABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B38F000000000000003FB3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBB6D000000000000006FC1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C94800000000000000CECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D184200000000000000000000000000000000000043A84CAD4D4D6D6DADADADADBDBDBA71B0000000000000000007AD1D0CECECECEC9C8C6C9C9C9C9C9C9C9B64704000000000000000000001DBFBFBFBFBCBCB9BBBBBB6C0000000000000090B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C481350000000000000000000000000000000000001D64B5BBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBF97000000000000006FC4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4460000000000000094B9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C93302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CFD1D4D0D1D3D5D9DAD6E1F3D0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C51E0000000000001FC9C5C8C8C8C9CED0D0CBCECECEC9000000000000004CD0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9A30000000000000078CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C40000000000000043BBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1974303000000000000000000000000000000000000000000001F6EABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AA5F0000000000000081A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAA86000000000000003AA5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0AC640000000000000061ABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B23F00000000000000B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBB9C1C00000000000000000000000000000000000000000000084FA5B2B1B1B1B3B1B3B587030000000000000000000067B1B1B1B1B2B2B0ACABABA7A5A7A7A77C0D0000000000000000000000001E9F9FA2A5A5A29F9F9E9F58000000000000007C9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7AB6714000000000000000000000000000000000000000000000847ABB2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C59C0000000000000077D0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D64E00000000000000A7D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C53202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D1D1D0D3D3D1D3D0D0DAEBCAB9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C11D0000000000001EC1C1C5C3C3C5C9C8C8C6C5C5C6C40000000000000047C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9A20000000000000072C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BD0000000000000040B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBF640300000000000000000000000000000000000000000000000000002DABC6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C97500000000000000A5CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C99F0000000000000047C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C16F000000000000006BBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B64000000000000000B1B0B1B2B2B1B2B2B2B5B8B6B9B6B280030000000000000000000000000000000000000000000000000008569DA7A7A8ABACA508000000000000000000000061ABABACACB1B1B3B3B2B2B2B1ACAC9203000000000000000000000000003DACB0B1B1B1ACACB0B1AC610000000000000087ABACACACACA8A8ACABABACB0B0ACABABABABACB1B2971B0000000000000000000000000000000000000000000000000000086BB2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B38F0000000000000067B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9430000000000000096BDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBC3002020102020202020102029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD1D4D5D5D5D5D1D3D3D6E1F2CEBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3180000000000001AB0B1B1B5B5B5B2B5B3B3B3B1B1B30000000000000041B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C39E0000000000000074C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C90000000000000043BCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6A22300000000000000000000000000000000000000000000000000000000000378B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2650000000000000090B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C99E0000000000000043BCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8740000000000000070C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C94900000000000000CAC8C9C6C9C5C5C5C8C5C5C1C1C36F00000000000000000000000000000000000000000000000000000000001090C0C0BDBF6400000000000000000000000072C8C5C5C5C4C4C5C6C3C5C5C5C5C51E00000000000000000000000000004ACBCBCBC9CBCAC9C9CAC97700000000000000A5CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C86900000000000000000000000000000000000000000000000000000000000036BDC5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5900000000000000067B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8400000000000000090B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EAECECECF2F2ECEBECECF4FFDFD4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D42200000000000022D4D1D1D1D1D1D1D1D1D1D1D0D0D1000000000000004ACECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C09B000000000000006BBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6000000000000003BB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1840E000000000000000000000000000000000000000000000000000000000000000040A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9F5A000000000000007A9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A783000000000000003AA7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2640000000000000067B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABAC3E00000000000000B2B3B1B2B5B2B2B6B8B8B8B9BC8D030000000000000000000000000000000000000000000000000000000000000052B1B9B82A0000000000000000000000006CBBBBB8B8B5B8BBBBBDBDBDBDC0960000000000000000000000000000003FB2B0ACACB0B0B0B0ACAC610000000000000086AAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0AB3000000000000000000000000000000000000000000000000000000000000000000D94ACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BC94000000000000006DBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B63F000000000000008FB5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB82D010101010102010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDADBD9D9D7D5D5D4D3D4DBF3CFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B91C0000000000001CB8BBBBBDBFC1C1C1C1C3C0C0C3C30000000000000043C1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9A20000000000000080DBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDE0000000000000051E1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDAA704000000000000000000000000000000000000000000000000000000000000000000004ACBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C16E0000000000000096BDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1990000000000000046C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6750000000000000077D0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED04C00000000000000D0CECED0D0D0D1D1D4D1D1D1C61100000000000000000000000000000000000000000000000000000000000000000023C5DC0400000000000000000000000084DEDEDEDEDEDFDFDFDFE1E1E2E45400000000000000000000000000000054E3E4E2E2E4E2E4E4E4E48600000000000000AEDCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C026000000000000000000000000000000000000000000000000000000000000000000000E99B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A27E00000000000000589E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3380000000000000084A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C13202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFE1DFDCDFDEDFE2E2E2EBF8DAC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC11D0000000000001DBFC1C1C4C6C4C6C6C4C4C3C4C4C80000000000000045C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C199000000000000006EC0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8000000000000003FB5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A87D02000000000000000000000000082B3F5B5C635C5B4C371200000000000000000000000000359B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A75B000000000000008CB0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B58F0000000000000043BCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5740000000000000076CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBF4400000000000000BDBDBDBDB9B9B9B6B9B9B5B949000000000000000000000033739CBCB9B9B5B8B89E875F380E00000000000000000000088700000000000000005D8C938D6D93B2B5B6B6B6B6B6B6B9B9BDBBBB1C00000000000000000000000000000047C6C9C6C3C3C3C3C3C1BD6B000000000000009BC5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8260000000000000000000000000024436570727A7472472E0400000000000000000000000004B1C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C19B000000000000006AB9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBD430000000000000096BDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECE3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBCECBC9C8CBCFCACAC9CAD3E9C6B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DF2400000000000024DEDEDFDBDBDBDCDCDADCE1E1DFDC0000000000000053DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBB1000000000000007AD1D1D0D0D0CECACACBCBCECBCBC9C9C6C60000000000000046C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1A81000000000000000000000034D9BC3C1C1C1C5C6C6C9C5C5C3B36516000000000000000000000056C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C97700000000000000A7D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3A7000000000000004CD4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDB830000000000000087E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDE5100000000000000E2E4E3E3E4E6EAE6E6E3E3D30400000000000000000054D4E2E4E4E4E4E2E2DFDCDADADADADABB64130000000000000000000000000000000057C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBC0000000000000000085287ACACB0B0B0B0ACA8A7A3A3A3A1A19EA15A000000000000007C9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA23900000000000000000000001E6B9FA7A7A3A3A3A3A3A7A7A7A7753400000000000000000000000E9FACACB1B0B0B2B5B5B9B9B9B6B9BBBD940000000000000069B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C547000000000000009BBFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACAC9CBCBCBCECECA3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CBD1D0CBCED1D3D4D3D3DEF1CAB9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B61B0000000000001CB8B6B6B9B9B8B8B8B8B5B5B5B8B90000000000000043BBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1980000000000000075C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9000000000000004FDBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBD3230000000000000000000065D0E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD988130000000000000000000093DBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D07800000000000000A3CBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBD960000000000000045C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C370000000000000006EC1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCB4B00000000000000CED0D0D0CECBCBCBCBCBD06E0000000000000000007BD0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D08118000000000000000000000000000081DEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBB00000000000000004C4DBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E38800000000000000BBE6E4E4E4E4E3E3E4E2E2E4E2E4E4E4920000000000000000000023A8DBDBDADADADAD7D7D4D1D0CBCBC9C8C8A5350000000000000000000026C4C1C1BFBCBCBCB9B9B6B5B2B1ACAC870000000000000064ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C350000000000000083A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B92E010202020202020202020199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDBDCDBDAD7D7D5D5D6D9E3F6D0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAA1900000000000018A39F9F9F9F9FA19C9B9C9E9E9C9C0000000000000039A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A781000000000000005EA3A3A7A8ACACACACACB0B2B2B2B2B0B0B0000000000000003EACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1AC4B0000000000000000000E93B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B138000000000000000000089CB2B3B8B8B6B6B6B6B6B9B9BBB9BBBB69000000000000008FB9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B890000000000000003FB3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAA600000000000000061ACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB03D00000000000000AAAAA8A7A7A7A7AAAAAAAC20000000000000000064B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0B95B0300000000000000000000000067B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B58C0000000000000038B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC070000000000000009BBFBFBCBCBCBCBCBBBDBBB8B5B5B5A1030000000000000000005ABFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0940400000000000000000064CAC9C8C8C9C8C8C6C9C9C9C9C9C89F0000000000000072C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B33F0000000000000094BDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B12B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCDEDEDCDEDCDBD9DEDEE9F8DACBCECBCBCECECBC9CBCECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C5C5C5C5C5C1C1C0BDBCBCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C11E0000000000001EC0C1C1C0C0C0C1C1BFC0BDBDBFBF0000000000000044BDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C59B000000000000006FC3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C60000000000000047C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECAA200000000000000000028CAD3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0770000000000000000002CC1C1C0BDC0C1C1BFBDBBB9B9B9B9B96D0000000000000097C0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9920000000000000041BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2650000000000000069B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C14400000000000000BBBBB9B9B9B9B9B9BDBDBF00000000000000002ABBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6A410000000000000000000000070C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C59C0000000000000072C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D17C00000000000000A7D0D3D1D1D1D4D1D4D3D4D4D6D6D73400000000000000000498D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFC513000000000000000004BDE1DFDEDEDEE1E1DFDFDCDCDCDCB30000000000000084E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E15300000000000000AED6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C63302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4F7F7F6F7F8F9F9F9F9FDFFEAE2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBC1D0000000000001DBDBBBBB9BBBBB9B6B6B3B3B1B0B0000000000000003FB6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAA860000000000000058A2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A700000000000000389F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C1D00000000000000001E9FA5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA75E0000000000000000007BA3A3A7A8ACACACACACB0B2B2B2B264000000000000008DB3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABAC8C000000000000003FB3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5680000000000000068B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BC4100000000000000B5B8BBBBBDBDBDBDC0BD9300000000000000007DB5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAA21F0000000000000000000064B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1890000000000000061ABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1610000000000000094BBBBB9BCBCBCBDC0BFBFC0BFBF7D0000000000000000008CBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8A20F000000000000000030B1B3B5B6B2B6B9B9BCBCBCBCB9940000000000000070C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B53F000000000000009BC1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C43202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6CBCBCBCBD1D1CBCFCED0D6ECC6B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAA190000000000001AACACB0B0ABABACB0B2B5B5B5B5B5000000000000003DB0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACAC89000000000000006CB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C00000000000000043BDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B58700000000000000000897ACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C34E00000000000000001DBCBCBCBCBCBBBDBBB8B5B5B5B8B8680000000000000094BBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACEA20000000000000049C9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5720000000000000072C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B94100000000000000B9B9B9B9B6B6B3B3B3B3860000000000000003ACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABA31900000000000000000067B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B28D000000000000006BBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5670000000000000096C0C0BDBBBBBBBBB9B9B9B9B9BB15000000000000000065C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B19303000000000000000081B0B1ACB0B0ACAAACB0B1B1B18C0000000000000064B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACAC3D0000000000000084ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BC2F02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5DFE3E2DFDCDCDBDADBDBE6F6D3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACAC190000000000001AACABABACABABABACACB1B1B3B3B2000000000000003EACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B28C000000000000005FA8ACABABACB0B0ACABABABABACB1B2B6B6000000000000003EB1B5B1ACACACB0ACACB1B0ACB0ACACACB12800000000000000007CB0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B11A000000000000000089B6B3B5B9B8B8B9BCB9B9B9B6B6690000000000000096BDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBD970000000000000045C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBC69000000000000006BB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B83F00000000000000B3B3B5B5B8B8B6B6B9B968000000000000001CB9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5AB0300000000000000006DC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9A10000000000000078D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DE8600000000000000B2DADCE1E1DFDCDCDCE1E1E1DEA1000000000000000034DBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D07A000000000000000038CBCBCECBCBC9C9C6C6C6C6C69E000000000000006EC0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C145000000000000009EC9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D03602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E6E7EAEAE9E6E7E7E7E4EFFBDCD1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A51800000000000018A5A5A8ABABABABAAAAA7A7A7A7A8000000000000003AA5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5830000000000000060AAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAA000000000000003DACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B099000000000000000030B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B890000000000000000032B9BCBBBBB8B8B3B6B6B6B5B1B564000000000000008CB1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B58C000000000000003FB2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A25A00000000000000589F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A73B00000000000000ABABABAAA7A7AAAAACAC64000000000000001AB8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C161000000000000000077D0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3A7000000000000007CD6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D47B00000000000000A3CED0D1D0D0D0D4D1D3D3D6D4300000000000000004B6D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2230000000000000000A2BCBCBCC0BDBFBFBBBBBBBB94000000000000006FBFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9410000000000000094BBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB93002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8B5B5B6B9B9BBBCC1BDBDC6DAB2A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBC1D0000000000001DBFBCBFBFBCBCBCBDBDBDBDB9B9B90000000000000041B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBC940000000000000067B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B60000000000000041BBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C85700000000000000009EBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C53F0000000000000000B1BDBDC0C3C5C5C8C4C8C8C9CA7500000000000000A2CACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBD940000000000000043BFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBD6D000000000000006DC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C64700000000000000CBCBCBC9CBCAC9C9CAC99B0000000000000018CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAB9000000000000000077CBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C19B000000000000006BBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B66A0000000000000092B8B5B1B1B0B1B0B1B2B2B1A4000000000000000047B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A77B000000000000000053B0B1B1ACABABACABABABAC880000000000000064ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACAC3D0000000000000087ACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B32C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E9EAE9E7E7E7E6E7E4E7F1FCDCD0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B51B0000000000001AB6B2B2B2B6B2B2B2B6B9B9B8B5B50000000000000044C0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B993000000000000006FBFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBF0000000000000045C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5160000000000000035C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1B2000000000000000081D0D0D0D0D0D0D0D3D1D1D1D47A00000000000000B0DBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBB00000000000000051DCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1830000000000000084E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E35400000000000000D4D7DAD6D4D7D7D7D7D4A70000000000000000C9D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C62E000000000000006EC0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9960000000000000067B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B267000000000000008DB2B1B1B1B1B1ACACACACAC61000000000000000090A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA31F00000000000000179B9C9E9E9C9C9C9E9E9E9E7B000000000000005DA5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A73A0000000000000088ACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C8CBC9C9CBCBCBCBCACAD5EAC1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBF1D0000000000001CBCBCB9B9B9BCBCBCB9BBBDC1C1C00000000000000043BCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B58F000000000000006ABBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C00000000000000045BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9B100000000000000008FC9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDE2C0000000000000040E1DFDCDCDCE1E1E1DEE1E1DE8300000000000000AEDBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3A7000000000000004ACACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C06D000000000000006EBDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C54700000000000000C1C1C0BDBDBDC0C1C1C1C5000000000000000077C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCB4A000000000000007AD1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1A70000000000000078D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E38600000000000000B2DFDCDBDBDBDBDCDEDEDEDE3F0000000000000034DEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E29B0000000000000000C0DADADADCDCDCDBDBDADAAE0000000000000077C9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B13D0000000000000089B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A729010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED7DADAD9DEDEDBE1DEDBE4F6D5C4C4C4C1C1C1C1C0C0C0C0BFBFBDC0C0C0BFBCB9B9BBB8B9B9B9B9B9B9BCB9B8B8B9B9BCC0C0C1C1C3C3C3C5C5C5C4C1C1C1C0C0C0BFBFC1C0C0BCBCC0C0BCC0C0C1BFC1C0BCB9B8B8B3B3B3B8B9B9B8B8B6B2B2B1B1B1B5B5B2B5B5B5B51B0000000000001BB9B9BBBBB9B9B9B6B3B1B1B1B1B0000000000000003EACB1ACACACACAAACB1B1ACAAA8A8A7A7A3A2A2A3A3A7A3A7A7A5A3A5A5840000000000000061ACACACACACB1ACB0B2B5B5B5B8B8BBBBB80000000000000045C0C0C0C1BFBFBFBFBFBFBFC1C3C5C57A0000000000000004C9CBCBD0CBD0CED0CECBC9CACACBCBC9CECECACACECAC8C8C8CAC9C9C9C6C9CACA6B0000000000000009C8C8C8C8C6C6C3C6C8C8C9CB7700000000000000A3CECACACAC9C9C5C5C4C6C6C4C4C4C8C8C9C8C9C9C8C5C5C5C59C0000000000000043BCBFBFBFC1C1C1C1C1C1C4C6C9C9C9C9C6C9C9C9C9C6C4C1C3720000000000000076CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C14500000000000000BFC0BDBDBFBFBFBDC0C0C0240000000000000016BBC1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0450000000000000074C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C99E0000000000000078D0D1D0D0CECBCBCBCECACACECACECECED0CED07800000000000000A7D0CED0D0D0D0D0CBCED0D30A0000000000000077C9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0B9030000000000000076BFBCC0C0BDBDBCBDBDBD93000000000000006AB9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B23F0000000000000092B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDBBC0BCBBBFBFBBBBBBBBC4DBBCA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B21A0000000000001BB9B9BBB9BBBBB9B9B8B9B9B9B5B50000000000000041BBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B58C0000000000000064B0ACACACABACABABABABABAAAAAAAAAAA8000000000000003DB0ABABACB0B2B5B5B5B5B5B5B3B3B146000000000000002FACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBA20000000000000000A7BFBFBFBFC1C0C0BCC0BCBC6C0000000000000094B9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACAC8C0000000000000041B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBF6B0000000000000068B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CA4900000000000000D0D0D0CECACECACACACBCA64000000000000000047C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4450000000000000070C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBD960000000000000069B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB167000000000000008FB6B2B2B6B3B3B1B1B1B19B000000000000000097B0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BB2B0000000000000049B9B9B9B9B9BCBCB9B8B68F000000000000006BBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8480000000000000097BFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B32C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D3D5D1CFCECBCBCBC8D6EBC6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BB1C0000000000001DBFBFC0BFBFBFBFBFC1C0C0BCC0BC0000000000000043BDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B18C000000000000006BBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C50000000000000043BCBCBCBBBDBBB8B5B5B5B8B8B8B9B6230000000000000065C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8090000000000000087C8C8C5C3C5C3C1C4C4C4C170000000000000009CC5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBC930000000000000041B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8680000000000000065B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B33F00000000000000B0ACB1B1B1B1B3B2B2B2B2A70300000000000000002BA5BDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C043000000000000006AB9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C99E000000000000006DBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1640000000000000088AAACB0B1B1B1B1B1ACAC69000000000000000EB3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A852000000000000001FA5A7A7AAACACACB1B3B58F0000000000000067B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC145000000000000009CC1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D03602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBCBCFCED1D0CFCED1D1DFF4D1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC11E0000000000001DC3C3C1BFBBB9B6B6B6B9B9B9B9B90000000000000041B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9A10000000000000077D0D0CBCECECEC9CACACECACACACED0D0D3000000000000004ACED0D1CECECECBC9C9C6C6C6C8C9C9110000000000000097D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B82A000000000000005FB6B3B1B3B5B3B6B3B1B1AC610000000000000087A8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAA86000000000000003AA7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A35E000000000000005DA7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAA3B00000000000000B0ACB0B0B0B1B1B0B0B0ACB14600000000000000000003468DB2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B63F0000000000000067B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B68F0000000000000067B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B567000000000000008FB1B2B2B3B1B1B1B1B2B25C0000000000000026A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F6F000000000000000C9EA2A3A7A7A7A8A8ABA783000000000000005EA7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8400000000000000096BDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CE3602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1C1C0C0BFC0BDBCBDC0BDC6DCB9A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D32100000000000021D0D3D0D1D1D3D0D0CECECBCACACB000000000000004DD4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1A70000000000000072C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C40000000000000044BCBCB9BBBBBBBBBBB9B9B9B8BBB8B800000000000000009CBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BC430000000000000041BBBCBFBCBCBDC0C3C3C0C16D0000000000000097BFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC19B0000000000000045C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B969000000000000006CBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C94800000000000000CED0D0CBCECECEC9CACACECAC311000000000000000000000011538CB9CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D14C0000000000000076C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBF980000000000000069B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1AC610000000000000087A8A8A5A3A3A1A1A3A5A53A0000000000000039A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5880000000000000000A8A8A7A7A5A5A7A7A8AB88000000000000005FA7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B03D0000000000000089B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B930020201010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD3D4D5D6D7D7D9DCDBDEEAF7D5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C51F00000000000020CECECED1D3D1D3D4D4D1D3D3D1D4000000000000004CD0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4AB0000000000000080DBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDB0000000000000051DEE1E1DFDFDCDCDCDCDFE1DFDCDCBD0000000000000000E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D475000000000000004CD1D1D1D1D1D1D0D0D1D1D37800000000000000A7D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0980000000000000043BCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACAB610000000000000065B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACAC3B00000000000000A19EA2A2A3A3A3A3A5A5A3A3A177020000000000000000000000000000021838455A677C89A19C9B9C9E9E9C9C9C9E9E9E36000000000000005EA5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA783000000000000005FABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B265000000000000008DB3B3B1ACACAAA8A7A7A5390000000000000061ACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B800000000000000009EB5B5B2B2B3B8B8B6B690000000000000006CB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBD450000000000000090B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E4E4E2E1E2E3E1E1E6E2EFFBDBD0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B91C0000000000001CBCB9B6B9B5B9B9B8B8B5B6B6B9B8000000000000003FB6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C59B0000000000000067B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBF0000000000000045C0C0BFBFBBBBBBBFBFBFBCBCBCBB960000000000000000C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8720000000000000026CBCECECED1D3D1D3D4D4D17B00000000000000A7D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4AA000000000000004DD4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDB810000000000000084E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E45400000000000000E1E1DEDFDEDFDEE1E1E3E3E1DFDBA504000000000000000000000000000000000000000000000A20445F84B0D3D0CECECE4A0000000000000077CACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C098000000000000006DBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6670000000000000089B1B1B1B2B6B2B2B2B2B61C0000000000000065B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3000000000000000086AAA7A5A39F9FA3A5A37C00000000000000589E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A83A0000000000000086A7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEACFD3D0CBC9C9C9CBCECEDAEBC6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BD1D0000000000001DBDB9B9B9B9B9B9B9B6B6B3B3B3B3000000000000003DACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABAB860000000000000064B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B30000000000000041B9B8BBBCBCBCBCBCBDB9B9B9B9B9920000000000000000B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C172000000000000001EC1BFBFBCB9B9B9B8B5B5B565000000000000008CB5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B38C000000000000003EB2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABAB61000000000000005FA8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B23F00000000000000B1B1B3B3B5B2B2B5B8B8B9BCB9BBBB8D0F000000000000000000000000000000000000000000000000000000042D61A7C9480000000000000077CED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3A70000000000000077D0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADA8000000000000000AEDBD9D6D3D6D3D1D1D1D0200000000000000075C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8000000000000000094B9BCBCBFC1C1C1BFC096000000000000006FC4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBB430000000000000098C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C332020202020202020101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D9DADADBDCDCD9D9DADEE7F7D4C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD72300000000000024DEDEDEE1E1DFDFDCDCDCDCDFE1DF0000000000000053E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBAE000000000000007CD7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0000000000000004ACECECED0D0D4D0D0CECECACAC8C89F0000000000000010C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B364000000000000001AB1B2B6B2B2B2B2B6B9B6B665000000000000008CB1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3800000000000000039A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C5800000000000000589EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7AB3A00000000000000A7A7ABA7A7A7A7A7A3A3A7A8ACACACAC9D35000000000000000000000000000000000000000000000000000000000000191A0000000000000064B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9940000000000000067B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6670000000000000092B8B9B9B9B5B5B5B9B9B91D0000000000000068B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0AC0E0000000000000087AAAAAAAAAAA8A8ABA8870000000000000061B0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAA3B0000000000000088ACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED3D4D7D7DADAD9D9D9D6E1F6D3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C61F0000000000001FCBCBD0D1D1D0D0D0D0CECACAC9C80000000000000047C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B18D0000000000000061B1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A50000000000000039A5A5A8ABABABABAAAAA7A7A7A7A8840000000000000000A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0AB5F0000000000000019A7A7A7A5A7AAAAAAAAAAAB640000000000000089B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5900000000000000043BBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3670000000000000068B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B53F00000000000000B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B28521000000000000000000000000000000000000000000000000000000000000000000000000005CA2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7820000000000000061ABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B368000000000000008DB2B5B8B8BBB8B8BBBBBB1C000000000000006FC1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D60000000000000000A7CED0D0D3D0D3D3D3D4AA000000000000007CD4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCE4A000000000000009BC3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBF3202020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7C8C9CBCECACAC8C9C9C9D5EAC9B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E22400000000000023DFDBDBDBDCDCDADCE1E1DFDCDCDC0000000000000051E1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCB0000000000000007AD0D0D0CECACACBCBCECBCBC9C9C6C6C6C60000000000000045C1C0C0C0BDBDBDBDBDBDBDC0C0BD980000000000000000C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5700000000000000035C4C6C9CBCECEC9C9C9CBCB7800000000000000A5D0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0A3000000000000004CD1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDE860000000000000083DCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDE5300000000000000E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2B65F140000000000000000000000000000000000000000000000000000000000000000000072C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9920000000000000061ABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E58000000000000007B9E9E9B9E9E9E9B9C9C9C24000000000000005FAAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1AC00000000000000008FB9B9B9B6B9BBBDBCBD96000000000000006CBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C5C5C545000000000000009BC5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACAC9CBCBCBCECECACECE3402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECCFD4D4D6D7D3D6D7D9D4DEF3CEBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BB1C0000000000001EC0C0C3C3C3C5C5C3C3C0BDBDC1C1000000000000002EC5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBB20000000000000086E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E10000000000000051E1E1DEDEE1DCDBDBDBDBDBDADBD9C80000000000000000CED4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6570000000000000045C1C0C0C0BDBDBDBDBDBDBD6E0000000000000099C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3990000000000000045C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0780000000000000078D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CE4A00000000000000D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBBB78402400000000000000000000000000000000000000000000000000000000000083DEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3B60000000000000087E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADC8100000000000000ACD7D4D1D0CBCBC9C8C8C647000000000000005CC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A19B00000000000000009BA29F9F9E9E9E9B9E9E7B000000000000005AA3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A83A0000000000000089B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDB6B8B8B6B8B9B9B9BDC0C9DFBCAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B01A0000000000001AB2B5B5B8B8B8B3B3B8B9BCBCBBB8000000000000001BB9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B68F0000000000000067B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1000000000000003FB2B5B5B1B2B2B3B1B1B1B1B2B2B0AC000000000000000083A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F350000000000000045A3A7A7A7A8A8ABA7A7ABA7610000000000000086ACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BB900000000000000043BDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED07C000000000000007BD1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D44E00000000000000D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBB5A381775B482E1E09000000000000000000000000000000000000000067B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBB94000000000000006FBFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B96B0000000000000092B9B9B9B9BBB8B5B8B8BB4A0000000000000040B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9920000000000000000BFBFBFBFBFBDBDBFBCBC920000000000000051B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C445000000000000009EC9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BD3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0D4D4D3D7D7D7D7D9D9E4F7D7C9C9C9C6C9C9C9C9C6C4C1C3C5C9C5C5C3C5C5C8C9CACAC9C9C6C9CBCBCBCAC9C9C8C6C6C4C1C1C1C1C1C1C1C1C1C0C1C1C0C0C0C1C1BFC0BDBDBFBFBFBDC0C0C0BFBFBFBDBDBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C51E0000000000001DC0C1C4C1C3C5C3C4C6C8C8C8C5C80000000000000017C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACEA3000000000000007BD1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0000000000000004AC9C6C4C1C1C1C1C1C1C0BDC0C1C1BF1D0000000000000076BFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B81C000000000000006DBDB9B9BCB9B6B9B5B9B9B8680000000000000090B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1990000000000000026C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BF6D0000000000000045C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C44700000000000000C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECEB1A87A724D291200000000000000000000000078D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4AA000000000000007CD4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDF8300000000000000B0DBDCE1E1DFDEDEDEE1E1830000000000000024DCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E38F0000000000000022DAD6D4D7D7D7D7D4D1D1A7000000000000004BD0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6460000000000000098C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B62D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9D7D7D9DADEDCDEDEDEE7F7D5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A11700000000000016999997979796979B9B9E9E9E9EA10000000000000000A2A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5900000000000000067B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBD0000000000000045C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6360000000000000057C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9000000000000000089B5B6B6B6B8B8B9BBBBBBBC6B000000000000006FB5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B18D000000000000000FB6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6750000000000000033BCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C54700000000000000C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5BD8A1E00000000000000000069B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBF97000000000000006DBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C472000000000000009CC3C3C6C6C6C6C4C6C6C9990000000000000004C9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9500000000000000036C9CAC9C8C5C5C5C6C6C9A20000000000000028C9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8400000000000000090B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B22C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C4C3C1C0C0BFBCBDBDC3D7B6A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B51B0000000000001AACACB0ACACB1B0ACB0ACACACB1B300000000000000008CB0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B18D0000000000000067B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBB0000000000000043BBB9B9BBBDBDBBBDC0C0C0C0C1C1C561000000000000001DBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBC810000000000000000B1B9B9BCBCBCB9BBBDC1C1C06F0000000000000053BCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8900000000000000000B1B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5700000000000000016C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C94800000000000000DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDA3E00000000000000007CD4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1A70000000000000077CBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C16E0000000000000096BDC0C0BDC0C0BFC1C1C1B9000000000000000093C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3160000000000000065CEC9C9C9CBCBD0D0D3D3A80000000000000004CBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D44C00000000000000A7D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDE3B02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CBD1D1CED1D1D0D0D1D3DBF1CEBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C31E0000000000001FC8C5C5C5C3C4C6C6C9C9C9C9C5C8000000000000000065CEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9750000000000000074C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C50000000000000047C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9810000000000000000A7B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3470000000000000014ABABABAAAAA7A7A7A7A8A8AB5F0000000000000013A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A581000000000000000076AAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0AC640000000000000000A2ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B84100000000000000B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2A2030000000000000064B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B18C0000000000000061A7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA35A000000000000007C9E9F9EA2A3A7A3A2A3A29F1200000000000000449EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B59D00000000000000007DB2B5B8B8BBB8B8BBBBBB9000000000000000009BC5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D34C00000000000000ABD6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECE3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9DADAD9D7D7D9DCDEDAE4F6D3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C91F0000000000001FC8C8C4C4C1C4C4C1C1C1BFBFBFBF000000000000000024B9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C16F0000000000000072C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBC0000000000000044BCBCBDC0C3C3C0C1BFC0C0C1C1C1C1B6030000000000000067C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C109000000000000004EB6B6B9B9B9B9B9B9B9B9B9B667000000000000000098C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9A100000000000000005BCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED04C000000000000000082C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C92600000000000000C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A130000000000000005CA3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8AB83000000000000005DA7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A85F0000000000000083A8ABACB0ABA7AAAAAAABA741000000000000000DAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABAB4B0000000000000003B1B3B3B8B9BCBCBBB8BBBB92000000000000000057B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B530000000000000008CB1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A328010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C9C9C9CECECBCED1D1DCF3CEBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B91A0000000000001AB2B5B8B9BBBCBCB9B6B3B5B5B5B20000000000000000009CB2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C63F0000000000000070C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C30000000000000047C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3350000000000000016C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C57A000000000000000086BDBCB9B9B9B9B8B8B9BCBFBC6B000000000000000034BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C39C000000000000000009C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCB40000000000000000038CECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C91000000000000000C6C9CAC9C8C5C5C5C6C6C9C9CBCB4A4A4A484A4A4896C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8680000000000000067B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B18D0000000000000067B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5670000000000000087A7A7A7A5A3A7A7A8ABACAC78000000000000000077ABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8A308000000000000002FB0B1ACACACB1B1B1B2B1AC8700000000000000000DABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACAC0E0000000000000088ACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B52E010101010101020201010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0DBDCDEDFE3E4E1E2DFDEE7F7D7C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B61B0000000000001CBBBCBDC1C3C6C4C4C4C6C6C8C8C80000000000000000004EC1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5170000000000000070C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C90000000000000048C9CACACBC9C9C6C6C8CAC8C9C6C9C5C57A000000000000000075BDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0160000000000000009BCBFBDBDBDC1C3C4C8C5C5C5C4720000000000000000008BC6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAA200000000000000000081CACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C81E000000000000000004B6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1BB0000000000000000BBBBB9B5B5B5B8B8B8B8B6B3B3B60F0000000000004EB9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6690000000000000065B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7810000000000000061ACACABACB0B1B1ACABABACABABABACACB1B1B367000000000000008CB1ACAAAAAAA7A7A7AAABA8AB080000000000000020B0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABAB5A000000000000000075B5B5B1B1B5B1ACACACB0AC880000000000000000006EB1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8A10000000000000000A2B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C53302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DADBDBDBDCE1DFE2E3E3ECFBD7CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABAB1900000000000018A8ABACACACACACABACB0B1B1ACAB0000000000000000000396B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1A2000000000000000074B1B1B2B1ACABABACACACACA8A8ACABABAC000000000000003DB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACA508000000000000000DA5ACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B85800000000000000004CB0B1B3B8B8B8B8B9BBB8B5B6B667000000000000000000089EB9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C09800000000000000000016BDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBB030000000000000000004CBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C08A0000000000000000BCBDB9B8B3B3B8B9B6B6B3B5B3B31A00000000000032B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C16F0000000000000072C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9A10000000000000074C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDE8400000000000000B6E3E1DEE1DEDEDFDBDBDBDCDC6300000000000000008FE1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7C90A000000000000000ACAD0D1D1D1D1D0D0D0CECACAA300000000000000000017C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1800000000000000000C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CB3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEACFCFCBCACED1CFD0D0D0DAEFCAB9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D12100000000000020D0D0D0D0D0D3D1D1D1D4D1D4D3D40000000000000000000031D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDC7A0000000000000000B0DBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDF0000000000000053E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E15D00000000000000005FE3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1B9040000000000000000BFCECECED0D0D4D0D0CECECACAC8740000000000000000000017AAC1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BD96000000000000000000005DB0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B27D000000000000000000000397ACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A539000000000000000DA7AAA8AAAAAAA7A5A39F9FA3A5A33000000000000002979E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8AC5A000000000000007CA7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7840000000000000065B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A75D0000000000000089ABACB1ACACACABACB1B1B2B29B0000000000000000089CB6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B332000000000000000052B9BBBBB9B9B8B9B9B9B5B5B5920000000000000000000058B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1280000000000000008ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACAC2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1DAD9DADBDCDFDEDFDFDBE9F8D7C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B61B0000000000001AB1B1ACACB1ACACB1ACABA8ABA8A8000000000000000000000047A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A59F080000000000000000A2A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7000000000000003DB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AA9C03000000000000000070B0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2AB1500000000000000004ABCBBB8BBBBB9B6B2B2B5B6B9B6B26700000000000000000000000E9DB8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB18D00000000000000000000038DB1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B34600000000000000000000001FA7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA29F08000000000000001EA7A3A2A3A29F9F9F9C9B9B9F9B9F4B0000000000000065ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B830000000000000008DB5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC19B0000000000000075CECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D37B00000000000000A8D6D6D6D4D3D0D0CED0D0D3D0D34400000000000000002AD4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECE65000000000000000004B9C5C4C3C3C0C0C0C1C0BFBDB996000000000000000000000089B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFA2000000000000000023B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B62D01010101010101010101029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CBD0D3D1D4D1D3D7D7D6E1F6D1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8AB1900000000000019A5A7A7AAACACACB1B3B5B5B6B9BC00000000000000000000000064B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C145000000000000000016C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9000000000000004ACECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D15F0000000000000000049CCECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBD42B000000000000000004C1D1D0CECECECEC9C8C6C9C9C9C9C9760000000000000000000000000980BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB890000000000000000000000010A8BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9B90400000000000000000000000043BCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC05E00000000000000004CC1BDC1C1C1C1C4C1C1C1C1C1BFC1900000000000000016BBC1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B69B0300000000000000A7B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6A10000000000000072C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECE7700000000000000A5D0D0D3D4D1D0D1D0D0CECECED0C104000000000000000047C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C97600000000000000000064BBBFC0C0BDBBB9B9B9B8B9B9B99200000000000000000000000386B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A59F13000000000000000041ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A72A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE5C8CBCBC8C9C9C5C6C8CBD6EAC6B5B5B5B8B8BBB8BBBBB8B8B6B8B8B8B3B3B3B8B8B9BBBBBBBBBBBBBBB6B6B3B6BBBBBCBCBCBCBFBCB9B8B6B6B5B1B5B5B5B1B3B3B2B3B1B1B1AEABABAEAEAEAEABACACAAACAAAAAAAAAAA8A8A8A8A8A7A7AAA7AAAEABABAEAEAAAAABAEB11A0000000000001AB1B1B1B1AEAEAAAAAEACABACAAAA000000000000000000000000004AA3B0B0B0ABABAEB1B3B1B3B6BBBBBBB8BBBBBBBC7D00000000000000000054BFBBBFBBBBBBBBBCBCBCBCBCBCBBB8B3B1B3000000000000003FB3B3B3B6B8B6B3B3B1B0ACACACB0B1B0B2B3AC0E00000000000000000373BBBBB9BBBBBFC3C3C4C4C4C3C1BDC1BDBDBBBBBBBBA31C00000000000000000061B5B5B3B3B3B8BBBBBDC0C0C3C0C3C372000000000000000000000000000038ABC9C9C9CAC9C9C9C9C9C8C6C6C9C6C6C5C8A10000000000000000000000001099C3C4C4C3C3C3C5C5C4C4C3C1C1C1C0BFBF4D000000000000000000000000000041BBB9B9BBBCBCBCBCB9B9B9B9B8B8B8B5B59C03000000000000000072ABABABACB1B3B6B6B9B6B2B2B3B3B508000000000000003DB0ACAAAAAAAAA8ACABABAEAEAEAEAEB1B2B2B1B3B3B3B1AA21000000000000000EB1B1B1B5B8B8B8B8B6BBBBBBBBBBBBBCB9B9B9920000000000000067B5B3B3B5B9BBBBBBBBBBBCBFBFBCBBBBBBBBB8690000000000000094BDBBBDC0C0BFBFC1C1C3C6C8C5C46100000000000000000032B0B3B3B3B1B1B1B1B1B2B2B2B1B3B1AEAEAEAEB1ACAE5400000000000000000014A5ACACB1B2B1B0B1B1B2B2B1ACB18C0000000000000000000000000267ACACACAAACACACACAAAAAAAAA7A7A7AAA7A7A7A73A00000000000000000078B0B2B3B3B5B8BBB8B6B6B3B2B1B3B5B5B2B2B0B0B1B1B1B2B2B3B1B1B3B6B6B8BBB8BBBBBCBBBCBDC0C0C0C0C0C0C3C3C3C332020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE1C0BFBFC0BFBFBDC0C3C5D0E7C4B1B1B1B0ABABAEB1B1ACA8A8A8A7A7A5A8AAA7AAACACACAEB0B0B0ACACAEB0ACABACB0B0B0B1B0ABAAAAABABABABA7A7ABAAAAABAEAEACAAAAAAAAACB1B1B5B5B3B3B6B3B1B3B3B1B1B3B1ACACACAEACACB0AEACAEABACACB0B2B2B0B1B11B0000000000001BB0B0B1B2B2B2B2B2B2B6B2B3B6B600000000000000000000000000001C89B8BBB6B3B5B5B2B3B8B6B6B9BBB8B8B8B55F0000000000000000000094BBB9B8BBBCBCBBBCBFBFBFBFC1C1C4C4C3C30000000000000043BDC0C0BCC0C0C1BDBCBCBCBCBCBFBCBCBFBCBB830000000000000000000041B1BBBBBBB6BBB9BBBBB8B9B9BBBBBBB9BBBCC07E090000000000000000002ABCB9B6B2B2B6B9B5B5B2B3B2B2B3B3B667000000000000000300000000000000002978B1BBBCBBB6B6B6BBBBBCBDC0C0C0C09A00000000000000000000000000035EB9BFBDC1C3C4C8C4C8C8C8C9C8C8C8740000000000000000000000000000000032BDD9DADCDFDFDFDFDEE1E1E1E1E2E1C314000000000000000004D4DFDFDEDBDBDBDFE1E1DCDFDFDCDCDF6400000000000000004ED7D9D9D4D4D4D3D3D4D4D7DADADADBDBDBDBDAD7D4C928000000000000000048C9CACACECACAC9C9C5C5C5C5C5C5C6C4C4C3C399000000000000006BBCBCBCBFBFBCBFBFBDC1C0C0C0C0C3C3C3C1C1700000000000000099C1C4C5C5C8C4C4C3C3C0C1C1BFBCBC1D000000000000000000169AC3C3C1C1C3C5C8CACECBC9C9C9CACACFD0D1B93B00000000000000000000A2CACACFCACECECECED0D0D0D1D1D1A5000000000000000000000000000038B5CFD0D0D0D0D0D0D0D0D4D7D7D7D7D7DAD1480000000000000000000AE1DEDBDBDBDBDEDBDADADADADBDCDCDCDCDCDCDBDCDFDCDCDCDCDCDEDEDEDEDFDFE1E4E2E2E4E6E9E6E6E2E2E2E6E6E3E4E4E33D020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE5C6C6C3C4C6C6C8C9C5C6D1E7C1B1B1B1B1B1AEABAAAAA7A5A5A5A7A7A7A5A5A1A19F9F9C9C9C9E9EA1A19E9EA1A5A5A19E9E9C9E9CA1A3A7A3A1A3A19E9E9E9C9A9A9E9A9E9C9CA1A3A5A5A5A7A7AAA7A7AAA7AAAAAAAAA8A5A5A8A8ABACB0B2B1B1B1B1B3B3B2B6B5B5B11A0000000000001CB6BBB6B6BBBBBBB6BBBCBCBCBCC0000000000000000000000000000000002888C3CACED0D3D0D0CFCFCFCFD1D19E290000000000000000000021D0D0CBD0D0D1D0D1D1D1D4D4D4D4D3D1D4D4D3000000000000004CD0D0D0D3D0D1D1D4D3D0D0D3D0D1CFCBCBCBCFCF5A000000000000000000000964B8BFC1BFBDBCB9BCB9B9B6B5B8B5B18722000000000000000000000FA7BCBDBDBBBBBBBBBBB8B9BBBDBDBDC1C16D00000000000000780000000000000000000000153A424141413F40B8B8B8B8BBB68D0000000000000000000000000000000E5FA5B6B6B8B5B5B3B5B5B3B5AC580000000000000000000000000000000000000348A3B8BBBDBBBDBDBDBDBDBCB564030000000000000000003AB9B9BBBDBDBCB9BCBFC1C1C1C1BDBFBFB00300000000000000001EA4C3C0C3C5C8CACAC8C5C5C9C9C9C9CACBCBC37C09000000000000000000A1C8CAC9C9C6C6C3C4C5C3C1C1C3C3C3C3C0C0C099000000000000006EBCBFBCBCBFBFC1BFC1C3C3C3BFBFC0BDBBB8B867000000000000008DB6B3B2B2B2B2B2B6B6B6B6BBB9B6B39D03000000000000000000003997B6B2B2B6B9B8B8BBBDBDC0BCBCBBAC4A030000000000000000000067C3C3C3C3C6C3C3C0BFBFBFC3C0C3C099000000000000000000000000000000044097C6C4C4C4C4C4C1C0C0C3C0C3BB750F000000000000000000004ABBBBBBB8B8B8B8B6B6B3B3B1B3B3B3B3B3B1B1B1B1B0ABABB0AEAEAEABACACAEAEAAA7A7A7A7A7ABAAA7A8A7A5A5A5A5A7A7A529010101010101010101010198FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE5C8C6C9C6C8C8C4C5C8C8D3EAC5B3B6B9B8B5B3B3B3B3B3B8B8B8B8BBBBBBBCBCBBBFBFBCBCBCBBBDBDBFC0C3C0C3C5C3C3C5C5C6C5C4C6C6C3C3C3C5C5C6C9CBCECACAC8C5C5C5C8C8C8C5C3C1BDBBBBBBBBB9BCBBBBBDBDBDBDBBBDBDBBBBBBBCBCBCBCB9B9B9B5B9B8B31C0000000000001AB5B6B6B8BBBBBBBBBBB8B8B3B6B600000000000000390300000000000000000003284E6488888889898364360E0000000000000000000000007ABBBBBBBCC0C3C5C3C3C3000000000000000000000000000000000000000000000000000072C3C3C4C8C6C6C5C4C4C5C3350000000000000000000000034581B2C0BDBFBCBCBFC3BD93611000000000000000000000000498C9CAC8C8C5C5C6C9C6C9C5C8C4C4C4C6C47200000000000000BB49000000000000000000000000000000000000C0BCBDBDBDC099000000000000003B00000000000000000000254E729C9C9B9B9C7A4509000000000000000000000326000000000000000000001F5175A2A19FA2A17F400A0000000000000000000000AAC9C9C8C8C8C9C9C9C6C6C8C8C6C6C3C5C858000000000000000000002672B9C9CACACACACAC9CBCAC9C5C58D5609000000000000000000002CC0BCBBBBBBB8B3B3B3B6B667000000000000000000000000000000000000000000000000003DB1B1B1B1B1B1B1B3B6B5680000000000000090B5B6B5B1B3B6B6B8B8B3B3B1B1AEACAC7E000000000000000000000000195A88ABAAABAEB0B0ACAA94692D0000000000000000000000003BABAEB1B1ACA8A8A8A7A7A5A8AAA7AAAC88000000000000002600000000000000000000082D5267878783838777582E08000000000000000000000003A5B6B3B1B3B3B1B1B3B1ACACACAEACACB0AEACAEABACACB0B2B2B0B1B1B1B2B2B1B1AEB1B1B0B0B1B2B2B2B2B2B2B6B2B3B6B6B62E010101010101010101010198FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE9D0CECACBCBCBCBCBD0CBD3EBC8BBBBB8B3B2B2B5B6BBB6B6B3B5B2B5B3B6B6B8B5B5B3B5B5B3B5B5B8B8B8B6B5B9BBBBBDBBBBB9BBBBB6B9B8B8B8B8B8BBB8BBBDBBBDBDBDBDBDBCBCBDBBBBB8BBB8B5B5B5B8BBB9B9B9BBBDBDBCB9BCBFC1C1C1C1BDBFBFBFC3C4C3BFBF1D0000000000001DC3C5C8CACAC8C5C5C9C9C9C9CACB0000000000000074720000000000000000000000000000000000000000000000000000000000000000002BBFBCBCBFBFC1BFC1C3C3C3000000000000000000000000000000000000000000000000000067BBB9B6B3B3B3B2B2B1B1B0AA210000000000000000000000000000031D1D241C1D0F00000000000000000000000000000393C6C3C3C0BFBFBFC3C0C3C0C1C3C3C6C6C6C57200000000000000C4BF260000000000000000000000000000000000BFBFBFBFBCBC9400000000000000903900000000000000000000000000000000000000000000000000000000000058A21F0000000000000000000000000000000000000000000000000000000000002E96979794979A9A9C9C9C9C9FA1A1A1A5A5A5A2140000000000000000000000000E263E55676767643F371A030000000000000000000000000396B3B3B3B8B8B8B8BBBBBBBC6B0000000000000000000000000000000000000000000000000046C3C5C5C6C9CBCECACAC8720000000000000099BDBBBBBBBBB9BCBBBBBDBDBDBDBBBDBDBB6C000000000000000000000000000000151C1A221A1A00000000000000000000000000000038B3B1B1B3B6B8BBBBBBB9B5B2B3B3B3B1B38D000000000000008C3E00000000000000000000000000000000000000000000000000000000000000000069C3C3C3C3C3C0BCBBBBBBBDBFBFC1C1C1C4C3C3C4C8C6C6C5C4C4C5C3C5C5C6C4C6C6C9C6C4C6C3C3C3C3C3C3C0BDBFBCBCBFC3C433020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF6E4E6E4DFE1DFDBDADEDEEAF8D4C3C5C6C5C3C3C0BDBDBBBDBFBFBCBBB9B9B9B6B8B8B8B8B6B6B5B5B5B5B2B0B2B3B2B5B2B1B1ACACB0ABABB0ABAAA7AAA7A7A5A1A19F9FA1A5A5A7A3A3A3A3A3A5A5A5A7AAAAAAAAA8A8A7A7A7A7A7A7AAA7A7A5A5A5A7A5A5A5A5A8A7A51800000000000018A5A3A5A5A3A5A7A7A7A7A5A5A5A5000000000000005EA85F000000000000000000000000000000000000000000000000000000000000000EA1ABB0B1B1B1AEAEAEAEAAAA000000000000000000000000000000000000000000000000000068B5B1B5B8B8B8B6B6B6B5B5B2AB210000000000000000000000000000000000000000000000000000000000000000000384B1B1B1B2B1B2B3B3B2B1AEB1B1B1B3B3B1B1B16500000000000000ABAAA418000000000000000000000000000000009EA1A19E9EA181000000000000007D9C1F0000000000000000000000000000000000000000000000000000000019AAAAA21F000000000000000000000000000000000000000000000000000000000FA7BBBBBBB6BBBCBCBCBCC0BDC1C1C4C4C4C8C9C9B509000000000000000000000000000000000000000000000000000000000000000000000088D0D0D1D0D1D1D1D4D4D4D4D37A000000000000000000000000000000000000000000000000004BCBCBCBCFCFCACBCACECA750000000000000097BFC1BFBDBCB9BCB9B9B6B5B8B5B1B5B5B5B5670000000000000000000000000000000000000000000000000000000000000000000041BBBBBBBBBBB9B5B5B8BBBBBBBBBBBBB9B5B8900000000000000090BB39000000000000000000000000000000000000000000000000000000000000002ABBBDBBBBB9BBBBB6B9B8B8B8B8B8BBB8BBBDBBBDBDBDBDBDBCBCBDBBBBB8BBB8B5B5B5B8BBB9B9B9BBBDBDBCB9BCBFC1C1C1C1BDBF30020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEBD5D7D6D1D5D1D1D5D7D6E1F4D0C1C3C3C4C4C4C5C8C8C8C5C3C3C0BDBDBBB8B8BBBBB9BBBBBBBBBBBCBBBBBBBDBBBBBCBFC3C3BFC0BDBFBFC0C0C0C0BDBDBDBDBDC0BCC0C1C1C0C3C0C0C0C0C1BDC1BFBCBCBCBBBCBCC0C1C1C1BDC1C1BDBDC1C1C3C3C3C3C1BFBFC3C3C01D0000000000001CB8B9B9B9B9B9B8B5B5B5B8B8BBBB000000000000006FC3C37804000000000000000000000000000000000000000000000000000000000497C9C9CEC9C9C9CED0D0D1D4D0000000000000000000000000000000000000000000000000000075CFD0D0CFD0D0D0CEC9C9C9C6C4C050000000000000000000000000000000000000000000000000000000000000000E8DB0B2B3B2B5B2B1B1ACACB0ABABB0ABAAA7AAA7A75D00000000000000A7A3A38D1E000000000000000000000000000000A7A7AAA7A7A5810000000000000082A5A11F00000000000000000000000000000000000000000000000000000390A8A8A8A41F00000000000000000000000000000000000000000000000000000381AEAEABB0B1B1B1AEAEAEAEAAAAACACB1B1B1B3B3B6890F00000000000000000000000000000000000000000000000000000000000000000067B6B9BBBBBBB6B6B2B5B5B5B3B167000000000000000000000000000000000000000000000000003FB2B1AEB1B1B1B3B3B1B1640000000000000088ABAAAAA7A5A5A5A7A7A7A5A5A1A19F9F9C9C9C7507000000000000000000000000000000000000000000000000000000000000004CA3A5A5A5A7A7AAA7A7AAA7AAAAAAAAA8A5A5A884000000000000008CB3B33F000000000000000000000000000000000000000000000000000000000026BDC4C8C9C9CEC9CECECFD0CECECECACACED0D3D0D0CFCFCFCFD1D1D0D3D1D0D1D4D1D1D4D4D4D4D1D0D0CBD0D0D1D0D1D1D1D4D4D4D438020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE8CED0D1D5D9DBD9D9DADCE7F7D5C6C8C6C5C8C5C3C3C3C3C3C0BCBBBBBBBDBFBFC1C1C1C4C3C3C4C8C6C6C5C4C4C5C3C5C5C6C4C6C6C9C6C4C6C3C3C3C3C3C3C0BDBFBCBCBFC3C4C4C6C3C6C6C8C9C9C9C9C9C8C8C9C9C9C9CAC8C8C5C5C6C9C6C9C5C8C4C4C4C6C4C4C1C11E0000000000001CB9B8B6B6B9BBBDBBBBB9BCBFBFBF000000000000006DC0C0C08F0F00000000000000000000000000000000000000000000000000001093C4C4C3C3C5C5C5C5C3C5C5C9C9000000000000000000000000000000000000000000000000000077CECACAC9C9C8C8C8C9C9C9C6C6C8C87B040000000000000000000000000000000000000000000000000000000035BDC3C3C3C4C3C3C1C1C1C0C0C0C0C0BCBBBBBBB8B3B36700000000000000B5B5B5B5AC220000000000000000000000000000B0AEB1B1B1B18C000000000000008CB5B8B1320000000000000000000000000000000000000000000000000277A5A5A7AAACAB4A000000000000000000000000000000000000000000000000037EAEB1B1ACA8A8A8A7A7A5A8AAA7AAACACACAEB0B0B0ACAC9714000000000000000000000000000000000000000000000000000000000000037EB5B3B3B6B3B1B3B3B1B1B3B1ACAC61000000000000000000000000000000000000000000000000003DB1B2B2B2B2B2B2B6B2B367000000000000008CB1AEAEB1B2B6B6B6B6B8BBB6B3B5B5B2B3B8B6B6A22A000000000000000000000000000000000000000000000000000000001088C4C4C3C3C0BFBFBDBCBDBBBDBDC0C0BCC0C0C1BD940000000000000097BCBBBB7303000000000000000000000000000000000000000000000000000024B9C0BFC1C3C1C3C0BCBBBCBBBBBCB9B6B2B2B6B9B5B5B2B3B2B2B3B3B6B6B5B5B9B9B6B6B6B6B3B3B3B6B9B9B9B9B6B8B9BBBCBBB6B6B630020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDE6CBCECECBD1D1D1D1D5D3DEF3CEBDBDBBBBBBBFBFBFBDBDBBBBBBBDBDBDBBBBBBBBBCBCBDC1C3C3C4C3C4C3C3C5C4C3C3C3C3C3C4C3C3C3C3C3C3C4C4C4C3C3C3C4C4C4C4C5C3C3C3C3C3C4C4C5C3C3C4C3C3C3C4C8C8C9CACACBD0D1D0D1D1D1D0D1D1D0D1CFCFCFCFCFCF2000000000000021D0D1D1D3D3D4D4D5D9D9D5D3D3D3000000000000007BD3D4D4D1CB4D00000000000000000000000000000000000000000000000035C4DCDBDBDBDEDEDCDCDBDBDBDBDCDE000000000000000000000000000000000000000000000000000081DCDBDCDBDEDEE1E1DFDCDAD7D5D3D3D3C546000000000000000000000000000000000000000000000000001892CBCBCBCFCFD1CFCFCBCBC9C9C5C5C5C3C6C3C4C4C3C4C47100000000000000C1C3BFBCBCBC5A03000000000000000000000000BBBBB8B5B5B28D0000000000000089B0B0B1B55D030000000000000000000000000000000000000000000380ABABA8A8A8A5A5A5740C0000000000000000000000000000000000000000000D7DA8A5A5A19E9EA1A5A19E9E9E9E9E9F9C9A9C9C9C9C9C9C9C9C9743020000000000000000000000000000000000000000000000000000002D99A5A5A5A5A7AAA7A7A7A5A5A3A3A5A7610000000000000000000000000000000000000000000000000039A5A5A7A8AAAEB1B1AEAA610000000000000089B1B1B1B0B1B1B1B2B1B1B3B1B1B5B6B6B6B8BBBBB8B971080000000000000000000000000000000000000000000000000049B1BBBBB8B8B6B8B8B8B3B3B3B8B8B9BBBBBBBBBBBBBB900000000000000094BCBFBCB9A12900000000000000000000000000000000000000000000000041A5AAAAAAAAAAA8A8A8A8A8A7A7AAA7AAAEABABAEAEAAAAABAEB1B3B3B3B3B3B3B2B2B1B1B1B1AEAEAAAAAEACABACAAAAAEACACA8A8A7A5A72A010101010101010101010198FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDEFD7DADADADEDEDFE2E2E3F2FCDBD1D1D1D0D1D1D0D1CFCFCFCFCFCFCFCFCED1D0D0D0D1D0D1D1D3D3D4D4D5D9D9D5D3D3D3D1D3D3D1D3D3D3D3D3D4D4D1D4D4D7D7D7D7DAD9D9D7D7D7D9DBDCDCDBDBD7D7D5D9D9D9D9DBDEDEDCDBDBDBDEDEDCDCDBDBDBDBDCDEDCDBDBDC2300000000000024E1E1E2E3E1E1E1E3E1DFDEDEDFDE0000000000000086E1DFDCDAD7D5B24D04000000000000000000000000000000000000000A80D0D0D1CFD1CFCBCBCBCBCBCFCFD1CFCF00000000000000000000000000000000000000000000000000006BBCBCBBBBBBBFBBBBBBB6B9BCBCBBBBB9BBBB9938000000000000000000000000000000000000000000156FB1B1B1B1B1B1B1B1B1B1B0ACACACACACACABABA8A8A8A5A5A55D00000000000000A3A3A5A5A1A19F7E1E0000000000000000000000A19E9EA1A5A17B00000000000000799C9C9C9C9C8930000000000000000000000000000000000000001992A7A7A7A7A7AAA7A7A8A8A147020000000000000000000000000000000000003DA2B1B1B1AEAEAEAEAEAEB1B2B2B2B0ACACA8A7A5A5A5A5A7A8AAAEB1B197410300000000000000000000000000000000000000000000002989B8BBBBB8B9B8B9B5B6B3B3B6B3B3B3B6B667000000000000000000000000000000000000000000000000003FB3B8B8B9BBBBBBBBBBBB6A0000000000000094BCBCBFBCB9B8B6B6B5B1B5B5B5B1B3B3B2B3B1B1B1AEABA35B080000000000000000000000000000000000000000024197ABABAEAEAAAAABAEB1B3B3B3B3B3B3B2B2B1B1B1B1AEAE860000000000000088ACACA8A8A7A57B1F0000000000000000000000000000000000000000238CBBBBBCBFBDBDBFBDBDBDBDBDC1BFBFBBBFBBBBBBBBBCBCBCBCBCBCBBB8B3B1B3B3B2B2B2B5B5B2B3B3B3B3B6B8B6B3B3B1B0ACACACB0B1B0B22D010101020202020202020299FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDE3C5CAC6C6CACAC9CAC9C9D3E9C1B1AEAEB1B2B6B6B6B6B8BBB6B3B5B5B2B3B8B6B6B9BBB8B8B8B5B5B8BBBBB8B8BBBDBDBCBCBCBBB9B8BBBCBCBBBCBFBFBFBFC1C1C3C3C3C3C0BFBFBDBCBDBBBDBDC0C0BCC0C0C1BDBCBCBCBCBCBFBCBCBFBCBBBBBBBBBBBBBBB8BBBBBBBD7B686A6A6A676A78BBBBB8B9B9BBBBBBB9BBBCC0C0BF6F6F6F6F6E6B6C9CBBBBBCB9B6B2B2B6AA6729030000000000000000000000000000296EACB3B6B9B9B9B9B6B8B9BBBCBBB6B6B6BBBB6B6D6E6E6E6E6F6E6E00000000000000246B6B6E6E6E6E6E6D6FA2C3C6C3C6C6C6C8C6C6C6C6C6C5C5C6C6C6C6C8C8B96A260000000000000000000000000000001454B5E1DFDBDFDBDBDCDAD9D9DBDBD7DBDEDEDCDBDBDBDEDFDFDBDEDEDBB983817F7F7F7F7FD7D9D7D7D7D7D7D4D3A13B040000000000000000DADBD9D7D4D1BF78787878777777BCC9C9C9C9CBC9C9B0631000000000000000000000000000002474BCBCBCBCBCBCBFBFBCBFBFBDC1C0B1651D000000000000000000000000000945A4C4C4C6C3C3C3C3C0C1C1BFBCBCBCBFC0C0C1C3C3C3C3C3C3C3C3C3C1C1C3C4C6C388380900000000000000000000000000000000001E64B2C9C9CEC9CBCBCBCBCFD0D0D1D1D1CFD1D0CECAAA77777778787A78785D00000000000000417777787B7C7C7D7DA1D9D9DBDADBDBDFDCDFE1BD86868381818181C9DCDBD9D9D9D9DBDBDBDBDBDBDBDADBDEDBDBDBDBDBDCDCDCDCDEA1490B0000000000000000000000000000043686D1E2E1E1E3E1E2E2E3E3E1E1DCDBD7D7D7D7D7DBDBDBDADAD7D7C67E7C7C7B787776BBC8C5C5C4C3C3C3C3A85E250000000000000000000000000000033884B0ABABAAAAAAABABAEAEAEAEABA7A5A3A3A39F9F9C9F9F9C9C9EA1A1A1A19E9E9C9C9C9A9C9C9C9A9C9C9C9F9C9EA1A3A7A7A7A7A8A8AAA7A7A7A729010101010101010101010198FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCE9D3D1D1D1CECECFD3D4D4DCF1C9B9B9BCBCBCBBBBBBB9BBBBBCC0C1C1C4C1C4C3C3C5C4C3C3C3C3C3C4C3C1C3C3C3C3C4C4C4C1C1C1C4C4C4C4C5C3C3C3C3C3C4C4C5C3C3C4C3C3C3C4C8C8C9CACACBD0D1D0D1D1D1D0D1D1D0D1CFCFCFCFCFCFCFCFCED1D0D0D0D1D0D1D1D3D3D4D4D5D7D7D5D3D3D3D1D3D3D1D3D3D3D3D3D4D4D1D4D4D7D7D7D7D9D7D7D7D7D7D7DADCDCDADAD7AC7C4F3D222222232323476393CBDCDCDCDADADADADCDCDCDADADCDCDCDCDCDCDEE1DFDFDFE1E2E1DFDFE20000000000000051DBDCDBDCDCE1E1DEDCD9D7D5D3D3D3D5D7D4D3D5D5D5D5D3D0D0D0D0D0D0D0D0D0C8936F4B28212021202020405B7FB5CFD1CFCFCBCBC9C9C5C5C5C3C6C3C4C4C1C4C4C3C3C0C0BDBDBDC0C0C1BDBBBBBBBBBBBBBDBBBBB9B5B8BBBBB9B9B8B9B9B0754D281B1A1A1A34A8A8ACAEAEAEB1B3B1B1B1B1B3B6B3B3B1B1B1B1B1B1B0B0B0996A432E19191919191933506597A5A5A5A19E9C9F9FA1A1A1A1A4A4A0A09EA0A194644732191819191918324C6D9CA0A4A09C9C9C9C9C9E9B989B9C9C9B9B9B9C9C9C9C9C9FA19FA0A4A4A5A4A4A4A4A5A7A7A7AA946D4E392518181918181919253956729EA5A8A5A5A5A5A5A1A1A5A7AAAAAAAAAAACB1B1B1B1ACACACACACACB0B2B2B288000000000000005CA7A7A8ACB0B0ACA8ABAEABABABA8ABAEAEB1B1B0AEB0B0B1B2B0B1B2B1B1B3B5B5B5B6BBBBB6B8B6B8B3B5B2B2B5B2B2B2B5B5B2B2B2B1B1B2976F47381A1A1A1C1C1C29416989B6B5B6B6B6B2B2B2B6B6B8BBB9B9B9B9B9B9B5B5B2B5B9B9BBBBBBBBBDBBB8B6B5B5B3B1B3B3B3B1B2B2B2B2B0B1B1ACAAA4785A3D2619191919191E3B587DA8A7A7A7A7A7A7A7A8A7A8ACAAAAACACA8A8AAACB1B2B2B2B2B2B2B2B2B0B1B0B0ACACA8A8ACABAAABA8A8ACABABA7A7A7A5A5A5A5A7A7A7AAAAAEAEAEAA2A010101010101020202010298FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCD7B0B1B1B0B1B2ACACAEB0B9CBAA9B9C9C9C9C9C9FA19FA0A4A4A5A4A4A4A4A5A7A7A7AAAAA7A7A5A5A5A5A8A5A5A7A7A5A5A5A4A5A5A8A5A5A5A5A5A1A1A5A7AAAAAAAAAAACB1B1B1B1ACACACACACACB0B2B2B2AEABABA7A7A5A5A4A4A7A7A8ACB0B0ACA8ABAEABABABA8ABAEAEB1B1B0AEB0B0B1B2B0B1B2B1B1B3B5B5B5B6BBBBB6B8B6B8B3B5B2B2B5B2B2B2B5B5B2B2B2B1B1B2B5B5B3B3B3B3B3B6B6B9B6B9B9B6B6B5B6B6B6B2B2B2B6B6B8BBB9B9B9B9B9B9B5B5B2B5B9B9BBBBBBBBBD000000000000003FB3B3B1B2B2B2B2B0B1B1ACAAAAACACACACAAABABA8ABA8A8A8A8A8A7A7A7A7A7A7A7A8A7A8ACAAAAACACA8A8AAACB1B2B2B2B2B2B2B2B2B0B1B0B0ACACA8A8ACABAAABA8A8ACABABA7A7A7A5A5A5A5A7A7A7AAAAAEAEAEAAAAACB0B2B0B2B5B9B9B9B6BBBBBBBBBDBCBCBDBCBCBCBCBCC0BDBDBBBDBBBBB9B9BBBBBBBBBBBBB9B6B2B1B2B2B2B2B2B3B3B2B2B2B2B2B5B6B5B2B2B0AEABABABAEB0AEB2B2B3B1B3B8B8BBBBBBBBB8BBBBBBBBB8BBBBBDC1C1C3C3C3C3C0BCC0BCBCBBBBBBBBBBB9BBB9B5B2B2B2B5B5B5B8B3B3B2B2B2B6B9B9BCBFBFC1BFC1C1C3C6C9C9C6C6C9C9C9C9CACECECECAC9CAC9C9C9C9C9C9C9C9C9C6C5C5C8C5C5C4C6C8C8C8C8C5C5C3C1C3C1C0C39A000000000000006FC4C4C3C3C3C0C0C0BFBDBDC1BFC1BFBFBFBBB9B6B3B2B2B5B8BBBBBBB8B8B9BBBBBBBBB8B8B8B8B6B6B6B3B3B2B2B2B2B2B1B1AEAEAEAEAAAAAAABB0B2B5B5B8B5B2B2B2B2B3B1B1B3B2B2B0B0B0AEAEABA8A8A8A8A7ABAAAAACACACACACB1B2B2B1B2B2B2B1B1AEACAAAEAEAEAEB2B1B1B1B1B3B6B6B6B6B5B9BBBBBBBBBBBBB8B8B8B8B6B6B6B6BBBBB6B5B3B2B2B3B8BBBBBBBBBBBBBDBDBBB9B9B9B9B6B8B8B8B8B9B5B9BBBBBCBBBCBFBFBDBDC0C0C3C5C6C4C3C4C4C1C1BFBCBCBBB8B6B6B5B2B22C010101010101010101010197FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF9EFF1EEECEBEFEEEFEFF2F8FCE4DBDBDBDCDCDCDCDADADADADCDCDCDADADCDCDCDCDCDCDEE1DFDFDFE1E2E1DFDFE2DFDEDCDCDEDCDBDCDBDCDBDCDCE1E1DEDCD9D7D5D3D3D3D5D7D4D3D5D5D5D5D3D0D0D0D0D0D0D0D0D0D0CECED0D0D1CFD1CFCBCBCBCBCBCFCFD1CFCFCBCBC9C9C5C5C5C3C6C3C4C4C1C4C4C3C3C0C0BDBDBDC0C0C1BDBBBBBBBBBBBBBDBBBBB9B5B8BBBBB9B9B8B9B9B6B3B3B2B2B0ACACAAA8A8ACAEAEAEB1B3B1B1B1B1B3B6B3B3B1B1B1B1B1B1B0B0B0B0AEABABABABAB0000000000000039A5A5A19E9C9F9FA1A1A1A1A4A4A0A09EA0A1A1A5A5A5A7A7A7A7A7A5A4A09C9CA0A4A09C9C9C9C9C9E9B989B9C9C9B9B9B9C9C9C9C9C9FA19FA0A4A4A5A4A4A4A4A5A7A7A7AAAAA7A7A5A5A5A5A8A5A5A7A7A5A5A5A4A5A5A8A5A5A5A5A5A1A1A5A7AAAAAAAAAAACB1B1B1B1ACACACACACACB0B2B2B2AEABABA7A7A5A5A4A4A7A7A8ACB0B0ACA8ABAEABABABA8ABAEAEB1B1B0AEB0B0B1B2B0B1B2B1B1B3B5B5B5B6BBBBB6B8B6B8B3B5B2B2B5B2B2B2B5B5B2B2B2B1B1B2B5B5B3B3B3B3B3B6B6B9B6B9B9B6B6B5B6B6B6B2B2B2B6B6B8BBB9B9B9B9B9B9B5B5B2B5B9B9BBBBBBBBBDBBB8B6B5B5B3B1B3B3B3B1B2B2B2B2B0B1B1ACAAAAACACACACAAABABA8ABA8A8A8A8A8A7A7830000000000000062AAAAACACA8A8AAACB1B2B2B2B2B2B2B2B2B0B1B0B0ACACA8A8ACABAAABA8A8ACABABA7A7A7A5A5A5A5A7A7A7AAAAAEAEAEAAAAACB0B2B0B2B5B9B9B9B6BBBBBBBBBDBCBCBDBCBCBCBCBCC0BDBDBBBDBBBBB9B9BBBBBBBBBBBBB9B6B2B1B2B2B2B2B2B3B3B2B2B2B2B2B5B6B5B2B2B0AEABABABAEB0AEB2B2B3B1B3B8B8BBBBBBBBB8BBBBBBBBB8BBBBBDC1C1C3C3C3C3C0BCC0BCBCBBBBBBBBBBB9BBB9B5B2B2B2B5B5B5B8B3B3B2B2B2B6B9B9BCBFBFC1BFC1C1C3C6C9C9C6C6C9C9C9C9CACECECECAC934020202020202020202020298FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBDFC3C3C1C0BDBDC0BFBFC0C6DCBDAAAAA7A7A5A4A5A5A5A7A7A7A8A8ACACACA8A8ACAEB2AEB2B5B8B8B8B5B9B9B9BBBDBBBBBDBBBBBBBBBBBFBDBDB9BDB9B9B8B8BBBBBBBBBBBBB8B5B2B0B2B2B1B1B1B2B2B1B2B2B2B2B5B5B5B2B2AEACAAAAAAACAEACB1B2B2B0B2B6B6B9B9B9B9B6B9B9B9B9B6B9B9BDC0C0C3C3C3C1BFBBBFBBBBB9B9B9B9B9B8BBB8B5B2B2B2B5B5B5B6B2B2B2B2B2B5B8B8BBBDBDC0BDC0C0C3C5C8C8C5C5C8C8C8C8C9CBCBCBC9C8C9C8C8C8C9C8C8C8C8C8C5C5C5C6C50000000000000047C5C3C0C3C0BFC1C1C1BDC0C3C3C0C1C1C3C3C3C3C1BFBFBFBDBDBDC0BDC0BDBDBDBBB8B5B2B1B1B5B6BBB9B9B6B6B8BBBBBBBBB6B6B6B6B5B5B5B2B2B1B1B1B1B1B0B0ACACACACA8A8A8AAAEB2B5B5B6B5B1B1B2B2B2B0B0B2B1B1AEAEAEACACAAA8A8A8A8A7AAA8A8ACACACACACB0B1B1B0B2B2B2B0B0ACACA8ACACACACB1B0B0B0B0B2B5B5B5B5B5B8B9B9B9B9B9BBB6B6B6B6B5B5B5B5B9B9B5B5B2B2B2B2B6B9B9B9B9B9BBBDBDBBB8B8B8B8B5B6B6B6B6B8B5B8BBBBBBB9BBBDBDBDBDBFBFC1C5C5C3C3C3C3C0C0BDBBBBB9B6B5B5B5B2B2B2B0B0AEAEAEB1B1B1AEB2AEACACACACAEAAACACAAA7AAACAEAEAEACACAAAAAAAAAEB1AEACAEAEB1B1AEAAAEB0B2B2B2B2B0ACAC880000000000000060AAA8AAAAAAAAA8A8A8A8A5A5A5A8A5A5A5A5A5A5A5A5A2A4A4A7A8A8AAACB1B2B2B2B5B9B5B5B5B2B1B0B2B2B2B1B1ACACAEAEAEB1B1B2B0B0B2B5B5B5B9B5B8B8BBB8BBBBBDBDBDBDBDBDC0C1C1C1BFBFC0C3C3C0C0C0C0BFC1C1C1C3C5C5C3C3C5C5C6C6C9CBCBC9C9C9C9C9CBCBD0D0D0CECFCBCBCFCFCED0CECFCFD0CECECAC9C9C8C8C9CACBCAC9CBCFD1D0D1D0D0CBD0D0D1D1D3D3D7D7D7D7D9D9D9D9D9D5D5D7D5D3D0D3D0CFCFCFCECACACAC9C6C5C3C5C5C6C5C5C6C6C3C5C6C5C5C1C1BFC130020202020202020202020298FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBE5CFD0CECBCBCECBCAC9C9D0E4BFACACA8A8A8ACACACACB0B2B0B0B0B0B2B5B2B2B0B0B0B0B0B0AEAEAEAEACAAAAAAAAAAAAA8A8A7A7A7A4A4A4A4A19E9C9F9FA1A1A1A1A2A2A1A19EA1A1A1A4A4A4A7A5A7A7A7A4A2A19C9CA1A2A19C9C9C9C9C9E9B989B9C9C9B9B9B9C9C9C9C9C9FA19FA1A2A2A4A2A2A2A2A5A7A7A5A8A8A5A5A5A5A5A5A8A5A5A7A7A5A4A4A2A4A5A8A5A5A5A4A4A1A1A4A5A8A8A8A8A8ACB0B0B0B0ACACACACACACAEB1B1B1ACAAAAA7A5A4A4A2A2A5A7A8ACAEAEACA8AA000000000000003DB0B0AEACAEAEB0B1AEB0B2B0B0B2B5B5B5B5B9B9B5B6B5B6B2B5B2B2B5B2B2B2B5B5B2B2B2B0B0B1B5B5B2B2B2B2B2B5B5B8B5B8B8B5B5B5B5B5B5B2B2B2B5B5B6B9B8B8B8B8B8B8B5B5B2B5B8B8BBBBBBBBBDBBB6B5B5B5B2B0B2B2B2B0B2B2B1B2AEB0B0ACA8A8ACACACACA8AAAAA8AAA8A8A8A8A8A7A7A7A7A7A5A5A8A5A8ACA8A8ACACA8A8A8ACB0B2B2B2B2B2B2B1B1AEB0AEAEACACA8A8ACAAA8AAA8A8ACAAAAA7A7A5A4A5A5A5A7A7A7A8A8ACACACA8A8ACAEB2AEB2B5B8B8B8B5B9B9B9BBBDBBBBBDBBBBBBBBBBBFBDBDB9BDB9B9B8B8BBBBBBBBBBBBB8B5B2B0B2B2B1B1B1B2B2B1B2B2B2B2B5B5B5B2B2AEACAAAAAAACAEACB1B2B2B0B2B6B6B9B9B9B9B6B9B9B9B9B692000000000000006FBFBBBFBBBBB9B9B9B9B9B8BBB8B5B2B2B2B5B5B5B6B2B2B2B2B2B5B8B8BBBDBDC0BDC0C0C3C5C8C8C5C5C8C8C8C8C9CBCBCBC9C8C9C8C8C8C9C8C8C8C8C8C5C5C5C6C5C5C3C5C6C6C6C6C5C5C3C0C3C0BFC1C1C1BDC0C3C3C0C1C1C3C3C3C3C1BFBFBFBDBDBDC0BDC0BDBDBDBBB8B5B2B1B1B5B6BBB9B9B6B6B8BBBBBBBBB6B6B6B6B5B5B5B2B2B1B1B1B1B1B0B0ACACACACA8A8A8AAAEB2B5B5B6B5B1B1B2B2B2B0B0B2B1B1AEAEAEACACAAA8A8A8A8A7AAA8A8ACACACACACB0B1B1B0B2B2B2B0B0ACAC2A010101010101010101010197FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF0DEDEDEDEDCDEDCDCDBDEE6F7D3C9C9C9C9CBC9CBC9C6C9C9C8C8C6C6C5C5C5C6C6C5C4C4C5C5C4C4C0C3C5C4C0C4C3C5C6C5C4C1C1C1C3C3C5C5C8C8C8C8C8C5C9C8C5C3C3C3C0C0C0C1BFBFBDBDBDBDBDBDBDBDB9B8B6B6B5B2B2B2B3B3B3B3B2B1B1B2B2B2B2B2B2B5B3B2B5B5B2B3B3B5B3B2AEAEACACACAEB0B0AEB0B0B0B2B3B2B5B2B0B2B5B5B5B3B5B2B3B2B0B2B3B3B5B5B2B2B0B0ACAAAAA8A8A8A5A5A5A2A0A4A4A5A8AAA8A8AAA8A8A8ACACACAAA8A8AAA8A8A8A8AAAEAEB1B1B0000000000000003DAAA7A7A7A5A5A4A7A8A5A8AAAAAAACACACACAAAAACACAAA8AAACACACB0ACA8A8A8A8A8A8A8A5A5A8A8A8A8ACACAAA8A8A8A8AAAEB0B2B2B2B2B3B2AEB2B2AEAEB2AEAAAAAAACAAAAACACAAACA8AAAAACB1B1ACB0B0B0B1B1AEAEACAEB0ACACB0B1B1B1B1B1B1B3B1B2B3B3B3B3B2B2B2B2AEAEACACAEB1B3B3B3B3B5B6B3B2B2B2B1B2B5B3B3B5B8B5B5B5B2B2B5B8B6B5B5B8BBBBB9B9B9B6B5B5B6B9B9B6B9BCBCBCBCBDBDC1C1BFBFBDBCBCBBB9BBB6BBBBBDBDB9BDBDBDBBB9B9B9B9B9BCB9B9BCB9B6B8B8B8B8B8B8B5B8B8B8BBB8B5B6B6B6B3B6B5B8B8B5B5B5B8B8B8B5B6B9BDBDBCBDBFBDBFBDB9B8B9B8B8B9B5B3B1B1B3B5B2B2B1B2B1B1B2B2B3B3B2B2B5B5B3B3B38E0000000000000067B3B5B5B6B9B6B3B3B3B6B6B9BBBDBDBDBDBFBCBCBFBFBFC1C1BFBFBCB9B9BDBDBDBDBCBBBDC0C1C5C1C5C5C5C5C5C5C5C5C5C4C4C5C5C5C5C5C5C5C5C8C9CBCED0D1D3D6D7DADCDCDCDCDBDEDEDEDEDFDEDADEDADADBD7D7D7D9D9D6D9DCDCDBD9D9D9DCDEDEDADCDCDADADCD9D7D7D7D7D7D6D7D4D4D4D6D6D1D1D1D0D0D1D1D3D7D7D7D9D7D7D9D7D4D1CFCBCECECECECBCBCBC9C6C6C8C8C9C8C8C5C5C3C3C3C3C3C3C4C1C1BFBFBDBDBCBCBCB9B9B9B9B9B9B9BCBCB9BCBCBBBDBDBDBDBDC0C0BFBD30020202020202020202020297FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9D5B1B1B3B2B8B3B5B8B6B2BFD3B5A7A8A8A8A8A8A8A8A8A8A8A8A8ACA8ABAEB1B1B1B3B3B6B6B3B3B6B6B5B8B8BBBCBCBCBCBDBBBBBBBBBBBBBBBDBFC0C0C0C0C0C3C3C3C0C3C5C5C6C6CAC6CAC9CAC8C6C5C6C6C6C6C5C8C8C6C6C8C6C3C3C3C6C5C5C5C1C4C6C6C4C4C1C1BFBFC0C3C3C3C3C3C3C1C1BFC1C3C3C4C6C6C9C6C6C9C9C6C5C6C8C6C6C6C4C4C0C0C0C1C1C0C0C0C3C3C5C3C5C5C3C0C0C0C0C0C0C0C0BDBDBCB9B8B8BBBBBBBDBDBDBDBDBDC0C1C4C5C5C4C1C4C5C4C4C1C0BDBF0000000000000025C5C6C6C4C5C1C5C6C6C6C6C5C4C3C1C1C0BDBDBDBDBDBDBDBDBDBCBDBDBCBCBCBDBDBBBCB9B9BBBBBBB9BCBCBCBBBBBBB9B9B9BCBCBCBDBDBBBDBDB9B9B9B9BDBDBFC0C1C4C4C4C0C0C0BFBFC0BDBDBBBBBBBCBDC0BDBFC0BFC0C1C3C3C3C0C3C3C3C3C1C1C1C1C1C1C3C3C1C1C5C1C3C4C5C5C5C5C8CACACBCACAC9C6C6C6C8C6C6C9C6C8C8C9CBC9CBCBCBCECECBCBCBCBCBCBC8CACACACACAC6C8CBCECBCBCECECBC8C8C6C6C4C1C0BDBDBDBDBDBDBCB9BCBDBDBBB9B6B5B5B5B5B5B9BBBBB9B9B9BDBBBBBCBCBDBBBBBBBBBDBBBCBBBBB8BCBCB9B9B8B9B9B9B5B3B2B5B5B3B5B5B5B5B6B6B5B9B9B9B5B5B8B5B2B5B1B5B5B3B3B1B2B2B5B3B2B2B2AEB2AEAEAEB2AEAEAEB28F0000000000000069BCBBBBBBBCBDBDBDBFC1C0C1C4C0C0BFBDBDBBB8B6B5B3B2B5B8B6B6B5B5B5B5B5B5B9B9BBBBBDBBBBBDBBBBBBB6B6B8BCBCBCBBBBB6B6B6BBBBBBB8B8B8B6B9B9BBBDBFBFC1BFC1C0C0C3C1C0C0C0C0C0C1C0BFC0C0C0C0C1C1C1BFBFBFC1C1C1C1C3C0C0C0C0C0C1C1C3C0C0C1C0C0C0C1C5C5C6C8C8C9CBCECBCECFCFCBCECECBCFCBCBCBCBCBCBCBCBCACECBCBCBCFCBCFCED0D0D1D1D3D6D6D3D0D0D0CED0D0CFD0D0D0D0D0D1D1CFD1D1D5D5D5D5D7D6D6D3D3D3D6D7DADAD7D7D5D5D3D6D6D6D638020202020202020202020296F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F0DEDCDBDBDCDFDFDFDEE1ECF8D9CFCECEC9CECECECFD0D0D3D3D3D3D6D6D6D6D6D3D3D4D3D0CED0CECBCBCBCAC8C8C8C8C5C3C1C4C4C5C4C4C5C5C1C3C5C3C3BFBFBDBFBFBCBCBCB9B9B9B9B9B6B6B5B6B6B6B6B6B3B3B3B2B6B2B2B2B5B5B6B6B6B3B6B6B9BCBDBCB9BBB8B8BBBDBCBCBCBCBDBFBFC0C0C0C1C4C4C4C1BFBFBCB9B9B6B3B3B6B6B5B6B6B6B6B6B8B6B6B6B9B6B6B8BBBFBFBBBCB9BBBBBCBCBCBCB9B9B9B9B9BCB8BCBDBDBCBFBCBCBCBCBDB9BDBBB8B8B8B6B8B8BCBDBDBDB9000000000000001DBFBFBDBBBBBFBFBCB9B6B3B1B1B1B3B3B3B5B5B5B5B5B3B1B1B1B3B3B6B6B6B8BBBBBBBBBFBFBFBFC0C1C4C4C4C4C3C3C0C0C0BFBFC1C1C4C4C4C4C0C3C3C3C5C8C9C9C6C8C8C8C5C6C6C8C6C6C6C8CACACECFCBC9CBCACAC8C8C8CACBC8C8C8C6C4C4C1C1C1C3C4C4C6C3C3C5C6C6C9CBCBC9CACACAC8C6C6C5C3C0C4C4C5C5C1BFC1C3C1BFBFBCB9B9B6B9BBBBB8B6B5B5B5B2B3B3B3B3B2B2B1B1B1B1AEABAEB0AEB1AEACACA8A8ABA7A7ABA7A5A4A5A4A4A29D9D9C9C9DA2A2A29F9F9F9F9FA2A2A2A4A5A5A5A5A5A5A2A2A2A2A4A4A5A2A2A2A2A2A2A2A2A2A2A5A2A2A2A2A2A2A29DA2A2A29FA2A29FA2A4A4A4A4A2A2A2A2A2A2A4A5A7AAA5A2A5A5A5A5A2A2A5A5A2A2A27E0000000000000060AAACAAAAA7AAA7AAAAAAABACAAAAAAA7ABACACACAAAAAAAAA5A5A8A8ACACACB0B0B2B2B2AEAEB2B5B6B6B6B2B6B6B3B1ACACB0B1B3B1ACB1B3B3B3B2B2B2B1B1AEAEAEAEAEB2B2B5B6B6B6B2B2AEB1B1B1B0ACB0ACACAAA8ABAEABABABABACABAEB1B1B0B0ACACACACAEACAEB0B0AEACAAACACACB0B0ACACACAEACACACACACACAAA7A5A5A2A2A2A2A2A2A2A2A29D9D9C9C9B9B9B9B9B9D9C9B9B9CA2A29C9B9B9B9B9B9C9FA29F9C9F9C9B9B9B9997979B979B9B9B9C9FA2A2A2A4A4A5A2A2A5A2A5A5A52A010101010101010101010195F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E4CACACBCAC9C5C6C8C8C8D1EAC3AEB1B1B5B5B2AEAEAEB0B1B5B1B1AEB0AEB0AEB1B1B2B0B0AEB0B0AEB0B0B2B2B2B1B0B3B6B6B8B6B5B3B5B5B1B3B2B2B2B2B2B6B2B6B8B6B8B8B8B8B8B6B6B8B6B6B2B6B2B0B0B0B2B6B3B3B3B6B8B8B6B3B6B9BCBCBCBCB8B9B9B9BDBF9E93939396939698BFBFBBBDC0C3C6C6C3C0C0C4C4C4C4C6C6C6C5C3C4C5C3C1C3C1C4C6C5C5C4C3C6C4C4C1C1BFBFC0BFBCBCBFBFBDBDBBBBBBBBBDBDBDBDBDB9BBBBB6B9B6B6B9B9BCB9BCBDBDBDB9B9BBB8B5B20000000000000003B1AEB1AEAEAEAEAEAEB1B1B1B1B5B3B1AEAEAEAEAEACACABACAEAEAEAEB1B0B1AEAEB1B3B2B2B5B8B8BBB6B6B6B6B6B8B6B8B8BBBBBFC0BFC0C0BFBFBDBFBFC1BFBDBBB9B9B9BDBBBDBBBCBFBFC1C1C1C0C0C0BFBFBFC1C1C0BFC1C4C4C1BFBFBFBFBFBCBBBBBFBBBDBDB9B6B8B9B9B9B9B6B6B6B9B9B6B6B5B5B2B2B2B2B1B1AEAEACAEAEAEAEAEACACACACABA7A7ABAAAAAAA7A8A8AAAAA5A4A4A4A4A4A7A5A4A5A4A1A1A1A2A4A4A1A19D9D9D9D9D9D9D9B9B999999999B9994939390929290929696999999999B9C9C9DA1A1A2A4A7A4A4A4A29DA1A1A29DA2A5A7ABAAACACAEAEAEACAEAEAEAEACACAEAEAEB0AEAEB1B3B2B0AEAEAEAEAEB2B2B2B2B6B6B6B6B6B6B9B9B6B690000000000000006DC0BDBFC0C0C1C0BFC1C1BFBFBFC0C0C1C4C6C8B69E9B9999999B9BB3C0BFBCB8B6B6B6B6B3B6B5B5B8B8B8B8B6B8B8B6B6B6B6B6B6B6B3B3B3B0B3B2AEB2B2B3B3B2AEB0B0B0B1B1B2B5B5B5B6B6B2B2AEB1B1AEAEAEAEACACAEB1B2B5B6B6B3B0AEAEAEAEACAEAEACAAAAAAABABACACACACACAEB0B0B0B0B0B0B2B3B6B5B5B5B5B6B6BBBDC0BFBFBFC0C0C1C1C1C3C1C0C3C0BDBDBDBDBDBBB6B6B6B6B8B9B9BCBCBCBFBDBDBFC3C1C1C0BFBFC0BFC0C0C1BFC1C1C5C1BFC1BFBDBDBDBDBDBBB8B9B6B62F020202020202020202020295F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6E9D1D1D1D5D6D9D5D9DAD7DFEFCEBFBFBFBFBFBBBBB9B6B6B6B6B6B6BBBBBBBBBBBBBDBFC1C3C3C1BFC1C3C1C1BFBDBBBCBFC1BFBFBCBFBFC1C3C4C4C1C3BFC3C5C5C5C4C3C1C1BFBFBDBBBBBBBBBBBBBBBBBBB9BBBBB9B9B9BBBBB6B9B6B6B6B6B6B6B9B9B9B6B6B6B6B6B61C00000000000000B6B6B6B6B9B9BCBDBFC1C1C1BFBFBFBCBCBFBBBBB6B6B6B9BBBDB9BCBFBCBDBFC1C1C1BFC1C1C1C1BFBFBFBFBFBFC1C1BFBFC3BFC1C1C3C3C3C3C6C9C9CAC9C9C6C5C5C5C6C4C4C6C4C6C6C6C9000000000000000090C9C9C9C6C9C9C9C9C9C5C6C9CBC9C9CBCBC9C6C6C5C5C1BFBDBBBBBBBBBBB9B9B6B9B9B9B6B6B5B3B3B3B3B3B6B6B6B6B6B6B9B6B6B9B9B9B6B6B6B6B9B6B9B6B6B6B9B9B6B6B6B6B6B6B3B1B0B2B2B1B3B3B3B2B5B5B3B6B6B6B3B3B6B3B0B2AEB2B2B1B1AEB0B0B2B1B0B0B0ACB0ACACACB0ACACACB0B2B2B1AEAEB1B3B5B6B9B6B6B6B9B9B9B9BCBFBDBFC1BFBFBCB9B9B6B6B5B3B1B0B2B6B5B5B3B3B3B3B3B3B6B6B6B6B9B6B6B9B6B6B6B5B5B6B9B9B9B6B6B5B5B5B6B6B6B6B6B6B5B6B6B6BBBCBCBFBCBFBDBDC1BFBDBDBFBFBFBFBFBCBDBDBDBDBFBFBFBCBCBCBFBFBFBFC1BFBFBFBDBDBFBFC1BFBFBFBDBFBFBFC3C3C5C6C6C6CACBCACBCECECACBCBCACEC9C9C9C9A10000000000000075CECACECBCECECFCFD0D3D3D0CECECECBCECECE770000000000000078CFD1D1D1D1D4D3D3D1D1D1D3D4D7D7D4D4D1D1D0D3D3D3D3D4D9D9D7D6D6D6D9D9D7D7D4D4D4D4D7D9D7D4D4D7D7D9D9D9D9DADCDBDBDBDCDEDBDBDBDEDBDAD9D9DAD9D6D7D6D7D6D9D9DBDBDAD7D4D1D0CECECED0D1CFCED0D0D0D0CECACACACACACACACACACAC9C9CACACBC9CBC9C6C6C6C6C6C9C9CEC9C9C6C6C4C4C1C1C1BFC1BFBFBFBCBFBFBFBFBBBBB9B9B9BBBBBCB9B6B6B6B6B6B6B9B6B6B5B1B3B6B6B5B5B3B5B5B2B02C010101010101010101010194F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5EEDBDBD7D7D9DCD7D9DADEEAF4D6CEC9C8C9C9C9C5C5C5C9C9C6C6C6C4C1C1BFBFBFC0C1C1C3C0C0C1C4C4C8C9C9C8C9C9C9C6C3C3C1C0BDC1C1C1C1BFBDBFC0BFBDBDB9B6B6B3B6B9B9B6B3B2B2B2B1B1B1B1B1B1B1AEAEAEAEACA8ACACACAEACAAAAA5A5A8A5A5A8A5A3A218000000000000009C9F9FA29D9D9D9D9D9F9F9FA2A3A3A3A3A2A2A2A2A2A2A2A2A3A2A29F9F9FA29F9F9FA1A2A2A1A2A2A2A29F9C9F9FA19D9FA19DA1A2A2A2A2A1A19F9FA2A2A2A3A5A7A3A2A2A2A2A3A2A2A2A217000000000000000C96A3A7A7AAA7A7A5A7A5A7A7A7A8AAA7A7A7A5A8ABAAAAA7A7A7A7A3A3A5A5AAABABACACB1B1B1ACACB1B2B5B5B3B1B3B3B1AEABABACAEB1AEABAEB1B1B1B1B1B1AEAEACACACACACB1B1B2B5B3B3B1B1ACAEAEAEACAAACAAABA7A5A8ACA8A8A8A8ABA8ACAEAEACACABAAAAAAACAAACACACACABA7AAABABACACAAABABACAAAAAAAAABABA7A5A3A3A29FA1A1A2A2A29F9F9C9C9B9B97979799999C9B99999B9F9F9B99999799979B9DA29D9B9D9B99999997949499949997979B9DA1A1A1A2A2A3A2A2A3A2A3A3A3A3A2A1A1A2A2A5A5A8ACAAABAAAAACACACB1AEAEABAAAAACABABABACB1B1B3B1B1B3B3B3B1B3B6B6B6B6B9B6BBBBBDBDBDC1C3C3C6C3C6C6C8C9C6C6C6C4C4C6A00000000000000075CAC9CBCAC9CACECACACECECECECAC9C9C5C9C9750000000000000077CBCACECECBCBCBCAC9C5C6C9C9C9C9C9CBC9CACACECBC9C9CBC9CAC8C5C5C5C8C8C4C5C4C6C4C4C1C1BDBDBCBCB9B9B9BBB9B6B6B2B6B2B2B1AEB1AEABAEAEAEAEAEB1B1B5B2B2B5B5B5B9B6B6B6B3B3B3B3B3B1B2B3B6B6B6BBBBB6B6BBBBB9B5B2B2B2B2B3B3B3B3B5B2AEAEB1B5B5B5B3B5B5B2AEB1B1B1B1B1B3B1ACB1B1B3B3B1ACACACAEB1B3B1B1ACAEACAEACB1B1B1AEAEACAEAEACAEAEB1B1B1B1AEB2B5B5B6B5B3B2B32E010201010101010201020294F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E2C8C9C6C5C6C9C9C9CAC6D1E6C3B1B1B1ACACABABABABABAAAAA8A8A8A8A5A5A5A5AAACB0B0B1B0ABABACACACAAAAACABABAAAAAAA8A8A5A3A3A3A3A2A5A5A5A7A7A7A7A7AAABABAAACACACAAAAA8A7A5A8A8A8A8ABAAAAAAAAACB1B1B1B1B0B2B3B3B3B3B3B5B1B1B1B1B11A00000000000000ACACACB1B3B3B3B3B3B5B8B8B5B2B2B2B2B1B1B1B1B1B2B0B2B5B5B6B3B6B9B9B8B8B9B9BCC0C1BFBDBFBFBBBBB9B6B6B3B1B1B1B0ACACACAAAAAAAAAAABABABAAACAAA7A7A7A7AAA5A7A7A5A2250000000000000000084786ABAAA8A2869DABAAA5AAAAACACACACAAA7A7A7A5A2A2A2A2A3A5A5A5A3A5A5A5A5A3A3A3A3A2A2A2A3A2A2A2A2A2A2A2A29E9F9FA2A5A5A5A8ABACACACB1B3B1B0B0ACABAAACACACABABA8A8AAAAAAABABACAAAAACB0B0B1B3B1B2B2B5B2B5B6B9B9B9B9B9B9BBBCBCBCB9B9BBBFBFBBBBBBBBB9BCBCBCBDC0C0BDBFC1C1C1C1C4C6C6C4C4C4C4C4C6C6C9C9C9C8C9C6C6C9C9C8C9C8C9C9C9C8C8C5C4C3C3C3C3C5C6C5C4C6C9CBC9CBC9C9C6C9C9CACBCECED0D0D0D0D3D3D3D3D3D0D0D1D0CEC9CEC9C9C9C9C8C5C5C5C4C1C0BFC1C1C1C1C1C1C1BFC0C1C0C0BCBCB9BCBCB9B9B9B6B6B6B6B6B3B3B1B2B2B2B2B2B1B1B1B0B2B0B0B0B1B1B3B2B2B1B3B3B6B9B9B9900000000000000069B9B9BCBBBDBDBDBFC1C1C1BFBCBCB9B6B6B2B1640000000000000067B5B2B2B3B6B3B3B5B8BBBBB8B9B6B8B8B9B9B9B9B6B6B6B6B6B9B5B9B9B9B9BCB9B9B9B9B9B6B9B8B5B5B5B2B5B5B9B9B9B9B6B9B9B6B6B9B9BCBCBCBBB9B8B8BBBBB9B6B2B1ACACACB1B1B1B1B1B1B1B1B1ACACACB1B1B3B3B2B5B8B8B8B8BBBBBBBCBDBFC1C1C1C1C0C0BDBDBDBBBCBFBFC1C1C1C1BDC0C0C0C1C4C6C6C3C5C5C4C1C3C3C5C3C3C3C5C8C8C9CBC9C6C9C8C8C4C4C4C8C9C5C5C5C3C1C1BFBFBFC0C1C1C3C0C0C132020202020202020202020292F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E5D1D3D5D3D5D6D3D3D6D3DAECC9BBBBB8B3B2B2B2B5B6B6B9B9B9BCBBBBBCC0BFBFBDBCBCBDBBBDBDBFBCBFBFC3BFBCBFBBBBBBBBBBBBB8B5B6B3B3B6BBBCBCBFBBBFBFC0C3C3C3C1C3C0C0C1C1C3C3C3C0C0BDBDBFC3BFC1BDC0BCBCBCBFBCBCB9B9BBB8B3B3B3B2B1B1B11A00000000000000B1B3B6B6B6B8B8B8B8B3B5B5B5B8B8B8B6B6B3B5B3B3B3B6B5B5B2B5B3B3B3B8BBBBBFBCBCBCBBBBBCBDBBBCBCBCBCBCBBBBBDBDBDBDBBBDBDC1C1C3C3C1C3C3C3C3C3C1C3C3C1C0C3C1C4C1C460000000000000000000000000000000006FC3C1BFBFC0C0BFBFBBBDC0BFBBBFBDC1C3C0BFBCBCBCBDBDC1C1C3C3C3C3C3C1C4C3C1BDBDBDBBBBBBBCBBBBB9B9B9B8B8B8B8B8B3B2B2B2B1ACACACB0B0B0B0ACABABACACACACACACB1B0ACB1B1ACB0B0B1B0ACA8A8A7A7A7A8AAAAA8AAAAAAACB0ACB1ACAAACB1B1B1B0B1ACB0ACAAACB0B0B1B1ACACAAAAA7A5A5A3A3A39F9F9F9C9B9E9EA1A3A5A3A3A5A3A3A3A7A7A7A5A3A3A5A3A3A3A3A5A8A8ABABAAAAAAA7A3A3A7A8A8A5A2A2A29F9F9EA2A3A1A3A5A5A5A7A7A7A7A5A5A7A7A5A3A5A7A7A7AAA7A3A3A3A3A3A3A3A1A1A3A3A3A3A7A7A5A3A3A3A3A5A8AAACACACACB0ACA8ACACA8A8ACA8A5A5A5A7A5A5A7A7A5A7A3A5A5A7ABABA7AAAAAA87000000000000005FAAABABABABABABB0ABACB0B0B0B0ACACACACA85F0000000000000064B1B2B0ACACACABACB1B0B0B1B2B1B1B1ACACB1B2B2B1B1B2B5B5B3B3B3B2B1B1B2B3B3B2B3B6B6B6B6B9B9BCBCBBBBB8B6B6B5B3B5B2B5B5B8B8B3B8B8B9B5B3B3B3B3B3B6B3B3B6B3B2B2B2B2B2B2B2B1B2B2B2B5B2B1B2B2B2B0B2B1B2B2B1B1B1B2B2B2B1B2B3B8B8B6B9BBB9BBB8B3B2B3B2B2B3B1B0ABABB0B1ACACABACABABACACB0B0ACACB1B1B0B0B0B0ACACACB0B1B1B1B1B0B1B1B2B3B2B0B0B0B2B2B3B5B8B8B8B8BB2E020202020202020202020292F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F6F6F6F6F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F7F6F6F6F6F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E5CECECECBCECECACAC9CAD7EAC5B3B2B1B1B1B1B1B3B5B5B3B3B3B6B5B5B5B5B6B5B5B5B5B6B5B5B5B5B2B5B5B3B3B2B3B3B3B1AEACB0B0AEB1B1B1B0B2B2B1B3B3B3B1B1B2B1ACB0ABB0B0AEAEABACACB0AEACACACA8ACA8A8A8ACA8A8A8ACB0B0AEABABAEB1B2B2B5B5B51A00000000000000BCBFBBBBB9B6B6B5B2B2B1AEACB0B2B2B2B1B1B1B1B1B1B3B3B5B5B6B5B5B6B5B5B5B2B2B2B5B5B5B5B5B2B2B2B5B5B5B2B2B2B2B3B3B5B8B9B9BCB9BCBBBBBDBCBBBBBBBBBBBCBBB9BBBBBBBBA5000000000000000000000000000000006BBDBBBBBCBBBBBBBCC0C0C3C3C3C4C8C8C8C8C9C9C8C8C8C8C9C6C6C6C6C6C6C6C6C5C8C8C8C8C9C8C9C8C9C9CACACBD0D0CBC9C9C9C8C9C9C9C9C9C9C9C9CACAC9CACACFCFCFCFD1D0D0CECECED0D1D4D4D1D1CFCFCBD0D0D0D0D1D5D5D4D3D3D3D5D5D4D4D1D1D1D1D4D5D4D1D1D4D4D5D5D5D5D7DAD7D7D7DADAD9D7D7DAD7D7D5D5D7D5D3D4D3D4D3D5D5D9D9D7D4D1CFCBC9C9C9CBCFCAC9CBCBCBCBC9C8C8C8C8C8C8C8C8C8C8C5C5C8C8C8C6C8C6C4C4C4C4C4C6C6C9C6C6C4C4C1C1BDBDBDBBBFBBBCBCB9BCBCBBBBB8B8B5B5B5B8B8B9B5B3B3B3B2B2B2B5B2B2B2AEB1B3B3B2B2B1B2B2B0ACACAAAAA7A5A5A3A2A2A5A7A7A7A8ACA8A8A8A8AC89000000000000005FA7A7A7A7A7A3A3A3A3A3A3A3A3A2A2A29E9E9E5800000000000000569B9C9C9A9A979A9B9B9E9E9EA2A1A2A2A29E9C9A97979A9C9A97979797979794929496969494949696969696999B999A9C9C9E9C9C9C9C9FA2A2A1A3A3A1A19F9F9F9FA29F9FA2A29F9E9E9C9E9FA29F9F9F9E9E9B9B9EA1A3A3A3A3A3A5A8A8A8A8A5A5A5A5A5A5A7AAAAAAA7A3A3A2A19E9E9C9CA1A2A2A5A7A7A5A2A3A7A3A3A3A2A3A7A7A8A8A7A7A7A7A8AAA7A8ABA8A8ACAEAEAEB0B2B2B0B1B0B1ACAEABABAEABABABAEAE2A010101010101010101010191F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F6F6F6F6F7F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2F2F2F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0CAAAACB0AEB0B2B1B5B1B1BFCEB1A0A0A09F9C9C9F9FA1A3A5A8A7A7A7A7AAAAA8ACABABA7A7A7AAA7A7A7AAACACB0ACACB0B0B0ACB0B2B2B2B2B5B2B6B6BBBBBBBDBFBFC3BFC3C3C4C5C3C3C3C0C0C3C5C8C5C5C4C4C4C4C6C6C5C8C6C5C6C9C6C6C9C9C9C9C6C5C5C1C5C51F00000000000000C9C8C6C9C9C8C8C8C6C5C1C3C5C5C5C5C5C8C5C6C6C9C8C5C5C8C5C6C4C1C1C1C4C4C0C1C0C3C0C0BDBDBBB9B8B8B5B5B5B6B5B2B2AEB2AEAEACABACABA7ABABABABABACACB1AEAEB1B1B1B5B2B23700000000000000000000000000000067B6B5B1AEAEAEAEB0B0B0B0B1AEABABACB1B1B1B0B1B1AEABACACACACACB0ACAAACACB0B0ACAAA8A8ABACB0ACACAAABA8ABAAACACACABABAAABABAAABABACACACACABAEB1B1B2B1B0AEB0B0ACAEACACACACACB1ACB1B2B1B2B2B2B2B2B2B2B2B1B1ACB1ACABABABACB1AEAEAEB1B2B2B2AEB2B5B6B6B6B6B2B5B5B5B8BBB8B5B5B5B8B5B8BBB9B9B5B8BBBDC0C0BDBBBBBDBDBDBDC0C1C1BFBDBDBFBDBDBDBDBDC0BFBFBDBDC0BDBDBDBDB9BBBBB9B6B6B9B9B8B8B5B5B5B5B8B8B8B8B8B5B5B5B2B5B2B2B5B5B6B5B6B8B8B8B5B5B5B2B0ACACACABACACACACACACA8ACAAA8A8A8A8A8ACACACACB0AEACAAAAAAA8A8A7A7A5A7A8A8A8AAACABACA8A8ACAEACACB0B2B2B5B2B2B1B2B2B2B1B2B2B5B5B9BBB9BBBBB9B9B8B9B9BD690000000000000069B5B6B9B9BDBDBDBBBBBBBBBBBBBDBDBBBBBDBDBDBDBBBBBBBBBBB6B5B5B9B5B8B8B5B2B2B5B5B5B5B2B2B2B5B5B1B1B0B0ACACACACACACAAAAA7AAAAAAAAAAA7A7A7A7A5A1A1A5A5A5A5A1A3A3A5A5A09E9E9E9E9EA1A09E9F9E9B9B9B9C9E9E9B9B9898989A9A9A989797949494949694908F8F8D8E8E8C8E929294949494979797989B9B9C9EA19E9E9E9C989B9B9C9A9C9FA1A5A5A7A7AAAAAAA7AAA8A8A8A7A7A8A8AAABAAAA2B020101010101010101010190F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F5F5F5F5F5F5F6F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F5F5F5F5F5F5F4F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2F2F2F2F1F1F1F1F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEECDEDEDFDEDFDFDCDBDBDBE4EFD0C4C4C4C4C1C1C4C4C5C3C5C3C1C1C1C1C1C3C3C6C3C3C1C1BFBFBBBBBBB8BCB8B9B9B6B9B9B8B8B5B5B3B3B3B5B5B6B3B1B1B1B0B0B0B3B0B0AEABACB1B1AEAEACAEAEACA8A8A7A7A5A4A4A09F9FA4A5A5A5A5A8A5A5A5A5A8ACA8A8A5A51800000000000000A5A1A1A1A1A1A1A0A09E9E9E9B9B9B9B9896939696989898989B9B9797969798989B9B9B9E9C9E9E9E9B9B979494979B9794949494949692909293939292929393939393969896979B9B9B9B9B9B8D0C0000000000000000000000000000589E9C9B9B9B9B9C9F9C9C9C9B9B98989B9CA0A0A0A0A0A4A5A5A5A5A4A4A4A4A4A4A5A7A7A7A5A1A19E9C9B9B9B9B9C9E9FA4A5A5A49FA1A5A1A1A19FA1A5A5A5A5A5A5A5A5A5A7A5A5A8A5A5A8ABABABACB0B0ACACACACA8ABA8A8ABA8A8A8ABABA8A8A8A5A5A7ABABA8A8A8A8A8ACACAEACAEAEACACABACACACA8A8A8ACACACB0AEAEAEAEAEAEABABA8ABAEAEB1B1B1B1B3B1ACACABABA8A5A8A8A8A5A8A8A7A8A5A5A5A4A0A0A4A4A4A4A0A1A19FA19F9F9F9F9F9E9E9E9E9E9C9C9F9C9FA4A0A0A4A49F9FA0A4A5A8A8A8A8A8A8A7A7A5A5A5A5A4A49F9FA4A1A0A19F9FA4A1A19E9E9C9B9C9C9C9E9E9EA0A0A5A5A5A0A0A4A5A8A5A8ABAEAEAEACB0B0B0B1B3B2B2B3B2B2B2B2B2B5B3B3B0B3B0B0AEAEB1B1B1B1B1B1AE61000000000000005FA8A7A8A8A8A8ABACABA8A8A5A5A1A1A1A5A5A5A7A8A8A5A8ACACB0B0B0B0ACB0B0B0B0ACB0B0B3B6B6B8B8B8B6B5B2B5B2B2B0B0B0B0B0AEB1AEABA8A8A8ABABABACA8A8A8A8A8ACAEAEB2B3B3B6B3B6B6B8BCBFBFBCBCBFBFBFBFC0C1C1C1C0BFC0BFBFBFBFBFBFBFBFBFBCBBBBBDBBBBB9BCBDBDBDBDBBBBB8B6B8B6B5B6B6B6B3B6B8B8B6B6B6B9B9B8B8B6B5B5B5B3B3B3B6B3B6B3B3B3B1AEACA8A7A7ABACB1B0B0ACACAEB12C02020202020201010101018FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F1F1F1F1F2F2F2F2F2F2F2F3F3F3F3F3F3F4F4F4F4F4F4F5F5F5F5F5F5F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F5F5F5F5F5F4F4F4F4F4F4F3F3F3F3F3F2F2F2F2F2F2F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECE3D3D6D6D7D6D6D4D1D3D3DEEAC9BFBCBFBFBFC1BFC1C1C1C4C4C3C3C1C1C1C1BFC1C1C1C1C1BDBFC1C4C1C1C4C4C1BFBFBDBDB9B8B6B3B3B3B3B3B2B1AEB1B2B2B0AEACACACACACACAEB0B0AEAEAEB2B0B0B1B1B2B0B0B0B0B2B0B1B0B0ACB1B1AEAEACAEAEAEACAAA8ABAB1900000000000000AEAEAEACACACACA8ABA7ABABAAAAA7A8A8ABAAA8A8A8A5A8A5A5A5A8A5A5A5A8ABABAAA7A7AAACACACB1B0B0B0B1B2B2B2B5B8B6B8B9B6B6B5B2B2B0ACACACAAA8ABACACACACACACACACACAEAEB0B09C0E0000000000000000000000000062ACACB0B0B0ACACACACAEAEB0B3B5B5B8B5B8B6B6B9B8B6B6B6B6B6B8B6B5B6B6B6B6B8B8B8B5B5B5B8B8B8B8B9B6B6B6B6B6B8B8B9B6B6B8B6B6B6B8BBBBBDBFBFBFC3C4C3C4C5C5C3C4C4C3C5C1C1C1C1C1C1C1C1C1C4C3C3C3C5C3C5C4C5C5C6C6C8CACAC8C5C5C5C4C5C5C5C5C5C5C5C5C6C6C5C6C6C9C9C9C9CBCACAC9C9C9CACED0D0CECEC9C9C8CACACACACED0D0D0CECECED0D0D0D0CECECECED0D0D0CECED0D0D0D0D0D0D1D4D1D1D1D4D4D3D1D1D4D1D1D0D0D1D0CED0CED0CED0D0D3D3D1D0CBC9C8C5C5C5C8C9C6C5C8C8C8C8C5C3C3C3C3C3C3C3C3C3C3C1C1C3C3C4C1C4C1BFBFBFBFBFC1C1C5C1C1BFBFBCBCB9B9B9B6B9B6B8B8B5B8B8B6B6B3B3B1B1B1B3B3B5B1AEAEAEACACACB1ACACACAAACAEAEACACAC62000000000000005AA29E9E9EA2A2A2A2A5A8A5A5A5A5A8ABA8A8A5A5A5A5A5A5A4A4A4A4A29F9F9F9F9F9F9E9E9C9C9C9B9B9B9B97939094949797979799999696939697979B9B9B9C9C9C9C9C9B99969292969996929292929293908F90909090909090909090909497949699999B999999999B9C9C9C9E9E9C9C9B9B9B9B9E9B9B9C9C9B9B9B999B9B9E9B9B9B9B9B97979B9C9E9E9E9E9EA2A5A5A5A5A2A2A2A2A2A2A4A5A5A5A29F9F9C9C9B9B992501010101010101010101018EEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F1F1F1F2F2F2F2F2F2F3F3F3F3F3F4F4F4F4F4F4F5F5F5F5F5F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F6F6F6F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F2F2F2F2F2F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEEEEEDEDEDEDECECECECECECECECECECECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBCFB3B5B2AEB2B5B6B6B8B6C0D1AE9F9FA2A5A2A2A2A2A5A5A29FA2A4A5A7A7A5A4A2A2A29D9B9B9B9B9D9F9F9F9D9F9F9F9F9D9D9D9D9B9B9B9D9B9B9B9B9B9B9B9B9799999C9D9D9FA2A5A5A5A7AAACAAA8A8A5A5A4A5A7A7A5A5A2A2A2A2A2A5A5A5A4A4A5A8A8AAACAAAC1900000000000000B1B1B1B3B5B5B5B2B2B3B6B6B3B3B3B3B2B5B5B5B6B9B9B6B6B9B9BBBBBDC0C0BDBDBDBDBDC0C0C3C3C3C1C1C0C0C1C1C1C3C1C1C1C3C1C1BFBDBCBBBBBCBFC0BFBDC0C1C5C3C5C3C3C0C3C3C4C5C6C6B13800000000000000000000000070C6C3C1C1C1C1BFBFBFBDBBB9B6B9B9BBB9B9BBBBB6B9BBB9B9B5B5B2B5B5B1B1B1AEAEAEAEAEACACABACACACACACAAAAAAA8ACA8A8A8ABABACACACAAACACAEB1B2B1AEB1AEAEB1B2B1B1B1B1B2B5B3B6B6B6B6B9B9B9B6B5B5B1AEAEACAAAAACACABACACACACACAEACACACAEACACAEB1B3B3B1B1AEB1B1B1B1B1B1AEAEAEAEAEB1AEB1B2B2B1B5B1B1B1B1B2AEB2B1AEAEAEACAEAEB1B2B2B2AEB2B2AEAEB2B2B5B5B5B3B2B1B1B3B3B1AEACAAA7A7A7AAAAAAABABABABABAAA7A7A7AAAAACACACAEB1B1B1B1B3B3B3B5B6B6B9B9B9B9B9B9B6B6B6B3B5B6B6B9B9B9B9B6B9B9B9BBBDC0C0BCBFBFBDBBBBBBBFBBBBBBBFC1C1C3C5C1C0C1C1C1BDBDBDC1C1BFBFBFBCB9B9B6B6B6B9B9B9BBB9B9BBBCBCC0C1C1C0C1C1C1BFBB6C0000000000000067B5B6B9B6B5B5B1AEAEACAEB1B1AEACABABABA8AAAAAAAAA8A8A7A7A7A7A5A2A5A5A5A7A5A2A29F9FA29D9DA29D9D9B9D9B9B97969693939697979B96969696969797979B9D9D9D9D9C9C9B9B9B9B9B9B9D9B9B9797979B979797999C9B999B9B9B9B979697979996979996999B9B9B9B999997979B9B9B9D9DA29D9B9C9C9C9D9B9B9C9C99999B979B9C9C9C9C9C9DA2A2A2A2A29DA29DA2A2A2A2A2A2A2A29DA2A4A2A2A2A2A2A22601010101010101010101018DEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBECECECECECECECECECECECECECEDEDEDEDEEEEEEEEEEEEEEEFEFEFEFEFEFF0F0F0F0F0F0F1F1F2F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5F6F6F6F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F6F6F5F5F5F5F5F4F4F4F4F4F3F3F3F3F2F2F2F2F2F1F1F0F0F0F0F0EFEFEFEFEFEEEEEEEEEEEDEDEDECECECECECECECEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9D0B5B6B3B2B3B3B2B3B5B8C1D6B19E9E9B9B979797979B9B9C9FA2A29F9C9EA19E9E9E9C9EA1A1A2A2A2A1A2A2A2A3A2A2A5A2A2A5A7A7A7A7ABABA7A8A7A8A5A7A5A5A7A5A5A5A7A7A5A5A5A2A2A3A7A7A5A5A5A5A5A7A7AAA7AAAAA7A7A7A7A7A7A5A5A5A7A7A8ABAAAAAA3419191919181919AAACACACACB0ACA8A7A7A7A5A2A5A5A5A2A5A5A3A5A2A2A29F9C9C9F9F9F9F9C9E9E9C9E9C9C9C9C9C9B9B9B9B9B9B9B9C9B9C9F9C9C9F9F9C9C9C9FA2A5A5A5A5A5A5A3A3A2A2A2A29F9F9C9C9F9E9C9E9C732300000000000000000000569B9C9CA1A1A19C9C9FA2A5A2A5A7AAAAAAA7ABABABACB0ACACB0ACACACACACB1B0B0ABB0ABABAAAAACACACACACACAAA7A5A2A5A5A3A3A3A5A5A3A5A5A5A5A7A7A7A5A5A2A19E9E9EA1A2A1A3A5A5A2A5A8A8ABABABABA8ABABABABA8ABABB0B2B2B3B3B3B3B1ACB1ACACABABABABABAAACAAA7A5A5A5A7A7A7A8A5A5A5A5A5A7AAAAACB1B1B2B1B2B2B3B8BBBBB8B8BBBBBBBBBCBDBDBDBCBBBCBBBBBBBBBBBBBBBBBBB8B6B6B9B6B6B5B8B9B9B9B9B6B6B3B2B3B2B1B3B3B3B1B2B3B3B2B3B3B5B5B3B3B3B1B1B1B1B0B0B2B1B2B1B1B1ACAAA7A5A3A3A7A8ACABABA8A8AAACACACACA8A8A8A8A7A7A7A5A5A3A3A3A3A3A2A2A1A1A1A19C9C9C9EA2A5A7A7A8A7A3A3A5A5A5A2A2A5A3A3A2A2A2A1A19E9C9C9C9C9B9E9C9C9F67171717181818186CA5A5A2A2A19F9CA1A1A1A1A3A2A2A2A2A5A7A7A7A7A7AAABABABABABACA8A8A8A8A7A7A7A7ABABA7A7A5A5A5A5A8ABABABABABACB0B0ACAAAAAAAAA7A8A8A8A8AAA7AAACACACABACB1B1B0B0B1B1B3B6B8B5B3B5B5B2B2B1ACACABA8A7A7A7A5A5A5A2A2A2A2A2A3A3A3A2A5A29F9F9F9FA29E9F9F9E9B9E9FA2A2A2A1A19E9E9E9EA2A3A2A1A2A2A3A3A29EA2A2A5A5A5A5A29F9F9F9C9B9B9B9B9C9E9E9E9C9E9E9E9E9C9C9C9C2601010101010101010101018CE9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBEBEBECECECECECECECEDEDEDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F2F2F2F2F2F3F3F3F3F4F4F4F4F4F5F5F5F5F5F6F6F7F7F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F8F8F8F8F8F7F7F7F7F7F7F6F6F5F5F5F5F4F4F4F4F4F3F3F3F3F2F2F2F2F1F1F0F0F0F0F0EFEFEFEFEEEEEEEEEEEDEDECECECECECEBEBEBEBEBEBEAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7D5BDBFBFBDC0BCBBBCBDBBC5DAB6AAAAA7A5A3A4A4A3A7AAAAAAAAAAABACACABA8A8A8A8A7A7A7A7A7A8A5A8ABABACAAACAEAEACACB0B0B2B5B6B3B2B3B3B1B1AEACACAAA7A7A7A5A4A4A4A2A2A1A1A1A2A2A2A1A4A19E9E9E9EA19C9E9E9C999C9EA1A1A19F9F9C9C9C9CA1A2A19FA1A1A2A2A19CA1A2A4A3A3A4A29E9E9E9B979797979A9C9C9C9A9C9C9C9C9A9A9A9A9797979A9797979797979797969797999B9B9C9FA2A4A4A3A7AAA7A5A5A4A2A2A4A3A3A2A29F9FA1A1A1A2A2A4A2A2A4A5A5A7AAA7A8A8965F3B191A030000081A7BB2B2B2B0B0B1B3B3B1B1B1B1B0B2B2B2B2B5B5B2B3B6B6B6B6BBBDBDBBBBBBBBBBBDBDC0C0C0BDBFBDBDBFBFBDC0BDBFBFC0BDBDBBBBB9B8B8B9BBBDBBBBBDBFC1C0C1C0C0BDC0C0C1C1C3C3C5C5C5C5C8C8C8C8C8C5C5C6C5C3C0C3C0BFBFBFBDBBBBBBBBB6B5B3B6B6B6B6B6B6B6B3B5B6B5B5B2B2B0B2B2AEAEAEACACACACACAAAAA7A8A8A8A8A8A7A7A7A5A8A5A5A5A7A7AAA8A8A7AAAAACAEB0AEACACABABACB0AEAEAEAEB0B2B1B2B2B2B3B6B6B6B3B2B2AEACACA8A7A7AAAAA7AAAAAAA8AAABA8A8AAACAAAAABACB1B1ACAEACACACAEAEAEAEACACACACACAEABAEB0B0AEB2AEAEAEAEB0ACB0ACABABABA8ABABAEB0B0B0ACB0B0ACACB0B0B2B2B2B1B0ACACB1B1AEACA8A7A3A3A3A7A7A7A7A7A7A7A7A7A3A3A3A7A7AAAAA8ABACACACACB1B1B1B2B2B3B6B6B6B6B5B5B2B2B2B1B2B3B3B6B6B6B6B2B5B5B5B6BBBDBDB9BBBBBBB6B8B8BBB8B8B8BBBDBDC0C1BFBDBFBDBDBBBBBBBDBFBBBBBBB9B6B6B3B3B3B5B6B6B8B5B5B6B9B9BDBFBFBDBDBDBDBBB8B8B6B5B2B6B6B6B6B3B2B3B5B3B2B2AEACACA8ACACACABA8A7A7A7A5A7A7A7A7A5A5A3A3A3A3A29FA2A4A2A3A2A1A19C9C9F9B9B9F9B9A979A97979692929090929696979393939393969696979A9A9A9A99999797972501010101010101010101018BE7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEBEBEBEBEBEBECECECECECEDEDEEEEEEEEEEEFEFEFEFF0F0F0F0F0F1F1F2F2F2F2F3F3F3F3F4F4F4F4F4F5F5F5F5F6F6F6F7F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F8F8F8F8F8F7F7F7F7F6F6F6F5F5F5F5F4F4F4F4F3F3F3F3F2F2F2F2F1F1F0F0F0F0EFEFEFEFEEEEEEEEEDEDECECECECECEBEBEBEBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5D0B6B6B5B3B5B5B3B9B9BBC6DBB8A5A5A0A3A3A3A19EA19E9F9C9B9CA09C9C9C9C9F9CA0A3A3A1A19F9E9E9EA09EA0A1A1A09F9C9E9F9FA1A19E9F9FA09E9E9E9E9F9F9C9A989896939494969696939392928F8F8D8D8D8E8E92908E8E909393908E8E8D8E8D909296929092908E8E8E8C89898E898E8D8D9092949494979798969698969898989897949497979A9B9CA09E9F9E9EA1A1A0A5A3A39F9E9EA19F9F9FA1A5A5A7A5A5A7A7A7A5A7A8A8A8A8ACAAAEAEB1B1B1B5B6B6B9B6B9B9BBBDB9B9B9B8B8B9BCBFBCBDBBBBBBBBBFBFBDBFBFBCBFC1BFBFC1C1C1C0BFBCBCB9BCBCBFBCBFBFBFC0C0C0C0BFBFC0C0BFBFBFBFBCB9B9BCBDBCBCBCBFBDBFBFC1BFBDBDBFBCBFBBB9B9B9BBBBB8B9B8B9B8B8B5B5B1B1B0B0ABABABAEABAAA8A7A8A7A7A5A3A5A39FA3A3A3A3A3A5A5A8A7A7A8A8A8ABA8AAAAA7A7A7A7A7A5A7A7AAAAAAAEAEAAAAAEAEABA8A7A7A7A7A7A7A7A7A8A7A3A3A5A8A8A8A7A8A8A7A3A5A5A5A5A5A7A5A1A5A5A7A7A5A1A0A0A3A5A7A5A5A1A3A0A3A1A5A5A5A3A3A1A3A3A1A3A3A5A5A5A5A3A7A8A8AAA8A7A7A7A7A5A7A5A5A5A5A5A8A5A8AAA8AAAAAAAAAAA8A8AAA8A8A5A8A5A3A3A3A5A8A7A7A7A8AAAAA8A7A8ABAEAEAEAEAAABABABB0B1B0ABABABB0ABB0B1B1B1ACB0B2B5B8B8B5B2B2B5B5B5B5B8B9B9B6B5B5B6B5B3B5B3B5B8B6B6B5B5B8B5B5B3B3B1B1B2B1AEAEB1B1B0B0ACACACACB0B0B0B0B0ABACACA8ABA8A8ABABAEABAEB0B0B0ABABACAAA7A5A5A5A3A5A5A5A5A5A5A0A5A1A0A0A0A0A0A5A5A5A5A7A7A5A1A1A1A0A09F9F9C9FA0A0A0A1A5A3A5A0A0A5A7A5A5A7AAAAACA8A8A8A8A8AAA8AAAAACACB1B2B1B2B2B1B1B0B1B1B3B1B0ACABABABB0ACB0ACAEB1B1B3B3B3B2B2B2B1B1B1B3B3B2B1B3B5B5B3B1B1B1B1B1AEACACB1ACB0B0ABA8AAABABABABA8A8A8ABABA8A8A7A728010101010101010101010189E5E5E5E5E5E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9EAEAEAEAEAEBEBEBEBECECECECECEDEDEEEEEEEEEFEFEFEFF0F0F0F0F1F1F2F2F2F2F3F3F3F3F4F4F4F4F5F5F5F5F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F8F8F8F8F8F7F7F7F7F7F6F6F5F5F5F5F4F4F4F4F3F3F3F3F2F2F2F1F1F0F0F0F0EFEFEFEFEEEEEEEDEDECECECECEBEBEBEBEAEAEAEAE9E9E9E9E9E8E8E7E7E7E7E7E6E6E6E6E6E6E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D4BFC0C1C3C3C4C4C4C5C8D1E1BFAEAEABA8A8A5A4A4A7A7A5A7A7A7A5A7A8A5A5A7A8A7A7A8AAACACAAABA8AAAAABABABABA8A8A8A8A8ABA8ABACACABAEABABABABACA8ACAAA8A8A8A5A8A8ABACACACA8ACACA8A8ACACAEAEAEACACAAAAACACABA8A5A4A2A2A2A4A4A4A5A5A5A5A5A4A2A2A2A4A4A7A7A5A8AAAAAAAAACACACAEB0B1B2B2B2B2B2B2B0B0B0ACAEB1B1B2B2B2B2B0B2B2B2B3B6B9B9B6B8B8B6B3B5B5B8B5B5B5B8BBBBBCBFBBB9BBBBBBB6B6B6BBBBB8B8B8B6B2B2B1B1B1B2B2B2B5B2B2B3B6B6B9BBBBB9BBBBBBB8B5B5B3B2B0B2B2B3B3B1AEB1B2B1AEAEABA8A8A5A8AAAAA8A5A5A5A5A2A4A4A4A4A2A2A2A2A2A29F9C9FA09FA29F9C9C99999C99999C9998969896969290908E8E9092929490909090909292929698989898979794949494969698949492929294929292939794939494949492909292939092939093969696969393929294949698999B9894979797989494979793939492949797979797989B9B9C9B9B999B999B9B9B9C9C9B9B9B999C9E9C9C9B9B9B9B989899999C9E9EA0A0A2A2A29F9FA2A5A7A7A5A2A5A5A4A29E9EA0A2A4A29EA2A4A4A4A2A2A2A2A29F9F9F9F9FA2A2A5A7A5A5A2A29FA2A2A2A09CA09C9E9B999C9F9C9C9C9C9E9C9FA2A2A0A09E9C9C9C9F9C9FA0A09F9E9B9C9E9EA0A09C9E9E9F9C9C9C9C9E9E9B99989894929393949494929290908E8E8C8C8C8D8D908F8D8D8F92928F8D8D8C8D8C8F9094908F908F8D8D8D8988888D888D8C8C8F909393939696989494989498989898979393979799999C9F9C9E9C9CA0A09FA2A2A29E9C9CA09E9E9EA0A2A2A5A2A2A5A5A5A2A5A8A8A8A8ABA8ACACB0B0B0B2B5B5B8B5B8B8B9BBB8B8B8B6B6B8BBBDBBBBB9B9B9B9BCBCBBBDBCBBBCBFBCBCBFBFBFBFBCBBBBB6BBBBBCBBBCBCBCBFBFBFBFBDBCBFBFBDBDBDBCBBB6B82F010101010101010101010188E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E6E6E6E6E6E6E7E7E7E7E7E8E8E9E9E9E9E9EAEAEAEAEBEBEBEBECECECECEDEDEEEEEEEFEFEFEFF0F0F0F0F1F1F2F2F2F3F3F3F3F4F4F4F4F5F5F5F5F6F6F7F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F8F8F8F8F7F7F7F7F7F6F6F5F5F5F5F4F4F4F4F3F3F3F2F2F2F2F1F1F0F0F0EFEFEFEFEEEEEEEDEDECECECEBEBEBEBEAEAEAEAE9E9E9E8E8E7E7E7E7E6E6E6E6E6E5E5E5E5E5E4E4E4E4E4E4E3E3E3E2E2E2E2E2E2E2E2E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D4C3C4C0BFC0C0BFC1C3C3CBDEBDAEAEB1B1B2B2B5B8B8B5B5B5B5B5B8B8BBBBBBB9B9B8B8B9B9B9BBB9B9B9BBB9B9B6B5B5B3B3B5B6B8B6B5B8B9BDBBBDBBBBB8BBBBBCBDBDBDC1C1C1C1C3C3C3C3C3C0C0C3C0BDBBBDBBB9B9B9B9B6B6B6B5B2B1AEB1B1B2B1B1B2B2AEB1B2B1B1ACACABACACAAAAAAA7A7A7A7A7A5A5A4A5A5A5A5A5A2A2A2A2A5A2A2A2A4A4A5A5A5A2A5A5A7AAABAAA7A8A5A5A8ABAAAAAAAAABACACAEAEAEAEB1B1B1AEACACAAA7A7A5A2A2A5A5A4A5A5A5A5A5A5A5A5A5A7A5A5A5A8ACACA8AAA7A8A8AAAAAAAAA7A7A7A7A7AAA5AAABABAAACAAAAAAAAABA7ABA8A5A5A5A5A5A5AAABABABA7ABABA7A7ABABACACACACABA8A8ACACAAA7A5A29F9F9FA2A2A2A4A4A4A4A4A29F9F9FA2A2A5A5A5A5A8A8A8A8ACACACACAEAEB1B1B1B1B1B1AEAEAEACACAEAEB1B1B1B1AEB1B1B1B2B5B8B8B5B6B6B5B2B3B3B6B3B3B3B6B9B9BBBDB9B8B9B9B9B5B5B5B9B9B6B6B6B5B1B1AEAEAEB1B1B1B3B1B1B2B5B5B8B9B9B8B9B9B9B6B3B3B2B1AEB1B1B2B2AEACAEB1AEACACAAA7A7A5A7A8A8A5A5A4A4A4A2A2A2A2A2A2A29F9F9F9F9E9B9E9D9E9F9E9C9C98989B97979B979694969494908D8D8D8D8D9090938F8F8F8F8F90909094969696969494939393939494969393909090939090909294939293939393908D9090928F90928F92949494949292909093939496979B9693949494969393949492929390939494949494969B9B9C9B9B979B979B9B9B9B9C9B9B9B979B9C9C9C9B9B9B9B969698989C9C9C9D9DA2A2A29E9EA2A4A5A5A5A2A5A5A29F9C9C9D9FA29F9C9FA2A2A2A2A2A29F9F9E9E9E9E9EA2A2A4A5A5A5A2A29E9F9F9F9D9C9D9C9C9B989B9E9B9B9B9B9C9B9E9F9F9D9D9C9C9C9C9E9C9E9D9D9E9C9B9C9C9C9D9D9C9C9C9E9C9C9C9C9C9C9B9796969390929293939390908D8D8D8D8989898C20010101010101010101010187E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E2E2E2E3E3E3E4E4E4E4E4E4E5E5E5E5E5E6E6E6E6E6E7E7E7E7E8E8E9E9E9EAEAEAEAEBEBEBEBECECECEDEDEEEEEEEFEFEFEFF0F0F0F1F1F2F2F2F2F3F3F3F4F4F4F4F5F5F5F5F6F6F7F7F7F7F7F8F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F8F7F7F7F7F6F6F5F5F5F5F4F4F4F4F3F3F3F2F2F2F2F1F0F0F0F0EFEFEFEEEEEEEDEDECECECEBEBEBEBEAEAEAE9E9E9E8E8E7E7E7E6E6E6E6E5E5E5E5E4E4E4E4E3E3E3E2E2E2E2E2E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0DFDFDFDFDFDFDFDFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEC4AAABAEB0AEACB0ACB0B0BBCFB1A3A3A3A3A7A8A7A3A2A3A7A8A8AAAEB1AEABA8A8AAAAAAAEAEACB1ACAAA8A8ABAAAAAAA8A8A8A8A7A7A7A7A5A5A3A7A7A7A5A3A2A2A29FA1A2A2A2A2A2A3A29F9FA2A2A3A7A7A7A7A8A8A8ABABABAAA8A8A8A7A7A7A5A5A7A7A7A3A3A7A7A3A7A7A8A5A8A7A3A29F9F9B9B9B9FA2A29F9F9D9B9B999B9B9C9C9B9C9C9C9C9D9C9F9FA19C9C9DA2A2A2A2A1A1A19D9B9B9B9B9B97979496979B9B9B9B969994949696939499999493929290908D8C8C8D8D908D90908F8C8F8F92939494949696949496969694949994979B9C9C9C9F9FA2A29F9FA2A2A1A3A3A5A7A7A7A7A8A5A5A5A5A5A5A5A7A8ABABABABABAEAEAEAAAEB1B1B2B2B5B2B5B3B5B2B2B1B1B1B2B2B1B2B2B1B1B2B1AEAEAEB1B1B1B1ACB0B1B1B0B0ACACA8A8ABAEAEAEAEAEAEACACA8ACAEAEB0B2B2B3B2B2B3B3B2B1B2B2B1B1B1B0B0ABABAAACACAAAAAAAEAEB1AEB1B1AEABABABABABABABABA8A8A7A3A3A3A5A5A5A8A8A8A8A8A8AAACB0B1B1B0ACB0B1B0B0ACAAA8A8ABB0ABABA8ABABAEB1B1B1B0B1ACB1B2B2B2B1B1B0AEACACAAA8A8A8A8A8A8A8A8A8A7A8A8A7A7A7A8A8A5A7A3A3A5A5A5A3A7A7A7A5A5A5A3A3A3A7A7A7A8A7A5A7A7A3A3A3A3A7A7A8AAACB0B0B0ABABABA8A8ABA8A8A5A5A5A7A8AAA7A8ABA8AAACAEAEAEABAEAEAEAEACACACACACACAEAEACACB1ACAEB0B1B1B1B1B2B5B5B6B5B5B3B2B2B2B2B1B1B3B1B2B2B3B6B3B6B6B6B8B8B6B6B6B6B6B6B2B5B5B5B5B5B2B2B6B8B6B6B8B8B6B2B2B2B2B0ACAAA8A8A8A8A8A7A7A3A7A7A7A5A3A2A2A2A2A2A2A3A5A5A3A3A3A7A5A5A7A7A7A5A5A5A5A7A5A7A5A5A3A7A7A3A3A3A3A3A3A29F9DA1A19FA2A2A2A1A2A2A2A3A3A3A2A2A3A29DA19CA1A19F9F9C9D9DA19F9D9D9D9B9D9B9B9B9D9B9B9B9DA1A19F9C9C9FA2A2A3A7A5A5A5A7A7A7A7A8AC2A010101010101010101010185DEDEDEDEDEDEDEDEDEDEDEDFDFDFDFDFDFDFDFDFDFE0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E2E2E2E2E2E3E3E3E4E4E4E4E5E5E5E5E6E6E6E6E7E7E7E8E8E9E9E9EAEAEAEAEBEBEBECECECEDEDEEEEEEEFEFEFF0F0F0F0F1F2F2F2F2F3F3F3F4F4F4F4F5F5F5F5F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7F7F7F7F7F6F6F5F5F5F4F4F4F4F3F3F3F2F2F2F2F1F0F0F0EFEFEFEFEEEEEEEDECECECEBEBEBEAEAEAE9E9E9E9E8E7E7E7E6E6E6E6E5E5E5E4E4E4E4E3E2E2E2E2E1E1E1E1E1E0E0E0E0E0DFDFDEDEDEDEDEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCCCB8B8B8B8BBBBBDBFBDBDC4D6B5A4A3A4A0A4A4A5A5A3A5A5A7A4A3A3A3A3A3A5A3A3A5A3A0A1A1A1A1A1A19EA1A1A1A4A19EA0A0A09CA09FA1A19E9F9FA1A1A19FA0A3A5A5A5A7A8A7A8A5A3A1A3A1A1A39F9C9A9A9C9F9C9C9A9B9A9A9B9B9C9C9C9C9F9F9C9C9C9C9B9B9B9C9F9F9F9F9C9E9FA0A3A09C9C9CA0A0A3A4A5A5A5A5A8A5A5A8A8A8AAAAA8A8A5A3A3A5A5A5A5A5A4A7A8AAACAAACACACAEACACACACACACACACACACACAEAEAEAEB1B1B3B5B8B9BBBDBDC0C3C3C3C3C1C5C5C5C5C5C4C0C4C0C0C1BFBDBDBFBFBDBFC3C3C1BFBFBFC3C4C4C0C3C3C0C0C3BFBDBDBDBDBDBDBDBCBCBCBDBDB9B8B8B8B8B9B8BBBDBDBDBFBFBFBFBDBCB9B6B5B5B5B5B5B3B5B5B2B0B0B1B1B2B1B1AEAEABABABABABABACAAAAA8A8A7A7A5A5A5A3A3A3A3A3A3A3A5A5A3A5A5A4A7A5A5A5A5A8A8A8A7A7A8A8A8A7A7A8A8A5A5A7AAABABACAAAAA8A8A5A7A7A5A3A3A3A5A5A5A7AAAAA8A8A8A8A8A8A8A7A7A8ABACB1B2B1AEAEAEB1B1B3B5B6B6B6B5B5B5B2B3B3B5B2B1B1B1B1B1B3B1B2B2B2B2B5B5B5B6B6B6B5B6B5B3B1B1B5B5B5B5B5B8B5B5B5B2B2B3B5B5B5B5B5B5B5B5B8BBBBBCBCBBBDBDC0BFC0C0C4C1C4C5C5C6C5C4C1BFBFBFBFC1BFBDBDBDBDBFC0C0C0C0C0C0BFC0C3C0C0C0C0C0C1C1C1C1C3C3C5C6C5C5C6C9CAC9C9C5C5C5C9C9C6C6C6C6C5C5C6C5C5C6C5C6C6C6C6C5C5C1BFBDBDBDBDBDBFBFBFBFBFBDBDBDBDBBBBB8B5B3B1B1AEACACABAAAAAAA8A7A5A5A5A4A5A8A8A8A7A7A4A1A1A19E9E9C9B9997939392929293939797979793908F8B8B8B89898789898787898888888889898787878287878782868686898789888B8F8F8F8F909092908F8F8F8B8E8E8F8F8B8B8B8B8B8F8F8F8F9090908F90909090909292979794949393979797999B9B9E9E9E9C9EA0A3A1A3A3A3A09F9F9E9E9EA0A3A5A8A729010101010101010101010184DCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEDEDEDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E3E3E4E4E4E5E5E5E6E6E6E6E7E7E7E8E8E9E9E9EAEAEAEBEBEBECECECEDEEEEEEEFEFEFEFF0F0F0F1F1F2F2F2F3F3F3F4F4F4F4F5F5F5F6F6F7F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7F7F7F7F6F6F5F5F5F5F4F4F4F3F3F3F2F2F2F2F1F0F0F0EFEFEFEEEEEEEDEDECECECEBEBEBEAEAE9E9E9E8E8E7E7E7E6E6E6E5E5E5E4E4E4E3E3E2E2E2E1E1E1E0E0E0E0DFDFDEDEDEDEDDDDDDDDDDDCDCDCDCDCDCDCDBDBDBDBDBDBDBDBDBDBDBDADADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9BFA4A5A8ABAEAEB0AEABABB5C9A897979B9898969696949492909090908F92929294949494949798989798989897979494929494949498979797979B9C9C9C9C9B9D9F9F9F9F9FA19C9C9C9C9C9C9C9C9F9F9C9B9B98989B9C9F9F9F9F9FA1A1A1A19D9D9D9D9C9C9C9C9C9D9B9DA1A1A19FA1A4A4A1A1A5A5A7AAABA8A7A8A8A5A5A4A1A19F9C9C9C9B98989897979696969898989698969494949496929494928F9294969696949492929292969896949696989896929697989B9B9897949494928E8E8E8E909292929092929292909090908E8E8E908E8E8E8E8E8E8E8E8C8D8D8F929292949898989B9C9F9C9B9B989897989B9B989894949696969898989797989B9B9C9F9C9D9DA19DA1A1A4A4A4A4A4A4A5A7A7A7A5A5A5A8A8A5A5A5A5A5A7A7A7A7AAAAA7A8ABABACACAEB1B1AEAEAEAEAEB1B1B3B3B3B2B2B1B1B2B2B2B3B2B2B2B3B2B2B0AEACACACACB0B1B0AEB1B2B6B3B6B3B3B1B3B3B5B6B6B6B9B9B9B9BCBCBCBCBCB9B9BBB9B6B3B6B3B2B2B2B2B0B0B0AEACAAA8ABABACABABACACA8AAACAAAAA7A7A5A7A7A4A4A4A1A1A1A1A19F9F9C9D9D9D9D9D9C9C9C9B9D9B9B9B9C9C9F9D9D9C9F9FA1A4A5A4A1A1A1A1A1A5A4A4A4A4A5A7A5A7A7A7A8ABABABA8A7A7A4A1A19D9C9C9F9F9C9F9F9F9D9FA19D9D9FA19F9FA1A1A5A5A1A4A1A1A1A4A4A4A4A1A1A1A1A1A4A1A4A5A5A4A7A4A4A4A4A5A1A5A1A1A1A19DA1A1A4A5A5A5A1A5A5A1A1A5A5A7A7A7A5A5A1A1A5A5A4A19D9C9B9B9B9C9C9C9C9C9C9C9C9C9B9B9B9C9C9F9F9DA1A1A1A1A1A5A5A5A7A7A8ABABABABAAAAA7A7A7A5A7A8A8ABABABABA7AAAAAAACAEB1B1ACB0B0AEACACACB0ACACACB0B2B2B3B6B2B1B2B2B2AEAEAEB2B2B0B0B0ACABABA8A8A8AAABABACAAAAACACACB1B2B2B1B2B2B2B0ACACACAAA7ABABACACA8A7A8AAA8A7A7A4A1A19DA129010101010101010101010182D9D9D9D9D9D9D9D9D9DADADADADADADADADBDBDBDBDBDBDBDBDBDBDBDCDCDCDCDCDCDCDDDDDDDDDDDEDEDEDEDFDFE0E0E0E0E1E1E1E2E2E2E2E3E4E4E4E5E5E5E6E6E6E7E7E7E8E8E9E9E9EAEAEBEBEBECECECEDEDEEEEEEEFEFEFF0F0F0F1F2F2F2F2F3F3F3F4F4F4F5F5F5F5F6F6F7F7F7F7F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7F7F7F7F6F6F5F5F5F4F4F4F4F3F3F3F2F2F2F1F0F0F0EFEFEFEEEEEEEDEDECECEBEBEBEAEAEAE9E9E9E8E7E7E7E6E6E5E5E5E4E4E4E3E3E2E2E2E1E1E1E0E0E0DFDEDEDEDEDDDDDDDCDCDCDCDBDBDBDBDBDADADAD9D9D9D9D9D9D8D8D8D8D8D8D8D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7C7ACAEAEB1B1B1AEB0B3B6BFD1B1A3A2A3A29D9D9D9D9D9D9C9B97979B9C98989797979797979B9B98989C9C9B9B9B9B9797979B9C9C9C9C9B9B9C9C9D9C9B9B9B9C9C9D9FA2A2A2A2A3A1A1A3A3A3A5A5A3A3A19D9DA2A2A2A2A19FA2A5A5A8A5A8A8A8AAA8A8A8A8A8A7A7A8A8A8A8AAAAAAAAACACB0B1B3B5B6B9B9BCBDBDBDBDBDC0C0C0C0C1BFBCBFBCBCBDBBB9B9BBBBB9BBBDBDBDBBBBBBBDBFBFBCBDBDBCBCBDBBB9B9B9B9B9B9B9B8B8B8B9B9B5B3B3B3B3B5B3B6B9B9B9BBBBBBBBB9B8B5B2B1B1B1B1B1B0B1B1AEABABACACAEACACAAAAA7A7A7A7A7A7A7A5A5A3A3A2A2A1A1A19D9D9D9D9D9D9DA1A19DA1A19FA2A2A2A2A2A5A5A3A2A2A5A5A5A2A2A3A3A2A2A2A5A7A7A8A5A5A3A3A2A2A2A19D9D9DA1A2A2A2A5A5A3A3A3A3A3A3A3A2A2A5A7A8ACAEACAAAAAAACACB0B1B2B2B2B1B1B1AEB0B0B1AEACACACACACB0ACAEAEAEAEB1B1B1B2B2B2B1B2B1B0ACACB1B1B1B1B1B3B1B1B1AEAEB0B1B1B1B1B1B1B1B1B3B6B6B8B8B6B9B9BCBBBCBCBFBDBFC1C0C3C1BFBDBBBBBBBBBDBBB9B9B9B9BBBCBCBCBCBCBCBBBCBDBCBCBCBCBCBDBDBDBDBDBDC0C3C1C1C3C4C6C4C4C1C1C1C4C4C3C3C3C3C1C1C3C0C0C3C0C3C3C3C3C0C0BDBBB9B9B9B9B9BBBBBBBBBBB9B9B9B9B6B6B3B1B0ACACAAA7A7A7A5A5A5A3A2A2A2A29FA1A3A5A5A2A29F9D9D9D9B9B9897969390908F8F8F909092929292908D8A8888888585838585838384868686868484838383808383838081818185838486888C8C8C8C8E8E8F8D8C8C8C8889898C8C88888787878A8A8A8A8D8D8D8C8E8E8E8E8E8F8F9294909090909392929697979B9B9B989B9C9D9D9D9D9D9C9C9C9B9B9B9C9DA2A5A2A2A3A3A7A5A2A5A5A3A3A1A3A2A2A1A2A2A2A2A2A5A2A5A5A5A5A2A5A5A5A5A29FA2A5A2A2A3A3A5A5A5A5A3A2A2A2A2A3A3A3A5A5A7AAA7A7A72A010101010101010101010181D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9DADADADBDBDBDBDBDCDCDCDCDDDDDDDEDEDEDEDFE0E0E0E0E1E1E1E2E2E2E3E4E4E4E5E5E5E6E6E7E7E7E8E9E9E9EAEAEAEBEBEBECECECEDEEEEEEEFEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F4F5F5F5F6F6F7F7F7F7F8F8F8F8F9F9F9F9F9FAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7F7F7F7F6F6F5F5F5F4F4F4F3F3F3F2F2F2F1F1F0F0F0EFEFEEEEEEEDECECECEBEBEBEAEAE9E9E9E8E7E7E7E6E6E6E5E5E4E4E4E3E2E2E2E1E1E1E0E0DFDFDEDEDEDDDDDDDCDCDCDBDBDBDBDAD9D9D9D9D8D8D8D8D8D7D7D7D7D7D7D6D6D6D6D6D6D6D6D5D5D5D5D5D5D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4CEC1C3C5C1C3C0BFBDBDBBC3D1B1A7A4A4A4A1A4A4A4A4A1A19E9E9EA1A1A19E9C9C9C9B9B9B9E9B9B9A97999C9C9A9A999A9A99969693939290908D8D8D909090909396939393939699969693939393939392929292908F8F8F8F8F8F8D8D8C8C8C8888888886838183838686868689898484838486868888888C898C8C8C8889848181848984818181818183807E808181808080818181818183868384898988898989898A8C8C898D8D89898A8A8A8A8D8A8A8C8C8A888889888A8D8A8A8A8888868688898D8D8D8D8D909393939390909090909092939393908F8F8C8988888989898C8D909292908D8F908F8F8F8D8F90909393929092929393929394939396979797999B9B99999999969794949794949497979494949393939797969696969699999A999A9A9999979999999494949999999B9A9A9A9A9A9A979794979A9A9C9C9C9C9E9C9999979796939696969394949394929393908D8D909090908D8F8F8D8F8D8D8D8D8D8C8C8C8C8C89898D898D908D8D90908D8D8D909394949494949493939293929290908D8D908F8D8F8D8D908F8F8C8C89888A8A8A8C8C8C8D8D9090908D8D9092949294979A9A9A999B9B9B9C9E9D9D9E9D9D9D9D9DA19E9E9B9E9B9B9A9A9C9C9C9C9C9C9A999493949493939396969394949494979997949492908F8F8F909290939496939699999B9B9B9B999B9B9B9B999B9B9EA1A1A4A4A4A3A19DA19D9D9B9B9B9B9B9A9C9A97949494979797999696949494999A9A9D9F9FA19FA1A1A4A7A8A8A7A7A8A8A8A8AAACACACAAA8AAA8A8A8A8A8A8A8A8A8A7A5A5A7A5A5A4A7A7A7A7A7A5A5A4A1A4A1A1A3A3A39FA1A4A4A1A3A3A4A4A4A4A3A1A1A19F9E9EA19FA19F9F9F9C9A9996939397999C9B9B99999A9C9C9C9C99999999999999969693939393939393909090908D8D8D8F92949725010101010101010101010180D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D5D5D5D5D5D5D6D6D6D6D6D6D6D6D7D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADBDBDBDCDCDCDDDDDDDEDEDEDFDFE0E0E0E1E1E2E2E2E3E4E4E4E5E5E6E6E6E7E7E7E8E9E9E9EAEAEBEBEBECECECEDEEEEEEEFEFF0F0F0F1F1F2F2F2F3F3F3F4F4F4F5F5F5F6F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7F7F7F7F6F6F5F5F5F4F4F4F3F3F3F2F2F2F1F0F0F0EFEFEFEEEEEDEDECECEBEBEBEAEAE9E9E9E8E7E7E7E6E6E5E5E4E4E4E3E2E2E2E1E1E0E0E0DFDEDEDEDDDDDCDCDCDBDBDBDADAD9D9D9D8D8D8D7D7D7D7D6D6D6D6D5D5D5D4D4D4D4D4D3D3D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1CEC1C1C1C0BFBDBDBDBDB9C1CFB1A5A5A5A5A5A5A1A3A5A3A3A1A19EA1A19C9C9C9B9B9B9B9B9898979898989898979797969896969697979898989798989B9C9E9C9B9C9A9A9C9E9C9C9C9C9EA19FA1A1A1A1A5A5A5A1A1A19C9B9B98979798989798989898989A9898989B98989A9C9F9F9C9C9B9C9C9C9C9C9C9B9B9B9B9B9C9A9C9E9E9CA19C9C9C9C9E9B9E9C9A9A9A989A9A9C9E9E9E9B9E9E9B9B9E9EA1A1A19F9E9C9C9F9F9C9B989793939397979797979797979793939397979898989A9C9C9C9C9F9F9FA1A1A1A5A5A5A5A3A3A1A1A19FA1A1A1A5A5A5A5A1A3A3A3A5A8AAAAA7A8A8A8A5A5A5A8A5A5A5A8ABABACAEACAAACABABA8A8A8ABACA8A8A8A7A5A5A1A1A1A3A5A5A5A3A3A5A7A7AAACACAAABABABA8A5A5A5A3A1A5A5A5A5A1A1A1A3A1A1A19C9B9B989B9C9C9A989797979697979797969693939393928F929292939290908D8D8F8B8B8F8B8B898B89898681818181818686888282828282868686898B8B8B8B88888888888889898B88888686868886868687888887888888888681868687828687828789898989878786868888898B8B8E8B888888888B88888888878788868888888888888B8E8E908E8E8B8E8B8E8E8E8F908E8E8E8B8F9090908E8E8E8E8B8B8D8D909090929296969692929697989898969898979390909293979390939797979696969393929292929296969798989896969293939392909290908E8D8F928F8F8F8F908F929393929290909090929092929292908E9090909292909090929090909090908E8B8B8B888687878888888686818181817E7E7E8080818180808186868180807E807E818288828182818080807D7C7C807C807E7E818287878789898B88888B888B8B8B8B88878788888B8D8F92909090909292929693939090909290909092969698969698989896989A2601010101010101010101017ED1D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3D3D3D4D4D4D4D4D5D5D5D6D6D6D6D7D7D7D7D8D8D8D9D9D9DADADBDBDBDCDCDCDDDDDEDEDEDFE0E0E0E1E1E2E2E2E3E4E4E4E5E5E6E6E7E7E7E8E9E9E9EAEAEBEBEBECECEDEDEEEEEFEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F5F5F5F5F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7F7F7F7F6F6F5F5F5F4F4F4F3F3F3F2F2F1F1F0F0F0EFEFEEEEEEEDECECEBEBEBEAEAE9E9E9E8E7E7E6E6E6E5E5E4E4E3E2E2E2E1E1E0E0E0DFDEDEDDDDDDDCDCDBDBDBDAD9D9D9D8D8D8D7D7D7D6D6D6D5D5D4D4D4D3D3D3D3D2D2D2D2D2D1D1D1D0D0D0D0D0D0D0D0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEBBA5A7AAAAABABACABACAEB5C8A79696979A9A9A9999969696999999979797969797999C9C9C9F9C9F9D9DA19F9D9D9D9D9D9F9D9C9D9D9D9D9F9F9F9C9C9C9F9F9F9FA19D9D9D9D9D9F9FA19D9D9F9D9D9D9FA2A2A5A5A5A5AAAAAAAAABABAAAAAAAAABA8A8A8A8A8A8A8A8A7AAAAAAAAABAAABAAACACACACAEB2B2AEACACACAAACACABACACACACACACACABACACB1B1B1B1B2B2B2B0B0B0B2B2B5B5B2B2B1B1AEB2B2B2B2B2B6B6B5B3B3B3B6B6B5B5B2B2B2B2B5B6B5B2B2B5B5B6B6B6B6B8BBB8B8B8BBBBB9B8B8BBB8B8B6B6B8B6B3B5B3B5B3B6B6B9B9B8B5B2B1AEACACACAEB1ACACAEAEAEAEACAAAAAAAAAAAAAAAAAAAAA7A7AAAAAAA8AAA8A5A5A5A5A5A8A8ABA8A8A5A5A3A3A1A1A19DA29D9F9F9C9F9F9D9D9C9C9A9A9A9C9C9C9A9797979797979A9797969394979796969496969392928F8F8E8C8C8988888C8D8D8D8F928F8F8F8F929392928F8F8F8F8F8F8E8E8E8E8D898989898989898987878784848484817E7C808081818181838381817E81818184848487868787878483817D7D8183817D7D7D7D7D7E7C7A7C7C7C7C7C7C7C7C7C7C7C808180818383848383838385878786898986868585858588858587878584848384858885858584848181848689898989898C8F8F8F8F8C8C8C8C8C8C8E8F8F8F8D89898786848483838687888C8E8E8C88898D89898988898D8D8F8F8E8D8E8E8F8F8E8F908F8F9293939393979793949394929390909390909093939090908F8F8F9393929292929293939693969693939393939390909093939497969696969696939390939696979797979A9794939393928F9292928F90908F908E8F8F8C89898C8C8C8C89898988898888888888878787878786868886888C89898C8C8888898C8F9090909090908F8F8E8F8E8E8C8C88888C89898988888C8989878786848585852001010101010101010101017DCECECFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0D0D0D0D0D0D0D0D1D1D1D2D2D2D2D2D3D3D3D3D4D4D4D5D5D6D6D6D7D7D7D8D8D8D9D9D9DADBDBDBDCDCDDDDDDDEDEDFDFE0E0E1E1E2E2E2E3E4E4E5E5E6E6E6E7E7E8E9E9E9EAEAEBEBEBECECEDEEEEEEEFEFF0F0F0F1F1F2F2F3F3F3F4F4F4F4F5F5F5F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8F8F7F7F7F7F6F6F5F5F5F4F4F4F3F3F2F2F2F1F1F0F0EFEFEFEEEEEDECECECEBEBEAEAE9E9E9E8E7E7E6E6E6E5E5E4E4E3E2E2E1E1E0E0E0DFDEDEDDDDDDDCDCDBDBDADAD9D9D8D8D7D7D7D6D6D6D5D4D4D4D3D3D3D2D2D2D2D1D0D0D0D0CFCFCFCFCFCECECECECECECDCDCDCDCDCDCDCDCDCDCCCCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBBAA7A8AAABAAA7A3A8AAACB6C8ABA29E9C99999B9B9B9E9E9CA19C9B9A9A9C9B9B9B999999999797979796969497979796949292939090929292929294929090929294979799999A9A9A9C9C9C9B99999997979796969997979494979794979799969997949290908D8D8D90929290908F8D8D898C8C8D8D8D8D8D8D8D8F8D9090908D8D8F929293939090908F8D8C8C8C8C88888789888C8C8C8C898987878989848789898784838381817F7D7D7F7F837F8183817E818183868787878989878789898987878987888D8D8D8D909093939090939390949496979797979996969696969696999A9C9C9C9C9C9E9E9E9B9EA1A1A2A2A5A2A5A3A5A3A2A1A2A2A2A2A1A3A3A2A2A3A29E9E9EA2A1A1A19C9FA2A29F9F9C9C9A9A9C9E9E9E9E9E9E9C9C9A9C9E9E9FA2A2A3A2A2A3A3A2A1A2A3A2A2A29F9F9C9C9B9C9C9B9B9B9E9EA19EA1A19E9C9C9C9C9C9C9C9C9999979494949696969999999999999B9C9FA1A19F9C9FA19F9F9C9B999A9C9F9C9C9A9C9C9EA1A2A29FA19CA1A2A2A2A2A19F9E9C9C9B9999999999999999999799999797979999969794949696969497979796969694949497979799999699999494949499999A9B9C9F9F9F9C9C9C9A9A9C999996969697999B999A9C9A9B9C9E9E9E9C9E9E9E9E9C9C9C9C9C9C9E9E9C9CA19C9E9FA1A1A1A1A3A5A5A7A5A5A3A2A2A2A3A2A2A3A2A3A3A3A5A3A5A5A5A8A8A7A7A5A5A5A5A3A5A5A5A5A5A2A3A5A8A5A5A8A8A5A3A3A2A29F9C9B9999999999999794979999969493929292929294969694949499969697979996969696999697969694979794949494949492908F90909092929290939392949494929294928F908D909090908D8F8F90908F8F8F8D8F8D8D8D8F8D8D8D8F9090908D8D9092939497969696979999999A9C9B9C9F9C9C9A999996949392908F902501010101010101010101017BCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCCCDCDCDCDCDCDCDCDCDCDCECECECECECECFCFCFCFCFD0D0D0D0D1D1D2D2D2D3D3D3D4D4D4D5D6D6D6D7D7D7D8D8D9D9DADADBDBDCDCDCDDDDDEDEDFE0E0E0E1E1E2E2E3E4E4E5E5E5E6E6E7E7E8E9E9E9EAEAEBEBECECECEDEEEEEFEFEFF0F0F1F1F2F2F2F3F3F3F4F4F4F5F5F5F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F7F7F7F7F6F6F5F5F5F4F4F4F3F3F2F2F2F1F0F0F0EFEFEEEEEEEDECECEBEBEAEAEAE9E9E8E7E7E6E6E5E5E5E4E4E3E2E2E1E1E0E0DFDEDEDDDDDDDCDCDBDBDAD9D9D9D8D8D7D7D6D6D5D5D4D4D3D3D3D2D2D2D1D0D0D0CFCFCFCFCECECECDCDCDCDCDCCCCCBCBCBCBCBCACACACACACACACACACAC9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9BCAAA7A7AAAAA8A5A3A4A4ACC1A0929292908E8E90929292929292908E9090909090928F8D8F8F9292908D8B8B8E8F928F8F8D8E8B8E8D8F8F908E8E8D8E8E8D8E8E9090908F8E9092929492929092928F9090909090909290929492949494949493939492929092908E8E8E9092909090929494939093969797979794969696989B989696969896989B9B9B97989B9CA0A09C9B9B9E9E9E9EA0A2A29F9C9E9F9C9C9C9C9EA09F9F9E9CA09E9E9C9C9B9B9B9B97979B9B9898979797979898989898969797939693939696979697989898969697949290908F8E8F8F8F8F8F8F8B8F8D8B8B8B8B8B8F8F8F8F92908F8D8D8D8B8B898988898B8B8B8D8F8E8F8B8B8F9090909294949793939293939492949497979B9B9B9B9B9B9B989B9B9C9B989796969698979897979B9B9C9C9C9B9B9B9B9B9B9C9C9B9B9C9E9E9C9B9B9B9B9B9797979B97989896939496969696939393969692929292909090908F8F8D8D898D8D8D8D8D898A8A8A888585888989898586868989848181818181858481838180808081818180807C7C7C7D7D7D7C7B7B787878787A7876757574757572757777787878787B7C7C7C8080818185818181817C8080817D81838588898A8A8D8D8D898D8B8B8B8A8A8B8B8D8E8D8D8F90908E8D8D8D8D8D90909090929292939392969693939392949496979897989B989B9B9B9C9B9B9C9C9B9B9B9B9B9C9EA2A2A0A09C9B9B9B9C9C9C9B9B9794929292929093929294949494929494929292939393939090908E90908D90909090908D8E8E8E8F8F90929292929290908D8F8F8D8D8D8D89898D8F90929292908E8B8D8D8D898D8B8A89898988888A89898A898D8E8E8E8E8E8E90909392929292929397989B9B9B9B9B9B9C9C9C9C9C9B9C9B989898989897939292929496969797979B98989B9C9C9C9B9B9B9B2601010101010101010101017AC9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CACACACACACACACACACACBCBCBCBCBCCCCCDCDCDCDCDCECECECECFCFCFD0D0D0D1D2D2D2D3D3D3D4D4D5D5D6D6D7D7D8D8D9D9D9DADBDBDCDCDDDDDDDEDEDFE0E0E1E1E2E2E3E4E4E5E5E5E6E6E7E7E8E9E9EAEAEAEBEBECECEDEEEEEEEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F5F5F6F6F7F7F7F7F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8F8F7F7F7F6F6F5F5F5F4F4F4F3F3F2F2F2F1F0F0F0EFEFEEEEEDECECECEBEBEAEAE9E9E8E7E7E7E6E6E5E5E4E4E3E2E2E1E1E0E0DFDEDEDDDDDCDCDBDBDAD9D9D8D8D8D7D7D6D6D5D4D4D3D3D3D2D2D1D0D0D0CFCFCFCECECECDCDCDCCCBCBCBCBCACACACAC9C9C9C9C9C8C8C7C7C7C7C7C7C7C7C7C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5B9A7A8A5A5A5A5A7A8A8A8B2C0A293909290909292949294969696929293928F8D8D8C8B8C8C8C8C8C8C888C8988888888888C8C8C8C8F8E8C898989888888888688888888898C8B8C88888C8E8D8D8F92929390908F9090928F92929393979897989897979697979A979693929292969396939497979A9A9A9898989797979A9A98979A9B9B9A9797979797949393979396969290929292929290909092928F8F8F8F8D8D8D8D8C8C898988898989898988878787868181868484848183838484817F7F7F7F7F81817F807F7C7C7C7D7F7F7C7C7A7A7A7B7B7B7A787876767676777674727271727270727575767676767878787A7C7C7D7F817F7F7F7D7A7C7C7D7B7D808186848787898989888988888887878888898B89898C8E8D8B89898989898D8D8D8D8F8F8F90908F92929090908F9292929396939698969798989A98979A9A97979798989A9B9E9E9D9D9B9898989B9B9B989794928F8F8F8F8E908F8F929292928F92928F8F8F909090908E8E8E8B8E8D898D8D8E8E8D898B8B8B8C8C8D8F8F8F8F8F8D8D898C8C898989898888898C8D8F8F8F8E8B888989898889888784848486868788888788898B8B8B8B8B8B8D8E908F8F8F8F8F9093969897979798989A9A9A9B9A989B98969696969693908F8F8F929292949494979696979B9A9A989797989798989A979A9A9C9A979A9796969696969392929090929697979A979A9A9B9C9C9C9B9C9B9B9B9B9C9C9D9B9B98989A9C9A9B989B9797979A9797949496939090908F8E8E8E8D8C8C8E8F928F8F8E909292929393939390929292939393929290929090909292928F929090909396979A979797979797989697979797979696989898989798989B9B9D9D9B9D9D9D9D9D9B9D9C9B9B9C9B9E9B9E9E9E9EA09EA09E9C9E9E9D9D9C9C9B9B9B9C9C9B9A9A9B9B9A9A9726010101010101010101010178C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7C7C7C7C7C7C8C8C8C9C9C9C9CACACACACBCBCBCBCCCDCDCDCDCECECFCFCFD0D0D0D1D2D2D3D3D3D4D4D5D6D6D7D7D7D8D8D9D9DADBDBDCDCDDDDDEDEDFE0E0E1E1E2E2E3E4E4E5E5E5E6E6E7E7E8E9E9EAEAEBEBECECECEDEEEEEFEFF0F0F0F1F2F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F8F8F8F8F7F7F7F6F6F5F5F5F4F4F4F3F3F2F2F2F1F0F0F0EFEFEEEEEDECECEBEBEBEAEAE9E9E8E7E7E6E6E5E5E4E4E3E2E2E1E1E0E0DFDEDEDDDDDCDCDBDBDAD9D9D8D8D7D7D6D6D5D4D4D3D3D2D2D1D0D0D0CFCFCECECDCDCDCCCBCBCBCACACAC9C9C9C8C8C7C7C7C7C6C6C6C6C6C5C5C5C5C5C5C4C4C4C4C4C4C4C4C4C4C3C3C3C3C3C3C3C3C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B9A7A7A5A3A5A49FA1A19FA5B99B8988888C8D8F8D8D8C8D909090909090908D8F8F8F90909090908D8F8D8D8D908F8F8D8F8D8D8D909393979494949393949693949494949493939696969693969699999B9B999B9B9B9B9B999B9B99979B999B999B9B9B9B9C9B9C9C9B9C9C9B9B9B9B9797979B9B9997979797979793969797939796999B9797949494969699999B9B9B9B9B999B9B9996969693939394939392929290909090908D8D8C8C89878787888888888986868989898989898C888989898988888988878484818381848585848585858788898989858989898C8889898889858788888989878785858181817E7E7E7C7C7C7A787B7B7D7E81808081807E80818383817E7E817E7E7E808184848686858585838080818484817E7E7E7C7C7B7E7E7D7E81818181838383818181838180818383838583807E7E808080807D7D807E7E808181817E7E7E7E81848589898787888784878784848784818181818181838181818081818386868385858586868484818485838385868686868686888687888888888787878784848181848688888888898C8887898986878988888C8D8989898989898D8C89898D8F8F8D8D8D8C8C898C8D8D8C8D909090909292949493939090908F8D8F8C8F8F90908D9090928F8D8D8D8D8D908D8D908D8C8D8D8D8D8D8D898D8D8D8F8D898C8C8C888C8C8D8D898C8C8D8D8D8C8C8D90909092939293908D8D8D8D8D8D8C888686888C8989868786868787888889898C8C88888888878787888C8C8C8C88898C8C8D8C8888888C8C8D8F9090909093909093939394949393908D8D90909090908F9293949794979797999797979797979797979797999999999B9B9C9FA1A3A5A5A7A8ABABABABABACACACACAEACA8ACA8A8ABA7A7A7A8A8A5A8ABABABA8A8A8ABACACA8ABABA8A8ABA8A7A7A729010101010101010101010175C2C2C2C2C2C2C2C3C3C3C3C3C3C3C3C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C6C6C6C6C7C7C7C7C8C8C9C9C9CACACACBCBCBCCCDCDCDCECECFCFD0D0D0D1D2D2D3D3D4D4D5D6D6D7D7D8D8D8D9D9DADBDBDCDDDDDEDEDFE0E0E1E1E2E2E3E4E4E5E5E6E6E7E7E8E9E9EAEAEAEBEBECECEDEEEEEFEFF0F0F0F1F2F2F2F3F3F4F4F4F5F5F5F6F6F7F7F7F8F8F8F8F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8F7F7F7F7F6F5F5F5F4F4F4F3F3F2F2F2F1F0F0F0EFEFEEEEEDECECEBEBEAEAE9E9E8E7E7E6E6E5E5E4E4E3E2E2E1E1E0E0DFDEDEDDDDDCDBDBDAD9D9D8D8D7D7D6D6D5D4D4D3D3D2D2D1D0D0CFCFCECECDCDCDCCCBCBCACACAC9C9C8C8C7C7C7C6C6C6C5C5C5C4C4C4C4C3C3C3C2C2C2C2C2C2C1C1C1C1C1C1C1C1C1C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBCB6B6B6B6B9B8B6B6B6B6BFC4B0A7A5A5A4A4A2A4A4A4A4A5A8A8A7A7A7A7A8A8A7A7A5A5A5A5A7A8A7A5A5A7A7A8A8A8A8AAACAAAAAAACACABAAAAACAAAAA8A8AAA8A7A7A7A7A7A8A8ABABAAA7A5A4A29F9F9FA2A4A19FA2A2A2A29F9C9C9C9C9C9C9C9C9C9C9B9B9C9C9E9C9E9C9B9B9B9B9B9C9C9D9C9C9B9B97979494949296929393909393929290908E8E8E9090908E8B8B8B8B8B8B8E8B8B8A87888B8B8A8A888A8A89868682828180807D7C7C808181818286828282828689868682828282828281818181817E7E7E7E7E7E7D7D7C7C7C7878787877757276767777777778787676757677777878787C7B7C7C7C78787674747678767474747474757270727272727272727272727276777676787878787878787A7C7C7B7D7D7B7B7A7A7A7A7C7A7A7C7C7A787878787A7C7A7A7A78787777787B7D7D7D7D7D808282828280808080808081828282817E7E7C7B787878787B7C7C808181807C7E817E7E7E7C7E81818282818181818282818284828286878787898B8B89888988868784848784848487878484848282828787868686868689898A898A8A8989878989898484848989888B8A8A8A8A8A8A878784878A8A8B8B8B8B8E8B8889878786828686868284848284818282807D7D808080807D7E7E7C7E7C7C7C7C7C7C7C7C7C7C7B7B7C7B7C807D7D80807C7C7D808284848484848482828182818180807C7C807E7D7E7C7C807E7E7C7C7B787A7A7A7C7C7C7D7D8181817D7D8081848184878A8A8A898B8B8B8B8E8D8D8E8D8D8D8D8D908E8E8B8E8B8B8A8A8B8B8B8B8B8B8A898482848482828286868284848484878987848481817E7E7E818181828486828688888B8B8B8B888B8B8B8B888B8B8E909092929292908D908D8D8B8B8B8B8B8A8B8A87848484878787888686848484898A8A8D8F8F908F9090929625010101010101010101010174C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C3C3C4C4C4C4C5C5C5C6C6C6C7C7C7C8C8C9C9CACACACBCBCCCDCDCDCECECFCFD0D0D1D2D2D3D3D4D4D5D6D6D7D7D8D8D9D9DADBDBDCDCDDDEDEDFE0E0E1E1E2E2E3E4E4E5E5E6E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F0F1F2F2F2F3F3F4F4F4F5F5F5F6F7F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F8F8F8F8F7F7F7F6F6F5F5F4F4F4F3F3F3F2F2F1F0F0F0EFEFEEEEEDECECEBEBEAEAE9E9E8E7E7E6E6E5E5E4E4E2E2E1E1E0E0DFDEDEDDDDDCDBDBDAD9D9D8D8D7D7D6D5D4D4D3D3D2D2D1D0D0CFCFCECECDCDCCCBCBCACACAC9C9C8C7C7C6C6C6C5C5C5C4C4C4C3C2C2C2C1C1C1C1C0C0C0C0C0BFBFBFBFBFBFBFBEBEBEBEBDBDBDBDBDBDBDBDBDBDBDBDBDBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB1A2A5A49F9F9F9F9F9E9CA2B5968A8B8B8D8D8D908D8D90939292909090908F909092909292949290928F8D8D8D8D8D8D8A8B88888B8D9090928F929293949494939493939393949496939390909294929390939090909290908D8D8D8D8888888886868686848486888A888886888B8B8B8D8D8D8D888A8A8A8D8D8D8B8B888A8888888B8A8A888A8888888D8D8F929090908F8F90908D90909090908D8D909090908F9090939396969396969696969396949393949396939696969698969897949797969694949393939494939292939392928F9093928F929093949392909090909093939696969696939696939090908F8F8F908D8D8D8D8D8D8D8D8D8D888887878681818184848484838181838383838383868483868683848486848180807D7E7D80818180818181818483868381838686868486838483818184848686818181817D7C7C7A7A7A77777777757676787A7C7B7B7C7B7A7B7D7E7E7C7A7A7C7A7A7A7B7C808081818181817E7B7B7D80807C797979777776797A787A7C7C7C7D7E7E7E7C7C7D7E7C7B7C7E7E7E817E7B7A7A7B7B7B7B78787B7A7A7B7D7D7C7A7A7A7A7C8081838381818481808181808081807C7C7C7D7C7C7E7D7C7D7B7C7C7E81817E818181818180807D80817E7E81818181818181848181848484848181818180807D7D8081848484848687848183838181868484868886868683838688878686888A8A88888887868687888887888B8B8B8B8D8D90908D8D8D8B8B8A888A878A8A8D8D888D8D8D8A88888888888B88888B8887888888888888868888888A888687878784878688888686868888888687888D8D8B8D8D8D8D8D88888888888886848181848683838181818181818484838386868484848481818184868686868486868788878484848787888A8D8D8D8D8D8B8B8D8D8D909023010101010101010101010172BCBCBCBCBCBCBCBDBDBDBDBDBDBDBDBDBDBDBDBDBEBEBEBEBFBFBFBFBFBFBFC0C0C0C0C0C1C1C1C1C2C2C2C3C4C4C4C5C5C5C6C6C6C7C7C8C9C9C9CACACBCBCCCDCDCECECFCFD0D0D1D2D2D3D3D4D4D5D6D7D7D8D8D9D9DADBDBDCDDDDDEDEDFE0E0E1E1E2E2E3E4E5E5E6E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F0F1F2F2F3F3F3F4F4F4F5F5F6F6F7F7F7F8F8F8F8F9F9F9FAFAFAFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8F7F7F7F7F6F5F5F5F4F4F3F3F3F2F2F1F1F0F0EFEFEEEEEDECECEBEBEAEAE9E9E8E7E7E6E6E5E4E4E3E2E2E1E1E0DFDEDEDDDDDCDCDBDAD9D9D8D8D7D6D6D5D4D4D3D3D2D1D0D0CFCFCECECDCDCCCBCBCACAC9C9C8C7C7C6C6C6C5C5C4C4C3C3C2C2C1C1C1C0C0C0BFBFBFBEBEBDBDBDBDBDBCBCBCBCBCBCBBBBBBBBBBBBBBBBBABABABABABAB9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A4908F928F8E8D8C8D8E8E97A88B7D7E808181818181818383868484848486868A8B8D8D8D8D8D8D8F8F8F908F8D908D8B8B8B8B8B8A868686868788888989898D8B8B8D908F8F8D8D8D8D8D8D8D8F8D8F8F928F8D8F8D8B8B8B8B8B8A87888686888B8D8D8F8D8F8F9092929290929090909092929290908D8D8F928F908D908D8D8D8F8D8D89898B8A86868686838383838181838687868683868888888A8A8A8A868787878A8A8A8888868786868688878786878686868A8B8D8F8D8D8D8D8D8D8D8B8D8D8D8D8D8B8B8D8D8D8D8D8D8D909092929092929292929092929090929093909393939396939694929494929292929090909292908F8F90908F8F8D8D908F8D8F8D9092908F8D8D8D8D8D90909292929292909392908D8D8D8D8D8D8D8B8B8989898A8A8A8A8A868684848380808081818181817E7E81818181818183818183838181818381807D7D7B7C7B7D7E7E7D7E7E7E80818183817E8183838381838181817E808181838380807E7E7B7A7A7777777575757572767676777A78787A7877787B7C7C7A77777A777777787A7D7D7E7E7E7E7E7C78787B7D7D7A777777757576777776777A7A7A7B7C7C7C7A7A7B7C7A787A7C7C7C7E7C787777787878787676787777787B7B7A777777777A7D7E8181808081807D80807D7D807D7A7A7A7B7A7A7C7B7A7B787A7A7C7E7E7C7E7E7E7E7E7D7D7B7D7E7C7C7E7E7E7E7E7E7E817E8081818181808080807D7D7B7B7D7E818181818384818081817E8083818183868383838181838684838386878786868684838384868684868888888889898D8D8B8B8A88888786878487878A8A868A8A898786868686868886868886848686868686868386868687868384848481848386868383838686868384868A8A88898B898B8A86868686868683817E7E818381817E807E7E801E010101010101010101010170B9B9B9B9B9B9B9B9B9B9B9B9BABABABABABABBBBBBBBBBBBBBBBBBBCBCBCBCBCBDBDBDBDBDBEBEBFBFBFC0C0C0C1C1C1C2C2C3C3C4C4C5C5C6C6C6C7C7C8C9C9CACACBCBCCCDCDCECECFCFD0D0D1D2D2D3D4D4D5D6D6D7D8D8D9D9DADBDCDCDDDDDEDEDFE0E0E1E2E2E3E4E4E5E6E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8F7F7F7F6F6F5F5F4F4F4F3F3F2F2F2F1F0F0EFEFEEEEEDECECEBEBEAEAE9E9E8E7E7E6E5E5E4E4E3E2E1E1E0E0DFDEDDDDDCDCDBDBD9D9D8D8D7D6D6D5D4D4D3D2D2D1D0D0CFCECECDCDCCCBCBCACAC9C9C8C7C7C6C6C5C5C4C4C3C2C2C2C1C1C0C0C0BFBFBEBEBDBDBDBCBCBCBBBBBBBABAB9B9B9B9B9B9B8B8B8B8B8B8B8B8B7B7B7B7B7B7B7B7B7B7B7B7B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6A6949292929090929293939BB08F8080818183868687878888888B8B8B8A89898986868684848786868383868683868689848986838180807C7C7C80818180807E7B7B7A7B7B7D7D7B7D7D7D7D7E7D8080817D7D7E818181818181817E7C7B7B7B7B78787777787B7B7B7B777A7777777776777A7A777675757373706F6F707074707374726F727275767777777777777777777777777A77787B7D7D7D80808181808081818183838486868686898484848484848487888B8B8B8B8B8D8D8D8A8D8F8F9090939093929390908F8F8F90908F90908F8F908F8D8D8D8F8F8F8F8C8E8F8F8E8E8C8C88888B8D8D8D8D8D8D8C8C888C8D8D8E90909290909292908F90908F8F8F8E8E8B8B8A8C8C8A8A8A8D8D8F8D8F8F8D8B8B8B8B8B8B8B8B8989868383838484848989898989898A8C8E8F8F8E8C8E8F8E8E8C8A89888B8E8B8B888B8B8D8F8F8F8E8F8C8F9090908F8F8E8D8C8C8A898989898989898989868989868686898984868383848484838686868484848383838686868987848787838383838787888A8C8E8E8E8B8B8B88888B898984848486898A87888B888A8C8D8D8D8B8D8D8D8D8C8C8C8C8C8C8D8D8C8C8F8C8D8E8F8F8F8F90939394939392909090908F8F928F90909294929494949696949494949494909393939393909094969494969694909090908E8C8A8989898989878683868787848381818181818183848483838387848486868784848484878486848483868683838383838381807E81818081818181818181838383818183817E817D818180807D7E7E81807E7E7E7B7E7B7B7B7E7B7B7B7E8181807D7D808181838684848486878787888C8A8C8E8B8B88878784838181807E8183818181818181818183838484878484878484848181838686868484818181848484838383818383848988888C888C8A2101010101010101010101016EB6B6B6B6B6B6B6B6B6B7B7B7B7B7B7B7B7B7B7B7B7B8B8B8B8B8B8B8B9B9B9B9B9B9BABABBBBBBBCBCBCBDBDBDBEBEBFBFC0C0C0C1C1C2C2C2C3C4C4C5C5C6C6C6C7C8C9C9CACACBCBCCCDCDCECECFD0D0D1D2D2D3D3D4D5D6D6D7D8D8D9D9DBDBDCDCDDDDDEDFE0E0E1E1E2E3E4E4E5E5E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F1F2F2F2F3F3F4F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F8F8F8F8F7F7F7F6F5F5F5F4F4F3F3F3F2F2F1F0F0EFEFEEEEEDECECEBEBEAEAE9E9E8E7E7E6E5E5E4E4E2E2E1E1E0DFDEDEDDDDDCDBDBDAD9D8D8D7D6D6D5D4D4D3D2D2D1D0CFCFCECECDCCCBCBCACAC9C9C8C7C7C6C5C5C4C4C3C2C2C1C1C1C0C0BFBFBEBEBDBDBCBCBCBBBBBABAB9B9B9B8B8B8B7B7B7B7B6B6B6B6B6B6B5B5B5B5B4B4B4B4B4B4B4B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D898C89898C8C8C8D8D8D96AA8C7C7B7B7B7B7B7E7E7E7E81818181818183838181818181818384868486898687898989898989898787878989898C8E8F8E8E8C8989898C8C8C89878681818181817E81808081818181818181818181818181817E7E7E7C7E7E7B7E7E7E7E7E7B7C7C7C7D7D7E80808081817E7E7B7D7D7B7B7B7B78787B7D7E8081817E7C7A7B7B7B787B7A78767676777778787878787B7C7C7C7C7C7C7E7E8180808080818184868987878789898989898C89898C8986868686868481818181818383868686898686898C898989898989878989898989898D898989878686868686848183818183868989898789898C8D8D8D8C8D8C8C8C8C8D8D8E8C8C8989898D898C898C89898989898986868684818181817E7E7E7E7D7D7E818181817E81838383848484848181818184848483838181818181838181818181818184868789898989878789898689898989898686898989898789898C8C8E8E8C8E8E8E8E8E8C8E8D8C8C8D8C8E8C8E8E8E8E908E908F8D8F8F8E8E8D8D8C8C8C8D8D8C89898C8C898987898C898789898C8D8C8989898989898C8C8E8E8E8E8E8C8E8E8C8989898787878986868686868484848484818180807E7B7B7B7D7D7D7D7C7A7A7C7C7C7C7C7C7E7D7C7E7E7C7D7D7E7D7B7878767776787878787878787B7D7C7E7C787C7E7E7E7D7E7C7D7C787B7D7D7E7E7B7B7878767575757575727272706E717172757575757575757576777775757575757575757578787A7A78787877757576787875747474727271747572757575757677777775757677757575777777787775757575757575727275757575767675757575757578787C7C7B7B7D7B787B7B78787B7875757576757577767576757575777A7A777878787A7A78787678787777787A7A7A7A7A7A7D7A7B7D7D7D7D7B7B7B1D01010101010101010101016CB3B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B4B4B4B4B4B4B4B5B5B5B5B6B6B6B6B6B6B7B7B7B7B8B8B8B9B9B9BABABBBBBCBCBCBDBDBDBEBFBFC0C0C1C1C1C2C2C3C4C4C5C5C6C6C7C8C9C9CACACBCBCCCDCECECFCFD0D1D2D2D3D3D4D5D6D6D7D8D8D9DADBDBDCDCDDDEDEDFE0E1E1E2E2E4E4E5E5E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F1F2F2F3F3F3F4F4F5F5F5F6F7F7F7F8F8F8F8F9F9F9FAFAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F8F7F7F7F6F6F5F5F4F4F4F3F3F2F2F2F1F0F0EFEFEEEEEDECEBEBEAEAE9E9E8E7E7E6E5E5E4E3E2E2E1E1E0DFDEDEDDDCDCDBDAD9D9D8D7D7D6D5D4D4D3D2D2D1D0CFCFCECDCDCCCBCBCAC9C9C8C7C7C6C6C5C4C4C3C2C2C1C1C0C0BFBFBEBDBDBCBCBCBBBBBAB9B9B9B8B8B8B7B7B7B6B6B6B5B4B4B4B4B3B3B3B3B3B3B2B2B2B2B2B2B2B1B1B1B1B1B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A6979797949497939492929BAB8F8481828682848687878786878787878686868686868787868688868789888888888B8E8E8F8E8E8D8C8C8C8B89898D898B8B8D8F8D8F8F8F90908F8F8F8F8F8F8B8E8E8E8E8E8C8B8F908F8F90908F8B8B8C8C898684828282828281817E818181807E7D7C7C7C7C7C7E80807E7E7E8180808181818080808081808180807E81817E7E7E7E7E7E7C7B787C7C7B7C7C7C7C7D7D7C7E7E7E7C7C7E7C787C787C7C7B7B7878787C7B787878767876767678767676787C7C7B78787B7C7D7E818080808181818182868486898686828181807E7D7C7B787C7E7D7D7C7C7C7C7C7C7E7E8080818080818080807D7D7E81818180807D7D7D8080807E7E7E7D7E7E8082828286828684848786848486868686868284848484868686828282868686868786868684848686878686868486868688888C8B8B8D8F908F9092928F90908F928F8F8F8F8F8F8F8F8E908F8F8F928F9290929292929497979492929290929292929292929292929292929696969697979794949497989B9B989896969497979797989B9B9B9999999B9B9B9B989898989B9B9B98989B9B9B9B9B9B9C9E9C9C9C9E9E9D9C9C9E9C9C9B9B9C9B999B999B999B9B9D9D9C9B9796949292929496929294949494928F8F8F8F8F8F8F8F8F8F8E8E8F8F908F908F8D8D8D8D8D8F8F928F8F8D8D8989878787868986868682868686868282818181828282817E7E7E7E7E7E817E7E7D7B7C7E7E7D7D7C7D7D7C7878777777757572727275757575767876767676787C7878767676767676777777777574747474747472727272726F6F6F6F6D69676A6A6D6D6D6D6E6E6B6B696B6D6D6F6F6F72707272726F6E6B69696B6E6B696969696969676767676767676767676767676A6D6A6B6E6E6F6E6E6E6E6F727270727270706F6F6F6F726F6F1A01010101010101010101016BB0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B1B1B1B1B1B2B2B2B2B2B2B2B3B3B3B3B3B3B4B4B4B4B5B6B6B6B6B7B7B8B8B8B9B9B9BABBBBBCBCBCBDBDBEBFBFC0C0C1C1C2C2C3C4C4C5C6C6C7C7C8C9C9CACBCBCCCDCDCECFCFD0D1D2D2D3D4D4D5D6D7D7D8D9D9DADBDCDCDDDEDEDFE0E0E1E2E2E3E4E5E5E6E7E7E8E9E9EAEAEBEBECEDEEEEEFEFF0F0F1F1F2F2F3F3F4F4F4F5F5F6F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F8F7F7F7F6F5F5F5F4F4F3F3F3F2F2F1F0F0EFEFEEEEEDECECEBEBEAE9E9E8E7E7E6E5E5E4E3E2E2E1E0E0DFDEDDDDDCDBDBDAD9D8D8D7D6D6D4D4D3D3D2D1D0CFCFCECDCDCCCBCACAC9C9C7C7C6C6C5C5C4C4C2C2C1C1C0C0BFBFBDBDBCBCBBBBBBBAB9B9B8B8B8B7B7B6B6B6B5B4B4B4B3B3B3B2B2B2B1B1B0B0B0B0B0AFAFAFAFAFAFAFAEAEAEAEAEAEAEAEAEAEADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD9C8C8A8B8A8B8B8C888C8E96A7887D80807E7E8181818486828382828181807D7D7B7A78787877777775757575757575757577757272727275727272726F72727575757474727272727575757475757575757275757777777775727272706E6E6E6E6F7272726F727272726F6F6F6F6E6E6E6F6E6E6E6E6E6E6E6E6B6D6D6F7070727475777777787B787878777575777777757574747575757575777575777878787B787B7B7C7B7C7D8080808080808181818181818182828181818181818181838484838286868787888B8B88888888888B8B8E8E8E8C8D8B8B8D8D8C8E8C8D8D8E8C8C8A88888888888A8B8A888B8D8F8E8F8E8E8B8E8E8E8F909093939393949494949492929392908E908E8D8D8D8C8A8A8A8887848286868786868787828487848481818181818080807D7D7D7D7D7B7B7A7B7B7B7B7B787878787B7878787A7A7B7B7B787B7B7D8081807D7E7C7C7E818080808081818183838382868686828181807D7D7B78787B7B7A7B7B7B7B7B7C7B7B7B7D7B7B7C7E81817E807D7E7E808080807D7D7D7D7D807C808181808180808080817D817E7C7C7C7B7C7C808181817D81817D7D818181818181817E7E8181807D7B787777777878787A7A7A7A7A7877777778787B7B7B7C7E7E7E7E81818181838286868686848483838381818282868686868384848487888B8B888A8A888788888A8888888A8C8C8E8F8D8B8D8C8C8888888C8D8A8A8A8886868282828486868884848788888B8D8D8B8C8C8C8A88888784838686878782818284828181807D7D7B7D7E7E7C7B7A7A7A7878787878787877777777757475777577757575727274707074706F6E6F6E6E6B69696767696B6B6D6A6A6A6A6A6B6B6B6E6F6F6F6F6F6F6D6D6D6D6E6E6F6D6D6B6B6B6D6B6B6B6D6F6D6D6D6D6D6D6B696B6B6D6A6B6D6A6D6E6E6E1A010101010101010101010169ADADADADADADADADADADADADADADAEAEAEAEAEAEAEAEAEAFAFAFAFAFAFAFB0B0B0B0B0B1B1B2B2B2B3B3B3B4B4B4B5B6B6B6B7B7B7B8B8B9B9BABBBBBBBCBCBDBDBEBFC0C0C1C1C2C2C3C4C5C5C6C6C7C7C9C9CACACBCCCDCDCECFCFD0D1D2D2D3D4D4D6D6D7D8D8D9DADBDBDCDDDDDEDFE0E0E1E2E2E3E4E5E5E6E7E7E8E9E9EAEAEBECECEDEEEEEFEFF0F0F1F2F2F3F3F3F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F8F7F7F7F6F5F5F5F4F4F3F3F2F2F1F0F0EFEFEEEEEDECECEBEBEAEAE9E8E7E7E6E5E5E4E4E2E2E1E0E0DFDEDDDDDCDBDBD9D9D8D7D7D6D5D4D3D3D2D1D0D0CFCECECDCCCBCACAC9C9C7C7C6C5C5C4C4C3C2C2C1C0C0BFBFBEBDBCBCBBBBBAB9B9B8B8B7B7B6B6B6B5B4B4B3B3B3B2B2B2B1B0B0B0AFAFAFAEAEAEAEADADADADADADACACACABABABABABABABABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA91787B7B787B7C7B7B7B7B7E8F756A6B6B69696767676767676765656464646464646160605F60605E606161646464646565656769696A6B6E6B6B6B6A6769696A676A6D6E7270727275757572757474747272747475757575777776757575757575767676767878787A7A787C7C7A7A7A787B7B7C7D7E7D7E817E7F818181818081817F7F7F818181838687868683818181838383817F7D7B78787878777A78787B7B7B7B787B7B7878787A7A7A7A777777757776757676777776757575757777767878787878767675777775757575727275777678787877757475757572757472707070727272727272727575757575757576777A78787878787A7D7E817F7F7F818181818183818183817E7E7E7E7E7D7A7878787B7C7C7D7D7D807E7E80838181818080817F818181808181848180817F7E7E7E7E7E7D7B7C7A7A7C7E8080817F818183848484838483838383848486838381818184818381838080808180807D7D7E7D7A7A7A7877777776777777787B7878777A7C7C7C7D7D7D7D7A7B7B7B7D7D7D7C7C7A7B7A7A7A7C7B7B787B7A7A7A7D7E7F818080807F7F80817E80808080807E7E818181817F8181838386868386868686868386848383848386838686868689868987848787868684848383838484838181838381817F8183817F818183848381808080818183838686868686838686838181817F7F7F807E7E7D7D7D7D7D7D7D7D7A7878787675757577777777757474757575757575777775767675777776777572727072707272727272727275777576757275767677777675777572757777767675757272706F6F6D6D6D6A6A6A69676A6A6B6D6F6E6E6F6E6D6E7072726F6D6D6F6D6D6D6E6F72727474727272726E6E7072726F6D6D6D6A6A6A6D6D6B6D6F6F6F707272726F6F70726F6E6F72727272726E6D6D6E1A010101010101010101010167AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABABABABABABABABACACACADADADADADADAEAEAEAEAFAFAFB0B0B0B1B2B2B2B3B3B3B4B4B5B6B6B6B7B7B8B8B9B9BABBBBBCBCBDBDBFBFC0C0C1C1C2C3C4C4C5C5C6C7C7C8C9CACACBCCCDCDCECFD0D0D1D2D3D3D4D5D6D7D7D8D9D9DBDBDCDDDDDEDFE0E0E1E2E2E3E4E5E5E6E7E7E8E9EAEAEBEBECECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F5F5F5F6F7F7F7F8F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F8F7F7F7F6F5F5F4F4F4F3F3F2F2F1F0F0EFEFEEEEEDECEBEBEAEAE9E9E7E7E6E6E5E4E4E2E2E1E0E0DFDEDDDDDCDBDAD9D9D8D7D6D6D5D4D3D2D2D1D0CFCECECDCCCBCBCAC9C9C7C7C6C5C5C4C3C2C2C1C1C0BFBFBEBDBDBCBBBBBAB9B9B8B8B7B6B6B5B5B4B4B3B3B2B2B2B1B0B0AFAFAFAEAEAEADADADACACABABABABAAAAAAAAA9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A68E797C7E7C7E7C7B7C7C798193786F6F6F72727474747070747576767674767675726F6F727275726F7275757574747472727070707070747475767676747470727272726F726F6F6D6B6E706E6E6E6E6F6E70727272726F6F6F6F706F707272706F6D6F6F6F72726F6F6F706F6F6F6F6F6F6D6C6A6A6765676767676765656464636361616163636464636364656564636361636164656765646564636363615F5F635F636161646567676768686A67676A676A6A6A6A69676769696C6B6E706F6F6F6F7272707472726F6F6F726F6F6F72747476747476767674767676767679787A7A7C7C7C8081818381838384868383838181838689868684848484878786898786878987878989898987868683868687868787878989898989878989898989878683838686868686898687878989868689868784838383848481838183818180807C7C7B7B7878787A78787675767575747275726F727272727275757675757676767876787876767676767575767878787A7A78787A7A7876757575757676767676757272757676767676767572757575757576747274747676757270707274767474727270727274747572727272727272727575757472757676787676757676747575757575757675767876787878787876767876767576757272727576757575767878767576787A7A7A7A787878787B7C7B7878787B787B7C7C7C797B7D808181807D7D8181818181838381808181807E807E8181818181808181817E7E7C7C7D7C7A7A7C7C7B7B797979797B7B7B7B7B7879797678767678787A787A7B7B7B78787978767575747274747474747470747270707070707474747476757472727270706F6F6E6F707070727472747070747575757678787976767676767876787879797C7D7C7D7D7C7C7B7C7C7E7C7B797878787B797B797A1E010101010101010101010165A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A8A9A9A9A9A9A9A9AAAAAAAAABABABABACACADADADAEAEAEAFAFAFB0B0B1B1B2B2B3B3B4B4B4B5B6B6B7B7B8B9B9BABBBBBCBCBDBEBFBFC0C1C1C2C2C3C4C5C5C6C7C7C9C9CACACBCCCDCECECFD0D1D2D2D3D4D4D6D6D7D8D9D9DADBDCDDDDDEDFE0E0E1E2E2E4E4E5E6E6E7E7E9E9EAEAEBEBECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F4F5F5F6F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F6F5F5F4F4F3F3F3F2F2F1F0F0EFEFEEEDECECEBEBEAE9E9E8E7E6E6E5E4E4E3E2E1E1E0DFDEDDDDDCDBDAD9D8D8D7D6D6D4D4D3D2D2D0D0CFCECDCDCBCBCAC9C9C8C7C6C5C5C4C3C2C2C1C0C0BFBFBDBDBCBCBBBAB9B9B8B8B7B6B6B5B4B4B3B3B2B2B1B0B0B0AFAFAEAEADADADACABABABAAAAAAA9A9A9A9A8A8A8A8A7A7A7A6A6A6A6A6A5A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A496888886848585848588868E9F8274757575757575727575757675727474747274737575727373757575737476777776787878787776757675757673726F6F727370706F6F6F6F6F6F727270707373727272726F6F6F727373737372727374767472727274747676777777777876767878787B7B7878767676777777777676787A7B7D7B7D7D7D7E7D7D7D7D7D7C7C7D7D7D7D7E7E7E7E80818284868888898C8E8F8F8F8F8F9090909092908E908E8E8F8C8C8C8D8D898D8F8F8F8D8D8D8F90908E8F8F8E8E8F8D8C8C8C8C8C898C888888898988878786868887888C8C8C8D8C8C8D8C8888858384848484828383827F7F80808280807E7E7B7B7B7B7B7B7C7B7B787878787676767676767676767676767676767678777777777A7A7878787A7A7A787878787777787B7B7B7D7B7B787877787876767676767777787B7B7878787878787878787A7B7D8082817E7E7E808082838585858383838282828382808080808082808282828283848485858583858482818183838384848684848482828283838383838383848788888888888C8C8E8C8E8E908F9092909292908F8D8D8D8D8F8D8C8C8C8C8D8E8E8E8E8E8E8C8E8F8E8E8E8E8E8F8F8F8F8F8F909392929394979494929292949492939392929292909093909292939390908F8D89898989898D8D8D8C8C89898989888887848280807E7C7C7B7B7B7B78787777777676787A7A7878767575757272706F6E6D696969696969696B6B6B6B69676564646461616061616060616363636361616060605E6060605E5F5F5F61606163646565656567676967656565646565656564646363636565656567676765676767676769696B6D6A6A69696D6B6B6E6F6F72727270727476757676767473737272727476777A787778787B7A787A7A7878767877787677777778787A787B1D010101010101010101010163A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A8A8A8A8A9A9A9A9AAAAAAABABABACADADADAEAEAFAFAFB0B0B1B2B2B3B3B4B4B5B6B6B7B8B8B9B9BABBBCBCBDBDBEBFC0C0C1C2C2C3C4C5C5C6C7C7C9C9CACBCBCDCDCECFCFD0D1D2D3D4D4D6D6D7D8D8D9DADBDCDDDDDEDFE0E0E1E2E3E4E4E5E6E6E7E8E9E9EAEBEBECECEDEEEFEFF0F0F1F2F2F2F3F3F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F5F4F4F3F3F2F2F1F0F0EFEFEEEEEDECEBEBEAEAE9E8E7E7E6E5E5E4E3E2E1E1E0DFDEDDDDDCDBDAD9D8D8D7D6D5D4D4D3D2D1D0CFCFCECDCCCBCACAC9C8C7C6C6C5C4C3C2C2C1C0C0BFBEBDBDBCBBBBBAB9B8B8B7B7B6B5B4B4B3B3B2B2B1B0AFAFAFAEAEADADACABABABAAAAA9A9A9A8A8A8A7A7A6A6A6A6A5A5A5A5A4A4A4A4A4A3A3A3A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A18B7978787A7B797877797A8190776D6D6D6D6D6D6F6D6D6F6F6F6F6D6D6D6D6A6A69696A6D6F6F6F6F70726F6D6E6E6D6D706F6F71727070706E6E7072727070727474737373727170727373727375757575777778787777757575747374727474757573757577747373737373757373757372727272727272707272727472707272726F727172727071717272727172737575757777777775737273727273716F6D6D6F716E6E6D6D6D6D6D6D6F6F6E6E71716F6F6F6F6D6D6D6F717171716F70717273726F6F6F7272737475757575777575777777787877777573737575757575747777787B787B7B7B7C7B7B7B7B7B7A7A7B7B7B7B7C7C7C7C7D7E808183848688888B8D8D8D8D8C8E8E8E8E8F8E8B8E8B8B8C8888888A8A888A8D8D8C8A8A8A8D8E8E8B8D8D8B8B8D8A88888888888888878787888884838383838483868888888A88888A8887848181818181818081817E7C7C7D7D7E7D7D7C7C7878787878787A7878777777777575757373737373737375757375757477757575757777777777777777777777777575777878787B787877777577777573737375757577787877777777777777777777787B7D7E7E7C7C7C7D7D80818181818181817E8080817E7D7D7D7D7D807D7E7E7E7E818181818181818181807E7E8181818181838181817E7E80818181818181818183868687878688888B888B8B8E8C8E8F8E8F8F8E8C8A8A8A8A8C8A888888888A8B8B8B8B8B8B888B8D8B8B8B8B8B8C8C8C8C8D8D8E908F8F90909390908F8F8F90908F90908F8F8F8F8E8E908E8F8F90908E8E8C8A88888888888A8A8A88888888888886868381807D7D7C7A7A787878787777757575747577777777777472727270706E6D6B6A67676767676767696969696765646161615F5F5E5F5F5E5E5F606060605F5F5E5E5E5C5E5E5E5C5D16010101010101010101010162A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A3A3A3A4A4A4A4A4A5A5A5A5A6A6A6A6A7A7A8A8A8A9A9A9AAAAABABABACADADAEAEAFAFAFB0B0B1B2B3B3B4B4B5B6B7B7B8B8B9BABBBBBCBCBDBEBFC0C0C1C2C2C3C4C5C6C6C7C8C9CACACBCCCDCECECFD0D1D2D3D3D4D5D6D7D8D8D9DADBDCDDDDDEDFE0E1E1E2E3E4E5E5E6E7E7E8E9EAEAEBEBECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F5F4F4F3F3F2F2F1F0F0EFEFEEEDECECEBEBEAE9E9E8E7E6E6E5E4E3E2E2E1E0DFDEDDDDDCDBDAD9D8D8D7D6D5D4D3D3D2D1D0CFCECECDCCCBCAC9C9C7C7C6C5C5C4C3C2C1C0C0BFBEBDBCBCBBBAB9B9B8B8B7B6B6B5B4B3B3B2B2B1B0AFAFAEAEADADACABABAAAAAAA9A9A8A8A8A7A6A6A6A5A5A5A4A4A4A3A3A2A2A2A2A1A1A1A1A1A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9890909292929290908F8D96A1887D7D7D817E808082817E7E817D807D7B7B7B7D7D7B7B7B7C7B7B787876767575727272747272706E706E6E6D6B6E6B696B6B6B6B6B6E6E6F6E6E6F6F6F727072726F6F6F6F6F6E6E6F727272747472727474726F6E6E6E6E6F6F6F6F6F6E6B6B6E6F6F6F6F6F6F6E6B6E6E6E6E6E6F6D6A6D6D6F6F6E6A6A6A6B6D6F6D6D6A6B6A6B6A6D6D6E6B6B6A6B6B6A6B6B6E6E6E6D6B6E6F6F726F6F6E6F6F6D6E6E6E6E6E6E6F6E6F726F72727272727070726F6F6E6F6E6B6B6B6E6F6E6E6E6F7272706E70727474747472727272757675727272757275767676737576787B7B787676787878787B7B7B7A78787A78777877787B7A7A78787B7878777776767676747476767575737373737575757575727373707270707272747274757575727273726F6E6E6D6B6D6D6D6D6D6D6A6D6A6A6A6A6A6A6D6D6D6D6F6E6D6A6A6A6A6A696967696A6A6A6A6D6B6D6A6A6D6E6E6E6F72727370706F7070726F7272737376767676767676757676777675737272727573757374767677777776767676767677777676777878777676767676747373767375757270727272727270707072726F6F6F6F6E6E6E6E6D6D6A6A696A6A6A6A6A69686868676565676767676565656767646363636363656463646361616161636361615F5F5F5F5F5F5F5D5D5C5C5C5C5D5C5A585858585856585A5A5C5C5C5C5D5E5E5F6161616365636363615F6161615F616465676768686A6A6A696A6A6A6A68686A6A6A6B6A6A6D6E6E6B6A6A6A6A6A6E6E6E6E6F6F6F70706F72727070706F7272727375737576757676767776767777767676767677787B7C7B7B78767676787878767674726F6F6F6F6E706F6F727272726F72726F6F6F707070706E6E6E6B6E6E6A6E6E6E6E6E6A6B6B6B6D6D6E6F6F6F6F6F6E6E6A6D6D6A190101010101010101010101609E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A1A1A1A1A1A2A2A2A2A3A3A4A4A4A5A5A5A6A6A6A7A8A8A8A9A9AAAAAAABABACADADAEAEAFAFB0B0B2B2B3B3B4B5B6B6B7B7B8B9B9BABBBCBCBDBEBFC0C0C1C2C2C4C4C5C6C7C7C9C9CACBCBCDCDCECFD0D1D2D3D3D4D5D6D7D8D8D9DADBDCDDDDDEDFE0E1E2E2E3E4E5E6E6E7E8E9E9EAEBEBECECEDEEEFEFF0F0F1F2F2F3F3F4F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F4F3F3F2F2F1F0F0EFEEEEEDECECEBEAEAE9E8E7E7E6E5E4E4E3E2E1E0E0DEDEDDDCDBDBD9D9D8D7D6D5D4D3D3D2D1D0CFCECDCDCBCBCAC9C8C7C6C6C5C4C3C2C1C1C0BFBEBDBCBCBBBAB9B9B8B7B7B6B5B4B4B3B2B2B1B0B0AFAEAEADADACABABAAAAA9A9A8A8A7A6A6A6A5A5A4A4A4A3A2A2A2A2A1A1A1A0A0A0A09F9F9F9F9E9E9E9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B88777777757777757675757B896E63636465696A6A6B6A6767696969676769676765656565656463636363616463636464646464676767676969696767656463656565656767676767696A6A6A6A6A6D6D6D6D6D6D6E6B6B6B6B6A6A6A6A6D6D6A6A696969696B6D6D6D6D6D6E70706E6D6D6D6D6A6B6B6B6B6D6A6D6E6E6E6D6E717170707272727577757475757272716E6E6D6B6A6A6A696969676765656567676765696564646464656464646461646465656565656464646465676565656567676564656769696969676464646361616161636464646364646464636363636161616361616161616161615F5F5F6163636465676969696A6D6A6A6A696767696969676765656565656767696767696A6A6A6D6A6D6D6E6D6E6E7171717171717272727272727275757272727272727272747575747577777676787A7A78787878787A7A7C7C7C7B7C7A7A7C7C7B7C7B7C7C7C7B7B787877787877787A78787A7C7E7C7E7C7C7A7C7C7D7E7E7E818181818383838383818181817E7C7E7C7C7C7C7B7878787876757577777677777676757576757572727272727171716E6E6E6E6E6D6D6B6D6D6D6D6D6A6A6A6A6D6A6A6A6B6B6D6D6D6A6D6D6E7172716E706E6E70727171717172727274747475777777757272716E6E6D6A6A6D6D6B6D6D6D6D6D6E6D6D6D6E6D6D6E70727270716E7070717171716E6E6E6E6E716E717272717271717171726E72706E6E6E6D6E6E717272726E72726E6E7272727272727270707272716E6D6A6969696A6A6A6B6B6B6B6B6A6969696A6A6D6D6D6E7070707072727272747577777777757574747472727575777777777475757576787A7A7778787876787878787878787B7B7C7E7C7A7C7B7B7878787B7C7878787777777575757577777875757677777A7C7C7A7B7B7B78787876757477771C01010101010101010101015E9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9F9F9F9FA0A0A0A0A1A1A1A1A2A2A2A3A4A4A4A5A5A6A6A6A7A8A8A9A9AAAAABABACADADAEAEAFAFB0B1B2B2B3B4B4B5B6B7B7B8B9B9BABBBCBCBDBEBFC0C1C1C2C3C4C5C5C6C7C8C9CACACBCDCDCECFD0D1D2D3D3D4D5D6D7D8D8D9DBDBDCDDDEDEE0E0E1E2E3E4E4E5E6E7E7E8E9EAEAEBECECEDEEEEEFF0F0F1F2F2F3F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F3F3F2F2F1F0F0EFEEEEEDECEBEBEAE9E9E8E7E6E6E5E4E3E2E1E1E0DFDEDDDCDCDBD9D9D8D7D6D6D4D3D3D2D1D0CFCECDCCCBCACAC9C8C7C6C5C4C4C2C2C1C0BFBFBDBDBCBBBAB9B9B8B7B7B6B5B4B3B3B2B2B0B0AFAFAEADADACABABAAAAA9A8A8A7A6A6A6A5A5A4A4A3A2A2A2A1A1A1A0A0A09F9F9F9E9E9D9D9D9D9C9C9C9C9B9B9B9B9B9B9A9A9A9A99999999999999999999999999999898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898988D81818181827F7E7F81818A977F7675757472727274747472706F6D6A6A6A6A696B6A6A6D6D6D6D6A6D6D6A6A6A6B6B6B6B696969676968676868696968676767676767686A6A6A6A6A68686767676767676764646767686A6A6A69676567676764676564636363646464646464646767676767676768696B6A6A6A6A6A6B6E6F72707070727272727274727274726F6F6F6F6F6E6B6A6A6A6D6D6D6F6F6F716F6F71747272727171727072727271727275727172706F6F6F6F6F6E6D6D6B6B6D6F71717270727274757575757574747575757575747472727275727572747171717271716F6F6F6E6B6B6B6A696969686767696A6D6A6A696B6D6D6D6E6E6E6E6B6D6D6D6E6E6E6D6D6B6D6B6B6B6D6D6D6A6D6B6B6B6E6F7072717171707071726F71717171716F6F7272727270727275757575757575757575757575757475757775777777777777777675767675757575747474757575727274747272707274727072727575747271717172727575757575757575777575727272707070716F6F6F6F6F6E6E6E6E6E6B6A6A6A68676767676767676765656767676767676967676868676767686767646463646364646464646464676767686764676868696768676767646767676868676764646361616060605E5E5E5D5B5D5D5F606161616161606163646461606061606060616164646565646464646161636464615F5F5F5E5E5D5F605F6061616163646464616163646161616464646464616060616161615F5F616060616363616060606061646467676767676764676764646764616161636161646361636161616465656464646465656464636464646464656565656565676567676767676767676764646363646567676767686A676767676567686767696A6868686767686A6A68686A6D6D6B6B6B6A69686A6B6B6A1901010101010101010101015C989898989898989899999999999999999999999999999A9A9A9A9B9B9B9B9B9B9C9C9C9C9D9D9D9D9E9E9F9F9FA0A0A0A1A1A1A2A2A2A3A4A4A5A5A6A6A6A7A8A8A9A9AAABABACADADAEAFAFB0B0B2B2B3B3B4B5B6B6B7B8B8B9BABBBCBDBDBFBFC0C1C2C2C4C4C5C6C7C7C9CACACBCCCDCECFD0D1D2D3D3D4D5D6D7D8D9D9DBDCDCDDDEDFE0E1E1E2E3E4E5E5E6E7E8E9E9EAEBEBECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEFEEEEECECEBEBEAE9E9E7E7E6E5E5E4E3E2E1E0DFDEDDDDDCDBDAD9D8D7D6D6D4D4D3D2D1D0CFCECDCCCBCAC9C9C7C7C6C5C4C3C2C1C0C0BFBEBDBCBBBBB9B9B8B7B7B6B5B4B3B3B2B1B0B0AFAEAEADADABABAAAAA9A9A8A7A6A6A5A5A4A4A3A2A2A2A1A1A0A0A09F9F9E9E9D9D9D9C9C9C9B9B9B9B9A9A99999999999898989898989797979797979797979797969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696928F8F8F8C8D8F8C8C888C9297807776767676757272707272727272727270727272726E6E6D6E6E6D6D6D6A6A6A6A6A6969676969696969676767656965656567676969696769696A6D6D6D6A6B6A6A6B6D6D6D6D6D6D6E6E6F6F6F70727272706E6E6D6A6A69676769696769696969696A6969696A69696A6B6E6E6B6D6A6B6B6D6D6D6D6A6A6A6A6A6D6A6D6D6D6D6E6D6D6D6D6D6A6D6B6A6A6A696A6A6D6D6D6D6A6D6D6A6A6D6D6E6E6E6E6D6B6B6E6E6D6A696765656567676767676767676765656567676969696A6B6B6B6B6E6E6E6E6F707272727272726F6F6F6E6E7070727272726F7272727275757574767675727373767373737676767878777577767675757576777676767472727070707272727372727274747577777576767676737372726F72727272706E7072706E6E6D6A6A696A6B6B6A6967676765676767676565656565656462646464656463635F5F625F5F625F5F5D5F5D5D5B5A5A58585A5B5B5D5A5A5A5A5A5B5B5B5D5F5F5F5F5E5E5D5D5D5D5D5D5F5D5D5B5B5B5D5B5B5B5C5E5D5C5D5D5D5D5B5A5B5B5C5A5B5C5A5C5D5D5D5D5C5C5B5B5D5D5D5F5F615F5D5E5E5E5F5D5D5E5E5C5C5D5B5D5E5E5E5E5E5F61616361615F615F61616162636161615F62636363616161615F5F5F5F63636364646565656464656769696965696967656363646567656365676767656565656564646464646565676969696565646565656463646363615F62646262626263626465656464636363636463646464646361636363646463636364636363636363615F5F5F5D5B5C5C5D5D5D5B5B5A5A585856565658585A585858585B5B585858565856585A5D5A585A585858585654545854585656585A5C5C5C5D5D5F5D5D5F5D5F5F5F5F5E5C5C5E5E5F5F6264636363636464646565656363636463636364651801010101010101010101015B9696969696969696969696969696969797979797979797979798989898989899999999999A9A9B9B9B9B9C9C9C9D9D9D9E9E9F9F9FA0A0A1A1A2A2A2A3A4A4A5A5A6A6A7A8A8A9AAAAABABACADAEAEAFB0B0B1B2B3B3B4B5B6B6B7B8B9B9BBBBBCBDBEBFC0C0C1C2C3C4C5C6C7C7C9C9CACBCCCDCECFD0D1D2D3D3D4D6D6D7D8D9DADBDCDDDDDEDFE0E1E2E2E4E4E5E6E7E7E9E9EAEAEBECECEDEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEFEEEDECECEBEAEAE9E8E7E6E6E5E4E3E2E2E1E0DFDEDDDCDBDBD9D8D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C9C7C6C6C5C4C3C2C1C0BFBFBDBDBCBBBAB9B8B8B7B6B5B4B3B3B2B1B0AFAFAEADADACABABAAA9A9A8A8A7A6A5A5A4A4A3A2A2A1A1A0A09F9F9F9E9D9D9D9C9C9B9B9B9A9A999999999898989897979797969696969696959595959494949494949494949494949393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393937F6F727272737171707171798C726769696B696B6B6D6F71716F6F71717171727474747271727171717271717171716F6E6E706E6E6D6F707070706E6E6D6B6D6B6A6D6D6D696B6D6D6B6D6D6D6D6D6D6D6A6A6A6969696B696B69696967656463616164656767676565656767676765656565646464636361616161616161606060605D5D5D5D6061646465646161616163616163616160606060605D5C5C5C5C5C5D5D5D5F5F5F5F5F616161616161616161605F5D6060606061616161616364646464646567676767676765656565646464646767646463616163656767676767676969676565656564656565656564656767676767696969696A6A6D6E6F6D6D6D6D6B6B696767676564646461616161616060606161616061605F5F5F5F605D5F5F5D5C5D5F60606060605D5D5D5D6061606060606161605D606161636361615F5F5F5D5B5B5B5B5C5D5D5D5C5D5D5D5D5C5C5C5C5B5B5B5C5B5B5B5B5B5B5B5B585A5A5C5D5D5D606161616364676464646161616163636161606060606061616161616164646467646565676567676969696969696B6D6D6D6A6A6B6D6D6B6B6B6B6A6D6D6D6D6E6E6D6D6F6F70707274747272727272747475757574767474767674757476767574747272727171727274727274767675767575747575777678787A7A7A7A7B7B7B7B7B78787B78787578757676767472727272706E6D6F6F706F6F70706D6E706E6E6D6D6A6D6D696969676767676767676565656565656464646465646464656567656564676767696A6967696767696A696969696A6D6B6D6D6D6D6F6F6F6D6D6D69676765646467676567676765676765656767676767696B6B69696769696969696967676767676967696A6A696D696969696A676A69676767656767696A6A6A676A6A67676A6A6D6D6D6B6A69696B6B69180101010101010101010101599393939393939393939393949494949494949494949494959595959696969696969797979797989898999999999A9A9B9B9B9C9C9D9D9D9E9F9F9FA0A0A1A1A2A2A3A4A4A5A5A6A6A8A8A9A9AAAAABACADADAEAFAFB0B1B2B3B3B4B5B6B7B7B8B9BABBBCBCBDBFBFC0C1C2C3C4C5C6C6C7C9C9CACBCCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E1E2E3E4E5E6E6E7E8E9EAEAEBECECEDEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEFEEEDECECEBEAEAE9E8E7E6E5E5E4E3E2E1E0E0DEDDDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCDCBCAC9C9C7C6C6C5C4C2C2C1C0BFBEBDBCBBBBB9B9B8B7B6B6B4B4B3B2B1B0AFAFAEADADACABAAAAA9A8A8A7A6A6A5A4A4A3A2A2A1A1A0A09F9F9E9D9D9C9C9C9B9B9A9A99999998989897979796969696959594949494949393939393939392929292929292929292919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191917C696A6A696C6D6D6D6B69707B64585858585A5A5A5D5F5F5D5A5C5E5C5C5C5A5C5E5E5F5F5F5E5F5F5F605F5F615F5F6163636363656563646364616361616361616163636161615F5F60636361616161616363646364646363636363636161616363646564646464646463636163646465656565676564636363615F6161615F616160615F5F5F5D5C5C5D5D5D5D5C5C5C5A5C5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5D5C5C5D5D5A5A5C5D5F61616161616160605F5F5F5F5D5D5A5A5D5C5C5C5A5A5D5C5C5A5A5A585858585A5A5A5C5C5E5E5E5C5C5D5F615F616364646463656565656767676767676767676867676567656564646565656565656463615F61616060606161606161616163636361615F5E5C5C5C5E5F5E6061615F6164646565656564656565656465656769696C6C6C6A6867686767656565656564656463616161636363646161616161636464676767696769696C6D6F6F6D6D6F6F6F6F70727272706F706F6F6F6F6F6F6F6F6F6D6D6D6E6D6D6B6D6E6E6E6E6D6D6C696C69686A6A6A67696C6C696A6A6B6B6C6C6A68686867676769676967676765646361606063646565656464646565656564646464636363616160606060605F5F5E5E5E5E5C5C5C5C5F616363646360606161615F5F6160605F5F5F5E5E5C5A5A5A5A5A5C5C5C5D5D5D5D5D5F60605F6161615F5F5E5D5C5E5E5E5E605F5F5F5F61636363636364656565656565646464646363636365656363616161616465656565656567676564646464636464646464636465656765676767676768686A6D6D6B6C6B6B696967676765646363636161615F5F5F5F5F6060605F615F5D5D5D5D5F5C5D5D5C5A5C5D5F5F5F5E5E5C5C5C5C5F605F5E5F5F60605F5C5F5F616161615F5D5D5D5C5A5A5A5A5A5C5C5C5A5C5C5C5C5A5A5A5A5A5A5A5A15010101010101010101010157919191919191919191919191919191929292929292929292929393939393939394949494949595969696969797979898989999999A9A9B9B9C9C9C9D9D9E9F9FA0A0A1A1A2A2A3A4A4A5A6A6A7A8A8A9AAAAABACADADAEAFAFB0B1B2B3B4B4B6B6B7B8B9B9BBBBBCBDBEBFC0C1C2C2C4C5C5C6C7C9C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9D9DBDCDDDDDEDFE0E1E2E3E4E5E5E6E7E8E9E9EAEBEBECEDEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEEEEEDECEBEBEAE9E9E8E7E6E5E4E4E2E2E1E0DFDEDDDCDBDAD9D8D7D7D6D4D3D3D2D0CFCFCECDCBCACAC9C7C6C6C5C4C2C2C1C0BFBEBDBCBBBAB9B8B7B7B6B5B4B3B2B2B0B0AFAEAEADACABAAAAA9A8A8A7A6A5A5A4A4A2A2A1A1A0A09F9F9E9D9D9C9C9B9B9B9A9999989898979797969696959494949493939393929292929291919191919190909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E78656567676767656767656D7863585858585858585858585858585B5A5A5B5B58585A5B5D5E5E5E5E5E5E5D5D5D5D5D5D5B5B58585B5A5A5A58585B5A5A585858565656565858585A5A5C5C5C5A5A5B5D5E5D5E60616161616363636364646464646464646465646463646363616163636363636361615E5D5E5E5D5D5D5F5F5D5E5E5E5E6061605E5E5D5C5A5A5A5C5D5C5D5E5F5D5F61616363636361636363636163636467676767676765646564646363636363616361605E5E5E606060615F5F5E5E5E61616164656567656767676A6D6D6A6A6D6D6D6D6D6F6F6F6D6D6D6D6D6D6D6D6D6D6D6D6A6B6B6B6B6B696A6B6B6B6B6B6B67676767656767676567676767676769696767676565656564646765676565656361615F5D5D606163636361616163636363616161616161615F5F5D5D5D5D5D5D5D5C5C5C5C5A5A5A5A5D5E606061605D5D5E5E5F5D5D5F5D5D5D5D5D5C5C5A58585858585A5A5A5B5B5B5B5B5D5D5D5D5E5E5E5D5D5C5B5A5C5C5C5C5D5D5D5D5D5F6161616160616363636363636161616161616161636361605F5E5E5F616363636363636464636161616161616161616160616363646364656564646565676B6A69676969676765646463616161605E5E5E5D5D5D5D5D5D5D5D5D5E5D5B5B5B5B5D5A5B5B5A585A5B5D5D5D5C5C5A5A5A5A5D5D5D5C5D5D5D5D5D5A5D5D5E5F5F5E5D5B5B5B5A58585858585A5A5A585A5A5A5A58585858585858585858585858585858565656585A5A5A5C5D5E5E5F61636160605E5D5D5E5F5F5D5D5C5C5D5D5D5D5D5E5D5D5E60606163616161636163646565656565656767676765656769696767676765676767676B6B67696A6A6B6B6D6F6F6D6D6D6D6D6F6F72727270716F6F717170727071717270706E6D6D6D6D6D6E6F6E6D6F7172727272726F727272721C0101010101010101010101568E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9090909090919191919191929292929293939393949494949596969697979798989899999A9B9B9B9C9C9D9D9E9F9FA0A0A1A1A2A2A3A4A5A5A6A6A8A8A9AAAAABACADADAEAFB0B0B2B2B3B4B5B6B7B7B8B9BABBBCBDBEBFC0C1C1C2C4C5C5C6C7C9C9CACBCDCECECFD0D2D2D3D4D6D6D7D8D9DADBDCDDDEDFE0E1E2E2E4E4E5E6E7E7E9E9EAEBEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEEEEEDECEBEBEAE9E9E7E7E6E5E4E3E2E1E1E0DEDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C7C6C6C5C4C2C2C1C0BFBEBDBCBBBAB9B8B7B6B6B4B4B3B2B1B0AFAFAEADACABAAAAA9A8A8A7A6A5A5A4A3A2A2A1A1A09F9F9E9D9D9C9C9B9B9A999999989897979796969595949493939393929292929191919190908F8F8F8F8F8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C796768656465646364616167725C54545658585757585758575A5A5A5858585858585857585A5A5C5C5C5C5C5A57575A5A5A58565656555554565856585858585A5A5A5A58585A5A5857585A5A5A5C5A575858575757575656575858575A5A5858585858585A5C5D5D5D5D5F5D5A5D5D5A5A5D5A5858585A58585A5A585A5758585A5C5C5A5C5C5C5C5C5A5A5A5A5C5A5A5C5C5C5C5C5C5C5F5C5D5F5F5F5F5D5D5D5D5A5A5A5A5A5C5F5F5F5F5F605F5D5D5D5C5D5F5F5F60615F5F5F5D5D5F61605F5F61636361616160605F6061616061646464646464676765656464646361636063636464616464646361616161616461616461606161616161615F61616163615F6060605F606061615F60606161616060616464646465646564616161616161605F5C5C5F605D5D5C5D5C5C5D5D5F5F5D5D60605F5F5F5F5D5D5D5F606060605F5F606061605F5F5F6060616364646464656464656565676765656461616464646464636465676967696969696969696969676769696969696969696C6B6D6F7072727475777777777776787878787878777877777675757575757475777776757575777878777777777777757575757575747572727274747271717070727172757575757575757572726F6E6F6F6F6F6D6E6E6D6A6A6C6C6D6C6C6969676767676767676767656564646464646161616161616164646164646364646464646565656464656565646465656464646767676967676565646464646161616464646467676565656565656564646567696C6D6B6969696C6C6D6E6F6F6F6E6E6E6D6D6D6E6D6C6C6C6C6C6D6C6D6D6D6D6E6F6F6F6F6F6E6F6F6D6B6B6E6E6E6F6F706F6F6F6D6D6D6E6E6E6E6E6E6E6F71727272727275757775777778767878787A787876757575757675757575757577777777777775777777771D0101010101010101010101558C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8F8F8F8F8F909091919191919292929393939394949595969697979798989999999A9B9B9C9C9D9D9E9F9FA0A0A1A2A2A3A4A5A5A6A6A8A8A9AAAAABACADAEAEAFB0B1B2B3B3B4B6B6B7B8B9BABBBCBDBDBFC0C1C1C2C4C5C6C6C7C9CACBCBCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDDDEE0E0E1E2E3E4E5E6E6E7E8E9EAEBEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F7F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEEEEEDECEBEBEAE9E8E7E6E6E5E4E3E2E1E0DFDEDDDCDBDBD9D8D7D7D6D4D3D2D2D0CFCECDCCCBCAC9C8C7C6C5C4C2C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B2B0B0AFAEADADABABAAA9A9A8A7A6A5A5A4A3A2A2A1A0A09F9F9E9D9C9C9B9B9A9999989898979796969595949493939392929291919190908F8F8F8F8E8E8E8E8E8D8D8D8D8D8C8C8C8C8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A75646767656465656767656D7C645A5C5D5D5D5D5F5F5D5E5D5E5C5D5B5B5D5B5B5B5D5D5B5B5B5A5A5A5D5D5C5C5C5C5C5D5D5F5D5F5F5D5D5D5D5D5D5B5B5B5D5D5E5F5F5F5F5F5F5F5D5D5B5D5F5F6060606061605E5D5D5D5C5A5C5C5C5A5B5B5A5B5A5A5A5856565858585856565656565656565656555555555554545654565856565858565656585A5B5B5B5B5B5B5A5A5A5A5A5A585856565856565656565856565555545454545455555556565858585656585A5B5A5B5D5F5F5F5D5F5F5F606161616161616161616361615F615F5F5F5F6060606060605F5D5B5A5B5B5A5A5A5C5C5A5B5B5B5B5D5D5D5B5B5A58565656585A585A5B5C5A5C5E5E5F5F5F5F5E5F5F5F5F5E5F5F6164646464646463616361615F5F5F5F5F5F605F5D5B5B5B5D5D5D5E5C5C5B5B5B5D5F5F61636364636464646769696767696969696A6B6B6B6A696A69696969696969696967676767676765676767676767676464646463646464636464646464646565646464636363636161646364636363605F5D5C5A5A5D5E605F5F5E5E5F606060605E5E5E5E5D5D5D5C5C5A5A5A5A5A5A5A58585858565656565A5B5D5D5E5D5A5A5B5B5C5A5A5C5A5A5A5A5A585856565656565556565658585858585A5A5A5A5B5B5B5A5A585856585858585A5A5A5A5A5C5D5D5D5D5D5F5F5F5F5F5F605E5E5E5E5D5D5D5D5F5F5D5D5C5B5B5C5E5F5F5F5F5F606161605F5F5F5F5D5E5E5E5E5F5D5F6060615F616363616163636467676564656564646361615F5E5D5D5D5B5B5B5A5A5A5A5A5A5A5A5A5B5A585858585A565858565556585A5A5A5858565656565A5A5A585A5A5A5A5A565A5A5B5C5C5B5A58585856545454545656565656565656565656565654545456545454545454545453545455565656585A5B5B5C5D5F5D5D5D5B5A5A5B5C5C5A5A150101010101010101010101538A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8C8C8C8C8D8D8D8D8D8E8E8E8E8E8F8F8F8F9090919191929292939393949495959696979797989899999A9B9B9C9C9D9D9F9FA0A0A1A1A2A3A4A5A5A6A7A8A8A9AAABABADADAEAFB0B0B2B2B3B4B5B6B7B8B9B9BBBCBDBDBFC0C1C2C2C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D6D7D7D8D9DBDBDCDDDEDFE0E1E2E3E4E5E6E6E7E8E9EAEAEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F8F7F7F6F5F5F4F4F3F3F2F2F1F0F0EFEEEEEDECEBEAEAE9E8E7E6E5E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAFAEADACABAAAAA9A8A7A6A5A5A4A3A2A2A1A0A09F9E9D9D9C9C9B9B9A9998989797979696959494949393929292919190908F8F8F8E8E8E8E8D8D8D8D8C8C8B8B8B8B8B8A8A8A8A8A8A8A8A89898989898989898989898988888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888875646467676867646769696F7C655B5A5A58585858585B5B5D5E5D5D5B5B585A5A5A5A585A585856565858585858585858585A5A5A5A585858585858585A5A5858565858585A5A58585858585858585858565554545151515151515151514E4E4D4D4D4D4D4D4D4E4E4D4D4E51514E4D4D4D4D4D4E5051504E504E4D4D4D4C4C4C4D4C4D4D4D4E505151515353545151545154545454545151545455565858585858585A5A585B5A5A5858585A5858585A5B5B5D5B5B5D5D5D5B5D5F5F5F5F615F616163636365676769676969696A6969696767696A6D6A6A696969696B6B6A6D6B6A6B6D6B6B6D6D6D6D6B6A6A676A6A6B6A6B6B6B6D6D6D6D6D6B6D6D6D6D6D6B6A67696A6A6A6A6A6D6A6B6B6D6D6A6A6D6A6B69676767696967676769676765656363616160606061605F5F5D5F5D5D5B5A5C5A585A5A5A5A5A5C5C5E5D5D5E5E5E605F5F5F5D5D5D5D5D5C5D5D5F5F5F61615F5F6161605E5D5D5D5D5D5D5D5D5E5D5A5A5C5E5E5E5D5E5E5D5A5C5C5C5C5C5D5B5A5B5B5D5D5C5A58585A5B5D5B5B5A5A585A5A5B5B5C5A5A5A5A5A5A5A5A5C5C5C5B5A5D5E5E5F5E5D5D5D5D5B5D5C5C5C5C5C5E5C5E5F5E5F5F5F5F5F5F5F5F5E5E5C5E5C5A5A5A5C5E5D5D5D5E5F5F5F5D5F60616161615F6060606163616060606160616363636161646567676564646565656567676767656567656465646567676765656765656464636364636161636361616161616161616161616061615F605F5F60606160616161616060615F5D5C5C5B5A5B5B5B5B5B5B585B5A58585858585B5B5B5B5D5D5B5A5A5A5858585858585858585A5B5A5B58585B5D5C5C5D5F5F615F5F5E5F5F5F5E5F5F61616364636464636361636364636161606060616161616163636464646464646363636464646364656564636363636361616163616161605F1601010101010101010101015388888888888888888888888888888889898989898989898989898A8A8A8A8A8A8A8A8B8B8B8B8B8C8C8D8D8D8D8E8E8E8E8F8F8F909091919292929393949494959696979797989899999B9B9C9C9D9D9E9FA0A0A1A1A2A3A4A5A5A6A7A8A9A9AAABACADAEAFAFB0B1B2B3B4B5B6B7B8B9B9BBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCDCECFD0D0D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E2E4E5E5E6E7E8E9EAEAEBECECEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F8F7F7F6F5F5F5F4F3F3F2F2F1F0F0EFEEEEEDECEBEAEAE9E8E7E6E5E5E4E2E2E1E0DEDEDDDCDBD9D9D8D7D6D4D3D2D2D0CFCECDCCCBCAC9C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEAEADABABAAA9A8A8A6A6A5A4A4A2A2A1A0A09F9E9D9D9C9C9B9A99999898979796969594949393939292919191908F8F8F8E8E8E8D8D8D8C8C8B8B8B8B8A8A8A8A8A898989898989888888888888888887878787878686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686776A6C6A6A6C6C6A69696B727E675E605D605E5C5B5A5A5858585A5B5B5A5A5856565656565757565757575758575A5A5A5757585B5B5C5C5A5A5A585856565656555553545556565656545653535454515356565351515150504F4D4D4F4F514F50514F4D4F4F5153535353545453535454545353565355565757575A5A5C5C5A5A5C5C5A5C5C5D5E5E5E5E605D5D5D5D5D5D5D5F606161616161636363616364646565676567676767656465656565646767656567656363636564646461646565646461616060616363636363636161606163636465656765656767656465676565656464616161616161616163636463646463616161616161616160605E5D5C5C5D5D5D606060606060616164646464616464646461616060616461616061616364656564646164656565656464636161616060606060606060605E60605E5E5E60605D5E5D5D5D5D5D5D5E5E5E5D5D5D5D5D5D5E5E5E605F5D5F5F5D5D5D5D5F5F60616164646461616160606160605D5D5D5E60615F6061606161636363616363636361616161616163636161646163646464646467676769676767656565676565676567676767676767676A6A6969676767676767676767676567676A67676A6A676767656564616160606060605F5E5D5E5F5F5D5D5C5B5B5B5B5B5D5D5D5D5D5D5F5D5D5E5E5F5D5D5D5D5F5D5E5D5D5C5E5E5D5D5C5D5D5D5B5A585A5A5A5B5B5B5A5C5C5B5D5D5D5B5B5C5B585A575A5A5A5A5758585A5A585858565856565658565656585A5A5A57575A5B5C5C5E5D5D5D5E5F5F5F60616161646161605F5F5D5C5C5B5A585A5C5C5C5B5B5B5B5B5B5D5D5D5D5F5D5D5F5D5D5D5C5C5C5E5E5E5D5D5C5C5C5D5D5D5C5C5C5C5D5D5D606060616061616163616161616161616160616161616161616060606161616163616161616161611801010101010101010101015186868686868686868686868686868686868686878787878788888888888888888989898989898A8A8A8A8A8B8B8B8B8C8C8D8D8D8E8E8E8F8F8F90919191929293939394949596969797989899999A9B9B9C9D9D9E9FA0A0A1A2A2A3A4A5A6A6A8A8A9AAABABADADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C9CACBCCCDCECFD0D1D2D3D4D6D7D8D8D9DBDCDDDEDEE0E1E1E2E4E4E5E6E7E8E9EAEAEBECECEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F8F7F7F7F6F5F5F4F4F3F2F2F1F0F0EFEEEEEDECEBEAEAE9E8E7E6E5E4E4E2E1E1E0DEDDDCDCDBD9D8D7D6D5D4D3D2D1D0CFCECDCBCAC9C8C7C6C5C4C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADADABAAAAA9A8A7A6A5A5A4A3A2A1A0A09F9F9D9D9C9C9B9A999998989796969594949393939292919190908F8F8E8E8E8D8D8D8C8B8B8B8B8A8A8A8A8989898988888888888787878686868686868686858585858585858585858585848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484736463656463646465656367745D5454555656555656565658585858565858585A5858585858565658585858565656565452525151514E4E4E4D4D4E4E4F515251515251515154545452515152515151515255555656565656545151545555525050504E4E4E50514F5152525254545454525254545251525454545654515151515151514F4F515151515454525151515152555658585656585655565655555655525252545252545452545152525456565456565656565555545556545456565656565656585656585858585656565655555454555658585858585A5856585856565858585A5A5858585858585A5A58585A5C5C5B5B5B5A5A585A5B5B5A5B5D5D5D5D5E5E5F5F5F5F5D5D5D5C5B5C5A5C5C5D5D5B5D5D5E5C5B5B5B5B5B5D5B5B5D5B5A5A5A5A5A5A5A585A5A5A5C5A585A5A5A585A5A5A5A585A5A5A5A5A5A5A5B5D5D5D5E5F5E5F5D5B5A5B5A5A5B5A585656585A5858565656565656585858585A5A58585858565656585A5A5A5A58585A5A5B5A5858585A5A5B5C5D5D5D5D5F5D5D5F5F5F5F5F5F5F5D5B5B5D5D5D5D5D5C5E5F5F625F6262626362626262626161626262626363636364646567696A6A6C6D6E707070706F7272727272716E716E6E6F6D6D6D6E6E6C6E70706F6E6E6E7071716E70706E6E706E6D6D6D6D6D6C6D6B6B6B6C6C6A696969696A696A6D6D6D6E6D6D6E6D6B6A67676767676765676765636364646564646363606060606060615F5F5F5F5E5E5D5D5D5B5B5B5B5B5B5B5D5D5B5D5D5C5E5D5D5D5D5F5F5F5E5E5F5F5F5E5E5F5F5D5D5E5F6060625F5F5F5F5D5E5E5D5B5B5B5D5D5D5E5F5F5F5F5F5F5F5F5F5E5E5F6062646564636363646465676767676767676565656765646464646465646565656567676767676767676765646467676767676967676765656567676767676718010101010101010101010150848484848484848484848484848485858585858585858585858586868686868686868787878888888888898989898A8A8A8A8B8B8B8B8C8D8D8D8E8E8E8F8F909091919292939393949495969697979899999A9B9B9C9D9D9E9FA0A0A1A2A2A4A4A5A6A7A8A9AAAAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C4C5C6C7C8C9CACBCDCECFD0D0D2D3D4D5D6D7D8D9DBDBDCDDDEE0E0E1E2E4E4E5E6E7E8E9EAEAEBECECEEEEEFF0F0F1F2F2F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F7F7F7F6F5F5F4F4F3F3F2F1F0F0EFEEEEEDECEBEAEAE9E8E7E6E5E4E4E2E1E0E0DEDDDCDBDAD9D8D7D6D5D4D3D2D0CFCECDCCCBCAC9C7C6C5C4C3C2C1C0BFBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A9A8A7A6A5A4A3A2A1A1A09F9F9E9D9C9C9B9A9999989897969695949493939292919190908F8F8E8E8D8D8D8C8C8B8B8B8A8A8A8989898888888887878686868686868585858585858484848484848484848383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383836F616164646464656567676D7B655C5A5A5A5A5B5B5C5D5E5D5E5F5E5F5F5F605F5F60605F5F5F5F5F606264646363615F5F5F6161615F5F5D5B5A5A5A5A585A58585B5B5B5B5A5B5B5A5A5A5A5A5A5A585858565858565858585858565656565858585858585A5A5858565858565656565454565858585A5A58565556565654565554535353545454545454545656565656565658585A585858585A5A5D5E5F5F5F5F5F5F60606061605F615F5E5E5E5E5E5D5A5A5A5A5B5C5C5D5D5D5F5E5E5F6160605F5F5F5F5F5F5F605F606063605F605F5E5E5E5E5E5D5B5C5A5A5C5E5F5F605F60606163636362636161626263636361615F5F606360625F615F5F5F605F5F5D5D5E5D5A5A5A5A585858585858585A5B5A5A585A5C5C5C5D5D5D5D5A5B5B5B5D5D5D5C5C5A5B5A5A5A5C5B5B5A5B5A5A5A5D5E5F605F5F5F5F5F5F5F5E5F5F5F5F5F5E5E5F5F5F5F5F5F5F626263636263636363636263636261636264626464646464646464636464636363636161616363626060616160605F5F61605F605F626361605F5F5F5F5F62626363636363626463625F5F5F5F5F5F5F5E5E5D5D5D5D5D5D5D5D5A5A585858565656585858585655555656565656565858565858565858585856545453545354545454545454565856585654565858585858565856545658585858565654545351515050504E4E4E4D4D4D4D4E505151515151505153545451505051505050515154545555545454545151535454514F4F4F4E4E4D4F504E5051515153545454515153545151515454545454515050515151514E4E5150505153535150505050515454565656565856545656545456545151515351515453515351515154555554545454555554545354545454545555555555555855565858585856565656545453535455585858585858585656561401010101010101010101014F83838383838383838383838383838383838383838383838484848484848484848585858585858586868686868787888888888989898A8A8A8B8B8B8B8C8D8D8D8E8E8F8F9090919192929393949495969697979899999A9B9C9C9D9D9F9FA0A1A1A2A3A4A5A6A6A8A9A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBFC0C1C2C3C4C5C6C7C9CACBCCCDCECFD0D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E4E4E5E6E7E8E9EAEAEBECEDEEEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F8F7F7F6F5F5F4F4F3F3F2F2F0F0EFEFEEEDECEBEAEAE9E8E7E6E5E4E4E2E1E0DFDEDDDCDBDAD9D8D7D6D4D3D2D1D0CFCECDCBCAC9C8C7C6C5C4C2C1C0BFBEBDBCBBB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A8A6A6A5A4A3A2A1A0A09F9E9D9C9C9B9B99999898979696959494939392929191908F8F8E8E8D8D8D8C8B8B8B8A8A8A89898988888888878786868686858585858484848484848383838383838382828282828281818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818175696A6C6A6D6D6E6E6F6F767D6961605E5E5E5D5D5D5D5C5C5C5C5C5B5B5B5B5B5858575756545454565656565554545555555555555856555656555656565654535351515153545453545454545655565554555656585656555655545456565656545454545150504F4F4F4D4D4D4C4B4C4C4D4F504E4E504E4F4E515151504F4F504F4F4F4E5053535454545454514E4E515353504D4D4D4D4D4C4D4F4D4F5050505151515150505151504E5051515154514E4F4F4E4E4E4E4D4D4E4F4F4E5151504F4F4F4F50535455555454565453545453535453505050515050515150514E505051545451545454545453535153545151545454545454545654545656565654545454535351515354565656565657565455555454565656585856565655555658575656585A5A58585857585657585857585A5A5A5A5C5C5D5D5C5C5B5A5A5A585A575A5A5B5B585B5B5C5A58585858585A58585A5857585858585858565858585A585657575756575858585658585858585857585B5B5A5C5C5C5C5B58585858585858565454565855555454545454545656555558585656565654545456585858585656585758575656565757585A5B5B5B5B5C5A5A5C5C5C5D5D5C5C5A58585B5B5B5B5A5A5C5D5D605D6060606060606060605F5F606060606060606061616464656767696A6B6D6D6D6D6D6E6E6E6E6F6E6B6E6B6B6D6A6A6A6C6C696C6D6D6D6C6C6C6D6E6E6B6D6D6B6B6D6C6A6A6A6A6A696A676767696967676765656767676A6A6A6C6A6A6C6A6767656464646464646464636161616163616160605E5E5E5E5E5E5F5D5D5C5C5C5C5A5A5A585858585858585A5A585A5A5A5C5B5B5B5B5D5D5C5C5C5D5D5D5C5C5C5C5B5B5C5D5E5E605D5D5C5C5B5C5C5A5858585A5B5B5C5D5D5C5C5C5C5C5C5C5C5C5D5E6061636160606061611701010101010101010101014D81818181818181818181818181818181818181818181818282828282828383838383838384848484848485858585868686868787888888888989898A8A8A8B8B8B8C8D8D8D8E8E8F8F90919191929293949495969697989899999A9B9C9C9D9E9FA0A0A1A2A3A4A5A5A6A8A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BBBCBDBEBFC0C1C2C4C5C6C7C8C9CACBCDCECFD0D1D2D3D4D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEAEBECEDEEEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F8F7F7F6F5F5F4F4F3F3F2F2F1F0EFEFEEEDECEBEBEAE9E8E7E6E5E4E4E2E1E0DFDEDDDCDBDAD9D8D7D6D4D3D2D1D0CFCDCCCBCAC9C7C6C5C4C3C2C1C0BFBDBCBBB9B8B8B7B6B4B3B2B1B0AFAEADACABAAA9A8A8A6A5A5A4A2A2A1A0A09F9E9D9C9B9B9A9998989797969594949393929191908F8F8F8E8E8D8D8C8B8B8B8A8A8A898989887267514636201B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141E333D4D616B8080808080808080808080808181818181818181828282828383838383848484848585858586868686878888888989898A8A8A8B8B8B8C8D8D8E8E8E8F8F9091919292939494959696979898999A9B9B9C9D9D9F9FA0A1A2A2A4A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B6B6B7B8B9BBBCBDBEBFC1C2C3C4C5C6C7C9CACBCCCDCECFD1D2D3D4D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEAEBECEDEEEFEFF0F0F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F5F4F4F3F3F2F2F1F0EFEFEEEDECEBEBEAE9E8E7E6E5E4E4E2E1E0DFDEDDDCDBDAD9D8D7D5D4D3D2D0CFCECDCCCBC9C8C7C6C5C4C2C1C0BFBEBCBBBAB9B8B7B6B4B3B2B2B0AFAEADACABAAA9A8A7A6A5A4A4A2A2A1A09F9F9D9D9C9B9A9999989797969694949393929191908F8F8E8E8D8D8D8C8B8B8A8A8A897E6E5747361B0B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A192D3D4C66757F7F7F7F7F7F7F80808080808080808181818181818282838383838484848485858585868686878788888989898A8A8A8B8B8C8D8D8D8E8E8F8F9091919293939494959697979899999A9B9C9D9D9F9FA0A1A1A2A4A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B6B7B8B9BABBBCBDBFC0C1C2C4C5C6C7C8C9CACCCDCECFD0D2D3D4D5D6D7D8D9DBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBEBECEDEEEFEFF0F1F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F7F7F7F6F5F5F4F4F3F2F2F1F0F0EFEEEDECECEBEAE9E8E7E6E5E4E4E2E1E0DFDEDDDCDBD9D8D7D6D5D4D3D2D0CFCECDCBCAC9C8C7C5C4C3C2C1C0BFBDBCBBB9B8B7B6B5B4B3B2B0AFAEADADABAAA9A8A8A6A5A4A4A2A1A1A09F9E9D9C9C9B9A99989897969695949393929291908F8F8E8E8D8D8C8B8B8B8A8A6E5842311B05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192D3C50657E7E7E7E7F7F7F7F7F7F7F8080808080808181818182828283838384848484858585868686878888888989898A8A8B8B8B8C8D8D8E8E8F8F90919292939394959696979898999A9B9C9C9D9E9FA0A1A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B2B3B4B5B6B7B8B9BBBCBDBEC0C1C2C3C4C5C6C8C9CACBCDCECFD0D2D3D4D5D6D7D8D9DBDCDDDEDFE0E1E2E4E4E5E6E7E8E9EAEBEBECEDEEEFEFF0F1F2F2F3F4F4F5F5F6F7F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F8F7F7F6F5F5F4F4F3F3F2F1F0F0EFEEEEECECEBEAE9E8E7E6E5E4E4E2E1E0DFDEDDDCDBD9D8D7D6D5D4D3D2D0CFCECDCBCAC9C7C6C5C4C2C1C0BFBEBDBBBAB9B8B7B6B4B3B2B1B0AFAEADABAAA9A9A8A6A5A4A4A2A1A1A09F9E9D9C9C9B9A99989797969594949392929191908F8E8E8D8D8C8B8B866E53422C16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001423374B64787D7D7D7E7E7E7F7F7F7F7F7F80808080818181818282838383838484848585858686868788888889898A8A8A8B8B8C8D8D8E8E8F8F91919292939494959697979899999B9B9C9D9E9FA0A1A1A2A4A4A5A6A8A8A9AAABADAEAFB0B1B2B3B4B6B7B8B9BABBBCBEBFC0C1C2C4C5C6C7C9CACBCDCECFD0D1D3D4D5D6D7D8D9DBDCDDDEDFE0E1E2E4E4E5E6E7E8E9EAEBECECEEEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F9F8F8F7F7F6F5F5F4F4F3F3F2F2F0F0EFEEEEECECEBEAE9E9E7E6E5E5E4E2E1E0DFDEDDDCDBD9D8D7D6D5D4D3D1D0CFCECCCBCAC9C7C6C5C4C2C1C0BFBDBCBBB9B8B7B6B5B4B3B2B0AFAEADACABAAA9A8A6A6A5A4A2A2A1A09F9E9D9C9B9B99999897969695949393929191908F8F8E8E8D8C8B7A64482C16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F2841546E7D7D7D7D7D7D7E7E7F7F7F7F7F8080808081818181828283838384848485858586868787888889898A8A8A8B8B8C8D8D8E8F8F90919192939394959696979899999B9B9C9D9E9FA0A1A1A2A4A5A5A6A8A9AAABACADAEAFB0B2B3B4B5B6B7B8B9BBBCBDBFC0C1C2C4C5C6C7C9CACBCCCDCFD0D1D2D4D5D6D7D8D9DBDCDDDEDFE0E1E2E4E5E5E6E7E8E9EAEBECECEEEEEFF0F0F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F8F7F7F6F5F5F4F4F3F2F2F1F0EFEFEEEDECEBEAEAE9E7E6E6E5E4E2E1E0DFDEDDDCDBD9D8D7D6D5D4D2D1D0CFCDCCCBCAC8C7C6C5C3C2C1C0BEBDBCBBB9B8B7B6B4B3B2B1B0AFADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9B999998979696949493929291918F8F8E8E8D8D75593D260B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A1E364F687C7C7D7D7D7D7D7E7E7F7F7F7F80808080818181818283838383848485858586868787888889898A8A8A8B8C8D8D8E8E8F8F919192929394949696979898999B9B9C9D9E9FA0A1A2A2A4A5A6A7A8A9AAABACADAEAFB1B2B3B4B6B7B8B9BBBCBDBEC0C1C2C3C4C6C7C8C9CBCCCDCED0D1D2D4D5D6D7D8D9DBDCDDDEDFE0E1E2E4E5E6E6E7E9E9EAEBECEDEEEFEFF0F1F2F2F3F3F4F5F5F6F7F7F7F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F5F4F4F3F3F2F1F0F0EFEEEDECEBEBEAE9E8E7E6E5E4E3E2E1E0DEDDDCDBD9D8D7D6D5D4D2D1D0CECDCCCBC9C8C7C5C4C3C2C0BFBEBDBBBAB9B8B6B5B4B3B2B0AFAEADABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9B999898979696949493929291908F8F8E8E7C5F432705000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051D3B546D7C7C7C7D7D7D7D7D7E7E7F7F7F7F8080808181818282838383848484858586868687888889898A8A8B8B8C8D8D8E8F8F909192929394949596979898999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABADAEAFB0B2B3B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C7C8C9CACCCDCED0D1D2D4D5D6D7D8D9DBDCDDDEDFE0E1E2E4E5E6E7E7E9EAEBEBECEDEEEFEFF0F1F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F7F7F7F6F5F4F4F3F3F2F2F0F0EFEEEEECECEBEAE9E8E7E6E5E4E3E2E1E0DEDDDCDBDAD8D7D6D5D4D2D1D0CECDCCCAC9C8C7C5C4C2C1C0BFBDBCBBBAB8B7B6B5B3B2B1B0AFAEACABAAA9A8A6A5A4A4A2A1A09F9F9D9C9B9B999998979696949493929291908F8F8E6B4A2D11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A28405E777C7C7C7D7D7D7D7D7E7E7F7F7F8080808081818182838383848484858586868787888889898A8A8B8C8D8D8E8E8F909192929394949696979898999B9B9C9D9E9FA0A1A2A3A4A5A6A8A9AAABACADAEB0B1B2B3B4B6B7B8B9BBBCBDBFC0C1C2C4C5C6C8C9CACCCDCED0D1D2D4D5D6D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E8E9EAEBECECEEEEEFF0F0F2F2F3F3F4F4F5F5F6F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F5F4F4F3F2F2F1F0EFEFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DEDDDCDBDAD9D7D6D5D4D2D1D0CECDCCCAC9C8C6C5C4C2C1C0BFBDBCBBB9B8B7B6B4B3B2B0AFAEADACAAA9A8A7A6A5A4A2A2A1A09F9D9D9C9B9A9998979696949493929291908F8366432200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D3B53717C7C7C7C7D7D7D7D7E7E7F7F7F7F808080818181828383838484858585868687888889898A8A8B8B8D8D8E8E8F909191929394949696979899999B9C9D9D9FA0A1A1A2A4A5A6A7A8A9AAABADAEAFB0B2B3B4B6B7B8B9BBBCBDBFC0C1C2C4C5C6C8C9CACCCDCED0D1D2D4D5D6D7D8DADBDCDDDEE0E1E2E3E4E5E6E7E8E9EAEBECECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F4F3F3F2F1F0F0EFEEEDECEBEAEAE9E7E6E5E5E4E2E1E0DFDDDCDBDAD9D8D6D5D4D3D1D0CECDCCCAC9C8C6C5C4C2C1C0BFBDBCBBB9B8B7B6B4B3B2B0AFAEADABAAA9A8A6A5A4A3A2A1A09F9E9D9C9B9A99989797969594939292919084603E170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014314F6C7B7C7C7C7C7D7D7D7D7E7E7F7F7F8080808181818283838384848585868686878888898A8A8B8B8C8D8E8E8F9091929293949496979798999A9B9C9D9E9FA0A1A2A3A4A5A6A8A9AAABADAEAFB0B2B3B4B5B7B8B9BBBCBDBFC0C1C2C4C5C6C8C9CACCCDCED0D1D2D4D5D6D8D9DADBDCDDDEE0E1E2E4E4E5E6E7E9EAEAEBECEDEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F5F4F3F3F2F2F1F0EFEEEEECECEBEAE9E8E7E6E5E4E2E1E0DFDEDDDCDAD9D8D7D5D4D3D1D0CFCDCCCAC9C8C6C5C4C2C1C0BFBDBCBAB9B8B6B5B4B2B1B0AFADACABAAA9A8A6A5A4A2A1A1A09F9D9C9C9B999898979695949392929185613E17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143653717B7C7C7C7C7D7D7D7D7E7E7F7F7F80808081818182838384848485858686878888898A8A8B8B8C8D8E8E8F9091929293949596979898999B9B9C9D9FA0A0A1A2A4A5A6A7A9AAABACADAEB0B1B2B4B5B6B8B9BABCBDBEC0C1C2C4C5C6C8C9CACCCDCED0D1D3D4D5D7D8D9DADBDDDEDFE0E1E2E4E5E6E7E8E9EAEBEBECEEEEEFF0F0F2F2F3F3F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F4F3F3F2F1F0EFEFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DEDDDCDBD9D8D7D6D4D3D2D0CFCDCCCBC9C8C6C5C4C2C1C0BEBDBCBAB9B7B6B5B3B2B1AFAEADACAAA9A8A7A6A5A4A2A1A09F9E9D9C9B9A9998979695949393928B6844220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143A59767B7B7C7C7C7C7D7D7D7E7E7F7F7F80808081818282838384848585868687888889898A8B8B8C8D8E8E8F90919293939495969798999A9B9C9D9E9FA0A1A2A3A4A6A7A8A9AAABADAEAFB0B2B3B4B6B7B9BABBBDBEC0C1C2C4C5C6C8C9CACCCDCFD0D1D3D4D6D7D8D9DBDCDDDEDFE1E2E3E4E5E6E7E8E9EAEBECEDEEEFEFF0F1F2F3F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F5F4F3F3F2F2F0F0EFEEEDECEBEAEAE9E7E6E5E4E3E2E1E0DEDDDCDBD9D8D7D6D4D3D2D0CFCECCCBC9C8C6C5C4C2C1C0BEBDBBBAB9B7B6B4B3B2B0AFAEADABAAA9A8A6A5A4A3A2A1A09F9D9C9B9B9998979796949493927F5128060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002240677B7B7B7C7C7C7C7D7D7D7E7E7F7F808080818181828383848485858686878888898A8A8B8B8C8D8E8F8F90919293949496969798999A9B9C9D9FA0A1A2A3A4A5A6A8A9AAABADAEAFB0B2B3B4B6B7B8BABBBDBEC0C1C2C4C5C6C8C9CBCCCDCFD0D2D3D4D6D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E9EAEAEBECEDEEEFF0F0F2F2F3F3F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F4F3F2F2F1F0EFEEEEECECEBEAE9E8E7E6E5E4E2E1E0DFDDDCDBDAD8D7D6D4D3D2D0CFCECDCBCAC8C7C5C4C2C1C0BEBDBBBAB8B7B6B4B3B2B0AFAEADABAAA9A8A6A5A4A2A1A09F9E9D9C9B9A999897969594938C694011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F3153767B7B7B7C7C7C7C7D7D7D7E7F7F7F8080808181828383838484858586878888898A8A8B8B8D8D8E8F8F919192939495969798999A9B9C9D9E9FA0A1A2A4A5A6A8A9AAABADAEAFB0B2B3B4B6B7B8BABBBDBEC0C1C2C4C5C7C8C9CBCCCECFD0D2D3D4D6D7D8D9DBDCDDDEE0E1E2E4E5E6E7E8E9EAEBECECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F5F4F3F3F2F1F0F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1DFDEDDDCDAD9D8D6D5D3D2D0CFCECDCBCAC9C7C5C4C2C1C0BEBDBBBAB8B7B6B4B3B2B0AFAEACABAAA9A7A6A5A4A2A1A09F9D9C9B9B9998979696949387582806000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022446B7B7B7B7B7C7C7C7D7D7D7E7E7F7F8080808181828383838484858686878888898A8A8B8C8D8E8E8F90919293939496969798999B9B9C9D9FA0A1A2A4A5A6A7A8AAABACAEAFB0B2B3B4B6B7B8BABBBDBEC0C1C2C4C5C7C8CACBCDCECFD0D2D3D5D6D7D9DADBDDDEDFE0E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F0F1F2F3F3F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F4F3F2F2F1F0EFEEEEECECEBEAE9E7E6E5E4E3E2E1E0DEDDDCDBD9D8D7D6D4D3D1CFCECDCBCAC9C7C6C4C2C1C0BFBDBBBAB8B7B6B4B3B2B0AFAEACABAAA8A7A6A4A3A2A1A09F9D9C9B9A9998979695947B4C1D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001840627A7B7B7B7B7C7C7C7D7D7D7E7F7F7F80808181828283838484858686878889898A8A8B8C8D8E8F8F909192939495969798999A9B9C9D9FA0A1A2A3A4A6A7A8A9ABACADAFB0B2B3B4B6B7B8BABBBDBEC0C1C2C4C6C7C9CACBCDCECFD1D2D4D5D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F3F3F2F1F0F0EFEEEDECEBEAE9E8E7E6E5E4E2E1E0DFDDDCDBD9D8D7D6D4D3D2D0CFCDCBCAC9C7C6C5C3C1C0BFBDBCBAB8B7B6B4B3B2B0AFADACABA9A8A7A5A4A3A2A19F9E9D9C9B9998989796947046120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F36587A7A7B7B7B7C7C7C7D7D7D7E7F7F7F80808181818283838485858686878889898A8B8B8D8D8E8F90919293939496979798999B9C9D9E9FA0A2A3A4A5A7A8A9AAACADAFB0B2B3B4B6B7B8BABBBDBFC0C1C3C4C6C7C9CACBCDCED0D1D3D4D6D7D8D9DBDCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAFAF9F9F8F8F8F7F7F6F5F4F4F3F3F2F1F0EFEEEEECEBEBEAE9E7E6E5E4E3E2E1DFDEDDDCDAD9D7D6D4D3D2D0CFCECCCAC9C7C6C5C3C2C0BFBDBCBAB9B7B6B4B3B2B0AFADACABA9A8A7A5A4A3A1A09F9E9D9C9B999897969576460B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000931587A7A7B7B7B7C7C7C7D7D7D7E7F7F7F808081818283838484858586868888898A8A8B8C8D8E8E8F919192939495969798999A9B9D9E9FA0A1A2A4A5A6A8A9AAACADAFB0B2B3B4B6B7B8BABCBDBFC0C1C3C5C6C7C9CACCCDCFD0D2D3D4D6D7D9DADBDDDEDFE1E2E3E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9FAFAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F3F3F2F2F0F0EFEEEDECEBEAE9E8E7E6E5E4E2E1E0DEDDDCDBD9D8D7D5D4D2D0CFCECDCBC9C8C6C5C4C2C0BFBDBCBBB9B7B6B4B3B2B0AFADACABA9A8A6A5A4A2A1A09F9E9C9B9A999897967747120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000930587A7A7B7B7B7B7C7C7C7D7D7E7F7F7F808081818283838484858586878888898A8B8B8D8D8E8F909192939495969798999A9B9C9D9FA0A1A2A4A5A6A8A9AAACADAFB0B2B3B4B6B7B9BABCBDBFC0C2C4C5C6C8C9CBCDCECFD0D2D4D5D7D8D9DBDCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F8F8F8F7F7F6F5F4F4F3F3F2F1F0EFEEEEECEBEBEAE9E7E6E5E4E3E2E0DFDEDCDBD9D8D7D6D4D3D1D0CECDCBCAC8C7C5C4C2C1BFBEBCBBB9B8B6B4B3B2B0AFAEACABA9A8A6A5A4A2A1A09F9D9C9B9A9998977847120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000935627A7A7A7B7B7B7C7C7C7D7D7E7F7F7F808081818283838484858686878889898A8B8C8D8E8F8F9192929394969798999A9B9C9D9FA0A1A2A4A5A6A8A9AAACADAFB0B2B3B4B6B7B9BBBCBDBFC1C2C4C5C7C8CACBCDCED0D1D3D4D6D7D8D9DBDCDDDFE0E1E3E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F3F3F4F4F5F6F7F7F8F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAFAF9F9F8F8F7F7F6F5F5F4F4F3F2F2F0F0EFEEEDECEBEAE9E8E7E6E5E4E2E1E0DEDDDCDAD9D7D6D5D3D2D0CFCDCCCAC9C7C6C4C2C1C0BEBCBBB9B8B6B5B3B2B0AFAEACABA9A8A6A5A4A2A1A09F9D9C9B9A98978A4E1E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F3F6B7A7A7A7B7B7B7C7C7C7D7D7E7F7F7F8080818182838484858586878888898A8B8B8D8E8E8F909192939495969798999B9C9D9FA0A1A2A4A5A6A8A9ABACAEAFB0B2B3B5B6B8B9BBBCBEC0C1C2C4C6C7C9CACCCDCFD0D2D3D4D6D7D9DADCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F3F3F2F1F0EFEEEEECECEBEAE9E7E6E5E4E3E1E0DFDDDCDBD9D8D7D5D4D2D1CFCECDCBC9C7C6C5C3C1C0BFBDBBB9B8B7B5B4B2B0AFAEADABAAA8A7A5A4A2A1A09F9D9C9B99989160290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D49707A7A7A7B7B7B7C7C7D7D7D7E7F7F8080818182838384848586868888898A8A8B8C8D8E8F909192939495969798999B9C9D9FA0A1A2A4A5A6A8A9ABACAEAFB0B2B3B5B7B8B9BBBDBFC0C1C3C5C6C7C9CBCCCECFD0D2D4D5D7D8D9DBDCDDDFE0E1E3E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F8F8F8F7F7F6F5F4F4F3F2F2F0F0EFEEEDECEBEAE9E8E7E6E5E4E2E1E0DEDDDCDAD9D7D6D4D3D2D0CECDCBCAC8C7C5C4C2C0BFBDBCBAB8B7B6B4B2B1AFAEADABAAA8A7A5A4A2A1A09F9D9C9B99986D3606000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000527577A7A7A7A7B7B7B7C7C7D7D7D7E7F7F8080818182838484858586878889898A8B8C8D8E8F909192939495969798999B9C9D9FA0A1A2A4A5A7A8AAABADAEAFB1B2B4B6B7B8BABCBDBFC0C2C4C5C6C8CACBCDCED0D1D3D4D6D7D8DADCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F8F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAFAF9F9F8F8F7F7F6F5F5F4F4F3F2F1F0EFEFEEECECEBEAE9E7E6E5E4E3E1E0DFDDDCDBD9D8D7D5D3D2D0CFCECCCAC9C7C6C4C2C1BFBDBCBBB9B7B6B4B3B1B0AEADABAAA9A7A6A4A3A1A09F9D9C9B998C4F12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F396A7A7A7A7A7B7B7C7C7C7D7D7E7F7F7F80818182838384858586878888898A8B8B8D8E8E8F9192939495969798999B9C9D9FA0A1A2A4A5A7A8AAABADAEAFB1B3B4B6B7B9BBBCBDBFC1C2C4C6C7C9CACCCDCFD0D2D3D5D6D8D9DBDCDDDEE0E1E2E4E5E6E7E9EAEBECECEEEFEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F5F4F3F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E2E1E0DEDDDCDAD8D7D6D4D3D1CFCECDCBC9C8C6C5C3C1C0BEBCBBB9B8B6B4B3B2B0AEADABAAA9A7A6A4A3A1A09F9D9C9B996731000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002151797A7A7A7B7B7B7C7C7C7D7D7E7F7F80808181828384848586868888898A8B8B8D8D8E8F9192939394969798999B9C9D9FA0A1A3A4A6A7A9AAABADAEB0B2B3B4B6B8B9BBBCBEC0C1C3C5C6C7C9CBCDCECFD1D3D4D6D7D8DADBDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F4F4F3F2F2F0F0EFEEEDECEBEAE9E7E6E5E4E3E1E0DFDDDCDBD9D8D6D5D3D2D0CFCDCBCAC9C7C5C4C2C0BFBDBBBAB8B7B5B3B2B0AFADACAAA9A8A6A5A3A2A09F9D9C9B86490C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F2C4C6097A2CEEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E9E9E9EAEBEAEAE9E9EEF8E6DEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D59B8282828282828282828282D0FFFFFFFFFFFFFFEDCEAD9760552C0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093569797A7A7A7B7B7B7C7C7D7D7E7E7F7F808181828384848585868788898A8A8B8D8D8E8F9191929394969798999B9C9D9FA0A1A3A4A6A7A9AAABADAFB0B2B3B5B7B8B9BBBDBFC0C2C4C5C7C8CACBCDCFD0D2D3D5D6D8D9DBDCDDDEE0E1E3E4E5E6E7E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F8F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F5F4F3F3F2F1F0EFEFEEECEBEAE9E8E7E6E5E4E2E1E0DEDDDCDAD8D7D6D4D3D1CFCECDCBC9C7C6C4C2C1BFBDBCBBB9B7B6B4B2B0AFAEACAAA9A8A6A5A3A2A09F9D9C9B6E3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001935608DADCEF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEEEEFEEEFEFF1F1F1F6FDEEE9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADA9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEAD8D6035190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215779797A7A7A7B7B7C7C7C7D7D7E7F7F808081828383848585868788898A8A8B8D8D8E8F9191929394969798999B9C9D9FA0A2A3A5A6A8A9AAACAEAFB0B2B4B6B7B8BABCBDBFC1C2C4C6C7C9CBCCCECFD1D2D4D6D7D8DADBDDDEE0E1E2E4E5E6E7E8E9EAEBECEEEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAFAF9F9F8F8F7F7F6F5F5F4F3F3F2F1F0EFEEEDECEBEAE9E8E6E5E4E3E2E0DFDDDCDBD9D8D6D5D3D2D0CFCDCBCAC8C6C5C3C1C0BEBCBBB9B8B6B4B3B1AFAEADABA9A8A6A5A4A2A19F9E9C955618000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C5582ADCEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7E7E7E6E7E7E6E7E7E7EAF6E4DBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEAD82552C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F436F797A7A7A7B7B7B7C7C7D7D7E7F7F80808181838384848586878889898A8B8C8D8E8F9191929395969798999B9C9D9FA0A2A3A5A6A8A9ABACAEAFB1B3B4B6B8B9BBBCBEC0C1C3C5C6C8CACBCDCED0D2D3D5D6D8D9DBDCDDDFE0E2E3E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F4F4F3F2F2F0F0EFEEEDECEBEAE9E7E6E5E4E2E1E0DEDDDCDAD9D7D6D4D3D1CFCECCCAC9C7C5C4C2C0BFBDBCBAB8B7B5B3B2B0AEADABAAA8A6A5A4A2A1A09E9D823E06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000235582ADD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDCDEDEDCDBDBDADBDBDCE2EEDBD3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D59B8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9AD8D552C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052B6078797A7A7A7B7B7C7C7D7D7D7E7F80808181828384848586878889898A8B8C8D8E8F91929394959697989A9B9C9E9FA1A2A4A5A6A8AAABADAEB0B2B3B5B7B8B9BBBDBFC0C2C4C5C7C9CACCCECFD1D2D4D6D7D8DADCDDDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F8F7F7F6F5F4F4F3F2F1F0EFEEEEECEBEAE9E8E7E6E5E4E2E1DFDEDCDBD9D8D7D5D3D2D0CFCDCBCAC8C6C5C3C1C0BEBCBBB9B7B6B4B2B0AFAEACAAA9A7A6A4A2A1A09F9D772B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007356097CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAEAEAEAEAE9E9E9E9E9EEF8E7DEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE976A35070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D577879797A7A7B7B7B7C7C7D7D7E7F7F808181828384848586878889898A8B8C8D8E8F91929394959698999A9C9D9EA0A1A2A4A5A7A9AAABADAFB0B2B4B6B7B9BBBCBEC0C1C3C5C6C8CACBCDCED0D2D3D5D6D8D9DBDCDEDFE1E2E3E5E6E7E8E9EAEBECEEEEEFF0F1F2F3F4F4F5F6F7F7F8F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F5F4F3F3F2F1F0EFEEEDECEBEAE9E7E6E5E4E3E1E0DEDDDCDBD9D7D6D4D3D1CFCECCCAC9C7C5C4C2C0BFBDBBB9B8B6B4B3B1AFAEADABA9A8A6A5A3A1A09F97641900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007356AADD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF1F1F2F2F1F1F1EFEFEEF3FBEBE4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE19F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3AD75350700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013487378797A7A7A7B7B7C7C7D7D7E7F7F808181828384848586868889898A8B8D8D8E8F91929394959798999B9C9D9FA0A1A3A5A6A8A9ABACAEAFB1B3B4B6B8B9BBBDBFC0C2C4C5C7C9CACCCECFD1D3D4D6D7D9DBDCDDDEE0E1E3E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFAFAF9F9F8F8F7F7F6F5F5F4F3F3F2F0F0EFEEEDECEBEAE9E7E6E5E4E2E1E0DEDDDBDAD8D7D5D3D2D0CFCDCBCAC8C6C5C3C1C0BDBCBAB8B7B5B3B2B0AFADABAAA8A6A5A4A2A19F91510C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000236097CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E6E4E4E6E7E6E7E7EAEEF7E6DEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDB9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9A2602C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009396F78797A7A7A7B7B7C7C7D7D7E7F7F808081828384848586868889898A8B8D8D8E8F91929394969798999B9C9D9FA0A2A4A5A6A8AAABADAEB0B2B3B5B7B8BABCBDBFC1C2C4C6C8CACBCDCFD0D2D3D5D7D8D9DBDDDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F0F2F3F3F4F4F5F6F7F7F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F4F4F3F2F2F0EFEFEEECEBEAE9E8E7E6E5E3E2E0DFDDDCDBD9D8D6D4D3D1CFCECCCAC9C7C5C4C2C0BFBDBBB9B8B6B4B2B0AFAEACAAA9A7A6A4A2A1A092450600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074075B9F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E4E4E6E7E7E7E9E7E9EEF8E7E1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDB9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B9824007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000535657879797A7A7B7B7B7C7C7D7D7F7F808081828384848586868889898A8B8D8E8E8F919293949697989A9B9D9EA0A1A2A4A5A7A9AAACADAFB0B2B4B6B7B9BBBDBFC0C2C4C5C7C9CACCCECFD1D3D4D6D7D9DBDCDDDFE0E2E3E4E6E7E8E9EAEBECEEEFEFF0F2F2F3F4F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F4F4F3F2F1F0EFEEEDECEBEAE9E7E6E5E4E3E1E0DEDDDCDAD8D7D6D4D2D0CFCDCBCAC8C6C5C3C1C0BDBCBAB8B7B5B3B2B0AEADABA9A8A6A5A3A1A085390600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F4C8DC4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F3F3F4F4F4F3F4F3F3F9FFEEEAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D09B8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE8D4C0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B657879797A7A7B7B7B7C7C7D7D7F7F8080818283848485868788898A8A8B8D8E8F90919293959697999A9C9D9FA0A1A3A5A6A8A9ABADAEB0B2B3B5B7B8BABCBDBFC1C3C5C6C8CACBCDCFD0D2D4D5D7D8DADCDDDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F8F7F7F5F5F4F3F3F2F1F0EFEEEDECEBEAE9E7E6E5E4E2E1E0DEDCDBD9D8D6D5D3D2D0CECDCBC9C7C6C4C2C0BFBDBBB9B8B6B4B2B0AFADABAAA8A7A5A4A2A1853900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074C8DD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFEFEFEEEEEEEEEEEEEFF4FBEAE4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D99C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD98D4C0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B5B7878797A7A7A7B7B7C7C7D7D7F7F8080818283848485868788898A8B8B8D8E8F90919394959798999B9C9D9FA0A2A4A5A6A8AAABADAFB0B2B4B6B7B9BBBDBFC0C2C4C5C7C9CBCDCED0D2D3D4D6D8D9DBDCDEDFE1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F5F4F3F3F2F0F0EFEEEDECEBEAE8E7E6E5E3E2E0DFDDDCDBD9D7D6D4D3D1CFCECCCAC8C6C5C3C1C0BEBCBAB8B7B5B3B2AFAEACAAA9A8A6A4A2A17A330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074082C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E6E4E4E4E4E3E6E6E6E9F4E2DADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD99C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE82400700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5B7878797A7A7A7B7B7C7C7D7D7F7F8080818283848485868788898A8B8C8D8E8F91929394969798999B9C9EA0A1A2A4A6A8A9AAACAEAFB1B3B5B7B8BABCBDC0C1C3C5C6C8CACBCDCFD0D2D4D6D7D9DBDCDDDFE0E2E3E5E6E7E8E9EAEBECEEEFF0F0F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F4F3F2F2F0EFEFEEECEBEAE9E8E7E5E4E3E1E0DEDDDCDAD8D7D5D3D2D0CECDCBC9C7C6C4C2C1BFBDBBB9B8B6B4B2B0AFADABAAA8A6A5A3A2862600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000196AB9F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEAEAEAEAEAEBEAECECF2F9EAE2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDE9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB97523000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5B7878797A7A7A7B7B7C7C7D7D7F7F8080818283848485868788898A8B8C8D8E8F919293949697999A9C9D9FA0A2A3A5A6A8AAABADAFB0B2B4B6B7B9BBBDBFC0C2C4C6C7C9CBCDCED0D2D3D5D7D8DADCDDDEE0E1E3E4E5E6E8E9EAEBECEEEFEFF0F2F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F4F3F2F1F0EFEEEDECEBEAE9E7E6E5E4E2E1E0DEDDDBD9D8D6D4D3D1CFCECCCAC9C7C5C4C1C0BEBCBBB8B7B5B3B2AFAEACAAA9A7A5A4A28739000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007408DE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E2E1E1E1E1E1DFE1E1E1E4EEDED7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDE9F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3974C0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5B7878797A7A7A7B7B7C7C7D7D7F7F8080818283848585868788898A8B8D8E8F90919294959698999B9C9D9FA1A2A4A5A7A9AAACAEAFB1B3B5B7B8BABCBEC0C1C4C5C7C9CACCCECFD1D3D4D6D8D9DBDCDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAFAF9F9F8F8F7F7F6F5F4F4F3F2F1F0EFEEEDECEBEAE9E7E6E5E4E2E1DFDDDCDBD9D7D6D4D2D0CFCDCBCAC8C6C5C2C1BFBDBBB9B8B6B4B2B0AFADABAAA8A6A5A3873A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F60B9F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDEDFDEDFE1E1E1E1E1E1E7F2E2DADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DF9F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB96019000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C657878797A7A7A7B7B7C7C7D7D7F7F8081818283848585868889898A8B8D8E8F919293949697989A9B9D9EA0A1A3A5A6A8A9ABADAFB0B2B4B6B8B9BBBDBFC1C2C4C6C8CACBCDCFD0D2D4D6D7D9DBDCDDDFE1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F6F5F4F3F3F2F1F0EFEEEDECEBEAE8E7E6E4E3E2E0DEDDDCDAD8D7D5D3D2D0CECDCBC9C7C6C4C2C0BEBCBBB9B7B5B3B2B0AEACAAA9A7A5A4883A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002375CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAECECEAEBEAEAEBECECF1F9E9E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE752C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B657878797A7A7A7B7B7C7C7D7D7F7F80818183838485868688898A8B8C8D8E8F919293959697999B9C9D9FA0A2A4A5A7A9AAACAEB0B2B3B5B7B9BBBCBEC0C2C4C5C7C9CBCDCED0D2D3D5D7D8DADCDDDEE0E1E3E4E6E7E8EAEBECEDEEEFF0F1F2F3F3F4F5F5F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F9F8F8F7F7F5F5F4F3F3F2F0F0EFEEECEBEAE9E8E7E5E4E2E1E0DEDDDBD9D8D6D4D3D1CFCECCCAC9C7C5C3C1BFBDBCBAB8B6B4B3B1AFADABAAA8A6A5964700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C82E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E6E7E7E9E7E9E9E7E7ECF7E6DEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3824000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B6F7878797A7A7A7B7B7C7C7D7E7F7F80818183838485868788898A8B8C8E8F90919394959798999B9C9EA0A1A3A4A6A8AAABADAFB0B3B4B6B8B9BCBDBFC1C3C5C6C9CACCCECFD1D3D4D6D8D9DBDDDEE0E1E2E4E5E7E8E9EAEBECEEEFF0F0F2F3F3F4F5F5F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F5F4F3F3F2F0EFEFEEECEBEAE9E7E6E5E4E2E1E0DEDCDBD9D8D6D4D3D0CFCDCBCAC8C6C4C2C1BFBDBBB9B7B6B4B2B0AEADABA9A7A59E4E060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C82E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E7E9E9E9E7E7E7E6E6E4E9F3E2DADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBA48282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3822C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005346F7878797A7A7A7B7B7C7D7D7E7F7F80818283848485868788898A8B8D8E8F919293949697999A9C9D9FA0A2A4A5A7A9AAADAEB0B2B3B6B7B9BBBDBFC0C2C4C6C8CACBCDCFD0D2D4D6D7D9DBDCDEE0E1E2E4E5E6E7E9EAEBECEEEFEFF0F2F2F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F5F4F3F2F2F0EFEEEEECEBEAE9E7E6E5E4E2E1DFDDDCDBD9D7D6D4D2D0CECDCBC9C7C5C4C2C0BEBCBAB8B7B5B3B1AFAEABAAA8A69F5B0D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C82E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E9E9E9E9EAEBECEFEEF2FBEBE4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DF9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3822C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000943737878797A7A7A7B7C7C7D7D7E7F80808182838485868688898A8B8C8D8E90919294959798999B9C9EA0A1A3A5A6A8AAABADAFB1B3B4B7B8BABCBEC0C2C4C5C7C9CBCDCED0D2D4D6D7D9DBDCDDDFE1E2E4E5E6E7E9EAEBECEDEEEFF0F2F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F4F3F2F1F0EFEEEDECEBEAE9E7E6E5E3E2E0DEDDDCDAD8D7D5D3D2D0CECCCAC9C6C5C3C1BFBDBBB9B8B6B4B2B0AFADABA9A8A56F1A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001975E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E9E9EAE9E9E7E9E7E7ECF7E7DFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D79C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE38219000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E4C787878797A7A7B7B7C7C7D7D7E7F80808182838485868788898A8B8D8E8F919293949697989A9C9D9FA0A2A4A5A7A9ABADAEB0B2B4B6B8B9BBBDBFC1C3C5C6C9CACCCED0D2D3D5D7D8DADCDDDEE0E2E3E5E6E7E9EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F4F3F2F1F0EFEEEDECEBEAE8E7E6E4E3E1E0DEDDDBD9D8D6D4D3D1CFCECCCAC8C6C4C2C0BFBDBBB9B7B5B3B2B0AEACAAA9A68A270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F60C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E1E2E1E2E3E3E3E3E3EAF4E3DBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADA9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE600F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5F787878797A7A7B7B7C7C7D7E7F7F80818183848485868788898A8C8D8E8F919294959798999B9C9EA0A1A3A5A6A8AAACAEAFB2B3B5B7B9BBBDBFC0C2C4C6C8CACBCECFD1D3D4D6D8D9DBDDDEE0E1E3E4E6E7E8EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F4F3F2F1F0EFEEEDECEBE9E8E7E5E4E2E1E0DEDDDBD9D8D6D4D2D0CFCDCBC9C7C6C4C2C0BEBCBAB8B6B4B3B1AFADABAAA899420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004CADF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDEE1E2DFE1E1DEDEDEDEE3EBDED7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDB9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB94C0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B6E787879797A7A7B7B7C7C7D7E7F80808182838485868688898A8B8D8E8F909293949697989A9C9D9FA1A2A4A6A8A9ABADAFB0B3B4B6B8BABCBEC0C2C4C5C7C9CBCDCFD0D2D4D6D8D9DBDCDEE0E1E2E4E5E7E8E9EBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F3F3F2F1F0EFEEECEBEAE9E8E6E5E4E2E1E0DEDCDBD9D7D6D4D2D0CECDCBC9C7C5C3C1BFBDBCB9B8B6B4B2B0AEADABA9A05D0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000238DEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F3F3F2F1F2F1F1F1F2F6FCECE6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED8D2300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053E72787879797A7A7B7B7C7D7D7E7F80808182838485868788898A8B8D8E8F919294959798999B9D9EA0A1A3A5A7A9AAADAEB0B2B4B6B8B9BBBDBFC1C3C5C7C9CBCDCED0D2D4D6D7D9DBDCDEDFE1E2E4E5E6E8E9EAEBECEEEFF0F1F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F3F3F2F1F0EFEEECEBEAE9E7E6E5E4E2E1DFDDDCDAD8D7D5D3D2D0CECCCAC9C6C5C2C1BFBDBBB9B7B5B3B1AFAEACAAA8781B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000755C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E2E2E2E1E2E2E2E2E1E1E6EFDED7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDB9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE60070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E51777878797A7A7B7B7C7C7D7E7F7F808182838484858688898A8B8C8E8F909293949697999A9C9D9FA1A2A4A6A8AAABAEAFB1B3B5B7B9BBBDBFC1C2C5C6C9CACCCED0D2D3D5D7D8DADCDDDFE1E2E4E5E6E7E9EAEBECEEEFF0F1F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F3F3F2F0F0EFEEECEBEAE9E7E6E5E4E2E0DFDDDCDAD8D7D5D3D1CFCECBCAC8C6C4C2C0BEBCBAB8B7B4B3B0AFADABA994350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C97F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFDFDFE1DFDFE1E1E1E3ECDCD6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADA9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6972C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002164787878797A7A7B7B7C7C7D7E7F80808182838485868788898A8B8D8E8F919294959798999B9D9FA0A2A4A5A8A9ABADAFB0B3B4B6B8BABCBEC0C2C4C6C8CACBCECFD1D3D5D7D8DADCDDDEE0E2E4E5E6E7E9EAEBECEEEFF0F0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F3F2F0EFEFEEECEBEAE9E7E6E5E3E2E0DEDDDBD9D8D6D4D3D1CFCDCBC9C7C6C4C2C0BEBCBAB8B6B4B2B0AEACAAA25706000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000755C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EFEFEFF1F1F1EFEEEFF1F6FCECE4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE550700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053972787878797A7A7B7C7C7D7D7F7F808181838484858688898A8B8C8E8F909293949697999B9C9EA0A1A3A5A6A9AAACAEB0B2B4B6B8B9BCBDC0C1C4C5C7C9CBCDCFD1D3D4D6D8D9DBDDDEE0E2E3E5E6E7E9EAEBECEEEFEFF0F2F3F3F4F5F5F7F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F3F2F0EFEEEDECEBEAE9E7E6E5E3E1E0DEDDDBD9D8D6D4D2D0CFCDCBC9C7C5C3C1BFBDBBB9B7B6B3B2AFAEABAA791B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F82EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAEBECEBEBECEBEBECECF2F9E9E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDC9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED8D19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E51777878797A7A7B7B7C7C7D7E7F80808182838485868788898A8B8D8E8F9192949697989A9C9D9FA1A2A4A6A8AAABAEAFB1B3B5B7B9BBBDBFC1C3C5C7C9CBCDCFD0D2D4D6D8D9DBDDDEE0E1E3E5E6E7E9EAEBECEDEEEFF0F2F3F3F4F5F5F7F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFAFAF9F9F8F8F7F7F5F5F4F3F3F2F0EFEEEDECEBEAE9E7E6E4E3E1E0DEDCDBD9D7D6D4D2D0CECDCAC9C7C5C3C1BFBDBBB9B7B5B3B1AFADAB9C360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEAEAEAECEEEEEFEEEFF4FCECE6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1A58383838383838383838383D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002669787878797A7A7B7B7C7D7D7E7F808181838484858688898A8B8C8E8F919293949698999B9D9FA0A2A4A5A7A9ABADAFB1B3B5B7B9BBBDBFC1C2C5C6C9CACDCED0D2D4D6D7D9DBDCDEE0E1E3E4E6E7E9EAEBECEDEEEFF0F2F2F3F4F5F5F7F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F2F2F0EFEEEDECEBEAE8E7E6E4E2E1E0DEDCDBD9D7D6D3D2D0CECCCAC8C6C4C2C0BFBCBAB8B6B4B2B0AEADAA650D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7E7E9E6E7E6E6E7E6E6EBF6E6DCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E19F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD955070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054777787878797A7A7B7C7C7D7E7F7F808182838485868788898A8B8D8E909193949697999B9C9EA0A1A3A5A7A9AAADAEB0B2B4B6B8BABCBEC0C2C4C6C8CACCCED0D2D3D6D7D9DBDCDEE0E1E2E4E6E7E8EAEBECEDEEEFF0F2F2F3F4F5F5F6F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F6F5F5F4F3F2F2F0EFEEEDECEBEAE8E7E5E4E2E1E0DEDCDBD9D7D5D3D2CFCECBCAC8C6C4C2C0BEBCBAB8B6B4B2B0AEAC8F2F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F6AEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E4E3E3E4E4E6E6E4E4EAF4E2DADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D69B8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED750F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864777878797A7A7B7B7C7C7D7E7F808181838484858688898A8B8D8E8F9192939597989A9C9D9FA1A2A4A6A8AAACAEB0B2B4B6B8B9BCBEC0C2C4C6C8CACBCECFD2D3D5D7D9DBDCDDDFE1E2E4E5E7E8E9EBECEDEEEFF0F2F2F3F4F5F5F6F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F6F5F5F4F3F2F2F0EFEEEDECEBE9E8E7E5E4E2E1DFDDDCDAD8D7D5D3D1CFCDCBC9C7C6C4C1C0BDBBB9B7B6B3B2AFAEAB590700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198DF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDEDEDFDEDFE1DFE1E1E1E3ECDBD3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFC8BCBCBABABCBCBC836A6A6A6A6A748282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6972300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053972787878797A7A7B7C7C7D7D7F7F808182838485868788898B8C8D8F909293949698999B9D9FA0A2A4A6A8AAABAEAFB2B3B6B7B9BBBDBFC1C4C5C7C9CBCDCFD1D3D5D7D8DADCDDDFE1E2E4E5E6E8E9EBECEDEEEFF0F2F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F6F5F5F4F3F2F2F0EFEEEDECEBE9E8E6E5E4E2E1DFDDDCDAD8D7D4D3D1CFCDCBC9C7C5C3C1BFBDBBB9B7B5B3B1AFAD89220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEEEEEEEEECEBEBEAEAEEF9E9E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFB7B79E8E8E6262603F3736360F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F12323D3D476F6F79A1A1B5D3DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA22300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000135F777878797A7A7B7B7C7C7D7E7F808181838485858688898A8B8D8E8F9193949697999B9C9EA0A1A4A5A7A9ABADAFB1B3B5B7B9BBBDBFC1C3C5C7C9CBCDCFD1D3D4D7D8DADCDDDFE1E2E4E5E6E8E9EBECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F6F5F5F4F3F2F2F0EFEEEDECEBE9E8E6E5E4E2E1DFDDDCDAD8D6D4D3D0CFCDCBC9C7C5C3C1BFBDBBB8B7B4B3B0AFAD52000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002CA2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1DFDEDEDEDFE1E1E3E9F3E1D9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDACBB392885D55352D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3D3D6579A1B5D3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB935000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003972777878797A7A7B7C7C7D7D7F808081828384858688898A8B8D8E8F9192939597989A9C9D9FA1A3A5A7A9ABADAFB0B3B4B7B8BBBDBFC1C3C5C7C9CBCDCFD0D3D4D6D8DADCDDDFE0E2E4E5E6E8E9EBECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F2F1F0EFEEEDECEBE9E8E6E5E4E2E0DFDDDCDAD8D6D4D2D0CFCDCAC9C6C5C2C0BFBCBAB8B6B4B2B0AE902200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEFEFEEEFEFEFEFEFEFF3FBEBE4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5B7A1885D44350F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3D5B79A1CAE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC435000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000135F77787878797A7B7B7C7D7D7E7F808182838485868788898B8C8D8F909293949698999B9D9FA1A2A4A6A8AAACAEB0B2B4B6B8BABCBFC0C2C5C6C9CACDCED0D2D4D6D8D9DBDDDEE0E2E4E5E6E8E9EAECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F2F1F0EFEEEDECEAE9E8E6E5E4E2E0DEDDDBD9D8D6D4D2D0CECDCAC8C6C4C2C0BEBCBAB8B6B4B2B0AE5A07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E3E3E3E2E1E1E2E1E1E1E6F1E2DADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2C7A27C553A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3D658DB5DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003972777878797A7A7B7C7C7D7E7F808081838484858688898A8B8D8E909193949697999B9C9FA0A2A4A6A8AAACAEB0B2B4B6B8BABCBEC0C2C4C6C8CACCCED0D2D4D6D8D9DBDDDEE0E2E4E5E6E7E9EAECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F2F2F0EFEEEDECEAE9E8E6E5E4E2E0DEDDDBD9D8D6D4D2D0CECCCAC8C6C4C2C0BEBCB9B8B6B3B2AF9222000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EFF1F1F2F3F3F3F3F3F3F7FDECE7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D1AA7F552C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3D6F98CAF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000135F777878787A7A7B7B7C7D7D7F7F8081828384858688898A8B8D8E8F9192949697989B9C9EA0A1A4A5A8A9ABADAFB2B3B6B7B9BCBDC0C2C4C6C8CACCCED0D2D4D6D8D9DBDDDEE0E2E4E5E6E7E9EAEBEDEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F2F2F0EFEEEDECEAE9E7E6E5E4E2E0DEDDDBD9D8D6D4D2D0CECCCAC8C6C4C2C0BDBBB9B7B5B3B1AF61070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E9E9E9E9E6E7E7E7E7ECF8E6DCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3DCB38053260F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F346598CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC43500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053E77777878797A7A7B7C7C7D7E7F808181838485868788898B8C8E8F9192939597989A9C9D9FA1A3A5A7A9ABADAFB1B3B5B7B9BBBDC0C2C4C6C7CACCCED0D2D4D6D7D9DBDDDEE0E2E4E5E6E7E9EAEBEDEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F8F7F7F5F5F4F3F2F2F0EFEEEDECEAE9E7E6E5E4E2E0DEDDDBD9D7D6D4D2D0CECCCAC7C6C4C1C0BDBBB9B7B5B3B1A1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEAEAE9EBEBEAEAEAEAEFF8E6DEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDABD95602E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3D79ACE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC435000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002169777878797A7A7B7B7C7D7D7F7F8081838384858688898A8B8D8E909293949698999B9D9FA1A2A5A6A9ABADAFB0B3B5B7B9BBBDBFC1C4C5C7CACCCED0D2D3D6D7D9DBDDDEE0E2E4E5E6E7E9EAEBEDEEEFF0F2F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F8F7F7F6F5F4F3F2F2F0EFEEEDECEAE9E7E6E5E4E2E0DEDDDBD9D7D6D3D2D0CECCCAC7C5C4C1BFBDBBB9B7B4B3B07E0E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAEAEAEAEAEBEAEAEAEBEFF8E7E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFCE91551F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2B6598DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA223000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055177777878797A7B7B7C7C7D7E7F8081828384858688898A8B8D8E8F9193949697999B9D9FA0A2A4A6A8AAADAEB0B3B4B7B9BBBDBFC1C3C5C7CACBCECFD2D3D6D7D9DBDDDEE0E2E3E5E6E7E9EAECEDEEEFF0F2F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F6F5F4F3F3F2F0EFEEEDECEAE9E7E6E5E4E2E0DEDDDBD9D7D6D3D2CFCECBCAC7C5C3C1BFBDBBB8B7B4B2A94C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F8DF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEFECEFEFEFF1F1F1F1F6FCECE6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEC085471D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F5B98E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B72777878797A7A7B7C7C7D7E7F8081818384858687888A8B8D8E8F9192949697999B9C9FA0A2A4A6A8AAACAEB0B2B4B6B8BBBDBFC1C3C5C7C9CBCECFD2D3D6D7D9DBDDDEE0E2E3E5E6E7E9EAECEDEEEFF0F2F2F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F6F5F4F3F3F2F0EFEEEDECEBE9E8E6E5E4E2E0DEDDDBD9D7D6D3D2CFCECBC9C7C5C3C1BFBDBBB8B6B4B2941C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000775F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEEEEEECECEEEEEFEFF4FCEAE4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDED098581D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2B6FB5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68D0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5F777778787A7A7B7B7C7D7D7F7F8081838384858788898A8C8E8F9192939597989A9C9EA0A2A4A6A8AAACAEB0B2B4B6B8BBBCBFC1C3C5C7C9CBCECFD2D3D5D7D9DBDDDEE0E2E3E5E6E7E9EAECEDEEEFF0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F6F5F4F3F3F2F0EFEEEDECEBE9E8E6E5E4E2E0DEDDDBD9D7D6D3D2CFCECBC9C7C5C3C1BFBCBAB8B6B4B27107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E7E7E7E7E6E7E9EAEBEEF8E6DFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1B2752F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F478DD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED6A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054277777878797A7B7B7C7C7D7E7F8081828384858688898A8B8D8E9092939597989A9C9DA0A1A3A5A8A9ABAEAFB2B4B6B8BABCBFC1C3C5C7C9CBCECFD1D3D5D7D9DBDDDEE0E2E4E5E6E7E9EAECEDEEEFF0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F3F2F0EFEEEDECEBE9E8E6E5E4E2E0DEDDDBD9D7D6D3D2CFCECBC9C7C5C3C1BFBCBAB8B6B4AB3F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E4E6E6E6E6E4E6E4E4E3E7F2E3DADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4DBA45A1D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2B6FC0F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD94000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002672777878797A7A7B7C7C7D7E7F8081828384858688898A8B8D8E909193949698999C9D9FA1A3A5A7A9ABADAFB2B4B6B8BABCBFC1C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E7E9EBECEDEEEFF0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F3F2F0EFEEEDECEBE9E8E6E5E4E2E0DEDDDBD9D7D6D3D2CFCDCBC9C7C5C2C1BFBCBAB8B6B38E1C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000019A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFEFF1EFF1F1EFEEEEEEF3FBEAE3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECDB964B0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F175BB5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB923000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5F777778787A7A7B7B7C7D7D7F8080818384858687888A8B8D8E8F9193949698999B9D9FA1A3A5A7A9ABADAFB1B3B6B8BABCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8E9EBECEDEEEFF0F2F3F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F8F7F6F5F4F4F3F2F0EFEEEDECEBE9E8E6E5E4E2E0DEDDDBD9D7D6D3D2CFCDCBC9C7C5C2C0BEBCBAB8B6B363070000000000000000000000000000000000000000000000000000000000000000000000000000000000000782F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBECEBECECEEEFF1F1EFF4FCECE6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFC78E470F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52A1EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D07000000000000000000000000000000000000000000000000000000000000000000000000000000000000054277777878797A7B7B7C7D7D7E7F8081828384868788898B8C8E8F9192949697999B9D9FA1A2A5A6A9ABADAFB1B3B6B8B9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8E9EBECEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F8F7F6F5F4F4F3F2F1F0EFEDECEBEAE8E6E5E4E2E0DEDDDBD9D7D6D3D2CFCDCBC9C7C5C2C0BEBCB9B8B6AC40000000000000000000000000000000000000000000000000000000000000000000000000000000000000004CE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E6E7E9E7E7E6E6E6E7EBF6E6DEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFD08E370F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52A1F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED55000000000000000000000000000000000000000000000000000000000000000000000000000000000000002672777878797A7A7B7C7C7D7E7F8081828384858688898A8C8D8F9192949697999B9D9FA1A2A4A6A9AAADAFB1B3B6B7B9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8E9EBECEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F5F4F4F3F2F1F0EFEEECEBEAE8E7E5E4E2E0DEDDDBD9D7D6D3D2CFCDCBC9C7C5C2C0BEBCB9B7B69D1C00000000000000000000000000000000000000000000000000000000000000000000000000000000000023B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F8F8F8F8F7F7F8F7F7F9FFEFE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD192450F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F175BB5F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4230000000000000000000000000000000000000000000000000000000000000000000000000000000000000E64777778787A7A7B7B7C7D7E7F8081828384858688898A8B8D8F9092939597999B9C9FA0A2A4A6A8AAADAFB1B3B5B7B9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8EAEBECEDEFF0F1F2F3F4F4F5F6F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F5F5F4F3F2F1F0EFEEECEBEAE8E7E5E4E2E0DEDDDBD9D7D6D3D2CFCDCBC9C7C5C2C0BEBCB9B7B5810700000000000000000000000000000000000000000000000000000000000000000000000000000000000782F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF3F3F2F2F1F1EFEFEFEEF4FBEBE4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6AE53150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F176FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D070000000000000000000000000000000000000000000000000000000000000000000000000000000000055077777878797A7B7B7C7D7D7F8080818384858688898A8B8D8E9092939597989B9C9EA0A2A4A6A8AAADAFB0B3B5B7B9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E7E8EAEBECEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F5F5F4F3F2F1F0EFEEECEBEAE9E7E5E4E2E1DFDDDBD9D7D6D3D2CFCECBC9C7C5C2C0BEBCB9B7B55D00000000000000000000000000000000000000000000000000000000000000000000000000000000000040E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F3F3F2F2F2F2F2F3F3F9FFEFE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBBE731C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2B8DE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED4C0000000000000000000000000000000000000000000000000000000000000000000000000000000000003877777878797A7B7B7C7D7D7F7F80818384858687898A8B8D8E9092939597989A9C9EA0A2A4A6A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCDCFD1D3D6D7D9DBDDDEE0E2E4E5E7E8EAEBECEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F6F5F4F3F2F1F0EFEEECEBEAE9E7E6E4E2E1DFDDDBD9D8D6D3D2CFCECBC9C7C5C2C0BEBCB9B7AE3200000000000000000000000000000000000000000000000000000000000000000000000000000000000FADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E4E3E3E2E3E1E3E3E3E9F3E1DADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2DB91400F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52B5F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD1900000000000000000000000000000000000000000000000000000000000000000000000000000000001C6E777778797A7A7B7C7C7D7E7F80818283858687888A8B8D8E8F91939497989A9C9EA0A2A4A6A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCDCFD2D3D6D7D9DBDDDFE1E2E4E5E7E9EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F2F2F0EFEEECEBEAE9E7E6E4E2E1DFDDDCD9D8D6D4D2CFCECBC9C7C5C2C0BEBCB9B79F16000000000000000000000000000000000000000000000000000000000000000000000000000000000060EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7ECECEEEEEEEEEFEFEFEFF2FBE9E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDABD60150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F79E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5E777778787A7A7B7C7C7D7E7F80818283848687888A8B8C8E8F91939496989A9C9EA0A2A4A6A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCECFD2D3D6D8D9DBDDDFE1E2E4E6E7E9EAEBECEEEFF0F2F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F3F2F0EFEEEDEBEAE9E7E6E4E2E1DFDDDCDAD8D6D4D2D0CECBC9C7C5C2C0BEBCB9B78A070000000000000000000000000000000000000000000000000000000000000000000000000000000023B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEEEEEECECEEEEEFEFEFF4FBEBE4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6DE9B400F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE2300000000000000000000000000000000000000000000000000000000000000000000000000000000055077777878797A7B7B7C7D7E7F8081828384858688898B8C8E8F91939496989A9C9DA0A1A4A6A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCECFD2D4D6D8D9DCDDDFE1E2E4E6E7E9EAEBECEEEFF0F2F3F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F4F3F2F0EFEEEDECEAE9E7E6E5E3E1DFDDDCDAD8D6D4D2D0CECBC9C7C5C2C0BEBCB9B766000000000000000000000000000000000000000000000000000000000000000000000000000000000075F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E3E2E2E1E1E1DEDFE1E1E6EFDFD9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6D6771D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F8DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68200000000000000000000000000000000000000000000000000000000000000000000000000000000003E77777878797A7B7B7C7D7D7F8081818384858688898A8C8E8F9192949698999C9DA0A1A4A6A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCED0D2D4D6D8DADCDDDFE1E2E4E6E7E9EAEBEDEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F4F3F2F0EFEEEDECEBE9E7E6E5E3E1E0DEDCDAD8D6D4D2D0CECBC9C7C5C2C0BEBCB9B0480000000000000000000000000000000000000000000000000000000000000000000000000000000023CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EBEBEBE9E9EBEAE9EBEBF2F9E9E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFB1590F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F176FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE23000000000000000000000000000000000000000000000000000000000000000000000000000000002B72777878797A7A7B7C7D7D7F7F80818384858688898A8C8D8F9192949698999C9DA0A1A4A6A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCED0D2D4D6D8DADCDDE0E1E3E5E6E7E9EAECEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F5F5F4F3F2F1F0EFEDECEBE9E8E6E5E3E1E0DEDCDAD8D6D4D2D0CECCCAC7C5C3C1BFBCB9A92B0000000000000000000000000000000000000000000000000000000000000000000000000000000075F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBFBFBF9F9F9F8F9FBFBFDFFF2EFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDC953E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF675000000000000000000000000000000000000000000000000000000000000000000000000000000001C68777778797A7A7B7C7C7D7F7F80818384858688898A8C8D8F9192949698999B9D9FA1A4A5A8AAACAEB0B3B5B7B9BCBEC0C2C5C7C9CBCED0D2D4D6D8DADCDEE0E1E3E5E6E7E9EBECEDEEF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F7F6F5F4F3F2F1F0EFEEECEBEAE8E6E5E4E2E0DEDCDBD8D7D4D2D0CECCCAC7C5C3C1BFBCBAA21600000000000000000000000000000000000000000000000000000000000000000000000000000019C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF1F3F2F2F2F2EFF1F1F2F7FCECE7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEE68E1E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34ACF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE230000000000000000000000000000000000000000000000000000000000000000000000000000000E63777778797A7A7B7C7C7D7E7F80818384858688898A8B8D8F9192949697999B9D9FA1A4A6A8AAACAEB0B3B5B7B9BCBFC1C3C5C7CACCCED0D2D4D6D8DADCDEE0E1E3E5E6E8EAEBECEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F2F1F0EFEEECEBEAE8E7E5E4E2E0DEDCDBD9D7D4D3D0CECCCAC7C5C3C1BFBCBA8C0E00000000000000000000000000000000000000000000000000000000000000000000000000000060F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E7E7E9E7E7E6E6E6E7E7ECF7E7DFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E4E4E6E4E6E4E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBCC711C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F98F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF675000000000000000000000000000000000000000000000000000000000000000000000000000000055A777778787A7A7B7C7C7D7E7F80818384858688898A8B8D8F9192949697999B9D9FA1A4A6A8AAACAEB0B3B5B8BABCBFC1C3C5C7CACCCED0D2D4D7D8DBDCDEE0E2E4E5E7E8EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F3F2F0EFEEECEBEAE9E7E5E4E2E0DEDDDBD9D7D5D3D0CFCDCAC8C6C4C1BFBCBA760700000000000000000000000000000000000000000000000000000000000000000000000000000FB9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDDEDEDFE1DFDFDFDFE1E1E3EBDCD6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D7D6D6D7D6D7D7D7D7D7D5D5D7D7D7D9DADBDADADADADBDBDBDCDBDBDADADADBDADADADBDCDCDEDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCCE6A150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F79EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9190000000000000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7B7C7D7E7F80818284858687898A8B8D8F9192949697999B9D9FA1A4A6A8AAACAEB1B3B6B8BABCBFC1C3C5C7CACCCED0D3D5D7D9DBDDDEE0E2E4E5E7E9EAEBECEEEFF0F2F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F4F3F2F0EFEEEDEBEAE9E7E6E4E2E1DEDDDBD9D7D5D3D1CFCDCAC8C6C4C1BFBCBA6700000000000000000000000000000000000000000000000000000000000000000000000000000040EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCF4F4F6F4F4F6F4F7F7F8FCFFF2EEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D3D3D3D5D5D5D7D6D7D7D7D5D5D3D1D1D3D5D3D1D1D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D3D3D3D3D5D5D5D5D5D5D5D6D7D7D6D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADABD57150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1779EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED4C0000000000000000000000000000000000000000000000000000000000000000000000000000003877777878797A7B7B7C7D7E7F80818283858687898A8B8D8E9092949697999B9D9FA1A4A6A8AAADAFB1B3B6B8BABCBFC1C4C6C8CACDCFD1D3D5D7D9DBDDDEE0E2E4E6E7E9EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F7F5F4F4F3F2F0EFEEEDECEAE9E7E6E4E2E1DFDDDBD9D7D6D3D1CFCDCAC8C6C4C1BFBDBB4A0000000000000000000000000000000000000000000000000000000000000000000000000000078DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7ECECEBEBECEEECECECECF1F9E9E2E2E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2DFE1E1DFDFDFDEDFDFE1E1E1E1DFE1E1DFDFE1E1E2E2E2E2E1E1E1E2E2E1DFDEDEDBDBDBDEDEDEDEDEDEDEDEDEDBDBDBDEDEDEDEDEDFE1E1E1E1E2E2E2E2E3E3E4E4E4E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADABC550F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1779EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970700000000000000000000000000000000000000000000000000000000000000000000000000002F72777878797A7B7B7C7D7E7F80818283848687898A8B8D8E9092949697999B9DA0A1A4A6A8AAADAFB1B3B6B8BABDBFC1C4C6C8CACDCFD1D3D5D7D9DBDDDFE1E2E4E6E7E9EAEBEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBFAF9F8F8F7F7F6F5F4F3F2F1F0EFEDECEBE9E7E6E5E3E1DFDDDCD9D8D6D3D2CFCDCBC9C6C4C2BFBDB43B000000000000000000000000000000000000000000000000000000000000000000000000000023D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEFDEDEDCDBDBDCDCDEDEDEE3EBDAD5D5D6D7D7D7D7D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E1E1E1E1E1E1E1E1E1E1E1E1DFE1DFDFDFDFDFDFE1E1E1DFDFDFDFDFDFE1E1E1E1E1DFE1E1DFDFDFDFE1E1E2E2E3E4E4E4E3E3E3E2E2E3E1E1DFDFDFE1E1E2E1E2E3E2E2E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2C35A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1779EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE32C00000000000000000000000000000000000000000000000000000000000000000000000000001C71777878797A7A7B7C7D7D7F80818283848687888A8B8D8E9092949697999B9DA0A2A4A6A8AAADAFB1B3B6B8BBBDBFC1C4C6C9CBCDCFD1D3D6D8D9DCDDDFE1E3E5E6E7E9EAECEDEEF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F2F1F0EFEEECEBEAE8E6E5E3E1E0DEDCDAD8D6D4D2CFCDCBC9C6C4C2C0BDB42C000000000000000000000000000000000000000000000000000000000000000000000000000055F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF6EBEBEBECECECECEFEEEEF3FBEAE3E2E3E3E3E3E3E3E6E3E3E3E2E2E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E4E3E3E3E2E2E2E3E2E2E1E1E1E1E1E1E1E1DFDEDEDEDEDBDBDBDCDCDCDCDBDBDBDBDBDBDBDBDBDEDCDBDEDEDBDCDCDEDCDBDADAD9DAD9DADADADADADADADBDCDBDEDBDADBDEDEDEDCDEDBDCDBDADBDCDCDEDEDBDBDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1D06B0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1779EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66A00000000000000000000000000000000000000000000000000000000000000000000000000001C6D777778797A7A7B7C7D7D7F80818283848587888A8B8D8E9092949698999C9DA0A2A4A6A8AAADAFB2B4B6B8BBBDC0C2C4C6C9CBCDCFD2D4D6D8DADCDDE0E1E3E5E6E8E9EBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F3F2F0EFEEECEBEAE8E7E5E4E2E0DEDCDAD8D6D4D2D0CECBC9C7C5C2C0BDA4250000000000000000000000000000000000000000000000000000000000000000000000000007A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7EBEEEEEEEFF1EFF2F1F1F7FCECE4E6E6E6E6E6E4E4E3E3E2E3E3E2E2E2E3E3E4E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9E9E9E9E9E9E9E9E9E6E7E7E7E7E7E6E6E9E9E9E9E9E9E9E6E6E6E6E4E3E2E1E1E1E1E1E1E1DFE1E1E1DFDFDEDEDEDEDEDEDFDFDFDFDFDFE1DFDFE1E1E1DFDFDFDFE1DFE1DFDFDEE1E1DFDFDEDFDFDFDEDCDBDEDEDCDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEE074150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F98F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD07000000000000000000000000000000000000000000000000000000000000000000000000000E68777778797A7A7B7C7D7D7F80818283848587888A8B8D8E9092949698999C9EA0A2A4A6A9ABADAFB2B4B6B8BBBDC0C2C5C7C9CBCED0D2D4D6D8DADCDEE0E2E4E5E6E8EAEBECEEEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F4F3F2F0EFEEECEBEAE9E7E5E4E2E0DEDCDBD8D7D4D2D0CECBC9C7C5C2C0BEA416000000000000000000000000000000000000000000000000000000000000000000000000002CD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9F1F2F2F2F2F4F2F2F2F2F4FCEBE3E3E3E4E3E3E3E2E3E3E3E3E1E1E1E1E1E1E1E2E1DFDFE1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADAD9D9D9DADBDBDBDAD9D9D7D6D5D5D5D5D6D7D7D9DADAD9D7D9DAD9D9D9D7D9DADADADADADADADADADBDADADBDADADBDCDCDCDEDEDEDEDEDEDEDBDCDBDBDCDBDBDBDCDCDBDBDBDADADBDCDCDBDBDBDBDBDEDEDEDEDEDEDEDEDCDEDEDEDBDBDBDEDEDEDEDEDEDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDED6841C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE32C000000000000000000000000000000000000000000000000000000000000000000000000000E68777778787A7A7B7C7C7D7F80818283848587888A8B8D8F9192949698999C9EA0A2A4A6A9ABADAFB2B4B7B9BBBDC0C2C5C7C9CBCED0D2D4D7D8DBDCDEE0E2E4E5E7E9EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F7F5F5F4F3F2F0EFEEEDEBEAE9E7E6E4E2E1DEDDDBD9D7D5D3D0CECCCAC7C5C3C0BE9616000000000000000000000000000000000000000000000000000000000000000000000000006AF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEF1E3E3E3E4E6E6E6E6E4E6EBF6E6DCDEDBDCDBDADBDCDCDEDEDBDBDADAD9D9D9D7D7D7D6D6D6D5D3D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDEDEDEDEDBDBDEDEDEDEDEDEDFDFDFDFDFDEDEDEDEDFDFDEDFE1E1E1E1E1E1E3E3E2E2E1E1E1DFDFDFDEDEDEE1E1DEE1E1E1DEDEDEDEDEDEDFDEDEDFDEDEDEDEDEDEDEDEDEDEDEDEDFDEDEDEDEDEDCDEDEDEDEDEDEDEDEDEDEDEDEDFE1E1E1E1E2E1E2E1DFDEDFDEDEDFDEDCDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2981D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66A00000000000000000000000000000000000000000000000000000000000000000000000000055A777778787A7A7B7C7C7D7F80818283848587888A8B8D8F91929496989A9C9EA0A2A4A6A9ABAEB0B2B4B7B9BCBEC0C2C5C7CACCCED0D3D4D7D9DBDDDEE0E2E4E6E7E9EAEBEDEEEFF0F2F3F4F4F5F7F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBFAF9F9F8F7F7F6F5F4F3F2F1F0EFEDECEAE9E7E6E4E2E1DFDDDBD9D7D5D3D1CFCDCAC8C5C3C1BF8F0700000000000000000000000000000000000000000000000000000000000000000000000007A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF6ECECECEAEBECEAE9E9E9EEF7E6DEDEDCDCDEDEDFDEDEDEDFE1E1E1E1E1E1E1DFDFDFDFE1E1E1E1E1DFDFDFE1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADADADADADADADBDCDBDEDBDADBDEDEDEDCDEDBDCDBDADBDCDCDEDEDBDBDADAD9D9D9D7D6D6D5D5D5D3D3D5D5D5D6D7D7D7D7D7D6D7D7D9D9D7D6D6D7D6D6D6D7D7D9D9DADADADADAD9D7D7D7D9D9D9D7D7D7D6D6D5D7D7D6D7D9D9D9D9DADADAD9D9D9DAD9D7D9DADADADADAD7D7D7D7D7D7D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCAE2E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD07000000000000000000000000000000000000000000000000000000000000000000000000055A77777878797A7B7C7C7D7F80818283848587888A8B8D8F91929496989A9C9EA0A2A5A7A9ABAEB0B2B5B7B9BCBEC1C3C5C7CACCCED0D3D5D7D9DBDDDFE1E2E4E6E7E9EAECEDEEF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EFEEECEBE9E8E6E5E3E1E0DDDCD9D8D6D3D1CFCDCAC8C6C4C1BF8F0700000000000000000000000000000000000000000000000000000000000000000000000019CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF0E3E4E4E3E3E2E2E2E3E1E6EFDED9D9D7D9D7D7D9D9D9D7D7D6D5D6D6D6D7D7D7D7D7DADADAD7D7D9DADBDADBDCDEDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E4E4E4E3E3E3E2E3E2E1E2E2E2E1E2E3E3E2E2E2E3E3E3E3E2E1E1E1E1E1E1E2E1E1E1E1E1DEDEDCDBDADADBDCDEDEDEDCDCDEDEDEDEDEDCDCDCDCDCDCDCDBDBDADADADADADADAD9D9D9D9D7D7D7D7D9DADBDBDCDBDADADADADBDADADBDBDBDADADADADAD9D7D7D7D7D7D9D7D7D9D9D9D9D9DADBDBDADBDBDBDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD923000000000000000000000000000000000000000000000000000000000000000000000000055A77777878797A7B7C7C7D7F80818283848587898A8B8D8F91929496989A9C9FA0A2A5A7A9ABAEB0B3B5B7B9BCBFC1C4C6C8CACDCFD1D3D6D7D9DCDDDFE1E3E5E6E8E9EBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F3F2F0EFEEECEBEAE8E6E5E4E1E0DEDCDAD8D6D4D2CFCDCBC9C6C4C1BF900700000000000000000000000000000000000000000000000000000000000000000000000040F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF8F2F4F3F2F4F4F4F4F3F2F7FBECE7E9E7E9E9E9EAEAEAEAEAE9EAEAEAEAEAE9E9E6E7E9E9E9E9E9EAE9E9E9EAEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDEDFDEDFDFDFDFDFDFDFDFDEDEDEDEDEDBDBDBDEDEDEDEDEDEDFDFDFDEDEDFE1E1E1E1DEDFDFDFE1E2E1DFDFDFE1DFE1E2E1E1E1E1E2E3E4E4E3E2E2E3E3E3E3E4E6E6E4E3E3E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E3E1E2E2E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E1E1E1DFE1DFDFE1E1E1E1E1E2E2E2E1E1E1DFDEDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDE600F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1782F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64C000000000000000000000000000000000000000000000000000000000000000000000000054B77777878797A7B7C7C7D7F80818283848687898A8B8D8F91929496989A9C9FA1A3A5A8AAACAEB0B3B6B8BABCBFC1C4C6C9CBCDCFD2D3D6D8DADCDEE0E1E3E5E6E8EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F7F5F5F4F3F2F0EFEEEDEBEAE9E7E5E4E2E0DEDCDBD8D6D4D2D0CECBC9C6C4C2C0880700000000000000000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF7EBEAEAEBEBEBECECECEFF2F8E9E1E2E1E1E1E1E1E1E1DFE1E1E1DFDFDFE1E1E1DFDEDEDEDEDCDEDEDEDEDEDEDEDEDCDCDEDEDEE1E1E2E2E3E3E3E3E3E3E3E2E2E2E1E1E1E1E1E2E1E1DFDFE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDEDEDFE1E1E1E1E1DFDFDFDFDFDFDFE1E2E3E3E3E3E3E3E3E3E2E3E3E3E4E4E6E4E6E6E6E6E4E3E4E4E4E4E3E6E6E4E4E6E3E2E2E2E3E3E3E3E1E3E3E3E3E3E1E1E1E1E1E2E2E2E2E2E2E1E1E1E1E2E2E3E4E4E6E4E4E6E6E4E3E4E6E4E4E4E3E3E2E2E1E2E2E1E1E2E3E3E4E3E4E4E3E3E3E3E3E3E3E3E3E1E1E1DFDEDEDFDFDFE1E1E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2620F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7C7C7D7F80818283848687898A8C8D8F91939497989B9D9FA1A3A5A8AAACAFB1B3B6B8BBBDBFC2C4C6C9CBCDCFD2D4D6D8DADCDEE0E2E4E5E7E9EAEBECEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFAF9F9F8F7F7F6F5F4F3F2F1F0EEEDECEAE9E7E6E4E2E1DEDDDBD9D7D4D2D0CECBC9C7C5C2C07100000000000000000000000000000000000000000000000000000000000000000000000007ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF0E4E3E2E3E4E4E4E4E6E6EAF3E2DADADADADBDBDCDEDEDEDBDBDADBDBDBDBDADBDADAD9D9DADBDADADADADADADBDBDBDBDBDADADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E7E9E7E7E7E6E6E7E9EAE9E9E7E7E7E7E9E9E9EAE9E7E9EAE9E9EAEAEAE9E9E7E7E6E7E7E9E7E7E7E7E9E9E9E9E7E7E9E9E7E7E7E7E6E4E4E6E6E6E6E6E7E6E7E7E9E7E6E6E7E6E7E6E4E4E4E6E6E4E4E4E4E4E4E3E3E1E1E1E1DFDFDFE1DFDEDEDCDEDCDCDBDBDCDBDADBDBDBDBDBDEDEDEDEDEDEDEDEE1DFDFDFDEDEDEDEDEDEDEDEDFE1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1620F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4070000000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7C7C7D7F80818283848688898A8C8E8F91939497999B9D9FA1A3A5A8AAADAFB1B4B6B8BBBDC0C2C5C7C9CBCED0D2D4D7D8DBDDDEE0E2E4E6E7E9EAECEDEEEFF1F2F3F4F5F5F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EFEEECEBE9E7E6E4E2E1DFDDDBD9D7D5D3D0CECCCAC7C5C2C07200000000000000000000000000000000000000000000000000000000000000000000000019D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCF8F2F2F2F2F3F3F3F3F4F6F9FCECE9E9E9E9E9E9E9E9E9E9E9EAEAE9EAEAEBEBEBECECECECEBEBEBECEEEEEEEEEEECECEBECECECECEEEFEFEEEEEEEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDEDEDEDBDBDBDBDAD9D9D7D7D7D9DADADADADBDADADADADBDEDBDBDADADADADADAD9D9D9D9D9D7D7D7D7D7D7D7D7D6D6D6D5D5D5D5D3D0D0D1D0D1D1D1D1D3D3D1D1D0D1D1D1D3D3D3D5D5D5D5D5D3D3D1D0D0D1D3D1D0D0D0D0D0D0D0CFD0D0D0D0D0D0D0D0D0D0D0D1D3D1D1D3D3D5D3D3D3D3D5D6D7D6D7D7D6D6D6D6D6D6D7D6D6D7D7D6D5D5D5D5D6D7D6D6D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDF620F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1782F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7C7C7D7F80818283858688898A8C8E8F91939597999B9D9FA1A4A6A8AAADAFB2B4B6B9BBBDC0C2C5C7CACCCED0D3D5D7D9DBDDDFE1E2E4E6E7E9EBECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F3F2F0EFEEECEBEAE8E6E5E3E1E0DDDCD9D7D6D3D1CFCDCAC8C5C3C17200000000000000000000000000000000000000000000000000000000000000000000000035EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBEDDEDEDCDBDBDBDCDEDEE1E6F1DED6D7D7D7D7D7D6D7D9D9DADAD9D9D9D9DADAD9DADADADADBDCDCDCDEDEDEDEDEDEDEDBDCDBDBDCDBDBDBDCDCDBDBDBDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D6D6D6D7D7D7D7D7DADADAD7D7D9DADBDADBDCDEDEDEDEDEDEDEDEDFDEDEDFDEDEDEDEDEE1DEDEDCDEDCDCDCDCDEDEDEDEDEDEDCDBDAD9DADAD9D9D9DADAD9DADADADADADBDADADAD7D7D6D6D6D7D7D7D9DADAD9DADBDBDCDCDCDCDBDCDCDCDCDBDCDCDEE1E1E1E1E1E1DFDEDFDEDEDEDEDEDEDEDEDEDEDBDADADADCDCDCDEDBDBDBDBDBDEDEDEDFE1E1E2E1E2E2E3E4E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D65E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6400000000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7C7C7D7F80818283858688898A8C8E8F91939597999B9DA0A1A4A6A9ABADAFB2B4B7B9BCBEC0C3C5C8CACDCFD1D3D5D7D9DCDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBFAF9F8F8F7F7F5F5F4F3F2F0EFEEECEBEAE9E7E5E4E2E0DEDCDAD8D6D4D2CFCDCBC9C6C4C17300000000000000000000000000000000000000000000000000000000000000000000000060F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBEDDEDEDFDFE1E1E1E2E3E3E9F3E1D9DADBDCDCDCDADCDCDBDAD9D9DADBDCDBDADBDCDCDCDBDBDBDBDBDBDBDBDBDBDCDCDEDEDEDEDCDCDBDBDBDBDBDADBDADADAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDCDBDBDADADADBDADADADBDCDCDEDCDCDEDEDEDCDEDEDEDEDEE1DEE1E1E2E2E2E3E3E3E4E3E4E4E6E6E4E4E4E4E3E4E6E7E6E6E4E4E4E4E6E6E6E7E6E4E6E7E6E6E7E7E7E6E6E4E4E3E4E4E6E4E6E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E3E4E6E6E6E6E6E7E6E6E6E9E7E6E6E7E6E7E6E4E4E4E6E6E4E6E4E6E4E4E3E3E2E1E1E2E1E1E1E1E1DFDFDEDFDEDEDCDBDEDBDADBDBDBDBDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7C7D7D7F80818284858688898B8C8E8F92939697999B9DA0A2A4A6A9ABAEB0B2B5B7B9BCBFC1C4C6C8CACDCFD1D3D6D8DADCDEE0E2E4E5E7E8EAEBECEEEFF0F2F3F4F4F5F7F7F8F8F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F9F8F7F7F6F5F4F3F2F1F0EEEDECEAE9E7E6E4E2E0DEDCDBD8D6D4D2D0CECBC9C6C4C1730000000000000000000000000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAEFE2E3E3E3E3E4E3E4E6E4E9F3E2DBDBDADADADBDBDBDCDCDCDCDCDCDCDADADADBDEDEDEDEDEDEDFDEDCDCDCDCDBDADBDBDBDADBDBDBDBDADADAD9D7D7D9D9D9D9D7D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDBDBDBDBDCDEDCDBDBDADAD9D9D9DADADADBDBDBDADBDCDCDEDEDEDEDCDEDEDEDCDBDCDCDEE1E1E1E1E1E1DFDEDFDEDEDCDCDCDCDCDCDCDBDAD9D9D9DADAD9DAD9D9D7D7D7DADADADBDEDEDEDEDEDEDFE1E2E2E1E1E2E2E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E2E1E1E2E1E1E1E2E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E2E2E1E1E2E3E3E3E3E2E1E1E1E1E1E1E2E1E2E1E1E1DFDEDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970700000000000000000000000000000000000000000000000000000000000000000000004777777878797A7B7C7D7D7F80818284858688898B8D8E9092939698999C9EA0A2A5A7A9ABAEB0B3B5B8BABCBFC1C4C6C9CBCDCFD2D4D6D8DBDCDEE0E2E4E5E7E9EAECEDEEF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EFEEECEBE9E7E6E4E2E1DFDDDBD9D7D4D2D0CECBC9C7C5C273000000000000000000000000000000000000000000000000000000000000000000000007B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9EEE1E2E1DFDFDEDEE1DEDEE4EBDBD3D5D5D5D3D1D1D0D0D1D3D3D5D3D3D3D3D3D3D3D3D5D6D6D6D6D6D6D5D5D5D5D6D6D7D6D6D5D5D5D6D5D5D5D5D7D6D5D6D6D6D6D5D3D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDEDEDCDCDBDBDBDBDBDADBDADAD9D9DADBDADADAD9DAD9DADBDBDADADAD9D7D7D9D7D9DADAD9D9D7D7D9D9DADAD7D9D9D9D7D7D7D7D7D7D5D3D3D3D1D0D0D0D1D1D1D0D0CFCFCECECBCBCBCBCBCECECBCBCED0D0CECBCBCBCBCECFD0D1D0CFD0CFCECECECBCBCBCECBCFCECED0D0D3D3D3D5D5D5D3D3D5D5D6D6D6D6D6D5D5D6D6D7D7D9DAD9DAD9D9DADBDBDCDBDBDADADADBDADADADBDCDCDEDCDCDEDEDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFB92F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC407000000000000000000000000000000000000000000000000000000000000000000000047777778787A7A7B7C7D7E7F80818384858688898B8D8E90929496989A9C9EA0A2A5A8AAACAEB1B3B6B8BBBDC0C2C4C7C9CBCED0D2D4D7D9DBDDDEE1E2E4E6E7E9EBECEEEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBFAF9F8F8F7F6F5F4F4F3F2F0EFEEECEBEAE8E6E5E3E1DFDDDCD9D7D5D3D0CECCCAC7C5C273000000000000000000000000000000000000000000000000000000000000000000000019CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9ECDEDEDEDEDFDFDEE1E1E1E4EEE1DADADADADADBDCDCDCDCDCDEDBDBDBDBDBDBDBDBDCDCDBDADADADADBDCDEDEDEDEDEDEE1E1DFDEDEDEDEDEDEDEDEDEDEDCDEDFDFDFDEDFE1E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDBDBDBDEDEDEDCDCDBDBDADBDBDBDBDBDAD9D9D9D9DADADADADADADADADBDCDBDCDCDEDCDEDEDFDFDFDFDFDEDFDFDFDEDEDEDEDFDFDEDEDEDEDEDEDEDEDEDFDFDEDEE1E1E1E1E2E3E3E2E2E1E1E1E2E2E3E3E4E3E3E3E3E3E3E3E4E3E3E3E4E3E3E2E3E2E2E2E2E3E3E3E3E3E4E6E6E6E6E6E4E6E6E7E7E7E7E9EAEAEAEBEBEBEBEBEAEBEBEBEAE9EAE9E7E7E9E9E7E7E7E6E4E3E3E4E4E4E4E4E4E4E3E3E4E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1DA750F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F178DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000000000047777778787A7A7B7C7D7E7F808183848586888A8B8D8F91929496989A9C9FA1A3A5A8AAADAFB1B4B6B8BBBDC0C2C5C7CACCCED0D3D5D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEEDEBEAE9E7E5E4E2E0DEDCDAD8D6D3D1CFCDCAC8C5C393000000000000000000000000000000000000000000000000000000000000000000000023E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F4EEEEEFEEECEEEFEEEFF1F6F9EAE6E4E4E3E4E4E6E4E6E6E6E7E7E7E7E7E6E7E7E7E7E7E7E6E4E4E6E6E7E7E7E9E7E9E9EAE9E7E9EAE9E9E7E6E6E6E7E7E6E6E6E7E6E6E4E4E3E2E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDBDBDBDEDEDEDCDBDEDEDEDFDEDEDEDEDEDCDEDCDCDCDCDCDEDCDEDEDCDEDEDEDEDEDEDEDEDCDCDBDCDBDADAD9DADBDADADADBDBDBDBDADBDBDCDCDCDCDBDBDBDBDCDEDCDADADADCDADCDEDCDCDBDCDEDFE1E1DFDEDEDFDFDFDFE1E1E1E1DFDFE1DFDEDFDEDFE1E1E1E1E1E1E1E1DFE1DEDFDFDEDEDEDEDEDFDFDEDFDFDFE1E1E1E1E1DEDFDFDEDEDEDEDEDFE1DFE1E1E1E1DFE1E1DFDEDEDEDCDBDCDCDCDCDCDCDBDCDBDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5AF2C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE335000000000000000000000000000000000000000000000000000000000000000000000047777778787A7A7B7C7D7E7F808183848587888A8B8D8F91939496989B9D9FA1A4A6A8AAADAFB2B4B7B9BCBEC0C3C5C7CACDCFD1D3D6D8DADCDEE0E1E4E5E7E9EAEBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EFEDECEAE9E7E6E4E2E0DEDCDBD8D6D4D2CFCDCBC9C6C493070000000000000000000000000000000000000000000000000000000000000000000035F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F4ECECECECECECECEEECEEF2F7E7E1E1E1E2E3E3E3E3E4E6E6E6E6E6E4E6E6E7E7E7E7E9E9EAEAEBEBEBEBEBEAEBEBEBEAE9EAE9E7E7E9E9E7E7E7E6E4E3E3E4E4E4E4E4E4E4E3E3E4E3E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2DFE1E1E1E1E2E1E1E1E1E1DFE1E1DFDFDFDEDFDEE1E1E1E1DEE1E1DEDEDFDFE1E1E1E1DFDEDEE1E1DFDEDBDAD9D9D9DADADADADAD9D9D9D9D7D7D7D7D7D9D9D9DADADADADADBDBDBDBDCDBDEDEDEDEDCDCDBDBDBDADBDBDBDEDEDEDEDBDCDCDCDEE1E1E1DFE1E1E1DFE1E1E1E1E1E1E1E3E3E4E6E3E3E3E4E4E3E3E3E4E4E4E4E4E3E2E2E1E1E1E1E3E3E3E2E2E3E4E4E6E7E7E6E7E7E7E7E6E6E4E3E3E4E4E4E4E3E2E3E3E3E2E2E1DFE1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBD5680F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F178DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64000000000000000000000000000000000000000000000000000000000000000000000005A777778797A7A7B7C7D7E7F808183848587898A8B8D8F91939497999B9D9FA1A4A6A9ABADB0B2B4B7B9BCBFC1C4C6C8CBCDCFD2D4D6D8DBDCDEE0E2E4E5E7E9EAECEDEEF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F3F2F0EFEEECEBE9E7E6E5E3E1DFDDDBD9D7D4D2D0CECBC9C6C494070000000000000000000000000000000000000000000000000000000000000000000060F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6ECDFDFE1DFE1E1E1E1E2E3E9F2E1D7D9D7D7D9D7D9D9D7D9D7D9D9DAD9D9D9D9D7DAD9D9D9DAD9D9D9DADBDBDADADADADCDEDEDFDEDEDEDFE1E1E1E2E3E2E3E4E3E3E2E1E1DFDEDEDEDCDBDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9E9E9E9EAE9E9E9E9E9E9E9E9E7E9E9E9E9E9E7E9E9E9E9EAEAE9EBEBE9E9E9E9E7E7E7E7E7E7E7E6E6E7E7E6E7E7E7E7E7E7E9E9E9E7E6E6E7E9E9E9E9E7E6E6E4E6E6E6E6E6E9E9E7E7E7E7E7E7E6E6E6E6E6E6E6E7E6E6E6E6E6E7E7E7E7E7E9E9E9E9EAEAEAE9E9EAE9E9E9E9E9E9E9E9E9E9E9EAEAEBEBEAE9E9E7E7E6E6E6E7E9E7E6E7E9E9E9E7E6E6E6E6E6E6E6E6E6E7E6E6E7E7E9E7E9E9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E3E3E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7B12D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000000000000000000000000000000000000000000000000000000000000000000000055A777778797A7A7B7C7D7E7F808183848687898A8C8E8F91939597999B9DA0A2A4A6A9ABAEB0B3B5B8BABCBFC1C4C6C9CBCED0D2D4D7D9DBDDDEE1E2E4E6E7E9EBECEEEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBEAE8E6E5E3E1E0DDDCD9D7D5D3D0CECCCAC7C59B080000000000000000000000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F7F7F7F7F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5EDE3E1E2E1E3E4E6E4E3E3E9F3E2DBDCDCDCDBDCDEDFE1E1E1DEDEE1E1E1E1E2E3E3E3E2E2E3E2E1E2E1E2E3E3E3E3E3E4E3E3E3E3E1E2E2E1E1E1E2E2E2E2E1E1E1E1E2E2E2E2E2E1E1E1DFE1DFE1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E1E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E3E3E2E2E2E2E2E1DFDFE1DFE1E1DEDEDEDEDEDEDEDCDCDCDCDCDBDBDADAD9D9D9D9D7D7D6D6D5D6D5D5D5D5D3D3D3D3D3D0D0D1D0D0D0D0D0D0D0D0CECECECECECECFCECECECECBCBCBCBCECECBCBCACACACACACBCAC9C9C9C9C9C9C9C9C8C8C8C6C6C8C6C8C9CACBCBCBCBCECECECED0D0D0D1D3D1D1D3D1D0D3D3D3D1D3D5D7D7D7D7D7DADADADADADADADADADADBDBDBDBDBDBDCDEDEDBDBDBDBDBDBDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4770F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000000000000000000000055A777778797A7B7B7C7D7F7F808283848688898A8C8E8F92939697999C9EA0A2A5A7A9ACAEB0B3B6B8BBBDC0C2C5C7C9CCCED0D3D5D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EEEDECEAE9E7E5E4E2E0DEDCDAD8D6D3D1CFCDCAC7C5AB170000000000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F7F7F7F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F5F5F5F5F5E3D3D5D5D5D7D7D7D7D7D7DCE4D5CBCACACBCFCECBCBCBCBCBCECBCACBCBCBCBCBCBCECECECECED0D1D0D1D3D3D3D3D3D3D3D5D6D6D5D7D7D5D5D5D5D5D6D7D6D6D7D7D6D5D5D5D5D6D7D6D6D6D5D5D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDBDBDBDEDEDEDEDEDEDEDEDCDEDEDEDBDBDBDCDCDCDEDEDEDEDCDCDCDADADADADCDCDEDEDEDEDEDCDADAD9D9D9D6D7D7D7D6D7D6D5D6D5D5D3D1D0D0D1D1D1D1D0D0D0CFD0CFCECECECECECECECECECBCBCECBCECFCECECFCFCECECECFD0D1D1D1D1D1D1D1D1D0D0D0D0D0D0CECED0CFCFD0CFCFD0D0D0D0D0CFCECFCFD0D0D0D0D1D1D3D5D5D3D3D5D6D7D6D7D9DBDBDBDBDCDCDCDEDEDEDEDEDEDEDEDEDEE1DFDFDEE1DEDEDEDEDFDFDFDFDFDFDEDEDBDADBDBDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1C0360F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000000000000000000000055A777778797A7B7B7C7D7F80818283858688898B8D8E90929496989A9C9EA0A3A5A8AAACAFB1B4B6B9BBBDC0C2C5C7CACDCFD1D3D6D8DADCDEE0E2E4E5E7E9EAEBEDEEEFF1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EFEEECEBE9E7E6E4E2E0DEDCDBD8D6D4D2CFCDCBC9C6AC170000000000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3E6D7D9D9D7D9DADADADBDADEEAD9D3D3D1D3D5D3D3D5D5D6D6D7D9D9D7D7D7D9D7D7D7D7D9D7D7D7DADAD9D9DAD9D9D9DADADADADADADADBDCDEDCDEDEDCDCDCDEDEDEDBDBDBDEDEDEDEDEDEDEDEDEDEDCDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D6D5D6D6D6D7D7D7D7D7DADADAD7D7D9D9DAD9DADBDEDEDCDBDCDCDCDEDEDEDEDEDEDEDCDCDCDEDCDCDBDBDADADADADADADADADAD9D7D6D5D3D5D3D3D3D3D5D5D1D3D3D3D3D3D3D3D1D1D0D0CECECECFCFCFCFD0D0CFD0D1D1D3D3D3D3D1D3D3D3D3D1D3D3D6D7D7D9D9DAD9D7D6D7D6D6D5D6D6D6D6D6D7D7D5D3D3D3D5D5D5D6D5D5D6D6D6D7D9DADBDCDCDEDEDEDEDFE2E3E3E2E2E3E3E3E3E4E6E6E6E4E4E6E4E4E4E4E6E6E6E6E6E4E3E3E4E3E3E3E4E4E4E4E4E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDF84150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2070000000000000000000000000000000000000000000000000000000000000000000E68777778797A7B7C7C7D7F80818284858688898B8D8E91929496989A9C9FA1A3A6A8AAADAFB2B4B7B9BCBFC1C4C6C8CBCDCFD2D4D6D8DBDCDEE0E2E4E6E7E9EBECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBEAE8E6E5E3E1DFDDDBD9D7D4D2D0CECBC9C6BC1F00000000000000000000000000000000000000000000000000000000000000000007B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F7F7F7F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F7F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1E6DADBDCDEDEDCDEDEDEDBE2ECDBD5D5D6D5D3D5D5D7D7D6D5D5D5D5D6D7D7D7D6D6D5D7D7D7D7DAD9D9D7D9D9D9D9DADBDBDBDADADBDCDCDEDCDCDCDEDEDBDCDCDEDEDEDEDEDEDEDFDEDFDFDFDFDFDFDFDFDEDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E1E1E2E2E2E2E2E1E1E1DFE1DFDFE1E1E1E1E1E1E1E1DFDFDFDEDCDBDBDADADADADADADADAD9DAD7D7D7D7D6D6D7D7D7D7D9D7D7D5D5D5D5D5D3D3D1D3D3D1D1D3D5D3D3D1D1D3D5D3D3D3D5D5D6D3D3D3D3D3D3D1D3D3D5D5D6D7D6D7D7D6D6D6D6D6D7D6D6D5D3D3D3D6D5D6D6D6D7D7D9D9D9D9D9D9DADADADADADADADADBDBDBDADADADBDBDADADADBDBDCDCDADADBDBDBDCDCDBDBDBDEDEDCDCDCDCDBDBDBDBDADADADADADADADADADBDADADADADAD7D7DAD9D9D9D7D9D9D9DAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3D3510F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4070000000000000000000000000000000000000000000000000000000000000000000E68777878797A7B7C7D7D7F808183848586888A8B8D8F91939497989B9D9FA1A4A6A9ABADB0B2B5B7BABCBFC1C4C6C9CBCED0D2D4D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EEEDEBEAE9E7E5E4E1E0DDDCD9D7D5D3D0CECCCAC7BD2E00000000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F9F9F9F8F8F8F8F7F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F7F7F8F8F8F8F9F9F9F9F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0E4D9D7D7D7D9DBDADCDBDBE1EBDBD3D5D6D6D6D7D9D7D9D9DADADADCDEDEDFDFE1E1E2E3E1E1E2E1E1E2E4E6E4E4E3E4E4E4E6E6E6E7E7E6E7E9E7E7E9EAEAE9E9E7E7E6E9E9E9E9E9E9E9EAEAEAEAEAE9EAEAEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E1E1DFDFE1E1E1DEDEDEDEDEDEDEDEDEDEDCDBDBDCDEDEDCDCDCDCDBDADBDBDBDBDBDBDAD9D9D9DADAD9D7D6D6D6D7D9D7D6D5D5D5D5D5D5D5D6D5D3D3D3D3D1D1D1D3D3D3D0D0D1D3D3D3D1D1D0D1D1D0D0D0D0D0D0D0D1D0D0D1D0D1D1D1D1D1D0D0D1D0D0D0D0D0CFCFCFD0D1D0D0D0D1D3D3D3D0D3D5D6D6D6D6D5D6D7D7D9DADAD7D7D7DAD7DADADBDBDADBDCDFE1E1DFDEDEE1E1E1E1E2E3E3E3E2E2E3E2E1E3E2E3E4E3E3E3E3E4E3E3E3E3E2E3E3E2E1E1E2E2E2E2E1E1E1E1E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1B2260F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4070000000000000000000000000000000000000000000000000000000000000000001C71777878797A7B7C7D7E7F808183848587888A8B8D8F91939597999B9DA0A2A4A6A9ABAEB0B3B6B8BBBDC0C2C5C7CACCCED0D3D5D7D9DCDDE0E1E4E5E7E9EAEBEDEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EFEEECEBE9E7E6E4E2E0DEDCDAD8D6D3D1CFCDCAC8C53600000000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F9F9F9F8F8F8F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F5F5F5F5F5F5F5F5F5F5F6F6F6F7F7F8F8F8F8F9F9F9F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F7F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEFEFEFEFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEFEFEFEFEFEFEFEFEFEFE6DEDCDEDEDEDEDCDEDEDEE1EADAD0D0D0D0D1D1D3D3D1D3D3D1D1D1D3D3D5D5D5D5D7D7D6D6D6D6D5D6D6D6D5D7D7D7D7D9DAD9DAD9D9DADBDBDBDCDEDEDFDEDEDEDEDEDEDEDFDFE1E1E2E3E2E3E3E2E2E2E2E2E3E2E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADAD9D9D7D9D9D9D9D7D6D6D6D6D6D7D7D6D7D5D3D3D3D5D5D5D3D3D1D1D1D1D1D1D1D0CFCECECECECECBCAC9C9C9C9C9C8C8C9C9C9C9C9C9C9CAC9CACBCACACBCECACACAC9C8C9C9C9C8C9C9CACBCBCECBCECECBCBCBCBCBCBCACACBCACBCBCBCBCECECECBCBCBCBCBCBCECFCFCFD0D0D0D0D0D0D1D1D0D1D1D1D1D1D3D5D6D5D7D9D7D7D9D9DADADADADADADADADBDBDCDEDFDFDFE1DFDEDEDEE1E1E1DFDEDEDCDBDBDCDCDBDEDCDCDEDEDEDEDEDEDEDEDEDEDFDFDFDFDEDEDEDBDEDEDBDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6810F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1798FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9190000000000000000000000000000000000000000000000000000000000000000001C727778787A7A7B7C7D7E7F808183848587898A8C8E8F92939597999C9EA0A2A5A7AAACAEB1B3B6B8BBBDC0C3C5C7CACDCFD1D3D6D8DADCDEE0E2E4E6E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBEAE8E6E5E2E1DFDDDBD9D7D4D2CFCDCBC9C64E00000000000000000000000000000000000000000000000000000000000000000019C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F9F9F8F8F8F7F7F6F6F6F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3F5F5F5F5F5F5F5F6F6F6F7F7F8F8F8F9F9F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F6F6F6F6F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F1F1F1F1F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEDEDEDEDEDEDEDECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEDEDEDEDE2D7D7D9D7D7D7D9DADBDBDFE9DAD1D3D5D5D5D5D5D3D3D6D7D7D7D7D9D9DADADADADADBDEDEDEDCDCDCDBDADBDAD9D9DBDBDADBDBDBDCDCDEDCDCDCDEDCDCDEDEE1E1DFE1DEDFE1E1E1E1E1DFDFDFDFDFE1DFE1E1E1E1E2E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E2E2E3E3E4E4E4E4E3E3E3E3E4E6E7E6E4E6E6E6E3E3E3E4E3E3E3E4E6E6E6E7E4E4E4E4E4E3E2E2E3E3E1E1E1DFDEDEDBDBDBDBDCDBDCDADADADBDBDCDCDCDCDCDCDCDBDAD9D7D7D5D7D6D6D6D5D3D3D3D3D3D3D1CFCFCECFD0D0CFCECECECECBCBCBCBCBCBCBCACACACACAC9CACACACBCAC9C9C8C8CAC9C9CAC9C9C8CAC9C9C9C6C6C5C6C8C9CACAC9C9C9CACACBCBCBCECFD0D0D1D0D0D0D0D0D0D0D0D3D1D1D0D1D1D3D3D3D3D5D6D5D5D5D5D5D5D3D1D3D5D5D3D5D5D3D5D6D6D6D6D5D5D5D5D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBC53E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000000000002B777778787A7A7B7C7D7E7F808183848687898A8C8E90929496989A9C9EA1A3A5A8AAADAFB2B4B7B9BCBFC1C4C6C9CBCDCFD2D4D6D8DBDDDEE1E2E4E6E7E9EBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1EFEEEDEBEAE9E7E5E3E1E0DDDCD9D7D5D3D0CECBC9C75E00000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F9F9F8F8F8F7F6F6F6F5F5F5F5F5F5F3F3F3F3F3F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F3F3F3F3F3F3F5F5F5F5F5F5F6F6F6F7F8F8F8F9F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F7F7F6F6F6F6F5F5F5F5F5F5F5F5F3F3F3F3F3F1F1F1F1F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEDEDEDEDEDECECECECECECECECECECECECECECECEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EBEBEBEBEBEBECECECECECECECECE2D6D5D6D6D6D7D7D9D7D7DCE6D7D0D0CFCECECFD0D1D0D0D0D0CFD1D0D3D3D3D3D3D3D5D5D3D5D5D6D7D7D7D6D7D9DADBDADADADADADADADADBDBDBDBDCDBDCDEDCDEDEDEDEDEDEDEDFDEDEDEDEDEDBDBDBDEDEDEDEDEDEDFE1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E2E2E2E2E2E1E1E1DFE1DFDFE1E1E1E1E1E1E1E1DFDFDFDEDCDBDBDADADADADADADADAD7D9D7D6D6D6D6D5D7D7D6D6D7D6D5D3D3D3D1D1D1D0D0D0D0CFCFD0D0CFD0CFCED0D0D0D0D0D1D1D1D0D0CFD0CFCFCECFCED0D0D1D1D1D1D1D0D0D0D0D0D1CFCFCECBCBCBCFCFD0CFCFD0D0D3D3D3D1D1D1D1D1D3D3D3D3D3D3D5D5D3D3D3D3D5D5D5D3D3D6D5D6D7D5D3D5D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D9D9DAD9D7D7D7D7D7D7D7D7D7D7D7D7D7D9D9D7D6D6D6D6D6D7D7D6D7D6D5D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFB1260F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000000000002F777778797A7B7B7C7D7E7F818283858688898B8D8E90929496989A9C9FA1A4A6A8ABADB0B2B5B7BABCBFC1C4C6C9CBCED0D3D5D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFBFAF9F8F8F7F6F5F4F3F2F1F0EFEDECEAE9E7E6E4E2E0DEDCDAD8D6D3D1CFCCCAC77600000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F9F8F8F8F7F6F6F6F5F5F5F5F5F3F3F3F3F1F1F1F1F0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F3F3F3F3F5F5F5F5F5F6F6F6F7F8F8F8F9F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F8F8F8F8F7F7F6F6F6F5F5F5F5F5F5F5F3F3F3F3F3F3F1F1F1F0F0F0F0F0F0F0F0EFEFEFEFEFEFEDEDEDEDECECECECECECECECECECEBEBEBE9E9E9E9E9E9E9E8E8E8E8E8E8E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9DDD0D0D0D1D1D3D1D3D5D5DAE3D3C9C9CACBCACBCECECECECBCECFCFD0D0CED0D0D1D0D0D0D0D3D3D0D0D0D0D0CFCFCFD0D0D0D0D0CFCFCECECECECFD0D0D1D1D0D0D1D3D3D1D0D0D0D0D0D3D3D6D3D3D3D3D1D1D1D0D0D0D1D0D1D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E7E9E7E7E7E6E6E7E9EAE9E9E7E6E6E6E9E9E7E7E7E6E7E9E7E6E7E7E7E6E6E4E4E3E4E3E4E3E3E3E3E3E3E3E3E2E1E2E2E1E1E1DFDEDBDBDCDCDCDCDCDCDBDCDBDCDBDADADAD9DAD7D6D6D6D6D6D5D5D5D5D3D3D1D1D0CFCECECBCBCBCECBCACAC9CAC9C9C9C8C9C8C6C8C8C8C8C8C9C9CAC9C9CACACACECBCECECBCBCECECECBCECFD0D1D1D1D3D1D1D5D5D3D1D1D1D1D3D5D5D5D6D6D6D5D5D6D7D7D9D9D9D9D9D7D9DADADADADBDADADADADCDCDBDAD9DADBDBDEDBDBDBDBDBDBDBDCDCDEDBDBDBDBDBDBDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E27D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17ACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000000047777778797A7B7B7C7D7F80818284858688898B8D8F91939497999B9D9FA1A4A6A9ABAEB0B3B6B8BBBDC0C2C5C7CACCCED1D3D6D8DADCDEE0E2E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBEAE8E6E5E2E1DEDDDBD8D6D4D2CFCDCAC89708000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F8F8F8F7F6F6F6F5F5F5F5F3F3F3F3F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEDEDEDEDEDEDEDEDECECECECECECECECECECECECECECECECEDEDEDEDEDEDEDEFEFEFEFEFEFEFF0F0F0F0F0F0F1F1F1F3F3F3F3F5F5F5F5F6F6F6F7F8F8F9F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F8F8F8F8F7F7F6F6F6F5F5F5F5F5F5F3F3F3F3F3F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEDEDEDEDECECECECECECECECEBEBE9E9E9E9E9E8E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E5E5E5E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E0D5D7D7D9D9DADADADBDCE1E7DAD5D5D5D5D7D6D7D7D9D7D7D7D9D9D9DAD9DADBDADBDBDBDADADADCDCDCDCDBDEDEDFDEDFDEDEDEDEDEE1E1E1E1E1E1E1E1E1E1E2E2E3E4E4E4E4E4E6E6E4E3E6E6E6E6E6E4E4E3E3E2E3E3E2E2E2E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E3E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFE1E1DEDFDEDEDEDEDEDEDEDEDEDEDCDCDBDBDBDCDBDBDCDBDADBDAD7D7D7D7D9D9DADADADADADAD9D7D7D6D6D7D5D5D1D1D1D1D1D3D1D1D3D1D1D1D3D1D1D0D0D0D0D0CFCFCFCECECECFCFCECECFCECECFCFCFCFCFD0D1D1D3D1D1D1D0D0D0D0D0D0D1D0D1D1D1D3D1D5D5D5D5D6D5D5D5D6D6D7D5D6D7D7D7D7D6D7DADADADBDCDCDCDADBDBDBDADAD9D7D9D9D9D9DAD9D7DADBDBDADADAD9DADADADADCDEDEDEDEDEDFDEDEDEDFE1DEDEDEDEE1DFE1DFDFDEE1E1DFDFDEDFE1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4DC480F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000000055777778797A7B7C7D7D7F808183848586888A8B8D8F91939597999B9DA0A2A5A7AAACAFB1B4B6B9BBBEC0C3C6C8CACDCFD2D4D6D8DBDCDEE1E2E4E6E7E9EBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EEEDEBEAE9E7E5E3E1DFDDDBD9D7D4D2D0CECBC9AE08000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F8F8F7F7F6F6F5F5F5F5F3F3F3F1F1F1F0F0F0F0F0EFEFEFEFEDEDEDEDECECECECECECECECECECECECECECECECECEBEBECECECECECECECECECECECECECECECECECEDEDEDEDEFEFEFEFF0F0F0F0F0F1F1F3F3F3F3F5F5F5F5F6F6F7F8F8F8F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F8F8F8F7F7F6F6F6F5F5F5F5F5F5F3F3F3F3F1F1F1F0F0F0F0F0F0F0EFEFEFEFEDEDEDEDECECECECECECECEBEBE9E9E9E8E8E8E8E8E7E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E5E5E5E5D7C8C9C6C6C9CACACBCECED1DECFC8C8C9C8C8C8C8C8C8C9CACACBCAC9CAC9C9C8C9C9C9CACBCBCFD0D0D0CED0D1D0D1D1D0D1D3D3D5D6D5D5D5D6D7D7D7D7DAD9D9DADADADADBDCDCDCDCDCDCDBDCDBDBDCDBDBDBDCDCDBDBDBDADADBDCDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADAD9D9D7D9D9D7D9D7D7D7D7D7D7D7D7D6D6D5D5D6D5D6D7D7D7D7D7D5D5D6D6D7D7D7D7D7D7D7D6D5D5D5D3D3D1D1CFCFD0CFCFCECECBCECECECACAC9C8C9C8C6C8C6C6C8C8C9C9C9C6C5C6C6C9C6C8C9CAC9C9C9CAC9C9C9CAC9C9C9C8C8C8C8C8C9C8C8C6C8C6C6C5C5C6C6C6C6C6C6C5C5C4C4C4C4C4C4C4C5C5C5C5C5C5C6C8C9C9C8C8C6C6C5C6C6C9C9C9CACACBCACECFCFD0D1D1D1D0D3D3D3D5D5D5D6D7DADADADBDBDBDBDADBDBDBDADBDBDBDBDBDEDCDADADADADADADBDCDBDBDADADBDEDEDEDFE1E1E2E1E2E2E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9B2240F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000000000055E777778797A7B7C7D7E7F808183848587898A8C8E8F92939698999C9EA0A3A5A8AAADAFB2B4B7B9BCBFC1C4C6C9CBCED0D2D4D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F1F0EFEEECEAE9E7E6E4E2E0DEDCDAD8D6D3D1CECCCAB718000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0F0F0EFEFEFEDEDEDECECECECECECECEBEBE9E9E9E9E9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9EBEBECECECECECECECEDEDEDEFEFEFF0F0F0F0F0F1F1F3F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F9F9F8F8F8F7F7F6F6F6F5F5F5F5F5F3F3F3F3F3F1F1F1F0F0F0F0F0EFEFEFEFEFEDEDEDECECECECECECEBE9E9E9E9E8E8E8E8E7E7E7E7E7E7E7E5E5E5E5E5E5E5E4E4E4E4E4E3E3E3E3E3E3E3E1E1E1E1E1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E1E1E1E3E3E3E3E3E3E3E4E4DCD0CFD0CFD0D0D0D0D0CFD5DCCAC4C4C3C3C5C6C6C8C9CAC9C9C9CACBCECECECBCBCECECFCFCECECECFD0CECFCFCFD0D0D0D0D0D0D0CFCFCFD0CFCECECFCFD0D0D1D1D3D3D1D1D0D1D3D3D5D5D5D6D5D7D7D7D5D5D3D1D1D3D5D3D1D1D1D1D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D7D7D9DADADADAD9D9D9D9D9D9DADBDADAD9D7D7D6D5D5D5D3D3D5D5D5D7D7D7D5D3D5D5D3D3D3D1D1D3D3D3D3D1D1D1D0D1D1D0D0D0CFCFCFD0D0D0D0D0D0CFCECECECACAC9C9C9C9C9C9C9C9C6C6C6C5C5C5C5C5C4C4C4C4C4C5C5C5C4C5C5C4C4C4C4C4C4C1C1C1C4C4C4C5C5C5C5C5C5C5C3C4C3C4C5C5C5C6C6C6C8C6C5C5C5C5C5C5C6C6C6C5C6C8C6C9C6C8C9C8C6C8C8C9C9C9C9C9CACACACACACBCBCBCBCBCECECECECED0CFD1D3D1D1D5D5D1D3D3D5D7DADADADADADAD9D9D9DAD9D9D7D7D7D7D9D9D7D9D7D7D9D9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDC9C150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000000E687778787A7A7B7C7D7E7F808183848687898A8D8E90929496989A9C9FA1A4A6A9ABAEB0B3B5B8BABDC0C2C5C7C9CCCED0D3D5D7D9DCDEE0E2E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBEAE8E6E5E2E1DEDDDBD8D6D4D2CFCDCAC02F000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0F0EFEFEFEDEDECECECECECEBE9E9E9E9E8E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E9E9E9EBEBECECECECECEDEDEFEFEFF0F0F0F0F1F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F9F9F8F8F8F7F7F6F6F5F5F5F5F5F3F3F3F3F1F1F1F0F0F0F0F0EFEFEFEFEDEDEDECECECECECECEBE9E9E9E8E8E8E7E7E7E7E7E7E7E5E5E5E5E5E4E4E4E4E3E3E3E3E3E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE0E0E0E0E0E0E0E0E0E0E0E0E0E0D5C8C8CACACBCACBCBCBCBD1DAC9C1C4C4C4C5C6C6C6C6C8C9CACBCBCBCBCECFCFCFD0D0D0D0D0D0D0D1D1D3D3D5D5D5D5D5D3D3D5D6D9D9D9D9D9DADBDBDBDADADBDBDBDBDBDBDBDCDADCDEDEDEDEDEE1E1E1E1E1E1E2E3E4E3E3E3E3E2E2E1E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDAD9D9D7D6D6D6D6D7D9D9D9D7D9D9D9D7D6D6D6D6D5D5D5D6D5D5D5D5D5D3D3D1D0D0D0D1D3D1D1D3D5D5D5D5D6D7D5D5D5D1D1D0D0D0CFCFCECBCBCACAC9CACACAC9C9C9C9C9C9CAC9CAC9CAC9C9CACAC9C9C9C9C9C9C9C9C9C6C6C8C8C8C6C6C5C5C5C6C6C6C6C8C8C6C6C8C8C8C8CACACACACACACACACACACECECECBCECBCBCFCFCFD0D0D0D0D1D0D1D1D0D0D0D0D1D3D5D5D5D6D7D9D9DADADAD9DADBDCDEDEDEE1E1E1E2E3E4E4E4E4E4E4E6E6E4E3E6E4E4E4E4E4E4E4E4E3E3E2E1E3E3E3E3E3E3E3E3E3E4E3E3E2E2E1E2E2E1E1E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3750F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000018727778787A7A7B7C7D7E7F818283858688898B8D8F91929497989B9D9FA2A4A7A9ABAEB0B3B6B8BBBDC0C3C5C7CACDCFD2D4D6D8DBDCDEE1E2E4E6E7E9EBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1F0EEEDEBEAE9E7E5E4E1DFDDDBD9D7D4D2D0CECBC947000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F1F0F0F0F0EFEFEDEDECECECECEBE9E9E9E8E8E7E7E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E7E7E7E7E7E7E7E8E8E8E9E9E9EBECECECECEDEDEFEFF0F0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F9F9F8F8F8F7F7F6F6F5F5F5F5F5F3F3F3F1F1F1F0F0F0F0F0EFEFEFEDEDEDECECECECECEBE9E9E9E8E8E8E7E7E7E7E7E7E5E5E5E5E4E4E4E3E3E3E3E1E1E0E0E0E0E0E0E0E0DEDEDEDEDEDEDDDDDDDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDDDDDEDEDEDEDCD5D7D7D7D9D9D9D7DADAE1E3D7D1D3D5D5D5D6D7D7D9D9D7D7D9D9D7D7D9D7D7D7D7D9D7D9D9D9D7D7D7D9DADADADADADADADADCDBDCDBDBDADCDCDBDCDCDBDBDBDBDCDBDCDBDCDCDCDCDCDBDCDCDBDEDBDBDCDEDEDEDEDEDEDEDEDFE1E1E1DFE1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1DFDFDFE1DFE1E1E1E1E2E1E1E1E1E1DEE1DFDEDEDEDCDEDEDFDFDFDFDEDEDEDBDBDEDCDEDEDCDCDADAD9DADAD9D7D6D3D1D1D1D1D1D0D0D0D0D0CFCECBCACACBCBCBCBCACBCBCBCACACBCBCBCACBCACBCBCBCBCAC9C8C8C8C5C6C6C6C8C8C8C8C5C5C5C5C6C9C9C9C6C8C8C8C5C6C6C8C6C6C6C9CACACACBCAC9CACACAC9C9CACBCBCACACACACACBCACACACBCBCBCECBCECFD1D1D3D5D5D5D6D7D7D6D5D6D6D5D5D7D7D9D9D9D7D9DADADADAD9D7D9D7D9DADADADAD9DADAD9DADBDBDBDADADADADADBDAD9DADADBDBDBDADAD9D9DAD7D7DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBD5460F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000021777778797A7B7B7C7D7F808182848586888A8B8D8F91939597999B9DA0A2A5A8AAADAFB2B4B7B9BCBFC1C4C6C9CBCDD0D2D4D7D9DBDDDFE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F4F3F2F0EFEEECEAE9E7E6E4E2E0DEDCDAD8D6D3D0CECCC968000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F0F0F0F0EFEFEDEDECECECEBE9E9E8E8E7E7E7E7E7E5E5E5E5E5E4E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E5E5E5E5E5E7E7E7E7E7E8E8E9E9EBECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F9F8F8F8F7F7F6F6F5F5F5F5F3F3F3F3F1F1F0F0F0F0EFEFEFEFEDEDECECECECECEBE9E9E9E8E8E7E7E7E7E7E5E5E5E5E4E4E4E3E3E3E1E1E0E0E0E0E0E0DEDEDEDEDDDDDDDDDCDCDCDCDCDCDCDCDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADCDCDCDCDCD0C5C6C8C6C9CACACBCECED5DECAC3C5C6C8C9CACBCECBCBCACACECECED0D0D0D1D1D1D0D1D3D3D3D3D1D3D5D5D3D3D5D5D5D6D6D7D7D7D7D7D6D6D7D7D7D7D9D9D9DADBDADADADBDBDCDEDEDFDFE1E1E1E2E2E2E1E1E1E1E1E1E1DFDFE1E1E1DEDEE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADAD9D9D7D9D9DADADADAD9DAD7D7D9D9D6D7D9D9D7D6D5D5D5D5D1D0D0D1D0D3D0D0D1D0CED0CFD0D1D1D0D0D0D0CFCFCECECECBCBCECBCBCECECBCBCECECECBCAC9CACAC9CACACACACAC9C9C9C6C6C6C6C5C5C5C5C5C6C6C5C5C5C5C5C5C4C5C5C5C6C6C6C5C6C6C6C5C5C4C4C4C4C4C4C5C5C4C4C5C5C4C4C4C5C4C4C5C4C5C5C6C5C6C5C5C5C5C5C8C8C8C9C9C9CACAC9CACBCBCBCFD0D1D1D1D3D5D3D3D5D5D5D6D6D6D6D5D6D6D7D9D7D9D9DADADCDBDEDEDEDEDEDEDEDEDFDFDFDEDFDEDEDCDCDEDEDEE1E1E1E1E1E1E2E3E4E4E4E4E3E4E4E4E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6CE260F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000034777778797A7B7C7C7D7F808183848587898A8C8E8F92939698999C9FA1A3A6A8AAADB0B2B5B7BABDBFC2C4C7C9CBCED0D3D5D7D9DCDEE0E2E4E5E7E9EAECEEEFF0F1F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F0EFEEECEBEAE8E6E5E3E1DEDDDBD8D6D4D2CFCDCA87000000000000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0F0EFEFEDECECECECE9E9E8E8E7E7E7E7E5E5E5E4E4E4E3E3E3E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E3E3E3E4E4E4E5E5E5E7E7E7E7E8E8E9EBECECECEDEDEFEFF0F0F0F1F1F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F9F8F8F7F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0F0EFEFEFEDEDEDECECECECEBE9E9E8E8E8E7E7E7E7E5E5E5E5E4E4E3E3E3E1E0E0E0E0E0E0DEDEDEDDDDDDDCDCDCDCDCDCDADADADADADADADADAD9D9D9D9D9D9D8D8D8D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D8D9D9D9D9D9D9DADADAD1C5C5C4C4C6C8C9C9C9C9CED9CAC3C4C4C3C3C3C4C4C4C5C4C4C4C4C5C5C6C5C6C5C6C6C8C6C6C8C8C9CBCECFD0D0CFCFD0D0D1D0D0D3D1D3D1D3D3D3D3D1D1D1D1D1D3D5D3D5D6D7D7D7D7D9D9D9D9DADADADADAD9D9D7DADADADADBDADADADADBDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFDFE1E1E1E1E1E1E2E3E4E3E3E3E3E1E1E1DEDEDEDBDBDBDADADADAD9D7D7D6D6D7D6D6D5D6D5D3D1D1D1D1D0D0D0CECBCECECECECECBCBC9C9C8C8C9CAC9C8C6C6C6C6C5C3C4C4C4C4C4C4C1C0BFBFBDBBBBBBBBBBBBBBBBB9B9B9B9B9B8B8B6B6B6B6B5B6B5B5B5B3B3B3B3B3B2B2B2B3B5B5B5B8B9B9B9B9BCBDBCBBBBBBBBB9BBBCBCBBBBBBBBBCBCBDBFBFBFBFBFC0C3C3C4C5C4C5C6C8C8C9CACBCBCBCECED0D0D1D1D3D1D1D3D6D7D6D7D7D7D7DADADADADCDCDCDEDFE1E1E1E3E3E4E3E3E3E3E4E6E6E7E9E9E7E7E6E7E9E9E9E9E9E9E9E9E9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4B3150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000004B777778797A7B7C7D7E7F808183848687898A8D8E90929496989B9D9FA1A4A6A9ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD1D4D6D8DBDCDEE1E2E4E6E8EAEBECEEEFF0F2F3F4F5F5F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F1F0EEEDEBEAE9E7E5E4E1E0DDDBD9D7D4D2D0CECBA9080000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEFEDEDECECEBE9E9E8E7E7E7E7E5E5E4E4E3E3E1E0E0E0E0E0E0E0DEDEDEDEDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDEDEDEDEE0E0E0E0E0E0E1E1E3E3E4E4E5E5E7E7E7E7E8E9E9ECECECEDEDEFEFF0F0F1F1F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F9F8F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0F0EFEFEFEDECECECECEBE9E9E9E8E8E7E7E7E7E5E5E5E4E4E3E3E3E1E0E0E0E0E0DEDEDEDDDDDDDCDCDCDCDADADADADADADAD9D9D9D9D8D8D7D7D7D7D6D6D6D6D6D6D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D6D6D6D6D6D6D7D7D7D2C9C9CACACBCECECFCFCFD5DACBC6C6C5C5C6C5C6C6C8C6C8C8C8C9C9C9C9CACAC9CACACAC9C9C9C9CACBCBCECECBCECFCFCFD0D0D1D5D3D3D5D6D5D5D5D7D6D6D5D5D5D5D5D6D7D7D7D9D9D9DADADADBDADADBDCDCDCDBDEDBDCDBDADBDCDCDEDEDBDBDADBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D6D6D5D7D7D6D7D9D9D9D9DAD9D9D7D7D7D7D7D7D7D7D7D7D9D7D5D3D3D3D3D3D3D0D0D1D1D0D0D0D0CFCECECECBCECECFCFCFCECBCECBC9CAC9C9C6C9C5C4C3C3C3C3C1C3C1BFC0BFBFBFBFBFBFBDBDBDBDBCBCBBBBB9B9B9B9B9B9B9B9B8B8B8B8B9B6B8B9B9B8B8B6B6B6B6B5B5B3B3B5B6B8B8B8B8B9B9B9B8B8B8B8B9B9B9BBBBBDBCBCBDBBBCBDBFBFBFBFC1C3C3C3C4C4C4C3C4C5C6C6C6C9CACACACBCECED0D1D1D1D1D1D1D1D1D3D1D5D5D7D7D7D9D9DAD9D9DADADADADBDBDBDEDEDCDCDCDCDCDCDCDCDEDEDEDEDEDEDEDEDEDCDEDEDEDEDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEF9B0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30700000000000000000000000000000000000000000000000000000000000000055A7778787A7A7B7C7D7E7F808283858688898B8D8F91929497999B9DA0A2A5A7AAACAFB1B4B7B9BCBEC1C4C6C8CBCDD0D2D4D7D9DBDDDFE1E3E5E7E9EAEBEDEEF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCDAD8D6D3D0CECCB9180000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEFEDECECECE9E8E8E7E7E7E5E5E4E4E3E1E0E0E0E0DEDEDEDDDDDDDCDCDCDCDCDCDCDCDCDADADADADADADADADCDCDCDCDCDCDCDCDCDDDDDDDEDEDEE0E0E0E0E1E3E4E4E5E5E7E7E7E8E9E9ECECECEDEFEFF0F0F0F1F3F3F5F5F5F6F6F7F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F8F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0EFEFEFEDEDECECECEBE9E9E8E8E7E7E7E7E5E5E5E4E4E3E3E1E0E0E0E0E0DEDEDDDDDDDCDCDCDADADADADADAD9D9D9D8D8D7D7D7D6D6D6D6D4D4D4D4D4D4D3D3D3D3D3D3D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D3D3D3D3D3D3D4D4D4C7B9B9BBBBBCBFBFBFBFBFC4CEBFB8B9B8B9BBBCBDBDBDBDBFBFC0C0C0C1C3C3C3C4C5C6C6C9CACAC9C9CACBCACBCBCBCECECFCFD0D0D0D0D1D0D1D1D5D5D5D5D5D6D6D7D9DAD9DADADADADADBDBDBDADADADBDCDCDEDEDEDEDEDEDEDCDCDBDCDEDEDFDFDFDFE1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D7D9D9D7D7D7D9DADBDBDBDBDBDADADAD9DAD9D7D7D7D6D6D7D6D6D5D5D3D5D5D3D1D0D0CFD0CFCFCFCFCECFCED0CFCECBCBCBCECECACBCECECBCBCACACACACACACAC9C9C6C6C6C6C5C5C5C5C3C4C1C1C0BFBFBFBFBFBFBDBDBBB9B8B9B8B6B6B6B6B6B5B5B5B5B5B6B6B5B3B3B2B2B1B1B1B2B2B2B3B3B3B3B3B6B6B8B8B8B8B8B8B9B9B9B9BBBBBDBFBFC0C1C1C1C0BFC1C0C0C0C1C1C3C3C3C5C4C3C3C4C4C5C5C6C9C6C8C9C9C9CBCECFD1D1D3D5D5D7D7D9DADBDCDCDCDEDEDFE1E1E3E3E3E3E3E3E3E3E3E4E3E3E3E4E4E3E3E3E4E3E3E3E4E4E4E4E4E3E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DA670F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC407000000000000000000000000000000000000000000000000000000000000000E697778787A7B7B7C7D7F808182848586888A8B8D8F91939597999C9EA0A2A5A8AAADAFB2B4B7BABCBFC1C4C6C9CCCED0D3D6D8DADCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F1EFEEECEBEAE8E6E5E3E1DFDDDBD8D6D4D2CFCDCA300000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F6F5F5F5F3F3F1F0F0EFEFEDECECECEBE9E8E7E7E5E5E4E4E3E1E0E0E0DEDEDDDDDCDCDCDCDADADADADADADAD9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9DADADADADADADADCDCDCDCDDDDDEDEE0E0E0E1E3E4E5E5E7E7E7E8E9EBECECEDEDEFF0F0F0F1F3F3F5F5F5F6F6F7F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0EFEFEDEDECECECEBE9E9E8E8E7E7E7E5E5E5E4E4E3E3E1E0E0E0E0DEDEDDDDDCDCDCDCDADADADAD9D9D9D8D7D7D7D6D6D6D4D4D4D4D4D3D3D3D3D1D1D1D1D0D0D0D0D0D0D0D0D0D0D0CECECECECECECECECECCCCCCCCCECECECECECECECED0D0D0D0D0D0D0D0D0D0D0D1CAC0C1C1BFC0C1C3C1C3C3C8D1C1BBBBBDBDBFBDBFBFC1C1C1C4C5C5C5C5C5C4C5C5C6C6C5C5C5C5C8C9C8C9C8C9C9CACACBCECECECFD0D0D0D1D3D3D3D3D3D5D6D6D7D7D7D7D9DADBDAD9DADADCDCDEDEDFDFDFDFE1DFDFE1E1E2E3E3E2E2E1DFDFE1E1E1E1E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EEEFEEEEEEECECECEEEEECEEEFEEEEECECECEEEEEEECEEECEBEBECEAE9E9E9E9E9E7E7E6E6E4E4E3E2E1E1DFDFDFDEDEE1DFDFDEDEDEDEDCDAD9D6D5D5D5D5D3D0D0D0CECBCBCACACAC9C9C6C6C4C4C3C3C3C3C1C1C0BFBFBDBDBBBBB9B9B8B8B8B8B8B8B8B8B6B8B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B8B8B6B6B6B9BBBBBCB9BBB9B9B9BBBBB9B9B9B9BCBDBDBFC0C1C0C1C1C1C3C3C4C4C5C5C6C9CACBCBCBCECED0D0D3D5D6D6D7D7D7D9D9D9DADBDBDBDBDBDBDCDEDEDFDFE1E1E3E3E3E6E6E6E4E6E6E4E4E4E6E7E7E7E7E9E9E9E9E7E7E7E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2DA470F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC407000000000000000000000000000000000000000000000000000000000000001C727778797A7B7B7C7D7F808183848587898A8C8E8F929396989A9C9FA1A4A6A9ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD2D4D6D8DBDDDEE1E3E5E6E8EAEBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EFEDECEAE9E7E5E4E2E0DDDCD9D7D5D2D0CECB580000000000000000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F6F5F5F5F3F3F1F0F0EFEFEDECECEBE9E8E7E7E5E5E4E3E3E0E0E0DEDEDDDCDCDCDADADADAD9D9D9D8D8D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D6D7D7D7D7D8D8D9D9DADADADADADCDCDCDDDEDEE0E0E1E3E4E4E5E7E7E7E8E9ECECECEDEFEFF0F0F1F3F3F5F5F5F6F6F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F1F0F0F0EFEFEDEDECECECEBE9E8E8E7E7E7E5E5E5E4E3E3E1E0E0E0E0DEDEDDDDDCDCDCDADADADAD9D9D8D7D7D7D6D6D4D4D4D4D3D3D3D1D1D1D0D0D0D0D0D0D0D0CECECCCCCCCCCCCCCCCCCCCCCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCCCCCCCEC6BCBDBDBDBDC0C1C1C1C1C5D0C1BBBBBCBDBCBCBDBFBFBFC0BFC0BFC1C3C3C3C3C4C5C5C4C4C4C5C6C6C8C9C9C9CACBCBCFCFD0CFCFD0D0CFD0D0D3D3D3D5D3D5D5D6D5D5D6D6D6D7D6D7D7D9D7D9D9DADBDBDADADADBDCDEDEDFDEDFDFE1E1E1E1E2E3E2E3E4E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1DFDEDEDEDEDFDFDFE1E2E2E3E2E2E1E1E3E2E1E1E1E1E1E1E1E1DFDFDEDEDEDEDEDCDCDBDBDBDBDBDADADADAD9D7D7D7D7D5D3D5D3D3D3D1D3D1D1D3D1D1D3D1D0D0D0CFCECECBCACBCAC9C9C9C8C6C6C5C4C5C4C3C3C3C3C3C1C1C1C1C0C1C3C1C0C0BFBFBDBDBDBDBDBDBDBDBDBDBCBBBCBCBDBDBDBDBFBDBDBFBFBFBFC0C1C1C1C1BFC0BFC1C1C1C3C4C5C5C5C5C5C6C9C9C9C9C9C9CACACBCFCECECFD0D0D1D3D3D5D6D9D7D9DADBDCDCDEDEDFDFDEDFE1E1E2E1E2E2E3E4E6E6E9EAE9E9E7E6E6E6E6E6E7E9E7E7E9E9E9E9E9E7E7E7E7E9E9E9E9E9E9E7E7E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5BF3C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC400000000000000000000000000000000000000000000000000000000000000002B777778797A7B7C7D7E7F808183848687898A8D8E90929496989B9DA0A2A4A7A9ACAEB1B4B6B9BCBEC1C3C6C9CBCED0D2D4D7D9DBDDE0E1E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCDAD8D6D3D1CECC89000000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F8F6F6F5F5F5F3F3F1F0F0EFEFEDECECEBE9E8E7E7E5E4E4E3E0E0E0DEDDDCDCDADADADAD9D9D8D7D7D6D6D6D4D4D4D4D4D3D3D3D3D3D3D3D3D3D3D3D3D3D4D4D4D4D4D4D6D6D6D7D7D8D9D9DADADADCDCDCDDDEE0E0E0E3E4E5E5E7E7E8E9EBECECEDEFEFF0F0F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F1F0F0F0EFEFEDEDECECEBE9E9E8E7E7E7E5E5E5E4E3E3E0E0E0E0DEDEDDDDDCDCDADADADAD9D9D8D7D7D6D6D4D4D4D4D3D3D1D1D1D0D0D0D0D0D0CECCCCCCCCCCCCCCCBCBCBCBCACAC9C9C9C9C9C9C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C9C9C9C9C9CACACBCBCBBEB1B1B2B1B1B2B2B5B6B6BCC5B6B1B1B1B2B2B3B3B3B6B5B6B9B9BBBCBDBFC0C1BFC0C3C3C3C5C5C6C8C9C9CACBCACACBCECECECFD1D3D3D5D6D7D7D9DADAD9DADBDCDEDEE1DFE2E1E3E2E2E1E2E3E3E3E2E3E4E3E3E4E4E3E3E3E4E3E4E4E3E4E6E6E4E4E3E3E2E2E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E3E4E4E3E3E3E3E3E3E3E3E3E1E1DFDEDEDEDEDEDEDFDFDFDFDFDFDFDFE1E1E1E1DEDFDFDEDEDBDAD9DADADAD9D7D7D7D6D6D6D7D6D3D5D1D3D3D1D1D0CFCECBCACAC9C5C5C5C5C5C4C3C3C1C0C0BFBFBDBDBDBDBBB9B8B8B8B8B6B6B6B6B5B3B3B3B2B2B2B2B2B2B2B2B1B1B1B1B1B1B0B1B1B1B2B2B3B3B3B2B2B2B1B2B3B1B1B1B1B1B1B3B5B3B5B6B5B6B6B8B9B9B9BBBBBCBCBCBCBDBDBFBFC0C1C1C3C4C3C4C5C6C8C9C9CACECED0D0D0D1D1D1D3D5D5D5D7D6D7D9DADCDBDCDEDEE1E1E1E1E2E3E3E3E2E3E3E4E4E4E3E4E6E7E6E7E9E9E7E6E6E6E6E4E3E2E1E1E1E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2C8260F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000000000000000000047777878797A7B7C7D7E7F808283858688898B8D8F91939597999C9EA0A2A5A8AAADAFB2B4B7BABCBFC1C4C7C9CCCED0D3D6D8DADCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F5F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F1F0EEEDEBEAE9E6E5E3E1DFDDDBD9D7D4D2CFCDAA08000000000000000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEFEDECECE9E8E7E7E5E5E4E3E0E0E0DEDDDCDCDADAD9D9D8D7D6D6D4D4D4D3D3D3D1D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D1D1D1D3D3D3D4D4D4D6D7D7D8D9DADADADCDCDDDEE0E0E1E3E4E5E5E7E7E8E9ECECEDEFEFF0F0F1F3F3F5F5F5F6F7F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F0F0F0EFEFEDEDECECEBE9E8E8E7E7E7E5E5E4E3E3E0E0E0DEDEDDDDDCDCDADADADAD9D8D7D7D6D6D4D4D4D3D3D1D1D1D0D0D0D0CECECCCCCCCCCCCBCBCBCACAC9C9C9C7C7C7C7C7C7C7C7C7C5C5C5C5C5C5C5C5C5C5C5C5C5C5C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C5C5C5C5C7C7C7C7C7C7BAACAEAEAEB1B2B2B3B5B5BBC5B6B1B1B0B1B1B1B1B2B3B6B6B6B6B5B6B5B6B5B6B6B6B9B9BBBFBFBFBFBFC0C3C1C3C3C3C4C6C6C9C9C9C9CACACBCECECFD0D0D0D1D5D5D5D6D7D9D7D7D9D9D7D9D7D9DADADADADADADADADADADADADBDBDBDBDBDBDBDEDEDEDEDEDEDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDADBDBDBDBDADADAD9D7D7D9D9D7D7D7D7D7D6D7D6D6D6D5D5D5D3D3D3D3D0D0D1D0D1D1D0D0D0D0CECECECECFD0CFCFCFCBCBCACAC9C9C8C6C5C4C3C3C3C1C0BFBFBDBFBCBCB9B9B8B6B5B5B5B5B3B3B3B3B3B3B3B1B0B1B1B2B0B1B1B1B1B1B1B1B0B0B1B1B0B0B0AEAEAEAEAEB0AEAEACAEACACABABACACACACACACACACAAA8AAAAAAAAAAABACABACACACACAEB1B0B0B0AEAEAEAEAEB1B2B2B3B5B6B5B8BBBBBDBFBFBFBFC1C1C3C3C3C5C5C8CACBCBCECFCFCFCED0D0D1D0D1D1D1D3D5D6D6D5D3D5D5D7D7D7D9D9D9D9DADADBDCDCDEDFE1E1E1E1E2E3E4E6E6E4E4E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCAD1C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D00000000000000000000000000000000000000000000000000000000000000055E7778787A7A7B7C7D7F808183848586888A8B8D8F919396989A9C9FA1A4A6A8ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD2D4D6D8DBDDDFE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCD9D7D5D3D0CEC3180000000000000000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F5F3F3F1F0F0EFEFEDECECE9E8E7E7E5E4E3E1E0E0DEDDDCDADADAD9D8D7D6D4D4D4D3D1D1D0D0D0D0D0CECECCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCECED0D0D0D0D1D1D3D3D4D4D6D6D7D8D9DADADCDCDDDEE0E0E1E3E4E5E7E7E8E9ECECEDEFEFF0F0F1F3F3F5F5F6F6F7F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0EFEFEDEDECECEBE9E8E8E7E7E5E5E4E4E3E1E0E0DEDEDDDCDCDCDADADAD9D8D7D7D6D6D4D4D3D3D1D1D0D0D0D0CECCCCCCCCCCCBCBCBCAC9C9C9C7C7C7C7C7C7C5C5C5C5C5C4C4C4C4C4C3C3C3C3C3C3C3C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C3C3C3C3C3C3C3C4C4C4C4C5BDB2B3B3B3B3B2B2B1B2B2B5BFB1AAAAAAAAAAABACAEAEB1B1B1B2B3B2B3B6B6B9B6B6B8B9B9BBBBBCBDBFBFC3C3C3C4C4C4C3C4C5C6C9C6C6C6C8C6C8C8CACBCACBCECFCFD0D1D3D3D1D1D3D5D3D3D5D6D7D7D9D7D7D6D6D7D7D7D7D5D5D7D7D7D7D9D9D9D7D7D7D7D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADAD9DADADADADADBDBDBDBDBDBDBDADADBDBDBDADADADADAD7D7D6D5D6D7D7D7D7D7D7D7D5D3D5D3D1D1D3D0D0D0D1D0CFCFCBCACBCECAC9C9CACAC9C8C6C6C5C3C3C3C3C1C0C0C0BFBFBFBFBFBFBDBDBBB9B8B8B6B5B5B2B3B2B5B3B1B2B1B1B0B0AEAEACACAEACACACABABAAAAAAAAAAAAA8AAA8A8AAA8A7A8A8A8A7AAA8AAAAA8A8A8AAABABAAABACB0B0AEB1B1B1B1B1B1B1B1B1B2B2B2B2B2B2B3B6B5B5B6B6B6B8B9B9BCBDBDBFC0C1C1C3C3C4C4C4C5C8C9C9C9CBCBCECED0D1D0D0D0D1D5D6D7D7DADADBDBDEDBDCDEDFE1E1E1E1E1DEDEDEE1E1E1E1E1DFE1E2E3E4E3E4E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6AD150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000000000000000000E6E7778797A7B7B7C7D7F808183848587898A8C8E90929496989B9D9FA2A4A6A9ACAEB1B4B6B9BCBEC1C4C6C9CBCED0D3D5D7D9DCDEE0E2E4E5E7E9EAECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F1EFEEECEBEAE8E6E5E2E1DEDCDBD8D6D3D1CFCD410000000000000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F6F5F5F3F3F1F0F0EFEFEDECECE9E8E7E7E5E4E3E0E0DEDDDCDADADAD9D7D6D4D4D3D3D1D0D0D0CECCCCCCCCCCCBCBCBCBCACACAC9C9C9C9C9C9C9C9CACACBCBCBCBCBCCCCCCCCCED0D0D0D0D1D3D4D4D6D6D7D9DADADCDCDDDEE0E0E3E4E5E7E7E8E9ECECEDEFEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEFEDECECECE9E8E8E7E7E5E5E4E3E1E0E0E0DEDDDCDCDADADAD9D9D7D7D6D4D4D4D3D3D1D0D0D0D0CECCCCCCCCCBCBCACAC9C9C7C7C7C7C7C5C5C5C5C4C4C4C3C3C3C1C1C1C1C1C1C1C1C1C1C0C0C0BEBEBEBEBEBEBEBEBEBEBDBDBDBDBDBDBEBEBEBEBEBEBEBEBEC0C0C0C0C1C1C1C1C1C1BDB6B9BBBBBBBBB9BBBBBBC1C8BBB2B2B1B1B1B1B2B2B2B5B5B5B6B8B8B8B8BBBBBBBBBDBDBFBFC0BFC0C1BFC3C3C1C4C5C5C6C8C6C8C9C9CACACBCFD0D0D1D1D0D1D0D3D3D3D3D3D5D3D3D6D7D9DADADBDAD9D9DADADAD9DAD9D7D7D7D7D9D9DADADADADADBDBDBDBDBDBDBDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E1E1E1E3E2E2E3E4E3E3E2E2E2E2E1E1E1E2E1E2E1E3E1E1E1DEDEDEDEDCDCDAD9D9D7D7D7D9DAD9D9D6D7D7D7D7D6D5D5D5D1D1D0D0D0CFCECBCBC9C8C8C9C5C6C4C4C3C1C1C1BFBFBCBCBBB9B8B6B5B5B2B2B1B1B0AEAEB0B0AEAEACACAEACACACACACACAAAAAAA8AAAAAAA8A8A7A8A7A7A7A7A7A7A5A7A7A7A7A8A8A8ACABABACABABACACACACAEAEAEAEAEB0B1B1B1B2B2B2B3B5B6B8B9B8BBBBBBBCBDBDBFC0C0C1C1C3C5C4C6C6C9C9CACACBCECBCFD1D1D1D3D3D3D3D5D7D7D7D7D9DADADADADADBDEDEDCDFDEE1E2E2E1E1E1E1E1E1E3E3E4E4E6E6E6E4E6E6E4E3E3E3E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9880F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000000000000000000021777778797A7B7C7D7E7F808183848688898B8D8F91939597999B9EA0A2A5A8AAADAFB2B4B7BABCBFC2C4C7CACCCFD1D3D6D8DADCDEE1E2E4E6E8EAEBECEEEFF1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F3F2F0EFEDECEAE9E7E5E4E1E0DDDBD9D7D4D2CFCD6A0000000000000000000000000000000000000000000000000000000000000035F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEFEDECECE9E8E7E5E5E4E3E0E0DEDDDCDADAD9D7D6D4D4D3D1D0D0D0CCCCCCCBCBCAC9C9C9C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C9C9CACBCBCCCCCCCED0D0D0D1D3D4D4D6D7D9DADADCDDDEE0E0E3E4E5E7E7E8E9ECECEDEFF0F0F1F1F3F5F5F5F6F7F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F3F3F3F1F0F0EFEFEDECECECE9E9E8E7E7E5E5E4E3E1E0E0DEDDDDDCDADADAD9D8D7D6D6D4D4D3D3D1D0D0D0D0CCCCCCCCCBCBCAC9C9C7C7C7C7C5C5C5C5C4C4C4C3C3C1C1C1C1C1C1C0C0BEBEBEBDBDBDBDBDBDBDBDBDBDBDBDBBBBBBBBBBBABABABABABABABABABABABABBBBBBBBBDBDBDBDBDBDBDBDBDBDBDBEB4A8A8A8AAAAAAABACAEB1B6BFB0ABAAA8ABACAAABACACABACACAEAEAEB1B1B1B2B2B3B3B6B8B9B9B9BBBCBDBFBFBFBFC0C1C1C3C4C5C6C6C8C8C9CACACBCECFD0D0CFD0D0D1D0D0D0D0D3D5D6D7D7D7D9DAD9D9D9DAD9DADBDADADBDEDCDCDCDBDBDEDEDEDEDEDEDFDFDFDFDFDFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1DFDFDFDFDFE1DFDFE1DFDEDEDEDEDEDEDEDBDCDCDCDEDCDBDCDBDAD9DAD9DAD9D7D7D6D7D7D6D5D5D5D6D6D3D5D3D1D3D1CFCECBCACACAC8C5C4C3C4C4C1C0BFBFBDBCBCBBBBBBB9B8B9B9B6B5B5B3B2B1B1B1B1B1B0AEACACACACACABA8A8A7AAA8AAA8AAAAA8A8A8A7A7A7A7A7A7A7A7A7A5A5A5A5A5A5A5A5A4A5A7A7A8A7AAAAAAAAAAAAABABABABABACACACACACAEAEB0B1B1B2B6B6B8B9BBBCBDC1C1C1C3C3C5C5C6C8C9C9C8CACACACBCBCECFD0D1D0D3D7D7D7D7D9DADCDEDEDEE1E1E1E1E3E3E3E3E3E4E6E6E7E6E7E7E7E7E7E7E7E7E7E9E9EAEBEBEBEEECECEEECEBEAE9E9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEA950F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6350000000000000000000000000000000000000000000000000000000000000038777878797A7B7C7D7E808182848586888A8B8D8F919396989A9C9FA1A4A6A8ABAEB0B3B6B8BBBDC0C3C5C8CBCDCFD2D4D7D9DBDDDFE1E3E5E7E9EAECEDEFF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCDAD8D6D3D0CE9A0000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F6F6F5F5F3F3F1F0F0EFEDECECE9E8E7E5E5E3E1E0DEDDDCDADAD9D7D6D4D4D3D1D0D0CCCCCCCBCAC9C9C7C7C7C5C5C5C5C5C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C7C7C7C7C9C9CBCBCCCCCED0D0D1D3D4D4D6D7D9DADCDCDDE0E0E3E4E5E7E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F6F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F3F3F1F1F0F0EFEFEDECECEBE9E8E7E7E5E5E4E3E1E0E0DEDDDCDCDADAD9D8D7D6D6D4D4D3D1D0D0D0CECCCCCCCBCBCAC9C9C7C7C7C7C5C5C5C4C4C3C3C1C1C1C1C1C0C0BEBEBDBDBDBDBDBDBDBBBABABABABAB9B9B9B9B9B9B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B9B9B9B9B9BABABABAB4ACACACABAEACAEAEAEB0B3BFB1A8A8AAABAEB0AEB1B1B1B2B1B1B1B2B2B2B5B5B3B3B3B6B9B8B9B9B9BBBBBDBDBFC0C0C1C4C4C4C5C5C6C6C8C9C9CBCECECECED0D0D1D3D3D1D3D5D6D7D7D9DADBDBDCDEDCDCDEDFE1E1E1E1E1DEDEDEE1E1E1E1DFDFE1E2E3E4E3E4E4E4E4E4E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F1EFEEEFEEEEEEECECECEEECEBECEEEEECEBEBEBECECECEAEBEBEAE9EAE9E7E6E6E6E4E3E3E2E2E1E1DFDEDEDBDBDADAD9D9DAD9D7D7D6D5D5D3D1CFCBCACAC9C9C8C5C5C4C3C1C0BFBFBFBCBBBBB9B6B6B5B3B3B2B2B1B1B0AEACACAAAAAAA8A7A7A7A5A5A5A5A5A4A4A4A4A4A4A4A4A4A5A4A4A2A2A4A4A4A2A2A4A4A2A2A2A5A5A5A7A5A5A5A5A5A5A5A5A5A5A5A7A8A8A8ACACACACACAEAEB0B0B1B1B2B3B5B8BBBBBBBBBCBDBFC1C3C5C5C6C8C9C9C9CACBCECECECED0D1D1D5D5D6D7D9D9DBDCDCDEDFE1E1E1E1E1E1E1E3E3E4E4E4E7E6E6E6E4E6E6E7E7E9E9E9E9E9E9EAEBEBEBECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3750F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61900000000000000000000000000000000000000000000000000000000000000557778787A7B7B7C7D7F808183848587898A8C8E90929496989B9D9FA2A4A7A9ACAEB1B4B7B9BCBFC1C4C6C9CBCED0D3D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEEDEBEAE9E6E5E3E1DFDDDBD8D6D4D2CFBD1900000000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECECE9E8E7E5E5E3E1E0DEDDDCDADAD8D7D4D4D3D1D0CECCCCCBCAC9C7C7C7C5C5C4C4C3C3C3C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C3C3C4C4C5C5C5C7C7C7C9CBCBCCCCD0D0D1D3D4D6D7D9DADADCDDDEE0E1E4E5E7E7E8E9ECECEDEFF0F0F1F3F5F5F5F6F7F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F3F3F1F1F0F0EFEDEDECECE9E8E7E7E5E5E4E3E1E0E0DEDDDCDADADAD9D7D7D6D4D4D3D1D0D0D0CCCCCCCBCBCAC9C7C7C7C7C5C5C4C4C3C3C1C1C1C1C1C0BEBEBDBDBDBDBDBDBBBABABAB9B9B9B7B7B7B7B7B7B7B7B6B6B6B5B5B5B5B5B5B5B5B4B4B4B4B4B4B4B4B4B4B4B4B4B5B5B5B5B5B5B5B5B6B6B6B7B7B7B7B7AFA5A7A7A7A8A8A7A8A8A8AEB6A7A2A1A2A4A4A4A4A5A5A7A7A8A7A7A7A7AAAAABACAEAEB0B1B3B5B5B3B5B8B9BBBBBDBFC1C3C4C4C5C6C6C9CACACACBCECECFD0D1D1D3D3D1D5D5D5D6D6D7D7D7D9DADADAD9D7D7D7D9D9D9D9DADAD9DADADADADBDCDBDBDBDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DEDEDEDEDEDEDFDEDCDBDBDADBDBDBDCDBDADADADADBDCDCDCDEDEDEDCDEDCDEDEDEDEDCDBDCDBDBDADADBDADAD7D6D6D5D3D3D1D0D0CFCECBCBC9C9C9C6C5C4C4C4C3C3C1BFBDBDBBBBB9B6B6B6B6B3B3B3B2B1B1B0B0AEAEAEACAAAAA8A8A7A7A7A7A7A5A5A5A2A29F9E9E9C9E9F9F9E9E9C9C9E9E9E9E9E9C9C9C9C9C9C9C9B9B9B9B9B9C9C9C9C9C9C9C9C9B9C9C9E9EA1A2A2A4A4A4A4A5A5A7A5A7A8A8A8A8A8AAABACACACAEAEAEB0B2B3B3B6B8B9B9BBBDBFBFC0C3C4C4C5C5C5C5C6C9C9CACBCECFCFD0D0D3D6D6D6D7D7D9DADBDBDBDCDEDBDBDBDBDCDCDCDCDEDEDEDCDBDBDBDBDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D75E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30F00000000000000000000000000000000000000000000000000000000000009697778797A7B7C7D7D7F808183848688898B8D8F91939597999B9EA0A2A5A8AAADAFB2B5B7BABDC0C2C5C7CACDCFD2D4D6D8DBDDDFE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F8F7F6F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCD9D7D5D2D0CE3900000000000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F6F5F5F3F1F0F0EFEFECECEBE8E7E7E5E3E1E0DEDDDCDAD9D7D6D4D3D1D0D0CCCCCBC9C9C7C7C5C5C4C3C1C1C1C1C0BEBEBEBEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEBEBEC0C1C1C1C1C3C3C4C5C5C7C7C9CACBCCCCD0D0D1D3D4D6D8D9DADCDDDEE0E1E4E5E7E7E8EBECEDEFF0F0F1F3F3F5F5F6F6F7F8F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F3F3F1F0F0F0EFEDECECEBE9E8E7E7E5E4E3E1E0E0DEDDDCDADAD9D8D7D6D4D4D3D1D0D0D0CCCCCCCBCAC9C7C7C7C5C5C5C4C4C3C1C1C1C1C0BEBEBDBDBDBDBBBBBABAB9B9B9B7B7B7B7B7B6B6B5B5B5B4B4B4B4B4B3B3B3B3B3B3B2B2B2B2B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B2B2B2B2B3B3B3B3B3B4B4B4B4AA9E9FA19F9F9F9FA1A2A2A7B0A29E9FA1A2A2A2A2A4A4A4A5A5A7A7A7A8A8A8ACACAEAEAEB0B1B1B1B2B3B3B6B9B9BBBCBFBFC0BFC0C3C4C6C6C8C6C9CAC9C9C9C9CBCED0CFCFD0D1D3D3D5D5D5D5D5D5D5D5D6D6D9D9DADCDCDCDADAD9DADBDBDAD9DADADAD9D9DADBDADADADADADADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADADAD9D7D7D7D6D5D5D5D5D5D5D3D3D1D1D0D0CFCFCFCFCECFCFCBCBCECFCFCBC9C9C8C8C8C9C9C9C6C5C5C4C3C1C1BFBDBCBDBBBCBBB9B9B9BBB9B8B8B6B6B5B3B3B2B2B1B0AEAEABAAABAAAAA8AAAAA7A8A7A7A7A7A5A7A4A4A2A2A1A29F9F9E9F9F9F9F9E9C9E9E9E9B9C9C9C9C9C9E9C9E9C9E9E9E9FA1A1A1A1A1A1A2A4A2A2A4A2A2A4A5A5A5A5A5A5A5A7A7A8A7AAAAAAABACACACAEB0B1B1B1B1B1B1B3B3B6B6B8B9B9BCBDBDC0C0C1C1C4C4C5C6C8C8C6C9CACECECFD0D3D3D5D6D9D9D9DADBDBDEDCDBDCDEDFE1DEE1E1E2E1E2E1E2E1E1E1E1DEDEDFE1DFDFDFDEDFDEDEDCDBDEDBDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDE620F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4070000000000000000000000000000000000000000000000000000000000001C777778797A7B7C7D7E7F8182838586888A8B8D8F919396989A9C9FA1A4A6A9ABAEB0B3B6B8BBBEC0C3C6C9CBCED0D2D5D7D9DCDDE0E2E4E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F1F0EEEDEBEAE8E6E5E2E1DEDCDBD8D6D3D1CE6A0000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECEBE9E7E7E5E4E1E0DEDDDCDAD9D7D6D4D3D0D0CCCCCBC9C7C7C5C5C4C3C1C1C1BEBEBDBDBDBDBBBBBABABABABABABAB9B9BABABABABABABBBBBDBDBDBDBDBEC0C1C1C1C3C4C5C5C7C7C9CBCCCCD0D1D3D4D6D7D9DADCDDDEE0E3E4E5E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9F9FAFBFBFBFBFBFBFBFBFBFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F3F3F1F0F0F0EFEDECECEBE9E8E7E5E5E4E3E0E0DEDDDCDADAD9D8D7D6D4D3D1D1D0D0CCCCCCCBC9C9C7C7C7C5C5C4C3C3C1C1C1C0BEBEBDBDBDBBBABABAB9B9B7B7B7B7B7B6B5B5B5B4B4B4B3B3B3B2B2B1B1B1B1B1B1B1B1B1AFAFAFAFAFAFAFAFADADADADADADADADADADADADADAFAFAFAFAFAFAFAFB1B1B1B1B1B1B1B1B0AAACACACAEACACAEACACB1B8AAA5A5A7A7AAA8A8ABABACB0B1B1B1B2B3B5B3B3B5B5B5B5B8B9BBBBBBBBBCBDBDBFBFBFBFBFBFC3C4C5C5C5C4C5C5C6C9C9C9C9CACBCBCECECFCECECFD0D1D3D1D1D3D1D1D3D1D3D5D3D3D3D5D5D5D3D1D1D0D0D1D3D3D5D3D3D3D3D3D5D5D5D6D7D7D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D6D5D3D5D5D5D3D5D5D3D5D5D5D5D5D5D5D3D3D5D5D5D5D6D6D3D1D1D1D0D1D0CFD0CFCECBCBCACACBCAC9C9C8C6C8C8C8C5C5C3C3C1C1C0BFBFBFBDBCBBB9B9B9B8B6B3B3B2B1AEAEAEACACACACACABABAAA8A7A5A7A7A7A5A5A2A5A4A29F9E9C9E9E9E9B9B9B9C9C9B9B9B9B99999797979797979797999797979796969696969496949693939697969697979797999B9B9B9B9B9B9B9C9C9C9E9FA19FA29FA2A2A4A5A7A5A7A7A8A8AAABACAEB0B0B0B0B1B1B1B3B3B6B8B9B9B9B9BBBBBCBCBDBFC0C1C4C5C4C5C6C9CAC9C9C9C9CACBCECFD0D0CFD0D0D0D0D0D0CFCFD0CFD1D0D0D3D3D5D5D5D6D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEA660F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA200000000000000000000000000000000000000000000000000000000000000387778787A7A7B7C7D7F808183848587888A8C8E90929496989B9DA0A2A5A7AAACAFB2B4B7B9BCBFC1C4C7CACCCED1D3D6D8DADCDEE1E2E5E6E8EAEBECEEEFF1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F5F4F3F2F0EFEEECEAE9E7E5E4E1E0DDDBD9D7D4D2CFA4080000000000000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECECE9E8E7E5E4E3E0DEDDDCDAD9D7D4D3D1D0CECCCBC9C7C7C5C4C3C1C1C1BEBDBDBDBBBABAB9B9B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B9B9BABABBBDBDBEBEC1C1C3C4C5C5C7C9CACBCCD0D0D1D4D6D7D9DADCDDDEE0E3E4E5E7E8E9ECECEFEFF0F0F1F3F5F5F6F6F7F8F9F9F9F9FAFAFBFBFBFBFBFBFBFBFBFBFAFAF9F9F9F9F9F8F7F6F6F5F5F3F3F1F0F0F0EFEDECECE9E8E7E7E5E4E3E1E0DEDDDCDCDAD9D8D7D6D4D3D1D0D0CECCCCCBC9C9C7C7C5C5C4C3C3C1C1C1BEBEBDBDBDBBBABAB9B9B7B7B7B7B6B5B5B5B4B4B3B3B3B2B1B1B1B1B1B1AFAFAFAFADADADADACACACABABABABABABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABABABABABABABACACADADADADA89C9E9F9FA2A2A4A4A5A5AAB3A5A1A2A4A4A5A5A5A7A5A5A7A5A5A5A7A7A7A8ABABACACACAEB0B1B1B3B5B6B8B9B9BBBDBCBFBFBFBFC1C4C5C5C5C6C5C6C9CACACBCBCECECFD0D0D1D5D7D7DADADADADBDCDCDCDCDEDEDFDFE1E1E1E1E1E1E1E1E2E1E1E1E2E3E3E3E3E3E3E3E2E2E3E3E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E7E9E9E7E7E9E7E9E9E9E9E9E9E9EAEAE7E6E6E6E4E4E4E3E3E3E2E1E1E1DFDEDEDEDEDEDCDCDCDBDAD7D7D6D6D6D6D5D1D1CFCECACBCAC9C9C9C9C8C5C5C4C3C3C1C0BDBCBBBBBBB9B9B6B5B5B5B5B3B3B2B1B1B1B1B0B0AEAEACACABACAAA7A7A7A7A7A5A5A4A5A4A5A5A5A4A4A2A2A19F9F9F9E9E9F9E9E9E9F9F9F9F9C9C9C9E9E9F9F9F9FA19FA1A2A2A2A2A4A5A4A4A5A5A5A7A8AAAAABAAABABACACACACAEB1B1B2B2B2B6B6B6B9B8BBB9BCBDBFC0C1C1C1C4C5C5C6C6CACACACBCBCED0D0D0D1D1D5D5D5D5D5D5D5D5D5D5D3D5D5D7D7D7D7D9DBDADADADADBDEDBDBDADADADADBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7CF3C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000000000000000567778787A7B7B7C7D7F808183848687898B8D8F91939597999C9EA0A3A5A8AAADB0B2B5B8BBBDC0C2C5C8CACDCFD2D4D7D9DBDDE0E1E4E5E7E9EAECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F1EFEEECEBEAE8E6E4E2E0DEDCDAD8D6D3D0C61900000000000000000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDDDCDAD9D7D4D3D1D0CCCCCBC9C7C5C5C3C1C1C0BEBDBDBBBAB9B7B7B7B7B6B5B5B5B4B4B4B4B4B4B3B4B4B4B4B4B4B4B5B5B5B6B7B7B7B7B9BABBBDBDBEC0C1C3C4C5C5C7C9CBCCCED0D1D3D4D7D9DADCDDE0E0E3E5E7E7E8EBECEDEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9F9FAFAFBFBFBFBFBFBFBFBFAFAF9F9F9F9F9F8F8F6F6F5F5F5F3F1F0F0F0EFEDECECE9E8E7E7E5E4E3E0E0DEDDDCDADAD8D7D6D4D3D1D0D0CCCCCBCAC9C7C7C5C5C4C3C1C1C1C0BEBDBDBDBBBAB9B9B7B7B7B7B5B5B4B4B4B3B3B2B1B1B1B1B1AFAFAFADADADACACABABABABAAAAAAAAA9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A9A9A9A9AAAAAAAAA299999999979799999B9C9FA89B969797999999999B9B9B9B9C9B9C9C9E9F9FA1A2A2A2A4A5A7A8A8ACAEB1B1B2B5B6B8B8B9B9B9B9BCBDBFBFBFBFC1C3C3C4C5C6C8C8C9CACECECFD1D0D3D3D6D5D7D7D9DADADBDBDCDEDEDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E3E3E3E3E3E4E4E4E4E6E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E6E6E6E6E6E7E7E7E6E6E7E9E9E9E7E7E6E6E6E7E6E7E7E7E7E6E6E7E6E4E4E4E2E2E1E1DEDCDCDAD9D7D7D6D5D3D1D0CECBCAC9C9C8C6C5C4C4C1C1C0BDBDBBB9B6B6B6B5B3B1B0AEAEABABAAA8A7A5A5A5A5A2A2A19F9E9F9C9C9B9B9B9B9B9B999999999B9B9997979796969796969696949696979797979797979796969493939292929393929394949496979697979999999B9B9C9C9C9E9E9F9FA2A2A2A4A4A4A5A5A7AAAAACACB0B1B2B1B3B5B6B6B8BBBBBBBDBFBFC0C1C5C5C8C9C8CACBCBCED0D1D3D5D5D6D6D7D7DADADAD9D9D9D7D9D9DADBDBDBDBDBDCDCDCDBDBDBDEDEDEDEDEDFE1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3DA3F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C0000000000000000000000000000000000000000000000000000000000000E6E7778797A7B7C7D7E7F8082838586888A8B8D8F919396989A9C9FA1A4A6A9ABAEB0B3B6B9BCBFC1C4C6C9CBCED0D3D6D8DADCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F4F3F2F0EFEDECEAE9E7E5E3E1DFDDDBD9D7D4D2CF4200000000000000000000000000000000000000000000000000000000000019F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F7F6F5F5F3F1F0F0EFEDECECE9E7E7E5E3E0E0DDDCDAD9D7D4D3D1D0CCCCCAC7C7C5C4C1C1C0BDBDBBBAB9B7B7B7B5B5B4B4B3B3B2B2B1B1B1B1B1B1B1B1B1B1B1B1B1B1B2B2B3B3B4B4B5B5B7B7B7B9BABBBDBEC0C1C3C4C5C7C7CACCCCD0D1D3D4D7D9DADCDEE0E1E4E5E7E8E9ECECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9F9F9FAFAFBFBFBFBFBFBFAFAF9F9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E3E0E0DDDCDADAD9D7D6D4D3D1D0D0CCCCCBC9C7C7C5C5C4C3C1C1C1BEBDBDBDBBBAB9B9B7B7B7B6B5B4B4B3B3B2B1B1B1B1AFAFAFADADACACABABAAAAAAAAA9A9A9A8A8A8A8A7A7A5A5A5A5A5A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A5A5A5A5A5A7A7A8A2999B9B9B9C9C9C9F9F9FA5AE9F9B9B9B9B9B9C9C9C9C9C9C9C9FA19FA1A1A2A2A4A5A5A7A7A8AAACACACAEB0B1B1B2B2B5B8B9B9BBBBBDBFBFC1C1C1C3C4C5C6C9CACBCECFD0D1D0D1D5D5D6D7D9D9DAD7D7D7DADBDBDCDBDBDEDFE1E2E1E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E6E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EEEEEEECECECEEEEECEEEFEEEEECECECEEEEEEEBECECEAEAEBE9E9E9E7E7E6E4E4E3E3E2E2E1DEDEDEDBDBDBDADADAD9D7D7D6D5D3D3D0CECAC9C9C6C5C5C3C3C1BFBCBBBBB9B9B6B6B3B2B0AEAEACACAAABA8A7A5A5A2A2A2A19F9C9C9C9B9B9B9B9B9997979797979796969696969693939393939392929292929293939393939392929292929090909092939393979796979797979799979B9B9C9C9FA1A1A2A2A2A4A5A7A8ABACACAEAEB0B1B1B2B5B5B5B6B8BBBBBDBFC0C3C3C4C8C9CACBCED0D0D1D3D3D3D5D7D9DADBDCDEDEDEDFDEDFE1E3E3E3E4E4E4E6E6E7E9E9EAEBEAEBECEEECEEEEEFEEEFF1F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2DA3F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62C00000000000000000000000000000000000000000000000000000000000021777878797A7B7C7D7F808183848587898A8C8E90929496989B9DA0A2A5A8AAADAFB2B4B7BABDBFC2C5C7CACDCFD2D4D6D8DBDDDFE1E3E5E7E9EAECEDEFF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCD9D7D5D3D08400000000000000000000000000000000000000000000000000000000000007E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F3F1F0F0EFECECE9E8E7E5E4E1E0DEDCDAD9D7D4D3D1D0CCCBC9C7C5C4C3C1C0BEBDBBBAB9B7B7B5B4B4B3B2B1B1B1B1AFAFAFADADADADADADADADADADADADAFAFAFB1B1B1B1B2B3B4B5B5B7B7B9BABBBDBEC1C1C3C5C7C7CACCCCD0D1D4D6D7D9DADCDEE0E3E4E5E7E8EBECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9F9F9FAFAFAFBFBFBFBFAFAF9F9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E1E0DEDDDCDADAD8D7D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C1C0BEBDBDBDBABAB9B7B7B7B5B5B4B4B3B2B1B1B1B1AFAFADADACABABAAAAAAA9A9A9A8A8A8A7A5A5A5A5A4A4A4A4A3A3A3A3A2A2A2A2A2A2A2A2A2A2A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A2A2A2A2A2A2A2A2A2A3A3A3A3A49B909092929093949497979BA49790909393939393979797999999999B9B9B9C9C9C9C9F9FA2A4A5A5A5A5A7A8A8ABAEB0B2B2B3B5B8B8B8B9BBBBBCBFBFBFBFC0C3C3C3C5C5C5C8C8C8C9CBCECFCED0D0D1D1D3D3D3D3D5D6D5D6D7D9D9D9D9D9D9DAD9DADBDBDBDBDBDBDBDBDADAD9D9DADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDBDEDEDEDEDEDEDFDFDFDFDEDEDCDCDEDEDEDCDEDEDEDEDEDEDEDEDEDCDCDAD9D7D7D7D6D3D5D3D3D3D0D1D0D0CECBCACAC9C8C8C5C5C5C3C1BFBFBFBCBBB9B8B8B6B5B3B2B1B1AEACABABA8A8A8A5A5A5A5A4A2A1A1A1A1A19E9E9E9C9C9B9997979696969392909090908F8F8D8E8D8D8D8D8E8D8C8C8C8C8C8C8C8C8A8A8A8A8C8C8C8C8C8C8C8D8E8E8D8D8E8F8F9090929393939494949797979999999B9B9B9B9C9C9E9F9FA1A2A5A7A8A8ACACAEB0B1B2B3B5B6B6B9BCBCBDBFC1C3C4C5C8C9CBCFD1D3D5D7DADCDEDFE1E2E2E4E6E6E7E9E9E7EAE9E9EAE9E9EAEBEBEAEBEEEEEEECEEEEEFEFEFEEEFEFEEEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2DA400F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30F000000000000000000000000000000000000000000000000000000000000427778787A7B7B7C7D7F808183848688898B8D8F91939597999C9EA1A3A6A8ABAEB0B3B6B8BBBEC0C3C6C9CBCED0D2D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EFEDEBEAE9E6E5E3E1DFDDDBD8D6D4D1B608000000000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDDDADAD7D6D3D1D0CCCBC9C7C5C4C1C1BEBDBDBAB9B7B6B5B4B3B2B1B1AFAFADACACABABABAAAAAAAAAAAAAAAAAAAAAAAAABABABACADADAFAFB1B1B2B3B4B5B7B7B9BABDBDBEC1C3C4C5C7CACCCCD0D1D4D6D8DADCDDE0E0E3E5E7E7E9ECECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9F9F9FAFAFAFAFAFAFAF9F9F9F9F9F9F8F7F6F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E1E0DEDDDCDAD9D7D6D4D3D0D0CCCCCBC9C7C7C5C4C3C1C1BEBDBDBBBAB9B7B7B7B6B5B4B3B3B2B1B1B1AFAFADACABABAAAAAAA9A9A8A8A7A5A5A5A4A4A4A3A3A3A3A2A2A2A2A2A0A0A0A0A0A0A0A0A0A0A09E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EA0A0A0A0A0A0A0A0A0A09D949697979999999B9B9C9FA79B9797999B9B99999B9B999B9B9B9B9C9C9C9E9FA1A2A4A5A5A5A7A8A8AAABAEB1B1B1B3B2B5B6B8B9BBBCBCBDBFBFC0C4C3C5C5C8C9CACACBCBCED0CFD1D1D0D1D3D3D5D6D9D9D9DAD9DBDBDBDBDEDEDFE1E1E1DFDEDEE1E1E1DEDEDCDBDBDBDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E3E4E4E4E4E3E3E3E3E3E1E1E2E2E3E3E3E3E1E1E1E1E2E3E3E3E1E1E1E1DEDEDCDEDBDBDADBDBDADADAD7D6D5D5D3D0D0CECFCECACAC9C6C4C4C1BFBFBDBDBCBBB9B6B6B6B5B5B6B3B1B1B1AEACAAAAA7A5A5A5A4A2A29F9E9E9C9C9B9B9797969394949492908F8F8F8E8E8D8C8C8C8A8A8A8A8A89888988888988868685858685858685858385858583838382828384868685868787898988888C8D8E8E8F8F8F909090929396979797979B9B9C9C9EA1A1A4A5A5A7A8AAABACACAEB1B2B3B5B6B8B9BCBDBFC0C0C3C1C4C5C6C8CACBCECECBCFCFD0D1D0D0D1D3D1D3D3D3D5D6D6D6D6D6D7D9D9DAD9D9D7D9D7DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADAD43D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC407000000000000000000000000000000000000000000000000000000000005647778797A7B7C7D7E7F8082838586888A8B8E8F929496989B9D9FA2A4A7A9ACAFB1B4B7B9BCBFC1C4C7C9CCCED1D3D6D8DBDDDEE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEBE9E7E6E4E2E0DEDCD9D7D5D2D0290000000000000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECE9E8E7E5E4E0E0DDDCDAD8D6D4D1D0CCCBC9C7C5C4C1C1BDBDBAB9B7B6B5B4B2B1B1AFADADABABAAA9A9A9A8A8A8A7A7A7A5A5A5A5A7A7A7A8A8A8A9A9AAAAABACADAFAFB1B1B3B4B5B7B7B9BABDBEC1C1C4C5C7CACCCCD0D1D4D6D9DADCDDE0E1E4E5E7E8E9ECEDEFF0F0F1F3F5F5F5F6F7F8F9F9F9F9F9F9FAFAFAFAFAF9F9F9F9F9F9F8F8F7F6F5F5F3F3F1F0F0EFEDECECEBE8E7E7E5E4E1E0DEDCDADAD9D7D4D4D1D0CECCCBC9C7C7C5C4C3C1C0BEBDBDBAB9B7B7B7B5B5B4B3B2B1B1B1AFADADACABAAAAA9A9A8A8A7A5A5A5A4A4A3A3A3A2A2A2A2A0A0A0A0A0A0A09E9E9E9E9E9D9D9C9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9C9C9C9C9C9C9D9D9E9E9E9F9E9E9C9B9C9C9EA19F9FA5A79E9B9B999B9B9B9B9C9C9C9E9F9FA1A2A2A5A5A5A5A7A7A7A8A8ACAEB0B1B1B1B2B2B3B3B5B6B6B9B9BBBCBCBFBFC1C1C1C3C3C4C5C6C9CAC9CACACBCBCECED0D0D1D1D0D1D6D7D6D7D6D7D9D7D7D7D7D7D7D7D7D6D6D6D7D7D9D9DADBDADADADADBDEDBDBDADADADBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D5D5D5D5D3D1D0D3D3D3D3D3D3D3D3D1D1D0D1D1D0D1D0D0D1D0D0D0D0CECBCAC9C8C9C9C6C5C4C4C3C1C1BFBDBDBCBBB9B9B6B6B6B3B2B1B2B1B0AEAEAEACABAAA8A7A7A7A5A4A4A4A19F9E9C9B9B9B99979797969290909090908F8E8E8D8C8A898A8A8A8A888989888888898986868686858585858585848282818181818080818182828383828383848383838385868689898889898A898C8C8C8E8E8E8F9092939396979799999B9B9B9C9CA1A1A2A2A5A7A7A7AAABACAEB1B2B2B5B6B9BBBDBFC1C1C4C5C5C6C8C9CACBCBCBCED0D1D3D5D6D7D7D7D9D9D7D9D7DADCDCDEDEDEDEDFDEDEDEDCDCDBDADBDBDBDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDED73F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000000000000013727878797A7B7C7D7F808183848587898A8C8E91929497999B9DA0A2A5A8AAADAFB2B5B8BBBDC0C2C5C8CACDCFD2D4D7D9DBDDE0E2E4E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEEDEBEAE8E6E5E3E1DEDCDAD8D6D3D16B0000000000000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F3F1F0EFEDECECE9E7E5E4E3E0DEDCDAD9D7D4D3D0CCCCC9C7C5C4C1C0BDBDBAB7B7B5B4B3B1B1AFADABAAAAA9A8A8A7A5A5A4A4A4A3A3A3A3A3A3A3A3A3A3A4A4A4A5A5A7A8A8A9AAABACADAFB1B1B3B4B5B7B7BABDBDC1C1C4C5C7CACCCED0D3D4D7D9DADCDEE0E3E5E7E7E9ECECEFEFF0F1F3F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F5F3F1F1F0EFEFEDECEBE8E7E7E5E4E1E0DEDCDADAD8D6D4D3D1D0CCCCCAC7C7C5C4C3C1C0BEBDBBBAB9B7B7B5B4B4B3B1B1B1AFADADACABAAAAA9A8A8A7A5A5A4A4A3A3A2A2A2A2A0A0A0A0A0A09E9E9E9D9D9C9C9C9C9A9A9A9A9999999999999998989898979797979797979797979797979797979797989898989899999999999A9A9A989493929292929290929297A1928D8E8F8F909090909294939497979B9B9B9B9B9C9C9FA1A2A2A2A4A5A5A7A8AAACACB0B1B2B1B3B5B6B6B8BBBBBBBDBDBFC0C1C5C5C5C8C6CACACACACFD0D1D3D3D5D5D3D5D9D9D9D7D7D6D5D6D7D9DADADADBDBDBDBDBDADADBDCDCDEDEDEDFE1E1E1E1E2E2E2E2E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E4E4E4E3E3E3E3E4E6E7E6E4E6E6E6E3E3E3E4E3E3E3E4E4E4E4E6E3E1E1E1E1DEDEDCDCDCDBDAD9D6D3D3D1D0CFCECECBCBC9C8C8C8C6C6C6C5C3C3C1C0BDBBB9B6B5B2B3B2B1B0ACAAAAAAA8A5A5A2A19E9C9C9C9C9B9797969493929292908F8E8D8D8C8C8A89898888898686858383838181818181817F7F7F7D7C7C7C7C7C7D7D7D7C7C7C7C7C7E7E7E81818181828181818181818283858484848486888888898A8C8C8D8E8F9090909093949797999B9B9C9F9FA2A2A4A5A7A8AAACAEB1B3B6B6B5B9B9BCBDBDBFC1C3C3C3C5C5C6C9CACBCBCECED0D1D3D3D5D3D5D5D7D7D7D7D7D7D7D7D7DADADADAD9D9D9D9D7D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDB4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000000000000000387778787A7B7B7C7D7F808183848688898B8D8F919396979A9C9FA1A4A6A9ABAEB0B3B6B9BCBFC1C4C6C9CBCED0D3D6D8DADCDEE1E2E5E6E8EAEBEDEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEBE9E7E5E4E2E0DDDBD9D7D4D2A600000000000000000000000000000000000000000000000000000000000023F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0E0DDDADAD7D4D3D0CECCCAC7C5C4C1C0BDBBB9B7B6B4B3B1B1AFADABAAA9A8A7A5A4A4A3A3A2A2A2A2A0A0A0A0A0A0A0A0A0A2A2A2A2A2A3A3A4A5A5A8A8A9AAABADAFB1B1B3B5B6B7BABDBDC1C1C4C5C7CBCCD0D1D3D6D8DADCDDE0E1E4E5E7E8EBECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F7F6F6F5F5F3F3F1F0F0EFEDECECE9E7E7E5E4E1E0DEDCDADAD8D6D4D3D0D0CCCBC9C7C5C4C3C1C1BEBDBBBAB9B7B6B5B4B3B1B1B1AFADACABAAAAA9A8A8A5A5A4A4A3A3A2A2A2A0A0A0A0A09E9E9D9D9C9C9C9A9A9A9A9999999898979797979795959595959595959595959595959595959595959595959595959595959595959595959595979797978F858888868686868989888C938783838383858385858686868989898988898A8C8A8D8F909293949497999B9B9E9FA1A2A5A5A5A7A7A7AAACACACB0B2B5B9B9BBBCBFC0C1C1C4C4C5C6C5C6C9CACBCECFCFD0D1D3D1D3D3D5D5D6D7D9D9DADBDBDCDEDEDCDEDEDEDEDEDEDEDFE1E1E2E1E2E3E2E2E3E3E4E4E3E4E4E3E3E3E4E4E4E6E7E7E6E6E4E3E3E3E4E4E4E3E2E1DEDEDEDCDCDBDEDCDCDEDCDBDBDADBDAD9D7D7D7D7D6D6D1D0D0CFCFCECACBC9C9C9C8C4C4C3C1C1C0BFBFBDBDBBBBB8B6B2B2B1B0ACACABA8A7A7A7A5A5A5A4A29E9C9C9B9B9797979493929090908F8F8E8C8D8D8C8C8A8A8A898889898987878786878789888888888888888886878686878684848484848382828282838384858585878787888888898A8A898C8C8C8D8E8E8F909290929392939496979797999B9B9C9CA1A4A5A5A7AAABACB1B2B3B3B6B8B9BCBDC0C1C4C4C5C5C6C9CBCBCFCFD1D1D3D3D6D6D7D7D7DAD9D7D9DADAD9DADADADADADBDCDEDEDEDCDFE1E1E1E1E1E1E1DFE1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62C000000000000000000000000000000000000000000000000000000000000567778797A7B7C7D7E7F8182838586888A8C8E90929496989B9DA0A2A5A7AAADAFB2B4B7BABDC0C2C5C7CACDCFD2D4D7D9DBDDE0E1E4E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEEDEBEAE8E6E5E2E1DEDCDAD8D6D3C821000000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFECECE9E7E7E4E3E0DEDCDAD9D6D4D1D0CCCBC7C5C4C1C0BDBBB9B7B5B4B2B1AFADABAAA9A8A5A4A4A3A2A2A0A0A0A0A09E9E9E9E9E9D9D9E9E9E9E9EA0A0A0A0A0A2A2A3A4A5A7A8A9AAABADAFB1B3B4B6B7B9BDBDC1C1C4C7C9CBCCD0D1D4D7D9DADCDEE0E3E5E7E8E9ECECEFF0F0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F5F3F1F0F0EFEDECECE9E8E7E5E4E1E0DEDCDADAD8D6D4D1D0CECCCBC9C7C5C4C1C1BEBDBBBAB7B7B6B4B3B2B1B1AFADACABAAA9A8A8A7A5A4A4A3A2A2A2A0A0A0A09E9E9D9D9C9C9A9A9A99999998979797979595959595959595959393939393939393939393929292929292929292929292929292929292939393939393939393939395958E86888788888989898A8C8E968C888888888A8C898C8C8C8D8E8E8F9090909293949696979797999B9C9E9E9FA2A2A5A5A8A8ABACACAEB0B1B2B3B2B5B6B9B9BCBFBFC1C1C3C5C5C5C6C6C9CACBCFD0D0D0D3D3D1D3D3D5D5D3D5D6D6D6D7D7D7D9D7D9D9D7D7D7D7D7D7D7D7D9D9D7D9D7D7D7D7D7D7D7D7D7D7D7D7D9D7D9DAD9D9DAD9D7D7D7D9DADBDBDBDBDBDADADAD9D9D7D7D7D7D5D5D6D5D3D3D1D1D1D1D1CFCECBCACAC9C9C9C8C6C8C6C6C5C5C3C1C1C0C1BFBFBFBFBDBCB9B9B8B6B5B5B2B2B1B0AEACABAAA8A7A5A4A2A19F9E9C9C9C9B999797969390908F8F8D8C8C8C8C8A88898987888886838381817F7F7E80817E7F807F7E7F817F8181817F7F7F7F7F7F7F7F7F818181818183838281838282818282828383838382818283858688888889888A8A8C8F909093949797999B9C9FA2A2A4A5A7A8AAACB0B1B2B5B5B6B9BBBCBDC0C1C4C5C5C9C9CACBCECFD0D1D3D5D6D7D9D9DADADADADADBDCDEDEDEDFE1E1E1E1E1E2E2E2E3E2E1E1E1E1E1E1E2E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9600F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30F00000000000000000000000000000000000000000000000000000000000E727878797A7B7C7D7F808183848587898A8D8F91939597999C9EA1A3A6A8ABAEB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DADCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E4E1E0DDDBD9D7D4D263000000000000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBF9F9F9F8F8F6F5F5F3F3F1F0EFEDECEBE8E7E5E4E0E0DDDADAD7D4D3D0CCCBC9C7C4C1C1BDBBB9B7B5B4B1B1ADACAAA9A8A5A4A3A2A2A0A0A09E9D9D9C9C9A9A9A9A9A9A9A9A9A9A9A9C9C9C9D9E9EA0A0A0A2A2A3A4A5A8A9AAACAFB1B2B4B6B7B9BDBEC1C3C5C7C9CCCED0D3D4D7DADCDDE0E1E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F6F5F5F3F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDDDADAD8D6D4D1D0CCCCCAC7C7C5C3C1C0BDBDBAB9B7B6B4B3B2B1AFADACABAAA9A8A7A5A4A4A3A2A2A2A0A0A09E9E9D9C9C9A9A9A9999989897979795959595959595939393939393929292929291919191919191919190909090909090909090909090909090909090919191919191919192929292908D8C8D8C8C8D8D8E9090969B8E8C8C8A8D8D8D8C8E8E8E8F8F90909092939394969797999799999B9B9B9B9C9FA1A2A2A4A4A5A7A8AAACACAEB1B2B2B5B8B6B9BBBDBFBDBFBFBFC1C3C4C5C6C6C9C9CACBCFCFD0D0D0D1D5D6D6D5D7D6D7D7D7D7DADADBDBDADAD9DAD7D7D7D7D7D7D6D6D6D5D3D5D5D6D9D9D9D9D9D9D9D9DADADAD9D7D7D9D7D7D7D7D9DADADADADADAD9D7D7D7D7D7D7D5D3D3D1D0D0CFD0D0CECECECECECECBCBCAC8C8C8C6C4C3C3C3C1C0BFBDBBB9B8B6B5B3B2AEAEAEACAAAAA8A8A5A4A4A29F9F9F9E9E9E9B9B9B979696969290908F8D8C8C8A8A898988868683838383838381818181817F7F7F7D7E7D7C7C7C7D7C7C7C7C7C7C7B7B7C7C7C7C7B7B7B7B7B7B79797B7B7C7D7D7D7D7E7E7D7C7E7E7E8181818183818383838386888989888C8D8E8F8F90909292949797999B9C9EA2A2A5A7AAACACAEB0B1B1B2B5B6B8BBBCBFC1C1C5C5C8C8C9CACBCECFD0D0D1D3D3D5D6D7D7D9D9DAD9DBDBDCDEDCDBDCDEDEDBDEDEDEDEDEDEDEDEDEDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB90000000000000000000000000000000000000000000000000000000000002F7778787A7B7B7C7D7F808183848688898B8D8F919396989B9D9FA2A4A7A9ACAFB2B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DBDDDFE1E4E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCDAD8D5D39600000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD9D6D4D1D0CCC9C7C5C3C1BDBDB9B7B5B3B1B1ADABAAA8A7A4A3A2A0A0A09E9D9C9A9A9999999897979797979797979797989999999A9A9C9D9EA0A0A2A2A3A4A7A9AAABADB1B2B4B6B7BABDBEC1C3C5C7CACCD0D1D4D6D9DADCDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F5F3F1F0F0EFEDECECE9E7E7E5E3E0E0DDDCDAD8D6D4D1D0CCCCC9C7C5C4C3C1BEBDBBB9B7B6B5B3B2B1AFADABAAA9A8A8A5A4A4A3A2A2A0A0A09E9E9D9C9A9A99999998979795959595959593939393939292929291919191919090909090908F8F8F8F8F8F8F8F8F8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8F8F8F8F8F8F8F8F9090909088828282818383838488888A90837F81818181838586878888898A8A8A8D8F8F909093939697999B9C9EA1A2A4A4A7A7A8ACACAEB0B0B1B2B6B8B9BBBBBDBDC0C3C4C5C8C9C9CACECED0D1D5D5D6D6D6D7D7DADADCDCDEDFDFE1E2E3E3E4E3E6E6E6E6E6E6E6E4E4E6E6E7E7E7E9E9E9E9EAEAE9E9EAE9E9E7E7E7E7E9E9E7E7E7E7E6E6E4E4E3E2E2E2E1E1E1E1DFDEDEDCDEDBDBDADADBD9D7D9D7D7D6D6D6D6D7D5D5D5D3D1D3D0D1D0CECBCACAC9C6C5C5C5C4C3C3C1BFBFBFBCB9B6B3B2B1B1B0ACACABA8A7A4A4A2A4A19F9E9C9C99979797949392928F8E8E8E8D8C8C8888868686878583818281818081817F7E7C7D7D7D7C7C7C7C7C7B7B7B7C7D7C7C7C7B797A7A797979797979797C7B7C7C7D7C7C7C7C7E7D7D7E7E7E7D7F7E7E7F7F818282828385888989888A8C8D8E909090929494999B9B9B9C9EA2A2A5A7A8ABABAEB1B3B8B9BBBBBDC0C3C4C5C8CACACBCBCFD1D1D3D5D5D7DADADBDBDCDEDEDFDEDFDEDFE1E1DFDFE1E1E1E1E1E1E1E1E2E2E2E2E2E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3880F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000000000000000567778797A7B7C7D7E7F8182848586898A8C8E90929497999B9EA0A2A5A8AAADB0B3B6B8BBBDC0C3C6C9CBCED0D3D5D7D9DCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E4E1DFDDDBD8D6D4CA19000000000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFECECE9E7E7E4E1E0DDDCDAD7D4D3D0CCCBC7C5C4C1BEBDBAB7B5B4B1B1ADABA9A8A5A4A2A2A09E9D9C9A9A9998979795959595959595959595959595959595979798999A9A9C9EA0A0A2A3A4A5A8AAABADB1B2B4B6B7BABDBEC1C4C7C9CBCCD0D3D4D8DADCDEE0E3E4E7E7E9ECECEFF0F0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F8F8F7F6F6F5F5F3F3F1F0EFEFECECE9E8E7E5E4E1E0DDDCDAD9D6D4D3D0CCCCC9C7C5C4C1C1BDBDBAB7B7B5B4B2B1AFADABAAA9A8A7A5A4A3A2A2A0A09E9E9D9C9A9A999998979795959595959393939392929291919191909090908F8F8F8F8F8D8D8D8D8D8D8D8D8D8D8D8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8D8D8D8D8D8D8D8D867E7E7F7F818180818181838C817C7E7E7F8081818283838386888A8A8A8A8C8D8D8D8D8E90929393939699999B9B9C9E9EA1A1A2A4A5A7A8ABACB0B1B1B2B3B3B6B8B9B9BBBDBDBFBFBFC1C4C4C5C6C8C9C9CBCECFCFD0D0D0D0D1D5D3D5D6D7D6D7D5D7D9D9DADAD7D9DADAD9D9DADADADAD9D7D7D7D6D5D5D6D7D7D7D6D6D5D3D1D1D0D0D0D1D1D3D3D1D1D1D3D3D1D0D0D0D0CFD0D0D1D0CECFCECBCACAC9C6C6C8C5C5C4C4C5C5C5C3C3C3C1C0BDBDBDBBBBB9B8B6B5B1B1B1AEAEAEACACAAA8A7A5A5A4A2A2A19E9C9B999B97979694949392908F908F8D8A8C8C8A8A8988888986888787878787868485838485838382828281818281818180808081818181807F80818080818181818181817E818181818181818383848483858687868688878988898A8A8C8D8E8F90909294949697999B9C9C9C9E9FA2A5A4A7A8ABABAEAEB1B1B2B5B6B6B8BBBDBFBFC0C1C4C4C5C5C6C9C9C9CBCECFCFD1D3D5D7D6D7D9DADBDCDCDEDEDCDCDCDEDEDCDEDEDFDFDFE1E1DFDFE2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E18F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000000000000E6E7878797A7B7C7D7F808183848688898B8D8F919395989A9C9FA1A4A6A9ABAEB1B4B7B9BCBFC1C4C7CACCCFD1D4D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCD9D7D5D35300000000000000000000000000000000000000000000000000000000000FE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECEBE8E7E5E4E0DEDCDAD9D6D4D1CECCC9C7C5C1C0BDBAB7B6B4B1B1ADABA9A7A5A3A2A0A09E9C9A9998979595959393939393929292929292929293939393959595959798999A9C9EA0A0A2A3A5A8A9ABADB1B2B4B7B9BBBDC1C3C5C7CACCD0D1D4D7D9DADDE0E0E4E5E7E8ECECEDEFF0F1F3F3F5F5F6F7F8F8F8F9F9F9F9F9F9F9F9F8F8F8F6F6F5F5F5F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDCDAD9D7D4D3D0CECCC9C7C5C4C1C0BDBBB9B7B6B4B3B1B1ADABAAA9A8A5A4A3A2A2A0A09E9E9C9C9A999998979595959593939393929292919191909090908F8F8F8D8D8D8D8D8D8D8D8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8989898989898989898888888888898989898989898B8B8B8B8B8B8B8B8B8B867E7D7D7E7F7E8180808081897F79797B7A787B7C7C7C7C7C7C7C7D7F81818383838385878988898C8E8F90929394969697999B9B9E9E9FA1A2A4A5A5A7AAAAAEAEAEB1B3B5B5B6B6B9BBBDBDBDC0C0C3C4C5C6C6C6C8C9C9CBCBCECFD0D1D1D0D1D3D3D5D3D3D5D6D5D5D5D3D5D6D7D7D7D7D7D9D9DAD9D9D7D9D9DADADADADAD9D9D9D7DADADADAD9D9D9D7D6D6D7D7D7D9D9DADADAD9D9D6D6D7D7D7D7D7D5D5D5D1CFCECBCBCBCBC9C8C6C8C5C5C4C3C0BFBDBBB9B8B6B5B5B3B2B2B1AEACAAA7A7A5A4A29E9F9C9C9997979794929290908E8E8D8C8A8A898686858582828181817F7E7E7D7C7D7C7B7B7978797877777776777575757372737272727170706F6F6E6E6E6E6E6E6E6F6F6E6E6F72727070706F706F7272747473747475757575747576767778787B7B7D7F81818285848689888C8D8E8F90909296979B9C9FA2A4A7A7A8ACAEB0B3B5B6B8B9BBBFBFC0C1C4C6C9CACACED0D0D1D0D5D7D7D7D9DBDBDCDEDFE1E1E2E3E3E6E4E6E6E7E9E7E7E7E6E6E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E18E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED190000000000000000000000000000000000000000000000000000000000267778797A7B7C7D7E7F8082838586888A8B8E90929496989B9DA0A2A5A8AAADAFB2B5B8BBBDC0C3C5C8CBCDD0D2D5D7D9DCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDBD8D6D497000000000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F1F0EFEDECE9E8E7E5E3E0DEDCDAD8D4D3D0CCCBC7C5C3C1BEBDB9B7B4B2B1ADABA9A7A4A3A2A09E9C9A999897959593939292919191909090909090909090919191919293939395959798999A9D9EA0A2A3A5A8A9ABADB1B3B5B7B9BDBEC1C4C5C9CBCCD0D3D6D8DADCDEE0E3E5E7E8EBECEDEFF0F0F3F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F8F8F7F6F5F5F5F3F3F1F0EFEFECECE9E7E7E5E3E0DEDDDADAD7D4D3D0CECCCAC7C5C4C1C0BDBBB9B7B5B4B2B1AFACABA9A8A5A4A3A2A0A0A09E9C9C9A9998979795959593939392929191919090908F8F8F8D8D8D8D8D8D8B8B8B8B8B8B8B8B8B8B8989898988888888888888888887878787878787878787878787878787878787878787878788888888888888888C8C8C8C8C8D8C8D8D8D8E9090898A8A898889898889888A898D8C8C8E8F9090909090929394969797999B9B9C9E9FA2A2A5A5A5A7A8A8ABAEB1B2B3B5B6B6B8B9B9BBBDBDC0C1C3C4C5C6C6C9CAC9CACACBCED0D1D3D1D1D3D3D5D6D6D7D7D9D9D7D9DBDBDBDCDBDCDCDBDADBDADAD9D9D9D7D7D7D9DADADADADBDADADADADBDEDBDBDADADADADADADADAD9D9D9D7D7D7D7D7D6D6D5D3D3D1D0CFCFCFCBC9C8C9C9C9C8C6C5C5C5C3C1BFBFBFBDBDBCBBBBB9B9B6B5B2B1AEABAAA8A8A5A4A2A19F9C9C9B9797969492908F8F8E8C8A8A8A8A87868786858382818080817E7D7E7D7C7C7878777778777777767573737373737572727171716F6F6F71727272727071727272727171717171717273737372727271717171707272747577777777767778787878797B7C7D7E7F81818283858688888A8C8D8F929396979B9C9C9FA1A4A4A7A7A8ACACB0B1B3B6B8B9BBBCBDBFC3C4C5C6C8C9CACED0D0D1D3D5D5D6D5D7D7D9D7D7D9DBDBDBDCDEDEDEDEDEDEDCDCDBDCDEDEE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7A9140F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4000000000000000000000000000000000000000000000000000000000000517778797A7B7C7D7F808183848587898A8D8E91939597999C9FA1A3A6A9ABAEB0B3B6B9BCBFC1C4C7C9CCCED1D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCD9D7D5CA19000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F8F6F5F5F3F1F0F0EFEDECE9E7E7E4E1E0DDDAD9D7D4D1D0CCC9C7C4C1C0BDBAB7B5B3B1ADABA9A7A4A3A2A09E9C9A98979595939392919190908F8F8F8D8D8D8D8D8D8D8D8F8F8F90909191929393959597999A9C9EA0A2A3A5A8AAABAFB1B3B5B7BABDC0C3C5C7CACCD0D1D4D7DADCDDE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F5F6F7F8F8F8F9F9F9F9F9F9F8F8F7F6F6F5F5F5F3F1F0F0EFEDECEBE8E7E5E4E1E0DDDCDAD8D6D4D1D0CCCAC7C5C4C1C0BDBBB9B7B5B3B1B1ADABAAA8A7A4A3A2A0A09E9D9C9A9998979595959393939292919190908F8F8F8D8D8D8D8D8B8B8B8B8B8B8B8B898989888888888888878787878787878786868686868686868686868686868585858585858585858686868686868686868686868787847C7B7B7C7C7D7C7D7D7F828A7E78787B7B7C7E7E7F7E7F8080818383858586888A8A8C8D8E8F9092939393969697979799999C9E9FA1A2A4A5A7AAAAABAEB1B1B2B5B8B9BDBCBFBFC0C1C5C5C6C9C8CACACBCED0D0D1D3D5D5D7D7D9D9D9DAD9DBDBDADBDBDBDEDEDFDFDFDFDEE1E1DEDFE1E1E2E2E2E2E1E1E1E2E2E1DFDEDEDBDBDBDEDEDEDEDEDEDCDCDCDBDBDADBDBDCDCDCDCDCDBDBDADCDBDADADADADADAD9D7D6D5D3D1D0CECECECBCBCAC9C8C4C4C3C1C0C1C0BDBBBBB9B6B3B2B1B1ACABAAA8A8A7A7A5A4A1A19F9C9B99979797939292908E8D8C8A89898987878583838383838382818181817E7D7D7C7A797B79797978777877787777767575747575757372727272727373737373737272727373727373737573757573737675757775767678777777777877787B7C7D807F808183858889898D8F90929496979B9B9C9FA1A2A5A7A8AAACAEB1B1B3B5B8BBBCBDBFC1C3C3C4C4C5C8C9C9CACBCBCED0D0D0D1D0D1D3D3D5D5D5D6D7D7D7D6D7D7D7D7D6D6D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFB7150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000000000000000096E78787A7A7B7C7D7F8081838586888A8B8D8F929496989B9D9FA2A5A7AAADAFB2B4B7BABDC0C2C5C8CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDBD8D6D46400000000000000000000000000000000000000000000000000000000002CF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFECECE9E7E5E4E0DEDCDAD9D6D3D0CCCBC9C5C3C1BDBBB9B6B4B1AFACAAA8A5A3A2A09D9C9997959593939291908F8F8D8D8D8B8B8B8B8B8B8B8B8B8B8B8B8D8D8D8F909091929393959598999C9EA0A2A3A5A8AAACAFB2B4B7B9BDBEC1C4C7C9CCCED1D4D7D9DADDE0E1E4E5E7E9ECECEFF0F0F1F3F5F5F5F6F7F8F8F8F9F9F9F9F9F8F8F8F7F6F6F5F5F3F3F1F0EFEFECECE9E7E7E5E3E0DEDCDAD9D7D4D1D0CCCBC7C5C4C1C0BDBBB9B7B5B3B1AFADAAA9A8A5A4A2A2A09E9D9C9A999797959593939292919190908F8F8D8D8D8D8B8B8B8B8B8B8B89898888888888878787878787868686868686868685858585858585858585858484848484848484848484848484848484848484848485858585858585847E807F7E7F808181817F828A7E7C7B7B7B7C7C7E7F818181818282858688888988898A8C8C8C8C8D8E8F9092939494979B9B9B9C9FA1A1A2A4A5A7A8ABABAEB1B1B2B3B6B8B9BBBDBFC0C3C5C4C6C9C8C9CACBCFD0D3D3D6D9DADADADADADADADCDBDCDBDBDBDEDFE1DFE1E1E1E1E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E3E3E4E4E4E4E4E6E6E6E7E6E6E4E3E3E3E3E2E2E2E1E1E1DFE1DEDFDEDCDEDCDADAD9D7D6D5D1D1D0CECBCAC9C8C8C8C4C3C3C1BFBBB9B6B5B3B0AEAAA8A7A5A4A29F9C9C9C9B99979492908F8E8C8D8C8C89898789858383818381817F7E7E7C7C7B7B78797977767776777776757375737373737272727272727272727272716F706F70706F717071717271717171707170727272727272737575757575777778787B7B7C7C7E7F8081828585888A8A8C8D8D8E8F9090929394979B9C9E9FA2A4A5A7AAAEB1B2B3B8B8BBBDBFC0C3C3C5C6C9CACBCECFD0D0D1D5D6D7D7D7D9D9DADADBDEE1E1E1E1E1E1E1E3E3E2E2E3E3E3E3E3E2E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBD3270F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000000000000000000000000000000000000000000000000000000000307778797A7B7C7D7E7F8182848587898A8C8E91929497999C9EA0A3A6A8ABAEB0B3B6B9BCBEC1C4C6C9CBCED1D3D6D8DBDDDFE1E3E5E7E9EAECEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCD9D7D5A8000000000000000000000000000000000000000000000000000000000007E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECEBE8E7E5E3E0DEDCDAD8D4D3D0CCCAC7C5C1C0BDBAB7B5B3B1ADAAA8A5A3A2A09D9A99979595939291908F8D8D8D8B8B8B8B898988888888888889898B8B8B8B8D8D8F8F90919293959597999C9EA0A2A3A5A9ABADB1B3B5B7BABDC1C3C5C7CBCCD0D3D6D9DADCDEE0E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F9F9F9F8F8F8F7F6F6F5F5F5F3F1F0F0EFEDECEBE8E7E5E4E1E0DDDCDAD7D4D3D0CCCBC9C7C4C1C0BDBBB9B7B5B3B1AFACAAA9A7A4A3A2A09E9D9C9A99979595959393929191908F8F8D8D8D8D8B8B8B8B8B898988888888878787878786868686868585858585858585848484848483838383838383838383838383838383828282828282828282828282828383838383838383837D767676777878777878787C84797574757575737575777776787A7B7B7D7F7F8181828383858688898A8C8C8E9092969797999B999C9C9E9EA1A4A5A5A7AAABABACACAEB1B2B5B6B8B9B9BCBDC1C3C5C6C9CACBCED0D1D3D6D9DADADADBDCDEDEDFE2E2E3E2E2E3E3E3E3E4E3E3E4E4E4E3E3E3E4E3E3E3E4E4E4E4E4E3E3E3E2E3E2E1E2E2E2E1E2E2E2E1E1E1E1E1E1E1E1DEDEDEDCDBDADBDADAD9D9D7D3D1D0CECBCACACACACAC9C5C4C4C4C1C0BFBCBBB9B6B5B3B2B0ACABA8A7A5A5A2A29E9C9C9B9794939292929290908E8C8A88898684838382817F7E7D7C7B7878787776757675757373737272727373727272716F6F6E6E6D6E6E6E6E6E6E6D6D6D6E6F6F6F6F6E6F6F6F6F6F6F706F71717170707072727272717171727273767677777776787978787A7A7C7B7D7E7F8181818387898A8C8D90929294979B9B9EA2A4A5A7A8AAACAEAEB1B2B3B5B8B9B9BCBDBFC0C1C3C4C6C9CAC9CECECECECFD0D1D1D3D3D3D3D5D6D7D7D7D7D9D7D7D7D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDED72F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30F0000000000000000000000000000000000000000000000000000000000567878797A7B7C7D7F808183848688898B8D8F919396989A9C9FA1A4A7AAACAFB2B4B7BABDC0C2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDBD8D6D3220000000000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECE9E8E7E5E3E0DDDCDAD7D4D1D0CCC9C7C4C1BEBBB9B6B4B1AFABA9A7A4A2A09E9C999795939291908F8D8D8B8B8B8988888787878787868687878787878888898B8B8B8D8D8F909293939597999C9EA0A2A4A7A9ABAFB1B4B7B9BDBEC1C4C7CACCD0D1D4D7DADCDEE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F8F8F7F6F6F5F5F3F3F1F0F0EFECECE9E8E7E5E3E0DEDCDAD9D6D4D1D0CCCAC7C5C3C1BDBBB9B7B5B3B1AFACAAA8A5A4A2A0A09E9C9A999795959393929191908F8F8D8D8B8B8B8B8B898988888887878787868686868B8B8B8B939696939B9EA0A0A0A0A0A0A0A0A0A09E9E95939393939089898682828282828080808080808080808080808080808080808282828282827E7C7C7E7E7E7E7F818185897D797A7C7C7C7C7D7D7D81808182838384838486858889898A8D8E8E909093949496979B9B9C9E9F9F9FA1A5A5A7AAACAEAEB2B3B6B6B8BBBDBDC1C0C1C3C4C6C9C9CACBCECED0D0D1D1D1D3D3D3D3D5D7D7D7D7D6D9D7D7D7D9DAD9D9DADADADADADCDCDEDCDEDEDEDEE1DFDFDFDEDEDEDEDEDEDEDEDFDFDFE1E1DEDEE1E1DEDCDBDBDBDBDBDADADADAD7D5D5D6D7D6D5D3D1D1D0CECECBCAC9C9C9C5C3C3C1C1BFBDB9B8B6B5B5B5B1B0ACABA8A7A7A5A4A29F9E9B9B999796949392928F8D8D8C8C8C89878685838181817E7D7D7C7D7B7B7B78797981858A909799979DA5A5A5A5A5A5A5A5A5A5A5A5A59F9695969087837A746F707070727272707070727072727272727273747676757575777777777878787878787A7B7A7C7C7E7F7F81818285858688898A898C8D8E90929397979B9B9C9FA2A5A7A8ABABB0B1B1B5B6B8BBBDC0C1C4C5C9C9CACBCECECFCFD0D0D0D3D5D5D5D6D7D6D9D7D9D9D9D9D9DBDBDBDBDEDEDCDBDBDBDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2DB400F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB90000000000000000000000000000000000000000000000000000000000137278797A7B7C7D7E7F8082838586888A8C8E90929497999B9DA0A3A5A8ABAEB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCD9D7D56E00000000000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECE9E7E7E4E1E0DDDAD9D6D4D0CCCBC7C5C3C1BDBAB7B5B2B1ADAAA8A4A2A09E9C999795939291908F8D8B8B8B888887878686868585858585858585868686878788898B8B8B8D8F9091939395979A9CA0A0A3A5A8AAADB1B3B5B7BABDC1C4C5C9CCCED1D4D7DADCDDE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F5F6F7F7F8F8F8F8F8F8F8F7F7F6F5F5F5F3F3F0F0EFEDECEBE8E7E5E4E1E0DDDCDAD7D4D3D0CCCBC7C5C3C1BEBDB9B7B5B3B1AFABAAA8A5A3A2A0A09D9A999795959393929190908F8D8D8B8B8B8B8989888887898D929699A1A1AAAAAEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A8A89F9E919187868080808080808080808080808080808080797272727272717172727275796F696A6C6D6D6F6E6E6F6F6F7072727575767778777777787A7B7C7D7F8081818283868789888C8E8F909093969797979B9C9E9FA2A4A5A5AAAAACAEAEB1B2B3B6B9BBBCBFC1C0C1C3C4C5C6C6C6C9CAC9CACBCBCED0D0D0D1D1D3D5D6D7D7D7D7D7D7D7D7D7DADAD9D9D9D7DADADADAD9D9D9D9D7D7D9D9DADADADADADBDBDAD9D9DADBDBDBDAD7DAD9D7D5D3D3D3D1D3D0CFCFCFCECBC9C9C8C6C4C3C0BFBFBCBDBBBBB9B8B5B2B1AEACABA8A7A4A4A19F9C9B9B9997949392908F8E8E8D8A888785838282817F7E7E7D7B7979797F868E97A6A9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AAA4968A7E70656565656567676767676767676565676767676868696A6C6C6D6E6E6F6F7071717375757677777778797C7E8182838586898C8E8F92939697979B9E9FA2A4A7AAACB0B1B2B6B8B9BBBFC1C4C5C6CACACED0D3D3D6D9DADBDEDEDFE1E2E3E2E3E4E3E3E4E6E7E7E7E6E7E7E7E9E9E9EAE9E9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDE600F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000000000000000397778797A7B7C7D7F808183848587898B8D8F919395989A9C9FA1A4A7A9ACAFB2B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDBD8D6B1080000000000000000000000000000000000000000000000000000000019F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F0F0EFEDECE9E7E5E4E0DEDCDAD9D6D3D0CCCAC7C5C1BEBDB9B7B4B1AFABA9A5A3A2A09C9A9795939291908D8D8B8B88888786868585848383838383838383838384858586868788898B8B8D8F9091939595989A9DA0A2A3A7A9ABAFB1B4B7B9BDC0C3C5C7CBCCD0D3D6D9DADDE0E1E4E7E7E9ECEDEFF0F0F1F3F5F5F5F6F6F7F8F8F8F8F8F8F8F7F6F6F5F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD9D6D4D1CECCC9C7C4C1BEBDBAB7B5B3B1AFACAAA8A5A3A2A09E9C9A99979595939291908F8F8D8D8B8B8B8B90969DA1A9ACB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0A79D9289827E7E7E7E7E7E7E7E7E7E766E706F6E6F6F6F6F6F6E72786F696A6A6A6C6C6D6E6E6E6E6F6F7171727575777677767778787A7B7C7D7D7F818183868788898C8D9090949497979B9B9C9FA1A4A5A5A7A8ABAEB1B1B3B3B6B8B9B9BBBDBFC3C4C5C8C9CACBCECECED0D1D5D6D7D5D7D7D7D7D6D7D7D9DBDAD9DADBDCDCDBDBDCDBDBDBDBDBDBDBDCDCDEDEDEDEDCDCDBDBDBDBDAD9DAD7D9D7D6D7D9D7D6D6D5D5D3D5D5D5D3D1D0CECECECBC9CAC9C9C6C5C3C1C0BFBFBDBBB9B8B6B3B1B0AEACABA8A5A4A29F9C9B9997969690908E8C8A898685828181817E7D7C7B7B7A77767983929DA9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9E917E716A69696A6A6A6A6C6D6D6F6D6D6F6F6F6F7172727272757577777879797C7D7E818183838689898A8C8D8E929397979B9C9C9FA2A5A7AAACAEB1B3B6B8BBBFC0C3C5C5C6C9C9CBCFD1D3D5D7D9DADCDEDEDEDFE1E2E2E4E4E4E4E3E4E6E6E6E6E7E9E7E9E9EAEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDC7A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62300000000000000000000000000000000000000000000000000000000006478787A7A7B7C7D7F8081838586888A8B8E8F929496989B9DA0A2A5A8ABADB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCD9D7D53A0000000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F0F0EFECECE9E7E5E4E0DEDCDAD8D4D1D0CCC9C7C4C1BDBBB7B5B3B1ADAAA8A4A2A09E9A9895959291908D8D8B89888786858584838382828282808080808282828283838485868687888B8B8D8F9091939597999C9EA0A2A4A8AAADB1B3B6B9BDBEC1C4C7CACCD0D3D6D8DADCDEE0E4E5E7E9ECECEFF0F0F1F3F5F5F5F6F6F7F8F8F8F8F8F8F7F7F6F6F5F5F3F3F1F0F0EFECECE9E7E7E4E3E0DDDCDAD7D4D3D0CCCBC7C5C3C1BDBAB7B6B4B1AFACAAA8A5A3A2A09E9C9A989595939291908F8F909398A0A5ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A89F95887F7D7D7D7D776F717171716F71727274777D726E6F6F6E6F6F6F707072727373767777767678797B7B7C7D7C7F8181838485898A8A8C8F8F9092949797999B9C9E9FA2A5A8AAABAEAEAEB1B2B5B8BBBBBBBCBCBDBFC0C3C3C5C5C8CACACBCECED1D1D1D3D5D6D7D7D7D6D7D7D7DADAD9DBDBDBDBDBDADBDBDBDBDCDEDEDEDEDEDEDEDEDBDCDCDBDBDBDBDADADADBDCDCDCDCDBDAD9D9D7D7D6D7D5D3D1D0D0D0D0CECFCECACACACAC9C6C6C4C4C4C3C1BFBFBDBBB9B8B8B6B6B3B2B0AEACACAAA7A7A5A2A29E9C9B99979693908E8C8C8C8889888683868B95A1AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE9B8B7D706F6F6F6E6E6F6F6E6F6F6F6E6F6F706F6F727273757675777778797B7C7E7F7E818283868988898D8E8F909396999B9C9EA1A4A5A7ABB0B1B5B6B9BBBDBFC1C4C5C6C9CACBCECFD0D3D5D6D7D7DADADCDEE1E1E1E2E2E3E3E3E3E4E4E3E3E6E4E6E4E6E6E6E6E7E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDB9C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0700000000000000000000000000000000000000000000000000000000187778797A7B7C7D7E7F8183848587898B8D8E91939597999C9FA1A4A6A9ACAFB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDBD8D687000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3C7C0C0BFBEBEBDBDBDBDBDBCBCBABABABAB8B8B7B7B6B6B4B4B4B4B3B3B1B1B1B1AFAFAFADAEAEAEABABABABABABABAAAAAAAAA8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8AAAAAAAAABAB9C8D8F9092939597999CA0A2A4A7AAACB1B2B5B7BABDC1C4C7C9CCD0D1D4D8DADCDEE0E4E5E7E8ECECEFEFF0F1F3F3F5F5F6F6F7F7F8F8F8F8F8F7F6F6F5F5F5F3F3F0F0EFEDECEBE8E7E5E4E0E0DDDAD9D6D4D1CECCC9C7C4C1BEBDB9B7B4B2B1ADAAA8A5A3A2A09E9C999795959392959CA4A9B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD9F91877872727475767576767777787F757272727372727272737372727273757575767778797B7C7C7D8181818383848888898C8D8E8F909394949797999B9C9FA1A2A2A4A5A7AAAEB1B2B5B6B9BBBDC0C1C4C4C6C8C9CBCBCFD0D1D3D3D3D5D7DAD9DADADBDADBDCDEDEDEDEDEDFDFDEDEDEDCDCDCDCDCDCDCDEDEDFDEDEDEDFE1E1E1E1E1E1E1DFDEDEDEE1DFDFDEDEDEDCDBDBDADBDAD9D7D7D7D7D6D6D6D5D5D3D3D1CFCECBCBC9C9C6C5C4C3C0BFBDBCBBB8B6B5B2B2B1B0AEABA8A8A5A4A29F9E9C9B999794969290908E8D8D899099A4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A08E786A6A6C6C6C6A6C6D6D6D6D6E6E6F6F6F727272737575767576777777797B7C7E7F818385898A8C8F8F909397999C9C9FA2A4A5A7AAACB0B2B5B5B8B9BBBBBCBFBFC1C3C3C5C5C5C6C9C9CBCED0D0D1D1D3D3D3D6D7D7D7D6D6D7D6D6D7D7D9DADADBDBDADBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9AA150F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000000000000000477878797A7B7C7D7F8081838586888A8B8D8F929496989B9DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DEDCD9D7CD10000000000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A18B8D8F90929395989A9EA0A3A5A9ABAFB1B4B7B9BDC0C3C5C7CBCED1D4D7DADCDEE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F5F6F6F7F8F8F8F8F7F7F6F6F5F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD8D4D3D0CCCBC7C5C3C1BDBAB7B5B3B1ADABA9A5A4A2A09E9C99989CA1A8B0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3928376757675757576787D736F6F6F6F6F7172727273737373737576777778777879797B7C7E7E80818183838687888A8C8E90929397999B9C9EA2A2A5A5A7AAABAEAEB1B3B5B8B9BBBFBFC1C3C5C6C9CACBCFD1D3D5D7DAD9DADADBDCDEDEDFE1E2E2E3E3E4E6E4E7E7E9E9E9EAEBEBEBEBEBEBECEEEEEEEEEEECECEBECECECECEEEFEEEEECECECEEEEEBEBEBEAE9E9E9EAE9E6E6E6E6E6E3E3E2E1E2DFDEDEDCDBD9D7D6D5D3D0CFCBCAC9C5C4C3C1BFBDBCBBB9B5B2AEACAAA7A5A2A2A19E9C9B99979694908F9099A5B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B198856D67696969696B6D6C6C6D6D6E707171707272737375767777787A787B7D7E7F8183858688898C8D9090929394999C9EA1A2A5A8AAABAEAEB2B3B5B9BBBDC0C3C3C5C6C5C6C6C6C8CACBCBCBCBCBCECECFCFCED0D0D0D0D0D0D0D0D0D0D0D3D3D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9C2250F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000000000056E78797A7B7C7D7E7F8182848587898A8D8E91939597999C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDBD8D65D0000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A18B8B8D8F91939597999CA0A2A4A8AAADB1B3B6B9BDBEC1C5C7CBCCD0D4D7D9DCDDE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F5F6F6F7F7F8F8F7F7F6F6F6F5F5F3F3F1F0F0EFEDECE9E7E7E4E1E0DDDCDAD7D4D1D0CCC9C7C4C1BEBDB9B7B4B1AFACAAA8A4A2A0A0A4AAB0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3907E767675777D726F6E6E6E6E6F707172727373727576767677777776787879787B7C7C7C7E7F81818183858688888C8D8E9090929497999B9C9EA1A2A4A5A7AAABAEB1B1B5B6B8B9BDBDBFC0C1C5C5C9CACED0D1D3D3D3D5D5D6D7D7D9D7D9D9DADBDEDEDEE1E1E1E1E2E2E3E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E3E3E3E3E3E3E3E4E6E4E6E4E3E3E1E1E1E1DEDEDEDBDBDBDBDBD9D9D7D5D5D5D1D0CFCBCAC9C5C5C3C1C0BDBBB9B8B8B5B2B1B0ACA8A7A5A4A19C9B97969492908F8D8A8E99A9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB8E766A6C6A6A6D6E6F6F71717273737576777778797C7D7D7F80808183838586888A8C8F90939497999C9FA1A5A7AAABB1B1B2B6B8BBBCBDBFC1C5C6C9CACACACECFD1D1D5D5D6D7D7D9DADBDEDEDFE1E1E1E1E1E3E2E1E2E3E3E3E3E3E2E2E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBE3380F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE307000000000000000000000000000000000000000000000000000000002B7778797A7B7C7D7F808183848688898B8D8F929396989B9DA0A2A5A8AAADB0B3B5B8BBBDC0C3C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEEDEBEAE8E6E4E2E0DEDCD9D7AA000000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A1888B8B8D90929395999C9EA0A3A7A9ACB1B3B5B7BBBEC1C4C7CACCD0D3D6D9DADDE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F5F6F6F7F7F7F7F7F7F6F6F5F5F5F3F3F1F0EFEFECECE9E7E5E4E0DEDCDAD9D6D3D0CCCBC7C5C3C1BDBAB7B5B3B1ADAAA7A8AAB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE957C6D74686565656767676869696A6C6C6E6E6D6D6E6D6E7071717273727475767778787A7B7B7E8181838686888A8D8E909296979B9B9C9FA2A4A5A7A8ABAEB1B2B3B5B8B9BBBFBFC1C4C5C8C9CACBCFD0D1D5D7D9D9DADBDBDCDEDFE2E3E3E3E3E3E3E4E6E6E7E6E6E7E9E7E7E6E6E6E6E6E6E7E7E7E6E7E9E9E9E9E9E9E6E7E7E7E7E7E7E7E7E7E6E7E6E4E4E4E2E1E1DEDBDADAD7D5D5D1D0CECACAC8C4C1BFBFBDBCB9B8B5B3B1AEACABA8A5A4A1A19E9B9B979492908F8D8F9BAEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A58B766E6E6F7171717272737275747576777777787B7C7E8181838385888A8C8F92939697999B9FA1A2A4A5A7A7AAACB1B2B5B8BBBCBFC0C1C3C4C6C9C9CECFD0D1D3D6D7D7DADADCDEDEDFE2E2E2E3E2E3E2E2E2E2E2E3E3E4E4E4E4E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2590F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000000000005B78797A7B7B7C7E7F8082848587898A8C8E90929497999C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E4E1DFDDDBD8D62A000000000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A187898B8D8F919395979A9EA0A2A5A9ABAFB2B5B7BABDC1C4C7CACCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F6F6F6F7F7F7F7F6F6F6F5F5F5F3F1F0F0EFEDECEBE8E7E5E3E0DEDCDAD8D4D3D0CCCAC7C5C1BEBDB9B7B4AEADAFB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE997D6968686969696A6A6A6C6D6D6D6E6D6E6F71716F7171727274757577777878787B7C7E7F818283858588888C8C8E90909294979B9C9C9E9FA2A4A7ABABACAEB1B2B3B5B9BBBDBDBFC0C3C4C5C6C8CACBCECECFD0D3D5D7D7D7D6D9D9D7DADADADBDBDBDCDBDCDEDEDEDEDEDFDFDFDFDFDEDEDEDEDCDBDBDBDCDCDBDBDBDCDEDCDBDADADADBDADAD9D7D7D5D3D5D3D3D0CFCBCBCACAC9C6C5C4C1C3C1C0BFBCB8B6B6B3B2B0AEACABA7A5A4A29F9C9B99979794939CAAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A58B726E6E6F6F716F72737475777878787B7C7C7D818183858687898C8D90929497999B9EA2A5A7A8ABAEB0B2B5B8BBBCBFC1C4C5C6C8CACBCED0D0D0D1D5D5D7D9D7D7D9DADBDBDCDCDEDEDEDEDCDEDEDEDEDEDEDEDCDCDBDBDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D67E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000000000137778797A7B7C7D7F808183848688898B8D8F919396989B9DA0A2A5A8AAADB0B2B5B8BBBDC0C3C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F5F4F3F1F0EFEDEBEAE8E6E4E2E0DEDCD9D7800000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A186888B8B8F90929597999CA0A2A4A8AAADB1B4B7BABDC1C3C7C9CCD0D3D6D8DADCE0E1E4E7E7E9ECEDEFF0F0F1F3F5F5F5F6F6F6F7F7F7F7F6F6F6F5F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DDDCDAD7D4D1D0CCC9C7C4C1BEB8B2B2B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE957D6D6D6D6D6D6E6E6F6F6F6F716F7272737575767777777879797B7B7C7C7D7E81818283858988898D8D8F92939397999B9E9FA1A2A5A7A8AAAEB1B2B5B8BBBBBCC1C3C3C3C4C6C6C9CACBCBCFD0D0D1D3D3D5D6D7D7D7D7D7D7D7D7D7D9DADADADAD9D9DBDBDBDBDBDBDEDCDBDEDEDBDCDBDCDBDAD9D9D7D7D7D7D9D7D6D7D6D6D6D6D5D6D3D0D1D1D0D0CECBCAC9C8C5C4C4C3C1C0BDBBB9B6B2B0AEABA8A8A5A2A19E9C9B9797969493908F8E8C91A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B197786A6A6B6D6E6E6F707273737375767777787B7C7E81828585898C8C8F929497999B9C9FA2A2A5A5A8ACB0B2B6B9BBBDBFC0C1C4C4C6C8CBCBCED0D1D1D3D5D5D5D7D9DADADADCDEDEDEDEDEDEDCDEDEDFDFDEDFE1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFB10F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE307000000000000000000000000000000000000000000000000000000004378787A7A7B7C7D7F8082848586888A8C8E90929497999C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEBE9E7E5E4E1DFDDDBD8CE110000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E8687898B8D90919395989C9EA2A3A7AAADB1B4B7B9BDC0C3C5C9CCD0D1D4D8DADCDEE0E4E5E7E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F7F7F6F6F6F5F5F5F3F3F1F0F0EFEDECE9E7E7E4E1E0DDDAD9D7D4D0CCCBC7C4BBB6B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE8E726C6D6D6D6C6D6E6F6F6F6F6F6F6F717271727373757676777777797C7B7C7D818182838487898A8C8E9092949697999B9C9EA2A4A5A8ABABB1B1B1B3B6B8BCBDC0C3C5C8C9CBCBCBCFCFD0D3D1D3D3D5D5D7D9DADADBDEDEDEDFE1E1E1E1E2E2E2E3E2E2E2E2E2E3E3E3E3E3E3E2E3E3E3E3E3E3E4E4E4E6E4E3E2E1E1DFDFDEDCDCDBDBDADADAD7D7D5D5D5D3D0CECBCAC9C6C3C3C1BFBDBBB6B5B5B3B1AEACABA7A5A2A19E9B97969EB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A68A73727272757676777878797B7B7C7C7C7E7F81828689898C8D90929397999C9EA2A4A8A8ABB1B1B2B6B6B9BBBFC1C4C5C6C6C9CACECFD0D0D1D3D5D7D7D9DADCDEDFDEE1E1E1E2E1E1E1E2E3E3E3E3E2E2E2E2E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBD31D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000000000056E78797A7B7C7D7E808183848688898B8D8F919396989B9DA0A2A5A8AAADAFB2B6B8BBBEC1C4C6C9CBCED1D3D6D8DBDDDFE1E3E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEDEBEAE8E6E5E2E0DEDCD9D75E000000000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A08586888B8D8F919395979A9EA0A3A5A9ACB1B3B6B9BDC0C3C5C9CCD0D1D4D7DADCDEE0E4E5E7E9ECECEFF0F0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0EFEFECECE9E7E5E4E0DEDCDAD9D6D3D0C9BEB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A080737375757574747675767676757777797B7C7C7B7B7C7C7C7D7E8182838486898A8C8C8D8F90929397979B9C9C9FA2A5A5AAABAEB0B1B2B5B6BBBDBFC1C3C5C5C6C8C9C9CBCBCED0D0D3D3D3D6D7D7DAD9D9D9DADADBDCDEDCDCDEDEDCDCDCDFDEDEDEDBDCDEDEDEDEDCDEDEDCDBDBDAD9D7D7D7D6D5D3D5D5D3D3D3D5D3D1D0CFCFD0CECBC9C9C6C5C4C3C1BFBFBCB9B6B3B2B1AEACAAA8A5A4A29E9C9B9796928F8F8D8F9FB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B198766D6C6C6D6D6E6F71727577787B7B7B7E8081828585898C8F909496979B9C9FA2A4A7AAACAEB2B5B8B9BDBFC1C1C4C5C8C8C9CACBCFCFD0D1D5D5D5D5D6D6D7D7DADADADADADBDBDCDCDEDEDEDEDEDEDCDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD1350F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000000000003078787A7A7B7C7D7F8082838586888A8C8E90929497999C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D5D7D9DCDEE0E2E4E6E8EAEBEDEFF0F1F3F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1EFEEECEBE9E7E5E4E1E0DDDBD8B40000000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E848687898B8D90929597999DA0A2A5A9ABB1B3B5B7BDBEC1C5C7CBCED1D4D7DADCDEE0E4E5E7E9ECECEFF0F0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0EFEDECECE8E7E5E4E0DEDCDAD8CCBFB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6876C6A6A6A696C6C6A6B6D6C6D6D6D6D6F6F6F7172727475757576787A7B7C7D7F81838587888C8C8F929497979B9B9CA1A2A5A7AAACAEB1B2B6B9BBBDC0C3C4C4C5C6C8C8CAC9C9CBCECFD0D1D3D5D5D6D7D7D7D9DBDADBDCDEE1E1DEDFDEDFDFE1E1E1E1DEDEDEDEDEE1DEE1E1DFDFE1DFDFDEDEDEDBDCDAD9D7D7D6D6D5D6D5D3D1CFD0CECACAC9C8C6C5C4C1BFBDBBB9B8B5B2AEACA8A7A4A4A19F9C9B999797A7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3997A7273757577777778787B7B7D7E81818385888A8C8D8E909496999B9C9E9FA4A5A7A8ACAEB0B1B3B5B8B8B8BBBCBDC0C1C5C6C5C6C9C9CACBCECFD0D1D3D3D5D5D5D5D5D5D5D5D5D7D6D6D5D5D5D6D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9600F0F0F0F0F0F0F0F10101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD907000000000000000000000000000000000000000000000000000000005F78797A7B7C7D7E808183848688898B8D8F919396989B9DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CBCED1D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEDECEAE9E6E5E2E1DEDCDAD73B0000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E838587888B8D90919395999CA0A2A4A8ABAFB2B5B7BBBEC1C5C7CBCCD0D4D7DADCDEE0E3E5E7E9ECECEFF0F0F1F3F3F5F5F5F6F6F6F6F6F6F6F5F5F5F5F3F1F0F0EFEDECEBE8E7E5E3E0DECDC1B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE90716C6C6C6C6D6D6D6F6F6F7071727072727576777777787A7B7C7D7E7F81818488898C8D8E90929396999B9C9FA4A5A8AAABB0B1B2B3B6B9BBBDC0C1C3C3C4C5C8CACACBCED0D3D5D5D7D9D9DADADADBDBDEDEDEDEDEDEDEDCDCDEDEDEE1E1E1E1E1E1E1E2E3E3E3E3E2E3E3E3E3E1E1DEDEDFE1DEDEDADADADADADADAD7D6D3D5D3D1D0CECBC9C8C5C4C1BFBCBBB8B6B3B1B1ACAAA8A7A4A29F9E9B9BAAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A082787B7C7D7E8081818183858889888A8A8D8F90939697999C9FA2A4A5A7A8ACACB1B2B6B9BBBDBFC1C5C5C6CACBCECED0D1D1D6D6D7D7D9D9DADBDBDBDBDEDEDEDBDBDBDCDCDCDEDEDEDEDEDEDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDE960F0F0F101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000000000001C78787A7A7B7C7D7F8082838586888A8C8E90929497999C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDD0D2D5D7D9DCDEE0E2E5E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1F0EEECEBE9E7E6E4E2E0DDDBD99A0000000000000000000000000000000000000000000000000000000023F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E828486888B8D8F919395999CA0A2A4A8ABAFB1B5B7BABEC1C5C7CBCCD0D4D7DADCDEE0E3E5E7E8ECECEFEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F5F5F5F5F3F1F0F0EFEDECEBE8E7E5D5C4B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B18C666160616262636363656567676768686967686A6D6D6D6E70727275767677797B7C7E80818586898A8E909293979B9C9EA1A2A5A7AAACAEB1B3B3B6B8B9BBBDBFC0C1C3C5C5C5C5C8C9CACECBCECFCFCFCFCFD0D3D6D6D6D7D7D7DADADADAD7D7D7D7D7D7D9DADAD9D7D7D6D5D3D0D0D0D0D0D0D0D0D0D0CECACACAC8C8C6C3C3C4C1C1BFBDBBB9B8B6B3B1B1B0ACAAA8A7A5A4A2A19E9B9BABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A37E73757576777778797C7D7E7F828388898A8A8E8F909396999B9EA1A4A5AAACAEB0B1B5B9BCBDC0C3C5C9C9C9CECFD0D1D5D5D7D7D9D9DADBDBDEDEDEDCDEDCDEDEDEDEDFDFDFDFDFDEDEDBDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEBE161010101010101010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23000000000000000000000000000000000000000000000000000000004C78797A7B7C7D7E808183848588898B8D8F919396989B9DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CCCED1D4D6D8DBDDE0E1E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DEDCDAD82200000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E82838687898B8F919395989A9EA2A4A8AAAFB1B4B7BABDC1C4C7CBCCD0D4D7D9DCDDE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F5F5F5F5F3F1F0F0EFEDECE9DBCAB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B18F676565656767676767686A6B6C6D6F7172727574757778797C7D7E808181838689898C8E8F9396979C9CA1A4A5A7AAACAEB1B3B5B6B9BCBDC0C3C4C5C8CACBD0D3D5D7DADBDEDFE3E3E6E6E6E9E9EBEBEBEBEAECEBEBECEBEBEBECECEBECEEEEEEECECECEEEEEEECECECEBEAEBE9E9E7E7E6E4E3E3E1E1DFDEDEDAD9D7D5D5D3D0D0D0CECBCAC6C5C5C1BFBBB8B5B2B1AEABA7A7A6AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A0837E818182858485888A8C8F90929697999B9C9FA2A5A7AAACAEB1B5B8BCBFC1C4C6C9CBCED1D3D5D7DADBDEE1E1E3E4E4E4E6E6E7E9E9E9E9E9EAEAEBECECECECECEEECEEEFEEEEEEEEEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3DA2610101010101010101010101010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE000000000000000000000000000000000000000000000000000000000E73787A7A7B7C7D7F8081838586888A8C8E90929497999C9FA1A4A6A9ABAEB1B4B7BABDC0C2C5C8CACDD0D3D5D8DADCDEE1E2E5E6E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F1F0EEECEBEAE8E6E4E2E0DDDBD9790000000000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E82838587898B8D909295979A9EA0A3A8AAADB1B4B7BABDC1C4C7CACCD0D3D6D9DCDDE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F5F5F6F6F6F6F6F6F5F5F5F3F3F1F0F0EFE7D0BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE8465656567676767676769696A6D6E6F6F71727475767577787A7B7D7F81818385898C8D8F9093979B9B9CA1A2A5A8ACACB0B2B3B5B8B9B9BCBDBFBFC1C3C4C4C5C6C9C9C9CACECFD0D0D3D1D1D1D3D5D5D5D6D7D6D5D7D7D7D9D9D9D9D7D7D7D7D9DAD7D7D7D7D9D9D7D5D6D6D7D6D5D5D3D0CFCECBC9C6C6C5C5C4C3C1BFBFBDBBB9B6B3B2B0ACABAAA8A5A2A19E9C9B99A5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39985838688898A8C8E909092969799999C9EA1A2A5A7A8ABAEB1B1B3B5B9BCBDC0C3C4C5C6C9CBCBCFCFD1D1D3D5D6D7D7D7D7D9DADBDADBDADCDCDCDCDEDCDCDCDCDEDCDCDCDEDEDEDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E152101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A000000000000000000000000000000000000000000000000000000003E78797A7B7C7D7E808183848588898B8D8F919396989B9DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CCCFD2D4D7D9DBDDE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DFDDDAD0110000000000000000000000000000000000000000000000000000000FEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E80838586888B8D909295979A9EA0A3A7AAADB1B4B7BABDC1C4C7CACCD0D3D6D9DCDDE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F5F5F6F6F6F6F6F6F5F5F5F3F3F1F0DAC5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A67A696A6A6A6B6A6D6D6E6F6F6F727273737575777878797B7C7F8081838386898A8E90909394979B9B9C9EA2A4A7AAABB0B1B5B6B6B9BCBCBDBFC0C1C3C4C5C8C9CACBCBCFCFCFD1D1D3D5D5D7D7D7DADADADADADAD9D9D9DAD9DADADADADADBDADAD9D9DADBDBDADADBDBDBDAD7D7D7D6D5D3D3D1D1D0D1D0CECBCAC9C6C5C3C1C1BFBBB8B5B2B1B0ACACA8A7A5A4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B18C787777797B7D7D818386888A8D909396979B9C9EA2A4A5A7AAACB1B2B5B8BBBFBFBFC1C4C5C6C9CBCECFD0D1D5D5D7D7D7DADBDADBDCDCDEDEDEE1E1E1E1E3E2E2E3E3E3E3E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDF9810101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF619000000000000000000000000000000000000000000000000000000056F787A7A7B7C7D7F8081838586888A8C8E90929497999C9FA1A4A6A9ACAFB2B4B7BABDC0C2C5C8CBCED0D3D6D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F1F0EFEDEBEAE8E6E4E2E0DEDCD95E0000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E80828486888B8D909293979A9DA0A3A7AAADB1B4B7BABDC1C4C7C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F5F5F6F6F6F6F6F6F5F5F5F3F3E9B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3986B6363646364646464656767686A6A6C6D6E727373757778787B7C7D7F7F838488888C8E909296999C9EA1A2A5A7ABACB0B1B3B6B6B9BCBFBFC1C3C4C6C9C9C9CACBCBCFD0D5D5D6D7D7D9DADBDADADBDCDCDBDBDBDBDBDEDBDEDEDEDEDCDEDFDFDEDEDFDEDEE1E1DEDEDCDBDADAD7D5D3D1CFCECBC9C8C5C4C1C0BFBCBBB9B6B5B2B1AEAAA8A5A4A29E9FAEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3818386878A8A8D90929397979B9C9FA2A5A8ABACAEB1B3B8B9BCC0C1C3C5C9C9CACACECFD0D3D5D7D9DADADCDEE1E1E3E3E4E3E6E6E7E7E9E9EBEBEBEBECECECECECEBEBECECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2C3171010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000000000003478797A7B7C7D7E808183848688898B8D8F919396989B9DA0A2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F1F3F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F7F5F4F3F2F0EFEEECEBE9E7E5E4E1DFDDDBC7080000000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D80828486888B8D8F929395999DA0A3A5A9ADB1B3B7B9BDC1C4C7C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1876A6C6A6C6A6B6A6C6C6D6D6E6E717172727376767777787B7C7C7F81838588898C90909297999B9EA1A2A5A5A8ABACB1B1B3B6BBBCBFC1C4C4C5C9CACACACBCECFD0D1D3D5D6D7D6D5D6D7DADBDBDBDCDCDBDADBDBDBDCDCDEDBDADADADCDCDBDAD9D9D9D9DAD7D7D5D5D1D1D0D0D0D0CBCAC9C8C6C5C4C3C1C0BFBCB9B9B6B5B3B1AEABAAA7A4AAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D7F8181828586888A8C8D8F9294979B9C9FA1A2A5A7A8ABACB0B1B3B6B9BBBDC0C1C4C4C6C9CBCECFD0D3D5D7D7D7D7DADADBDBDCDEDFDFE1E2E1E2E2E2E2E2E2E2E3E2E2E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCD537101010101010101111111111111111111111111111111111111110101010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000000000000000000000000000000000000000000000000000000065787A7A7B7C7D7F8082838586888A8C8E90929497999C9FA1A4A6A9ACAFB2B4B7BBBDC0C3C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEDEBEAE8E6E5E2E0DEDCD94E00000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D80828386878B8D8F919395999CA0A2A5A9ACB1B3B7B9BDC1C3C7C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39F6B65646464656565656868686A6C6D6F717175757577797B7D7E81818385878A8D8E92939697999B9C9E9FA2A4A5A7AAABACAEB1B3B6B9BCBDBFC1C3C3C5C8C9CACACACBCECECFD0D1D1D5D5D7D9D9D9D9D7D7D7D7D7D7D7D6D6D6D5D5D5D5D5D3D3D5D3D3D3D3D3D1CFCECECECAC9C8C9C6C5C5C3BFBDBBB9B8B5B3B0AEACAAA8A7A5A4A1B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7808182848689898C8E8F90929497999B9E9FA4A5A7ABACACB1B2B5B6B9BCBFC0C1C3C5C8CACACBCFD0D3D5D6D7DAD9DADBDADADBDBDCDEDBDAD9DADBDCDBDBDBDBDBDBDBDBDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E66F10101011111111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9070000000000000000000000000000000000000000000000000000002B78797A7B7C7D7E808183848688898B8D8F919396989B9DA0A2A5A8ABAEB0B3B6B9BCBFC1C4C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F1EFEEECEBE9E7E6E4E2E0DDDBB5000000000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8082838587898B8F919395999CA0A2A5A9ACB1B3B6B9BDC1C3C7C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B17E62616163636464646565656868696C6C6D6F7171727577777A7C7E8185898A8D90929496999B9C9CA2A4A7A7AAABAEB0B2B3B8B9BCBDBFC1C4C5C9CACBCED0D0D1D3D6D9D9DADADBDBDEDEDEDFDFDFE1E1E1E1E1E1E1DFE1E1E1E1E1E1E1E1E1E1E1DFE1E1DFDEDCDBDBDADAD7D9D7D5D3D1CFCBCBCAC8C6C4C3C0BFBBB8B5B1AFADB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78183838387888D8E8E909294969B9B9EA1A2A4A5A8ABB0B0B3B6B8B9BFBFC1C4C5C6C6CACACBCED0D0D1D3D7D7D9D9D9DBDCDBDBDEDFE1E1E1E1E1DFDFE2E2E1DFDEDEDBDBDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6B01111111111111111111111111111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000000000005B787A7A7B7C7D7F8082838586898A8C8E91939597999C9FA1A4A7AAADAFB2B5B8BBBDC0C3C6C9CBCED1D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E3E1DEDCDA3C0000000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8080838587898B8F919395999CA0A2A5A9ACB1B3B6B9BDC1C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39B71706F6F707272727575757777787A7D7D8081828687888C8E90929396999B9C9EA2A4A5A7AAACB0B2B6B8BCBFC0C1C3C4C5C6C9C9CED0D1D3D5D7D7DADADADBDCDEDEDFE1E1E2E3E3E3E4E4E6E6E6E6E4E4E4E4E4E6E6E7E6E6E4E4E3E2E1DFDFDEDEDBDBDAD9D9D7D6D3D1D0CBCBCAC9C8C5C4C0BFBDB9B8B5B5B1AEACA8B0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7D7F808181828586898A8D90939497999C9FA2A5A7A7A8ACAEB1B3B6B9BBBFBFBFC0C1C3C3C4C5C5C9CBCBCFD0D1D1D1D3D5D5D5D6D5D7D7D9DADAD9DADADADADBDADADBDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCCF1E1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6190000000000000000000000000000000000000000000000000000001C78797A7B7C7D7E808183848688898B8D8F929496989B9DA0A3A5A8ABAEB0B4B7B9BCBFC2C5C7CACDD0D2D5D7D9DCDEE1E2E5E6E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F5F4F3F1F0EEEDEBEAE8E6E4E2E0DDDBA500000000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8080838587898B8F919395989CA0A2A5A9ABB1B3B6B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA70656565676868696A6C6D6D6E6F7272757576787C7C7C8081828487898D8F9296999C9EA2A2A5A7A7ABAEB0B1B2B5B6B9BFC0C1C5C6C8CACBCFD0D3D3D5D7D7D9DADADBDBDCDEDFDFDFDFE2E1E1E2E3E3E3E3E4E6E6E6E6E4E4E3E3E2E3E1E1E1DEDEDEDCDEDBDCDAD9D9D7D5D5D1D0CBCAC8C6C5C3C1BDBBB9B8B6AFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A782838686898A8C8E9092939797999B9C9FA2A5A7AAABAEB0B1B3B8B9BBBDBFC1C3C5C6CACBCFD0D3D3D6D7D9DADADADBDEDEDEDFE1E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEA571111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000000000005B787A7A7B7C7D7F8082848587898A8C8E919395979A9C9FA2A4A7AAADAFB2B5B8BBBEC1C4C6C9CCCFD1D4D6D9DBDDE0E2E4E6E7EAEBECEEF0F1F2F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEBE9E7E5E3E1DFDDDA340000000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8080838587888B8D919395989CA0A2A4A9ABB1B3B6B9BDC0C3C5C9CCD0D3D6D9DADDE0E1E4E7E8EBECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B182696A6A6C6C6D6E6E7070727275767778787A7C7D7E818385888A8C8F90929497999B9EA1A2A5A7A8ABB0B1B5B5B8BBBDC0C1C4C5C5C8C9CACBCED1D1D3D3D6D7D6D6D6D5D5D5D7DADBDBDCDBDBDCDEDEDEDEDBDBDBDBDBDBDAD9D9D6D6D5D5D5D3D1D0CECECBC9C8C6C5C5C5C5C4C3BFBCBBB9B6B3B1AEAEA9AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7818283848686888A8C8E90929396979B9C9C9EA2A5A7ABACB0B1B1B3B6B6B8B9BBBDBFC3C4C5C6C8C9CACECBCECFD0CFD0D0D1D1D3D5D5D5D5D5D5D3D5D5D7D7D7D9DADBDBDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E49B111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000000000001378797A7B7C7D7E8081838486888A8B8D8F929496999B9EA0A3A6A9ABAEB1B4B7B9BDC0C2C5C8CBCED0D3D6D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E0DEDCA500000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828586888B8D909395989CA0A2A4A9ABAFB3B5B9BDC0C3C5C9CCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C64636465656567676869696A6D6E6D6F707376777B7C7F81818386898C8C8F929396979B9C9EA2A4A4A5A8AAACB0B2B5B8B9BCBFBFC3C4C6C8C9CACBCECFCECFCFD1D3D3D3D6D6D7D7D7DADBDBDBDBDADCDCDCDCDCDCDEDADADAD9D7D7D6D6D7D6D3D0CFCECBCACBCACAC8C6C4C3C1C0BDB9B8B5B2B1ABB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78283858888888A8E8F909397979B9C9EA1A4A5A8ACAEB1B2B5B8BBBDBFC0C3C5C6CACACBCECFD0D3D3D5D7DADADADBDEDFE1E1E3E4E4E3E4E4E6E6E6E6E9E9E9E9E9E7E7E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6CE181111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9000000000000000000000000000000000000000000000000000000004D787A7A7B7C7D7F8082848587898A8D8E919395989A9D9FA2A5A8AAADB0B3B6B8BBBEC1C4C7CACCCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F1EFEEECEBE9E7E5E4E1DFDDDB3400000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828586888B8D909395989CA0A2A4A8ABAFB3B5B9BDC0C3C5C9CCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39B64636464646567686A6C6C6E6F72727576777A7C7E808184888A8C8D8F9297999B9C9FA2A4A7A8ACAEB2B5B6B9BDBFC3C4C6CACBCBCFD0D3D5D7D7DBDEDEDEDFDFE1E1E3E3E4E4E4E4E6E6E6E4E3E4E3E3E3E4E4E4E3E3E4E6E4E4E3E2DFE1DFDEDEDEDBDCDAD9D7D7D5D3D1CFCBC9C8C5C1BFBDB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A98A8A8C8C8E908F929496999B9C9E9FA2A2A7A8AAABACACAEB1B2B6B9BBBDBFC1C3C4C5C6C8C9CBCED0D1D3D6D7D7D9DADCDEDEDEE1E1E2E3E3E3E3E3E2E3E3E2E2E3E3E4E4E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E74C111111111111111212121212121212121212121212121212121111111111111111111111111111111111111111111111111111111111111111111111111010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000000000001378797A7B7C7D7F8081838486888A8B8E90929497999B9EA1A4A6A9ACAFB2B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEAE9E6E5E2E1DEDC9D00000000000000000000000000000000000000000000000000000007E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828486888B8D909295989CA0A2A4A8ABAFB3B5B9BDC0C3C5C9CCD0D3D6D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39F6E65676869696A6B6D6D6E727273757576777A7B7D7E8184868A8C8E909397979B9C9E9FA2A5A7A7ABACB0B2B5B6B8BBBCBFBFC1C3C5C8C9CACED0D0D0D0D1D3D3D5D3D5D5D6D7D7D9DADADADAD9D9DADBDBDBDCDCDBDEDADAD9D9D7D7D6D6D5D5D3D3D3D1D0CECBCAC8C6C5C4C0BDBBB8B5AFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7838588888A8C8F909092969697999B9C9FA2A4A7A7ABACB1B2B2B5B8B9BCBDC1C3C4C5C9CACBCFD0D0D3D5D6D7D7D7D9DADBDEDEDEE1E1E1E1E2E2E3E2E3E3E3E2E2E2E3E3E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDF8F111111121212121212121212121212121212121212121212121212121212121212111111111111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED070000000000000000000000000000000000000000000000000000004D787A7A7B7C7D7F8082848587898B8D8F919396989B9DA0A2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D5D7D9DCDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F1F0EEEDEBEAE7E6E4E2E0DDDB2300000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828486888B8D909295989A9EA2A4A8ABAFB2B5B7BDC0C3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A969636464646565656768696C6D6E71727273757777787A7C818185898C8F90929397999B9E9FA4A7A8ACB0B1B3B6B8B9BDBFC0C4C4C5C8CACBCED0D1D3D3D5D6D6D5D7D7D7D9D7D9D9DADADADADAD9D9D9DADAD9D9D9D7D6D7D6D7D5D5D3D1D0CFCECBCAC8C5C4C4C3C1BFBDBBB9B6B4AFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A9888A8A8C8D8F9090929496979B9C9E9FA2A2A4A4A5A8ACAEB1B3B5B8B9BCBFC1C4C6C8CAC9CECED0D0D0D3D5D7DADADCDEDEDEDEDCDFDEDEDCDEDEDEDEDEDFDEDCDBDBDBDCDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3CC191212121212121212121212121212121212121212121212121212121212121212121212121212111111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D0000000000000000000000000000000000000000000000000000001378797A7B7C7D7F8081838486888A8B8E90929497999C9FA1A4A6A9ACAFB2B5B8BBBDC0C3C6C9CBCED1D4D6D8DBDDE0E2E4E6E7EAEBECEEF0F1F2F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F7F5F4F3F2F1EFEEECEBE9E7E5E3E1DEDC8B0000000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA6D6567686768696A6D6E707072737575787B7C7F808286888D8F909294999B9C9FA4A7A8ABACB0B2B5B6B9BCBFC3C4C5C6C9CBCECFD0D0D1D3D5D5D6D7D9DADADADBDBDCDCDEDEDFE1E1DEDFDFDEDEDEDCDEDCDEDBDCDCDBDAD7D7D7D5D1D0CFCECAC9C8C5C4C3C1BFBDB9B6B5B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A98888888A888C8D8D909090939396979B9C9C9FA1A2A2A5A7A8ABACAEB0B1B1B3B6B6B9BCBDC0C1C3C4C5C8C9CACBCECFD0D3D1D1D3D3D1D3D3D5D3D5D6D7DAD9DADADBDBDBDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E44C121212121212121212121212121211121112121212121212121212121212121212121212121212121212121111111111111111111111111111111111111111111111111111111110101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6230000000000000000000000000000000000000000000000000000004D787A7A7B7C7E7F8182848587898B8D8F919396989B9DA0A2A5A8ABAEB0B3B7B9BCBFC2C5C7CACDD0D3D5D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E0DEDC230000000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA6F69696A6A6C6D6F717274757577787A7B7E7F818387898C8D8E909496999B9EA2A4A5A8ABACAEB1B5B6B8BBBFC0C1C4C6C9C9CBCED0D1D3D3D5D5D6D7D9D7D9DBDBDEDCDEDEDCDBDBDAD9D9DADBDEDBDBDADADADADAD7D7D6D5D5D1D0D0CECAC9C6C6C4C3C0BFBCB9B8B5B3B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8A8C8D8D908F9093939396999B9C9C9FA2A4A4A5A8ABAEB0B1B3B6B9BBBBBBBFC1C4C6C6C9C9C9C9CBCBCACBCECED0D1D1D3D3D5D5D6D6D6D6D6D6D5D5D6D7D6D6D6D6D6D6D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E392121212121211111313131313131313131313131313131313131311111112121212121212121212121212121212121212111111111111111111111111111111111111111111111111111111101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA20000000000000000000000000000000000000000000000000000001378797A7B7C7D7F8081838586888A8C8E91939597999C9FA1A4A7AAADAFB2B6B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F4F3F2F1F0EEECEBE9E7E5E4E1DFDD9500000000000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A96761616264636467676869696A6E6F727377787B7C7F8185878A8D8F929294979B9C9FA2A5A7ABB0B1B2B6B9BBBCBFC3C5C5C8CACACFD0D3D5D7DADBDCDEDEDFE1E2E3E3E3E3E3E3E4E6E7E6E6E4E4E3E3E4E4E3E3E2E1E1E1DEDEDEDBDBD9D6D5D3CFCFCBCAC8C6C5BDB4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8F9090929294979797999C9E9FA2A4A5A5A8ABABACB0B1B3B5B8BBBCBFC1C3C5C6C8CACACBCED0D0D1D0D5D3D3D5D5D7D9D9DADADCDEDEDEDBDEDFE1E1E1E1DFE1E1E1E2E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2CB191211131313131313131313131313131313131313131313131313131313131313111111121212121212121212121212121212121111111111111111111111111111111111111111111111111111101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000000000004D787A7B7C7D7E7F8183848688898B8D8F929496999B9DA0A3A6A9ABAEB1B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEAE9E7E5E2E1DEDC34000000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F5F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A96A6363646565676868686A6C6C6D6E71737577777A7B7C7F818285888A8E909294979B9EA1A2A4A5A7AAACB0B3B6B8B8BCBCBDBFC0C0C1C1C5C5C8C8C8CACBCFCFD0D0D1D3D3D3D5D3D5D5D5D5D3D0D0D1D1D1D1D3D3D0D0CECECFCBCACAC9C6C4C3BFBFBDBBB9B6B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9392939699999B9C9E9E9EA2A4A4A5A5A7A8ABACB0B1B2B6B6B6B9BDBFC1C3C5C6C6C9C8CACBCED0D0D3D1D1D5D5D7D9D9D7D7D9DADADCDADADADBDADBDBDCDCDEDBDBDBDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1845D5D5D5C5D5D5D5D5E5D5D5D5D5D5D5D5E5C5C5D5D5E606060605E5E606060606060606060605E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5C5C5D5D5C5C5D5D5D5C5C5C5C5C5C5C5C5C5C5A5C5C5B5A5B5B5A5A5C5A5A5C5C5C5A5A5A5A5A5A5A5858585858585858575857575757575758585858585858575757575757575757575757575857585757585858585859595A5A5A585A5A595859595A5A5A5A5A5A5A5A5A5A5A5A5C5A5A5A5959595A5A5A5A5A5A5A5C5C5C5A5A5A5A5A5A5C5C5A5A5C5B5B5C5A5A5A5A5A5A5A5A5A5A5A5A595A59595959595A5A5A5959585858585858585858582C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC40000000000000000000000000000000000000000000000000000001378797A7B7C7D7F8081838586898A8D8E919395989A9D9FA2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D5D7D9DCDEE1E2E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E0DDA700000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A06B6C6D6D6F6F717274757777797D7F818285898A8D8F929397999B9C9EA2A4A5A8ABAEB0B2B5B6B8B9BCC0C1C4C5C8C9CBCBCFD1D3D3D3D5D5D7D9D9D9DAD9DADBDBDBDBDBDADBDBDBDBDBDADADAD7DAD7D7D5D6D6D6D5D3D0D0CFCFCFCECAC8C6C5C3C1C0BDB4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE9B9C9E9F9C9FA2A4A2A4A5A8ABACB0B2B2B2B6B8BBBBBCBDC1C3C4C5C6C8C9CBCACBCED0D3D3D7D6D7DADBDCDFE1E1E2E3E3E4E4E3E3E3E2E1E3E3E3E4E3E2E3E3E3E2E2E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D38D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000000000000000000000000000000000000000000000000000004D787A7B7C7D7E808183848688898B8E90929497999C9EA1A4A6A9ACAFB2B4B8BBBDC0C3C6C9CBCED1D4D6D9DBDDE0E2E4E6E8EAEBEDEEF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F1EFEEECEBE9E7E5E3E1DFDD34000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F5F5F5F3F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39C5D606161636464656567696B6D6E71757678797C7D7E8183868A8C8F909396979B9C9FA2A5A5AAACAEB1B3B5B8B9B9BDBDC0C1C3C5C5C6C9CACBCECECECECFD0D0D0D3D3D5D5D3D3D3D3D3D1D1D1D1CFCFCFCBCBCBCBCBC9C8C6C8C5C5C3C1BFBFBBB9B7B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA908F909090929393949497979B9B9C9FA2A5A5A7AAACAEB0B1B3B5B8B9BBBDBDBFC0C3C4C6C8CACECECFD0D0D3D5D5D7D7D9D7D7D7DAD9D9DADADBDBDEDCDCDEDEDEDCDEE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3990F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD90000000000000000000000000000000000000000000000000000001378797A7B7C7D7F8082848587898A8D8F919396989B9DA0A2A5A8ABAEB0B3B7B9BCBFC2C5C7CACDD0D3D6D8DADCDEE1E3E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEEECEAE9E6E5E2E0DEA700000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F5F5F5F5F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38F65656767686969696C6E6F7173757677787C7C818285898A8D909293979B9C9FA2A2A5A5A8ABAEB2B3B6B9BBBDC0C4C4C8C8C8CACECFD0D0D3D1D5D5D3D5D7D7D9DAD7D7D7D7D6D5D5D3D3D1D0D0D0CFCBCECBCBCBCBCAC9C8C6C4C3C3C1BFBCB9B7B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AC99999B9C9C9C9E9FA2A4A4A5A7A7A7AAACAEB1B1B3B6B8B9BCBFC0C4C5C5C8C9C9CACACBCFCFD1D1D5D6D6D9D9DAD9DADADBDBDCDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2980F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000000000004D797A7B7C7D7E8081838486888A8C8E90929497999C9FA1A4A7AAADAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE0E2E4E6E8EAECEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F3F1F0EEEDEBEAE7E6E4E2E0DD34000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F5F5F5F5F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37C6364656767696A6D6E6F72727375787A7B7D818388898C8E909293979B9C9FA4A7AAACB0B1B5B9BCBDBFC0C1C4C5C6C9C9CBCED1D1D1D5D6D7D7D7D7D9DADADBDADBDCDBDADBDBDBDBDBDAD9D9D9D7D9D7D5D5D3D1CFCFCECBCAC8C5C4C4C3BFB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA8A8AAAAABACACACAEB1B1B1B2B3B5B6B8B9BDC0C1C4C5C6C8CACBCBCECECFD0D3D5D5D6D7D9D9D9DADBDBDEDEDEDFDFDEDFDFE1E1E1E2E1E2E1E1E1E1E1E1E1DFDFDFDFE1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D38D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD90000000000000000000000000000000000000000000000000000001C78797A7B7C7D7F8082848587898B8D8F929496989B9DA0A3A6A9ABAEB1B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E6E7E9EBECEEF0F1F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F1EFEEECEBE9E7E5E3E1DEB900000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F5F5F5F5F3E5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B17469686A6A6A6D6D6E6F717273757777787B7C7F8183868A8C8E909696979B9C9FA2A4A7A8ABACB1B3B6B9BBBDBFBFC1C3C4C9CACACBCECED1D1D1D1D3D5D6D7D7D7D7D5D5D5D3D1D1D0D0D1D1D1D1CFCFCECECECAC8C6C6C3C3C1BFBDBBB9B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA4A5A4A5A7A7A7AAABACABACB0B0B1B1B2B3B6B6B8B9BCBCBFBFC0C3C3C4C5C6C9CACACBCECFD0D0D3D3D5D5D6D6D9DADADADBDBDEDFDFDFDEDFDEDEE1E1E1E1E1E1E1E2E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7900F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000000000005B797A7B7C7D7F8081838586888A8C8E919395989A9D9FA2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D5D7DADCDEE1E3E5E7E9EAECEEEFF1F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E0DE4F000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F6F5F5F5F3E5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A56765656768696A6D6F71737575777B7B7E81828388898D909497999C9EA2A5A7A8ACB1B3B8BBBDBFC3C4C6C9CACBCED0D1D5D5D7D9DADADBDCDBDBDCDFDFE1E1DEE1E2E2E1E1DFDFDEDEDEDEDEDCDBDADAD9D7D5D5D3D3D1D1CFCECAC9BFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA5A5A7A7A7A7AAABACACACAEB0B1B2B3B6B6B8BBBCBDBFC1C4C4C6C8CACECFD1D3D3D5D5D6D7DADADADCDCDEDFE1E3E2E3E4E4E6E6E6E6E6E7E7E7E6E7E7E7E7E7E6E6E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECA10F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE307000000000000000000000000000000000000000000000000000021787A7B7C7D7E7F8183848688898B8E8F929497999C9EA1A4A6A9ACAFB2B4B8BBBDC0C4C6C9CCCFD1D4D7D9DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F2F1F0EEECEBE9E7E6E4E1DFB900000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F5F6F6F6F6F6F6F6F5F5F5F3E5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3906262636464656568696B6C6F7173747577797D7E818286898C8D909396999B9CA1A2A5A5AAACAEB1B3B6B9BBBCBDC0C1C3C5C6C8CACECBCBCECFD0D1D0D0D1D1D0D0D1D0D1D3D1D1D1D0D1D1D1D1D0CFCBCECAC9C8C8C5C5C3C0BFB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AC979B999B9C9CA1A1A1A2A4A5A5A7A8AAABAEAEB0B1B1B2B5B8B9BBBFC1C3C4C4C5C9C9CACECECFCFCFD0D3D3D3D3D6D7D7DADADADCDCDCDADEDEDEDFDFE1DFE1E1E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E49C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000000065797A7B7C7D7F8082838587898A8D8F919396989B9DA0A2A5A8ABAEB0B4B7B9BCC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEF0F1F2F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE9E7E5E3E1DE61000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37C6868696A6C6D6E7070737677777A7B7D7F8183868A8D8F9094979B9C9FA2A5A8ABAEB1B2B6B8BBBCBFC0C4C5C6C9CACBCECFCFD0CFD1D3D5D6D6D7D7D9DAD9DADBDBDADADBD9D7D7D6D7D6D5D5D1D1D0D0CFCBCAC9C6C6C4C1BDB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B1B1B2B2B3B5B6B6B5B6B8B8B9BBBCBDC0C0C1C3C5C6C6C9CACECFD0D3D5D6D7D7DADADEDEE1E2E2E3E3E3E3E6E7E7E9E9EBEBEBEBECECEEEEEEEEEEEEEEEEEEEFEEEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDA920F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0700000000000000000000000000000000000000000000000000002B787A7B7C7D7E8081838486888A8C8E90929497999C9FA1A4A7AAADAFB3B6B8BBBFC1C4C7CACDCFD2D4D7D9DCDEE1E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E0CC09000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F5E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE6B696A6A6C6D6E7174747576797B7E818387898A8C909397999B9CA1A2A5A7A8ABAEB1B3B6B8BBBFC0C1C5C5C6C9CACECFCFD1D1D3D5D6D7D7D9D9DADADBDBDADADBDCDCDBDCDCDADBDAD7D7D7D6D7D5D5D3D3D3D1D0CBCAC9B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA8A7A7A8A7AAABABACACACAEB1B1B1B2B2B3B6B6B8B9BBBCBDBFC1C4C5C5C5C8C9CBCECFD1D1D3D5D7D9D9DADBDEDEDEE1DFE1E1DFDFDEDEDEDCDBDBDEDEDEDEDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1980F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000000069797A7B7C7D7F8082848587898B8D8F929496999B9EA0A3A6A9ABAEB2B4B7BABDC0C3C6C9CBCED1D4D6D9DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F2F1F0EEECEBE9E7E5E4E1DF73000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F6F6F6F6F7F6F6F6F6F5F5F5E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3926567686A6D6E6F7272757577787B7D7E818285898A8D8E909296999B9EA2A4A5A7ABACB2B5B8BBBFC1C5C5C9CACBD0D3D5D5D7DADADBDBDEDFE1E1E1E1E2E1E1E1E1E1E1E1E1E1DFDCDCDCDADAD9D9D7D6D5D5D0CFCBC9BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0ACACACACACACAEACAEB0B1B1B2B2B5B8B8BBBBBCBFC0C1C1C5C5C8CACBCECECFD1D0D3D1D1D3D3D3D3D5D5D5D5D6D6D7D6D7D7D9D9D9D7DAD9D7D7D9D9DAD9D9D9D9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E69C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED07000000000000000000000000000000000000000000000000000035797A7B7C7D7F8081838586888A8C8E919395989A9D9FA2A5A8AAAEB0B3B6B9BCBFC2C5C7CACDD0D3D6D8DADDDFE1E4E5E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE9E7E5E2E1D511000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F1F3F5F5F5F6F6F6F7F7F7F6F6F6F5F5F5E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3756767696A6C6E6F71727677797C7E818186888A8D8E8F929497999C9E9FA2A5A7A8ABAEB1B3B6B9BBBDBFBFC1C3C5C6C6C9C9CACACECFD0D1D3D3D3D1D3D3D3D5D6D5D5D5D5D5D5D3D0D1D1D1D0CFCFCBC8C6C5C3BFB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBBBBBBBBCBCBBBBBDBCBCBDBFBFBFC0C1C1C1C1C3C5C5C8C9C9CBCECBCFD0D0D3D1D3D3D5D6D6D7D9D7D7D9DADADADBDADBDCDCDCDCDBDCDCDBDEDCDCDCDEDEDEDEDEDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D78E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000000005737A7B7C7D7E7F8183848688898B8E90929497999C9FA1A4A6A9ADAFB2B5B8BBBEC1C4C7CACDCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E08D000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5E6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A76A6A6B6D6E6E6F72757677797C7E81818689898C8F9094979B9C9FA1A4A5A7AAACB0B2B5B9BCBFC0C3C5C6CACED0D1D3D3D6D7D9DADADAD9DADBDFDEDEDEDEDEDFE1E1E1DFDFDCDEDEDCDBDBDAD9D6D3D3D0CECAC9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0AEB0B1B1B1B2B2B3B5B5B8B6B8B9BBBDBCBDBFBFC1C1C4C4C5C5C8C9C9CACACBCFD0CFD0CFD1D3D3D5D6D6D7D9DAD9DBDBDCDBDBDCDBDADCDADCDEDCDCDBDBDBDEDCDBDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDA695E60605F5F5F5F5F5F5F5F5F5E5E5E5F5F5F5F5F5E5E5E5F5F5F5E5E5E5E60605F5F6060605F5F5F5F605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5E5E5D5D5E5E5E5E5E5E5C5E5E5E5E5E5E606060606160616161606161606160606060606060605E606060605F605F5F5F5F5F5F5F60605F5F5F5F5E5F5F5E5F5F5F5E5E5E5E5E5E5E5F5F5F5F5E5E5E5F5F5F5E60606060605F5F5E5E5E5E5E6060606060606060606060606060606060606060606060606060606161616161616161616161606060606060606060606060616160605E5F5E5E5E5E5E5F5E5E5E5E5E5E5E5C5C5C5C5C2F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD900000000000000000000000000000000000000000000000000000043797A7B7C7D7F8082838587898B8D8F919396989B9DA0A3A6A9ABAEB1B4B7BABDC0C3C6C9CBCED1D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F2F1F0EEECEBE9E7E5E4E1DF2C000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F6F5F5E6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3826768696C6C6D6F6F72747575777A7D7F8185868A8A8E9094979B9EA2A5A8ABB0B1B5B9BCBFC1C4C5C9CACBCFD3D3D6D6D7DADADADBDCDEDEDEDFE1DFDFDFE1DFDFDEDFDFDFDEDEDBDADAD7D7D5D1D3D1CFCBCBBDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B1B1B2B1B3B5B5B6B6B8B9B9BBBCBFBFC0C3C4C4C5C6C6C6C9C9C8CACAC9CACBCBCBCECFCFCFD0D0D1D3D5D5D5D7D6D5D6D7D7D7D7D7D7D7D6D7D9DADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D672151514141414141414141414141414141414141414141414141414141414141414141515151515151515151414141414141414141414141414141414141414131313131313131313131313131313131313131313131112121212121212121212121111111111111111111111111111111111111111101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55000000000000000000000000000000000000000000000000000013787A7B7C7D7E8081838486888A8C8E919395979A9C9FA2A5A8AAADB0B3B6B9BCBFC2C5C7CACDD0D3D5D8DADDDFE1E3E5E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE9E7E5E2E0A9000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F7F6F6F5F5E6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE6969696C6E6F7072737778797C7E7F818386898C8F9296979B9C9C9FA2A4A5A7ACB0B3B6B8B9BCBFC1C4C5C8C8C9CACECED0D0D0D1D1D3D3D5D5D5D5D3D5D5D5D3D3D1D1D3D5D5D5D5D3D0CFCFCBCBC9C8C6C1B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B1B2B2B2B2B3B1B2B2B2B1B2B3B3B6B8B9B9B9BBBCBDBFBFBFC0C3C3C3C3C6C5C6C6C9C9CACACBCBCECED0D1D1D3D6D7D9DADADBDCDBDBDBDADADADBDBDBDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6D91C1414141414141414141414141414141414141414141414141414141414141414141414141414151515151515151514141414141414141414141414141414141414141313131313131313131313131313131313131313131112121212121212121212121111111111111111111111111111111111111111101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD900000000000000000000000000000000000000000000000000000051797A7B7C7E7F8082848588898B8D8F929497999C9EA1A4A6A9ACAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2E047000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F8F7F7F6F6F6F5E6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3916A6A6D6F6F72737677787A7D7E818283868A8C8E909396999B9EA1A4A5A7ABACB0B1B5B6B9BCBDC1C1C4C5C8C9CBCECFD0D1D3D5D7D9D9D9DADADADADCDCDCDCDBDBDCDBDBDBDADADADAD9D6D3D1D0CBCAB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCBCBCBCBCBDBFBFC1BFC0C3C4C4C5C8C9C9CACACBCBCBCBCECECED0D1D5D5D3D3D5D7D7D7D9D9D7D7D7D9DADBDADADADADBDADBDBDBDCDBDBDBDBDBDBDBDADBDBDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D65A14141414141414141616161616161616161616161616141414141414141414141414141414141414141414151515151515151514141414141414141414141414141414141413131313131313131313131313131313131313131311121212121212121212121211111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5500000000000000000000000000000000000000000000000000001D797A7B7C7D7F8081838586898A8D8F919396989B9DA0A2A5A8ABAEB1B4B7BABDC0C2C5C9CBCED1D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F6F5F4F2F1F0EEECEBE9E7E5E4E1C4000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F8F8F8F7F7F6F6F5E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1666161646465676A6B6C6D70727576787B8080818689898D8F9093969B9B9FA2A4A7ABAEB1B3B6B9BCBDBDC3C1C4C6C6C8C9C9CACBCED0D1D3D5D5D5D5D5D7D6D5D7D6D5D3D1D1D3D0CFCFCFCECBCBC9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9B9B9B9B9B9BBBBB9BBBCBFBFBFBFC0C1C1C0C3C4C4C5C5C9C8C8C9CACECFCFCECECFD0D1D5D5D5D5D5D5D6D7D9D9DADADADADADADADBDBDCDEDEDCDBDEDEDEDFDEDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1C214141414161615151515151515151515151515151515151515151516161616141414141414141414141414141414141415151515151515141414141414141414141414141414141414131313131313131313131313131313131313131311111212121212121212121211111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE000000000000000000000000000000000000000000000000000000657A7B7C7D7E8081838486888A8C8E90929597999C9FA2A4A7AAADB0B3B6B9BCBFC1C5C7CACDD0D3D5D8DADDDFE1E3E5E7E9EBECEEF0F1F2F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE9E7E5E2E06200000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F8F8F8F8F8F7F6F6F5E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38F676767696A6C6D6E717376787B7D7F818588888C8E9093979B9C9FA5A5A8ACACAEB2B6B9B9BDC0C3C5C6C9CACACBCED0D1D3D3D6D7D7D9D9DADBDEDEDCDCDBDADAD9D7D9D7D7D6D7D6D3D3D1D0CECAB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CAC9CACACAC9C9CBCBCACBD0D0D0D0D0D1D3D5D6D5D7D9D9D9DBDADBDCDEDEDEDEE1E1E1E2E3E3E2E3E3E4E4E6E6E7E9EAEAEBEBEBECEBEBEAE9E9E9E9E9E9E7E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E345161615151515151515151515151515151515151515151515151515151515151515161614141414141414141414141414141414151515151515151414141414141414141414141414141414131313131313131313131313131313131313131313111212121212121212121211111111111111111111111111111111111111101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35000000000000000000000000000000000000000000000000000030797A7B7C7D7F8082848587898B8D8F929496999B9EA1A4A6A9ACAFB2B5B8BBBDC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2D7110000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F6F6F7F7F8F8F8F8F8F7F7F6F6E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B16864656767696A6C6F6F717577787C7D808286888A8E9096979B9EA2A4A7A8ABACB1B2B5B6B9B9BBBFC0C1C3C4C6C8C9CACACBCBCBCECECFD0D0D0D1D1D3D3D3D1D1D1D3D3D0D1D1D3D0D0CECECAC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C1C1C1C3C3C3C3C3C3C3C4C4C4C4C5C5C8C8C9C9C8C9C9C6C6C8CACED0D0D0D0D0D3D3D6D7D7D6D6D7D7D7D9DAD9D9D9D9D9D9D9D9DAD9D9DADAD7D7D7D9DADBDCDCDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBAE151515151515151515151515151515151515151515151515151515151515151515151515151516161614141414141414141414141414141515151515151514141414141414141414141414141414141313131313131313131313131313131313131313111212121212121212121211111111111111111111111111111111111111101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4000000000000000000000000000000000000000000000000000005747A7B7C7D7F8081838586898A8D8E919396989B9DA0A2A5A8ABAEB1B4B7B9BDC0C2C5C9CBCED1D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F6F5F4F3F1F0EEECEBE9E7E5E4E18F000000000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F7F6F6E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38567686A6A6D6F7172767777797C7F8184898C8E909497999CA1A4A5AAACAEB1B2B3B6BBBDC0C1C4C5C8CACED0D1D3D6D7D9DADADBDCDCDCDEDEDFDFDFDFDFDFDFDFDFE1E1E1E1E1DFDFDEDFDEDCBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C6C5C5C5C6C8C9CACBCBCBCBCBCBCBCECFD0CFCFD0D1D1D3D5D5D6D7D9D9DBDCDCDEDFDFDFE1E1E1E1E1E3E3E4E4E4E7E6E6E6E4E6E6E7E7E9E9E9E9E9E9EAEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F24115151515151616161616161616161616161616161616161616161515151515151515151515151515151516161414141414141414141414141414151515151515141414141414141414141414141414141413131313131313131313131313131313131313131112121212121212121212111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF230000000000000000000000000000000000000000000000000000487A7B7C7D7E7F81838486888A8B8E90929497999C9FA1A4A7AAADB0B3B6B9BCBFC1C5C7CACDD0D3D5D8DADDDFE1E3E5E7E9EBECEEF0F1F2F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F1EFEEECEAE9E7E5E2E13500000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F8F7F6E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA6567696A6C6C6F72757577797B7C7F8285868A8C9093979B9C9FA1A4A5A8ABAEB1B1B5B6B9BBBBBFC3C3C4C5C8C9CACECFD0D1D3D1D1D3D3D5D5D5D6D6D5D5D1D3D3D3D3D3D0CFCFCECAC9C9C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CBCBCBCBCBCECECECECECBCBCECFD0D0D0D1D5D5D5D5D7D7D7D7DADADBDADADADBDCDEDCDEDEDFDFE1DFE1DFDEDFE1DEDEDEDFDEDEDEDCDEDEDEDCDBDEDBDADBDBDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDF9A15151616161616161616161616161616161616161616161616161616161616161615151515151515151515151515151616141414141414141414141414141515151515151414141414141414141414141414141413131313131313131313131313131313131313131112121212121212121212111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000000013797A7B7C7D7F8082848587898B8D8F929496989B9EA1A4A6A9ACAFB2B5B8BBBDC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E2BC00000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F8F7F7E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3816E717272767677797A7D7F808186898A8E8F9294979B9CA1A2A4A5A7ABB0B1B3B5B6B9BCBDC0C1C4C5C6C9C9CACBCECFCED0D1D1D5D5D3D3D1D1D3D1D1D3D1D0CFCFCECECAC8C6C5C4C3C4B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C1BFC0BFBFBFC1C0C1C1C1C3C1C4C4C5C5C6C5C5C6C6C9C9CACBCBCECECECECFD0D1D3D1D3D3D5D5D5D5D5D7D7D6D6D5D5D5D3D5D5D5D5D6D5D5D3D3D1D1D0D0D0D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D733161616161616161616161616161616161616161616161616161616161616161616161616161515151515151515151515151516161414141414141414141414141415151515151514141414141414141414141414141414131313131313131313131313131313131313131112121212121212121212111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F00000000000000000000000000000000000000000000000000005B7A7B7C7D7F8081838586888A8C8E919396989B9DA0A2A5A8ABAEB1B4B7B9BDC0C2C6C9CBCED1D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEEDEBE9E7E6E4E15900000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F8F8F7E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7BDBDC3C7C7C7C6C6C3BDBDBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39F6567686A6D6D6F727375787B7D81818689898D909294979B9CA1A2A5A7ABACB0B2B5B6B9BBBFC1C3C4C6C8C9CBCED0D0D3D3D3D5D5D6D6D7D6D6D6D7D7D7D9D7D7D7D6D6D5D0D0CECECEC6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C3C3C1C3C5C5C6C6C6C6C5C8C9C9C9C9CACACBCFD0D1D3D3D3D1D1D5D3D3D3D5D5D6D7D7D7D7D6D6D7D7D9D9DADBDADADADADADCDEDEDEE1E1E2E1E2E2E3E4E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E39C161616161617171717171717171717171717171717171717171717161616161616161616161616161616151515151515151515151515161614141414141414141414141415151515151514141414141414141414141414141414131313131313131313131313131313131313131112121212121212121212111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000002B7A7A7B7D7E7F81828486888A8B8E90929497999C9FA1A4A7AAADB0B3B6B9BCBFC2C5C7CACDD0D3D5D8DADDDFE1E4E6E7E9EBECEEF0F1F3F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F4F3F2F1EFEEECEBE9E7E5E3D8090000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F9F9F9F8F8F8F8E8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBC1C5CFD3DAE1E7E7E7E8E8E8E9E9E9E9E9EBEBEBEBE5DDD4C9C3B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B36E67686A6D6D6E71727577797B7D8183868A8C8F9293979B9EA2A5A7AAACB0B2B6B9BDBFC3C5C6C9CBCED0D1D3D3D6D6D7D7D9DADADAD7D9D9D9DADADADBDADADBDADADADAD9D7D5D3D3BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CBCBCECECECBCBCECFCECECECED0D0CED0D1D5D5D3D3D3D3D3D5D6D9DADBDBDBDCDEDCDFDEDEDEDEDEDEDEDEE1E1E1DFDFDFDFE1E1E1E1DFDEDEDEDEDBDBDBDCDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDED62416171717171717171717171717171717171717171717171717171717171717171616161616161616161616161616151515151515151515151516161414141414141414141414141515151515151414141414141414141414141414141313131313131313131313131313131313131311121212121212121212111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED070000000000000000000000000000000000000000000000000005707A7B7C7D7F8081838587898B8D8F929496989B9EA1A4A6A9ACAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE8E6E4E286000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F8F9F9F9F9F9F8F8F8E8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BEC6CCD8E5E5E7E7E7E7E8E8E8E9E9E9E9EBEBECECECECECECECECECECECECECECDECDC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B386636565686A6C6D6E707375777B7E80838586898E8F9294979B9E9EA2A5A7AAAEB0B2B5B8B9BFBFC3C3C4C5C8C8C9CBCECFD0D0D0D0D0D3D3D5D5D3D3D1D1D0D0D0CFD0D0CFCFCECEC8B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C4C5C5C5C6C6C6C8C6C8C6C5C6C9C8C9C9C9CBCECFCECED0D0D0D0D3D3D6D6D7D9D7DADADCDEDEE1E1E2E3E3E4E4E4E6E4E4E6E4E4E6E9EAE9E9E7E7E7E7E9E9E9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEA9117171717171717171717171717171717171717171717171717171717171717171717171717171616161616161616161616161515151515151515151515161614141414141414141414141515151515151414141414141414141414141414141313131313131313131313131313131313131311121212121212121212111111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000000000437A7B7C7D7F8081838486888A8C8E919396989B9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CBCED1D4D6D9DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE7E6E4E1350000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F8F9F9F9F9F9F9F8F8E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC4D0D9E5E5E5E7E7E7E7E7E8E8E9E9E9EBEBECECECECECECECECECECECECECECECECECECECECECECE5D0BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD727675787B7C7E81838689898D909296979B9EA1A4A5A8ACAEB1B3B6BBBDC1C5C6C9CACACECED0D1D3D6D9D9DADCDEDEDFE1DFE1E1E1E1E2E2E3E3E3E1E1E1E1E1DFDFDEDBDAD9D7C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C3C3C3C3C3C3C3C3C4C4C3C3C4C4C4C5C6C6C6C6C5C6C6C6C9C9CBCBCECECFD0D3D3D3D3D3D3D5D5D5D5D7D9D9D9D7D7D7D6D5D5D5D5D5D6D7D7D9DADAD9D7D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDE361717171717171717171717171717171717171717171717171717171717171717171717171717171717171616161616161616161616151515151515151515151516141414141414141414141414151515151514141414141414141414141414141413131313131313131313131313131313131313111212121212121212121111111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD90000000000000000000000000000000000000000000000000000137A7A7B7C7E7F81828486888A8B8E90929497999C9FA1A4A8AAADB0B3B6B9BCBFC2C5C7CACDD0D3D6D8DBDDDFE1E4E6E7EAEBEDEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F6F5F4F2F1F0EEECEBE9E7E5E3BD00000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F8E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC6D1E0E4E5E5E5E7E7E7E7E8E8E8E9E9EBEBECECECECECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECECECEBDAC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3746A6A6D6E6F71737577787B7D8182868A8D90909496999B9EA2A2A7A7ABACAEB2B6B6B9BCBDC0C1C4C6C9C9CBCBCECECED1D0D3D3D5D5D3D1D3D3D3D5D5D3D3D3D1D0CECECECBCAB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9D7D7D7D7D7D7D5D5D7D7D7D7D7D9D9DADADBDBDADBDCDCDEDCDBDBDCDEDEDEDEDEDFDFE1DFE1DEDEDEDFDEDEDEDFDEDEDEDCDEDCDCDCDBDEDBDADBDBDBDBDBDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDF9A1717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171716161616161616161616161515151515151515151516161414141414141414141414151515151514141414141414141414141414141413131313131313131313131313131313131313111212121212121212121111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000000000617A7B7C7D7F8082838587898B8D8F929496999B9EA1A4A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D4D7DADCDEE1E3E5E7E9EBECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE9E6E5E26B000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9C2D1DEE4E4E5E5E5E7E7E7E7E8E8E9E9EBEBECECECECECECEDEDEDEDEDEDEFEFEFEFEFEFEFEFEFEFEFEDEDEDEDECECECECECEBE9E9DEC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B390727172747677777B7C7F818385888C8E90929496999B9EA2A5A7A8ABACB1B2B5B9B9BDBFC0C1C4C5C6C8C9CACBCECFCFD0D0D0D0D3D0D1D3D1D1D0D1CFCFCBCACAC8C6C6C8C5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B3B3B4B5B6B6B6B8B6B8B8B7B7B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C8C9CAC9C9C9C9C9C9CACBCBCBCBCBCACBCECECECFCFD0CFD0CFD0D1D1D3D3D3D3D3D5D5D5D5D6D7D7D6D6D5D5D5D3D5D5D5D5D5D5D5D3D3D1D1D0D0D0D1D1D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D63517171717171717171717171717191919171717171717171717171717171717171717171717171717171717171717171717161616161616161616161615151515151515151515161414141414141414141414151515151515141414141414141414141414141413131313131313131313131313131313131311111212121212121212121111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0000000000000000000000000000000000000000000000000000307A7B7C7D7F8081838486888A8C8E919396989B9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CBCED1D4D7D9DCDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE8E6E4E212000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C1C9D9E4E4E5E5E5E7E7E7E7E8E8E8E9E9EBECECECECECECEDEDEDEDEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDEDEDECECECECECEBE9E8E8D7BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB6B6B6D6F7172757778797D7E8184898C8C9094979B9CA1A2A7ABAEB0B2B6B8B9BDBDBFC0C3C3C5C6C8C9C9CBCBCECECED0D1D3D3D3D5D3D1D1D1D1D3D1D1D0D0CECECECECECABAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B2B2B4B7BEC0C1C3C4C6C6C8CACBCBCBCED0D0D1D3D5CDCFC4BFBCB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9D9DADADADADAD9DADADBDBDBDCDEDEDEDEE1E1E1E1E1E1E2E3E3E1E1E2E2E1E1E2E3E1E2E2E3E1E1E1E2E2E2E3E3E3E3E2E3E3E3E3E2E2E1E2E2E1E1E1DFE1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E49F171717171919191919191919191919191919191919191919191919171717171717171717171717171717171717171717171717171717161616161616161616161515151515151515151616141414141414141414141515151515151414141414141414141414141414131313131313131313131313131313131313111212121212121212121211111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0000000000000000000000000000000000000000000000000005757A7B7C7E7F81828486888A8B8E90929497999C9FA2A5A8AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE9E7E5E49900000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F9E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5C1D1E0E4E5E5E5E7E7E7E7E7E8E8E9E9E9EBECECECECECEDEDEDEDEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0EFEFEFEFEFEFEFEFEDEDEDECECECECEBE9E8E7E7E3C7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B36D68686A6D6E727575787B7E818285888A8E929497999CA1A2A4A5A7ACAEB2B3B5B9BDBFC1C3C4C5C6C9C9CACBCECFD0D3D5D7D7D7D5D6D5D5D5D5D5D3D5D1D3D0CECECFCBCAB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0ABA8A8AEB2B2B3B6B6B9BCBDBFC0C1C1C3C3C5C5C6C6C9C9CACECBCECFD0D0CFD0D1C7C0BBB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCDADADADBDBDADCDCDBDCDEDCDCDEDEDEDEDEDCDEDBDEDEE1DFE1E1E1E3E3E3E4E4E3E6E6E6E6E6E6E6E3E4E6E6E6E6E7E9E7E9E9EAEAE9E9EAE9E9E7E6E6E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DF361719191919191919191919191919191919191919191919191919191919191919171717171717171717171717171717171717171717171717171616161616161616161515151515151515151516141414141414141414141415151515151414141414141414141414141414131313131313131313131313131313131313111212121212121212121111111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7500000000000000000000000000000000000000000000000000004D7A7B7C7D7F8082838587898B8D8F929496999C9EA1A4A6A9ADAFB2B5B8BBBEC1C4C7CACDCFD2D5D7DADCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F4F3F2F1EFEEECEAE9E7E5E3480000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F9F9F9F9F9F9F9F9F9F9E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C5D4E5E5E5E5E7E7E7E7E7E8E8E8E9E9EBECECECECECECEDEDEDEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEFEDEDEDECECECECE9E9E8E7E7E7E5D2B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A707273757577797C7E818285898C8F909397999B9EA1A5A7AAACB0B1B3B5B6B8BBBFC0C3C5C9CACBCED0D1D5D7D9DADADADBDCDEDEDCDBDADBDCDEDBDBDADADADADADAD9D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ADA8ACB1B3B5B8BBBDC0C1C4C5C6C8C9CACACBCBCFD1D0D3D3D5D7D6D9D9DADADBDBDBDBDCDCDCDADCDCD5C7BCB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAD3D3D5D5D3D3D1D0D0D0D0D0D3D5D5D3D5D5D7D6D6D7D7D9D7D7D9D9DAD9DADADBDADBDCDBDBDBDEDEDEDBDADADBDCDBDCDCDCDEDEDEDEDFDFDFDEDEDEDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E39E19191919191919191919191919191919191919191919191919191919191919191919191919191717171717171717171717171717171717171717171716161616161616161616151515151515151515161614141414141414141414151515151514141414141414141414141414141313131313131313131313131313131313131112121212121212121211111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0000000000000000000000000000000000000000000000000000217A7B7C7D7F8081838586888A8C8E919396989B9DA0A2A6A9ABAEB2B4B7BABDC0C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE8E6E4D0000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F8F8F9F9F9F9F9F9F9F9F9F9E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C5D4E5E5E7E7E7E7E7E7E8E8E8E9E9E9EBECECECECECEDEDEDEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEFEDEDECECECECEBE9E8E8E7E7E5E5E4DCB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E6E6F7173737677797C7F8183888A8D8F9396999B9EA2A5A7AAACAEB2B6B6BBBDBFC3C5C6C9CBCED0D1D5D6D9DADCDCDEDEDCDEDEDFDEDFE1DFE1DFDFE1DEDFDEDEDEDEDBC5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1A7A0A2A5A7A8AAACACB1B2B3B5B9B9BBBDBFC1C4C4C4C5C8C9CACBCFCFD0D0D1D3D3D3D6D7D6D9DAD7D9D7D7D7D6D5D5D2C6BBB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAD5D3D3D3D5D5D5D5D5D3D3D3D5D5D6D5D5D5D6D7D7D7D9DADADBDADCDCDCDEDEDEDEDFDFE1E1E1E1E1E1E1E1E1E2E2E1E1E1E3E3E3E3E3E3E3E3E2E2E3E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEE3A191919191919191919191919191919191919191919191919191919191919191919191919191919191919171717171717171717171717171717171717171717161616161616161616151515151515151515161614141414141414141414151515151514141414141414141414141414141313131313131313131313131313131313131112121212121212121211111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C00000000000000000000000000000000000000000000000000006B7A7B7D7E7F81838486888A8B8E909295979A9C9FA2A5A8ABAEB0B3B7B9BCC0C2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBEAE7E6E4870000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F8F8F9F9F9F9F9F9F9F9F9F9EAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5C3D5E7E7E7E7E7E7E8E8E8E8E9E9E9EBECECECECECECEDEDEDEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEDEDEDECECECEBE9E9E8E7E7E5E5E4E3E1D9B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B168696A6D6D7171757678787C7F818486888C8E9094969B9EA1A4A5A8AAACB0B3B8BBBDBFC1C4C5C6C8C9C9CACECECECECED0D0D0D1D0D1D1D1D1D0D0CECECBCBCACBCAC9B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA9EA0A1A4A5A7AAABAEB1B3B5B5B6B9B9BDBFC0C3C3C4C4C5C6C9CACBCFD0D1D3D3D5D5D7D9DADADADADBDBDBDBDEDEDEDEDEDCDEDCDACDBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBDADADAD9DAD9D7D9D9D9D7D9DADADADADADADBDADADADADADADADADADCDCDEDCDEDEDBDBDADAD9D9DADBDEDCDCDCDCDEDEDEDFDFDEDEDEDEDEDEDEDBDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADAAE191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191717171717171717171717171717171717171717171616161616161616161515151515151515161614141414141414141414151515151514141414141414141414141414141313131313131313131313131313131313131212121212121212121211111111111111111111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB900000000000000000000000000000000000000000000000000003F7A7B7C7D7F8082848587898B8D8F929497999C9FA1A4A7AAADB0B3B6B8BCBFC2C5C7CACDD0D3D5D8DBDDDFE1E4E6E7E9EBEDEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F6F5F4F3F1F0EEECEBE9E7E5E32D000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9EAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5C3D3E6E8E8E8E8E8E8E9E9E9E9EBEBECECECECECECEDEDEDEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEDEDEDECECECEBE9E9E8E7E7E7E5E4E3E1E0E0D7BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382767879797C7E818388898A8E909396979B9C9FA2A5A8ABAEB1B5B6B9BCBFC3C4C8C9CACACED0D1D5D7D9DADBDBDBDBDCDADBDCDBDEDCDCDCDBDBDBDADAD9D7D6D5D3D3B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B29F94909294999B9C9EA1A2A5A7A8AAABAEB0B1B2B5B6B6B9BBBCBDC0C1C1C3C5C5C5C8C8C9C9CACBCBCBCECFCECECBCECECECFCECECFCFCECECECBC7BBB5B3B3B3B3B3B3B3B3B3B3B3B3B3B9D0D1D1D1D1D0D0D0D0D0D0D0D1D1D3D1D0D0CFCFCECECECFD0D0D1D3D5D5D5D3D5D6D5D6D6D5D6D7D7D9D9D7D9D9D9DADADADADBDADADBDCDCDCDEDEDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDF4719191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919171717171717171717171717171717171717171716161616161616161615151515151515151516141414141414141414141515151515141414141414141414141414141413131313131313131313131313131313131112121212121212121211111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1900000000000000000000000000000000000000000000000000137A7B7C7D7F8081838586888A8D8F919396989B9DA0A3A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D4D7DADCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F4F3F2F1EFEEECEAE9E7E5C700000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9EAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C1D0E6E9E9E9E9E9E9EBEBEBECECECECECECECECEDEDEDEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEFEDEDEDECECECEBE9E9E8E7E7E7E5E4E3E1E0E0DEDDD4B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3886E70727477787B7D80818386898C8D8F9296999CA1A2A5A8ABACB0B1B3B8B9BDBFC0C4C5C5C8CACACECED0D0D1D3D5D7D6D6D7D7D7D6D7D7D9D7D6D6D6D6D5D5D1D1C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1A1989B9C9FA2A5A7ABACB1B3B6BBBDC0C3C5C8CBD0D0D3D3D5D9DADBDCDEDEDEDFDEDFE1E1E1E1E3E3E2E4E6E6E6E6E6E6E9E9E9E7E9E9E7E7E9E6E6E6E6E6E2CCBCB3B3B3B3B3B3B3B3B3B3B3BCE3E4E4E4E6E4E4E6E4E3E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E2E1E1E1E1DFDFE1E1E1E1E1E1E1E1E1DFDFDFDFDFDEDEDFDFDFDFDFE1E1DFE1E1DFE2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2B619191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191717171717171717171717171717171717171717161616161616161615151515151515151516141414141414141414141515151515141414141414141414141414141413131313131313131313131313131313131112121212121212121211111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000000000627B7C7D7E8081838486888A8C8E909395989A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CBCED1D4D7D9DCDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F7F5F4F3F2F0EFEDEBEAE8E6E4760000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9FAFAFAFAFAEBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9CDE3ECECECECECECECECECECECECECECECEDEDEDEDEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E8E8E7E7E7E5E4E3E1E0E0DEDDDCDACFB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39867686A6D6E6F717275777B7C7F8184898A8C8F9296979B9EA1A5A7AAACB0B1B2B3B3B6B9BDBDBDC0C1C1C4C5C5C5C8C8C8C9C9C9C9CACACACACBCBCACACBCACAC9C9BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B29D8F8F9297999B9C9FA2A4A7A7ABACB0B2B3B8B9B9BCBDBFC0C3C4C5C6C8C9CACACECFD0D0D1D3D3D3D3D5D5D6D3D3D5D6D6D6D7D7D7D7D7D7D9D7D7D6D7D9D7D9D9D9D9C9B9B3B3B3B3B3B3B3B3B3BAD5D5D5D5D3D3D3D1D0D0D1D1D1D1D0D1D1D1D1D1D1D1D1D1D1D1D1D3D3D1D1D5D3D5D7D6D6D7D7D6D6D7D7DADADADADADBDBDBDBDADADADAD9D9D7D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1621919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919171717171717171717171717171717171717171616161616161616161515151515151515161414141414141414141415151515151414141414141414141414141414131313131313131313131313131313131311121212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE300000000000000000000000000000000000000000000000000003A7A7B7C7D7F8082848587898B8D8F929497999C9FA1A4A8AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EEEDEBE9E7E6E41B000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9FAFAFAFAFAFAEBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C7DAEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0EFEFEFEFEDEDEDECECECECE9E9E8E8E7E7E5E5E4E3E1E0E0DEDDDCDAD9D8C8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB6E6F72737676787A7C7D7F8185888A8D909396999B9EA2A5A7AAACAEB0B2B3B5B8BBBFBFC3C5C6C8CACECFD1D1D3D5D5D6D7D7D7D6D9D9DADADADBDADADAD7D5D6D3BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A5908F9094979B9C9FA2A4A5A7A8AAABAEB1B5B8BBBCBDBFC1C4C5C6C9C9C9C9CBCBCECFCFCFCFCFD0D1D1D1D3D1D3D3D3D1D1D1D1D5D6D7D7D7D7D5D5D6D6D6D5D5D6D5D5D5D5D5C4B5B3B3B3B3B3B3B3B8D1D1D1D1D1D1D3D5D5D3D5D5D6D5D5D3D3D1D3D3D5D5D6D6D6D7D7D9DADADADBDADCDCDCDCDCDCDEDBDCDCDCDCDCDCDEDEDEDEDCDBDBDBDBDEDEDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCC619191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919191919191919191919191919191717171717171717171717171717171717171616161616161616161515151515151515161614141414141414141415151515151414141414141414141414141413131313131313131313131313131313131112121212121212121211111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000097A7B7C7D7F8081838586898A8D8F919496999B9EA1A4A6A9ADAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADDDFE1E4E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F6F5F4F2F1EFEEECEBE9E7E5B6000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9F9FAFAFAFBFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C2D5EDEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E8E8E7E7E7E5E5E4E3E1E0E0DEDCDCDAD9D8D6D4BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3696565686A6C6E727477787B7D8184878A8E9093979B9C9FA2A4A5A8ABAEB0B2B6B9BDBFC3C4C6C9C9CACBCECFCFD0D0D3D3D5D5D5D5D6D7D6D5D5D3D3D3D1D3D1D0B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B090888A8E90939497999C9FA1A2A5A7AAACB0B2B5B9BBBDBFBFBFC1C4C4C5C8C8C9C8C9C9CBCECECFD0D0D1D3D5D5D5D5D5D6D7D7DAD9DADADADADADCDEDEDEDEDEDEDEDFDFDFE1DFDEE1DDC4B5B3B3B3B3B3BCD9D9DADADADBDBDBDEDCDCDEDFDFDFDEDEDEDEDEDEDFE1DFE1E1E2E1E1E1E1E1E1E1E1E1DFDEDEDEDEDFE1E2E2E3E2E3E3E4E6E6E6E4E6E4E4E4E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1721919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919191919191919191919171717171717171717171717171717171716161616161616161615151515151515151616141414141414141414151515151514141414141414141414141414131313131313131313131313131313131311121212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0000000000000000000000000000000000000000000000000000587B7C7D7E8081838486888A8C8E919396989B9DA0A2A6A9ABAEB2B4B7BBBDC0C4C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEAE9E6E56C0000000000000000000000000000000000000000000000000007F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9F9FAFAFBFBFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9CCE6F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F1F3F3F3F3F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E9E8E7E7E7E5E5E4E3E3E0E0DEDDDCDCDAD9D7D6D4D3CFB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E71727577777B7C7E818386898C8D909497999B9EA2A5A5A7AAACB1B2B6B9BBBDC0C1C3C6C9CAC9CBCFCFCFD0D0D3D5D5D5D5D5D5D7D6D5D5D5D3D5D3D1D0D1CFCEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3898C8E8F929397999C9FA4A5A7A8ACB0B2B6B8B9BCBFBFC1C4C6C9C9CBCECED0D1D3D5D6D9DADBDBDEE1DFE1E1E2E1E3E3E3E4E3E3E3E3E3E4E4E4E3E6E4E4E4E6E4E6E6E6E6E7E7E7E9E9E6E6DBBDB3B3B3B3BCE6E6E6E6E6E6E4E6E6E7E7E7E7E9E9E9E7E7E7E9E9EAEAE9E9E9E9E9EAEAEAEAEBEEEEECECECECEEEEEEEEECECEEEEEEEFEEEEEEEEEEEFEFEFF1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E2291A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191919191919191919191919171717171717171717171717171717171717161616161616161615151515151515151614141414141414141414151515151514141414141414141414141414131313131313131313131313131313131311121212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60F00000000000000000000000000000000000000000000000000307A7B7C7E7F8182848588898B8E909295979A9C9FA2A5A8ABAEB0B3B7B9BCC0C2C6C9CBCED1D3D6D9DBDEE0E2E4E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F7F5F4F3F2F0EFEDEBEAE8E6E41B0000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFAFBFBFBFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3DAF1F3F3F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F1F1F1F0F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E9E8E7E7E7E5E5E4E4E3E0E0E0DEDDDCDADAD9D7D6D4D3D0D0C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6F72737576787B7C80808386898C9094979B9C9EA2A4A7AAACAEB2B3B6B8BBBCBFC0C0C3C3C4C6C6C9CACBCECFD0D0D0D3D5D5D3D5D5D5D3D3D1D0CFD0CFCEC5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2917F8185888A8C90909396999B9E9FA4A5A7A8ABAEB2B3B6B9B9BBBDBFC0C4C6C5C8C9C9CBCECECECFD0D3D3D5D5D3D1D3D3D1D0D0D0D1D3D5D5D5D3D5D5D5D5D5D5D5D5D3D3D1D3D1D1D1D1D1D1D1D1D0C1B5B3B3BAD5D6D7D7D7D7D9DADAD9D9D7D7D7D7D9D9D7D7D6D6D7D7D7D9D9DAD9D9DADADADBDCDBDCDEDEDEDEDEE1E1E1E1E1E1E2E2E2E2E1E1E2E3E3E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7991A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919191919191917171717171717171717171717171717171616161616161616151515151515151516141414141414141414141515151514141414141414141414141414141313131313131313131313131313131311121212121212121212111111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000000000000000000000000000000000000000000000000000097A7B7C7D7F8081838587898B8D8F929497999C9FA1A4A7AAADB0B3B6B9BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EEEDEBE9E7E6B60000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9CFE9F5F5F5F3F3F3F3F3F3F3F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F1F0F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E9E8E7E7E7E5E5E5E4E3E1E0E0DEDDDCDCDAD9D8D7D4D4D1D0D0CCCBB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3977677787A7C8183868A8A8D909296979B9CA2A5A5A8ABAEB0B2B3B6B9BDC0C1C5C5C8CACED0D3D5D7D7DADBDCDBDBDCDCDBDBDEDEDEDEDCDBDBDCDBDADAD7D5D3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE82797C7E81838689898E9094979B9B9CA1A2A5A7AAAEB1B3B5B5B9BBBDBFBFC1C3C4C4C5C6C6C9CACBCBCECECFD1D1D3D3D3D3D5D3D5D5D5D6D7D6D6D6D5D7D9D7D7D7D7D7D7D5D5D5D5D7D7D7D9D9DADADAD7D1BBB3BBDBDAD9DADADAD9D7D7D7D9DAD9D7D9DADADADADADADADAD9D9D9D9D9DADADBDCDCDCDADBDADBDBDBDAD9DBDADAD9D9DADBDADADADADADADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1361A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191919191919191917171717171717171717171717171717171616161616161616151515151515151516141414141414141414141515151514141414141414141414141414141313131313131313131313131313131311121212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000000000587B7C7D7F8081838586888A8D8E919396989B9DA0A3A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADCDFE1E4E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F6F5F4F2F1EFEEECEBE9E7E56D000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4DCF3F6F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F0F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E9E8E7E7E7E5E5E5E4E3E1E0E0DEDDDCDCDADAD9D7D6D4D3D1D0CECCCBC9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A06E6E7273767578797B7C7F818488898D8F90929697999C9EA2A5A8AAACAEB2B5B8B8B9BCBCBFBFC3C5C6C6C6C9C9C9C9C9C9C9C9CBC9CBC9C9CBCBCECBCACAC9BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE87868A8C8F929396999B9EA2A5A5ABACB0B3B6B9BCBDC0C1C5C6C9CACBCECED0D3D5D6D7D9DBDBDEDEE1E1DFE1E2E1E3E2E2E2E2E3E3E2E3E3E4E3E3E2E2E1E1E1E1DEDEDEDFDEDEDEDBDEDBDBDADADBDAD9DADAD9D9C1BBDADBDADADBDBDBDEDCDCDCDBDBDBDBDBDBDBDCDEDEDEDFDFDEDEDFDFDEDCDBDBDBDCDEDEDEDEDEDCDBDBDEDEDEDEDEDEDEDEDBDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEAA1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919191919171717171717171717171717171717171716161616161616161515151515151515161414141414141414141515151515141414141414141414141414141313131313131313131313131313131313111212121212121212111111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1900000000000000000000000000000000000000000000000000317A7B7D7E8081838486888A8B8E909395989A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEAE9E6E51B0000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6D0ECF8F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEDEDECECECECEBE9E8E8E7E7E7E5E5E4E4E3E1E0E0DEDDDDDCDADAD9D7D6D4D4D1D0D0CCCCCAC9C7C5B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD747577787B7C7E818183868A8D8F93979B9B9FA2A5A8ACB1B3B5B6BCBDC0C3C3C5C5C9CBCFCFD0D1D3D5D7DADBDBDBDCDBDEDEDFDFDFDEDEDCDBDBDAD9D7D6D5BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD81818386888C8F9093979C9EA2A4A7A8AAAEB1B3B5B9BCBDC1C3C5C9C9CBCFD0D3D5D5D7D9DADBDCDBDCDEDEDFE1DEE1E3E4E3E4E6E6E4E3E3E3E3E2E1E1DFDFDFDFDFDFDEDEDEDFDFDEDEDCDBDBDBDBDBDEDEDEDEDEDEDFD6DEDEDEDFDEDEDEDEDFDEDEDEDEDCDEDEDEDEDCDEDEDEDBDADADBDBDADBDBDBDCDEDEDCDEDEDEDCDEDEDEDBDEDBDEDEDCDCDBDBDBDEDCDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDE5A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191919191919191717171717171717171717171717171716161616161616161515151515151515161414141414141414141515151515141414141414141414141414141313131313131313131313131313131311121212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000097A7B7C7D7F8082848587898B8D8F929497999C9FA2A5A8AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDDE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F7F5F4F3F2F0EFEDEBEAE8E6B60000000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFAFBFBFBFBFCFCEEB3B3B3B3B3B3B3B3B3B3B3B3B3BEDBF5F9F9F8F8F8F8F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F1F1F1F1F0F0F0F0F0F0EFEFEFEDEDEDECECECECEBE9E8E8E7E7E7E5E5E4E4E3E1E0E0DEDDDCDCDADAD9D8D7D6D4D3D1D0CECCCBC9C7C7C5C3BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B36D6F727375777A7C7E818385868A8D8F929496999C9FA2A5A8ABAEAEB1B3B6B9BDBFC3C4C5C8C9CAC9CECFCECFD1D0D0D0D1D1D1D1D3D1D1D1D0D0D0D0D1CFCEBAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A47C7D7E81838489898E909497979C9FA2A4A5A8ABAEB1B3B5B8BCBDBDC0C3C4C6C6CAC9CBCECFD1D1D0D3D5D6D5D7D6D9D9D9D9DADBDBDBDBDCDEDFDFDEDFE1DFE1DFDEDCDEDCDCDEDBDAD9D9DADBDADAD9DAD9D9DADADADADADADBDBDADADADADADADADADBDBDBDBDADBDBDCDEDCDADADADCDCDEDEDFE1E1E1E1DFDFE1E1E1E3E3E2E2E1DFDFE1E1E1E1E1DFE1E2E3E4E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEE01B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919191917171717171717171717171717171717161616161616161615151515151515151614141414141414141415151515151414141414141414141414141413131313131313131313131313131313111212121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30000000000000000000000000000000000000000000000000000587B7C7D7F8081838587898A8D8F919496999B9EA1A4A7AAADAFB2B6B8BCBFC1C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F2F0EFEDEBE9E7E66D0000000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFBFCFCFCEEB3B3B3B3B3B3B3B3B3B3B3CCE7F9F9F9F9F9F9F9F9F8F8F8F8F7F7F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F1F1F1F1F0F0F0F0F0F0EFEFEFEDEDECECECECEBE9E9E8E8E7E7E7E5E5E4E3E3E0E0E0DEDDDCDCDADAD9D8D7D6D4D3D1D0D0CCCCCAC9C7C5C4C3C1BEB4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B377757577787C7C818386888C8E9093969B9C9FA2A5A8ACB0B2B5B6BBBDC1C4C4C5C6C8C8CACACBCBD0D0D0D3D5D5D6D7D7D7D7D9D9D9D9D9D9DADAD7D9D6D5D3BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD807D80828386898C8F909297999CA1A4A5A7ABACB0B3B9BBBDBFC3C4C5C6C9CBCED0D0D3D5D7DADCDEDCDEDFE1E1DFE1E1E3E3E3E3E3E3E2E2E1E1E1E2E3E3E3E2E2E3E4E4E6E6E6E6E6E6E6E4E3E3E3E2E1E3E3E3E3E1E1E1E2E1E1E1DFDEDEDCDEDEDEDEDCDBDBDBDADBDBDBDBDADADADADADADAD9DADADADBDAD9D9D7D9DAD7D7DAD7D7D6D7D6D6D5D3D3D1D1D3D5D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6761B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191919191917171717171717171717171717171717161616161616161615151515151515151614141414141414141415151515141414141414141414141414141313131313131313131313131313131313111212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000000317B7C7D7E8081838486888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADCDFE1E4E6E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE9E7E51C0000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFCFCFCFCEEB3B3B3B3B3B3B3B3B9D6F5FBFBFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F7F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F1F1F1F0F0F0F0F0F0EFEFEFEDEDECECECECEBE9E9E8E7E7E7E5E5E5E4E3E1E0E0E0DEDDDCDCDADAD9D8D7D6D4D3D1D0D0CCCCCBC9C7C5C5C3C1C0BEBDB4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B381797B7E818386888A8D90929497999B9EA2A4A7ABAEB1B3B8BCBDC1C3C5C5C9CBCED1D5D5D9DADBDEDFE1E1E3E4E3E3E6E4E3E3E4E3E2E2E1E1DEDEDEDCDAD7B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B17D77787D7E818387898A8E929396999CA1A4A5A8AAACB1B3B6B9BCBCBFC0C3C5C8C8CACECFD0D3D1D3D5D7D7D7D9D9D9DADADADBDBDEDEDFDFDEDFDFDEDEDFDFE1E1E1E1E1DFDFE1E1E1DEDEDCDBDBDBDCDCDCDCDCDBDBDBDBDADADADBDBDCDCDCDEDEDEDEDEE1E1E1E1E1E1E3E3E3E3E3E3E2E2E2E1E1E2E2E3E3E3E3E3E3E3E3E4E6E7E7E6E7E7E6E4E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3291B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919171717171717171717171717171717171616161616161616151515151515151616141414141414141414151515151414141414141414141414141413131313131313131313131313131313111212121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000097A7B7C7E7F81838486888A8B8E909295979A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F1EFEEECEAE9E7B70000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFCFCFCFCEEB3B3B3B3B3B3C4E1FCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F1F1F1F0F0F0F0F0EFEFEFEDEDECECECECEBE9E8E8E7E7E7E5E5E4E4E3E1E0E0DEDEDDDCDADADAD9D7D6D4D4D3D1D0D0CCCCCBC9C7C7C5C4C1C1BEBDBBB9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38675777B7B7E818388898D8F929497999CA1A4A5A7ACB0B2B5B6B9BBBDC0C0C3C5C6C9CBCBCBCED0D1D3D3D5D6D7D7D7D9D7D9D7D7D7D7D7D6D5D5D3D3D0D0CFB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3806F7376777B7D818286888C8E909397999B9CA2A4A7AAACB0B2B6B9B9BBBDBFC1C4C5C9C9CBCED0D0D3D3D5D7D7D7D7DAD9DBDBDCDEDFDFE1E1E1E1E1E1E2E2E2E3E3E1E1E1E2E2E3E3E6E6E4E4E3E2E2E2E3E3E3E2E1E1DEDEDEDEDEDCDEDEDCDEDEDEDEDCDEDEDCDCDCDEDEDEDEDCDCDCDBDCDCDADCDCDCDCDCDADBDBDBDCDCDEDEDEDEDEDEDEDEDBDCDCDBDBDBDBDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4A71B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191919171717171717171717171717171717171616161616161616151515151515151616141414141414141415151515151414141414141414141414141413131313131313131313131313131313111212121212121212111111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0000000000000000000000000000000000000000000000000000587B7C7D7F8082848587898B8D8F929497999C9FA1A5A8AAADB0B3B6B9BCC0C2C5C8CBCED1D3D6D9DBDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEEECEAE8E677000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCEEB3B3B3B6CDEEFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F1F1F1F0F0F0F0F0EFEFEFEDEDECECECECE9E9E8E8E7E7E7E5E5E4E3E3E0E0E0DEDDDCDCDADAD9D9D7D6D4D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C0BDBDBAB9B7B5B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F72737577787B7D80818486898A8E8F9094979B9EA1A2A5A7ACAEB0B1B2B5B8B8BCBFC1C1C1C5C5C5C5C6C8C6C8C9C9CACACACBCECFCFCECFCECFCBCBCBC9B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3997C7D81838589888C8E8F93979B9CA1A2A5AAABB0B2B3B6B9BDBFC1C4C6C8C8CACED0D1D3D5D9D9DADCDEDEDEDFE1E1E3E2E2E2E3E3E4E3E3E3E4E4E4E3E3E2E1E1E1DFDFDFE1DFDEDEDCDEDCDCDBDBDCDBDADBDBDBDBDBDCDCDEDCDCDEDEDEDFDEDEDEDEDEDEDEDEDCDCDEDEDEDEE1E1DEDEE1E1DFDEDCDCDCDEDEDEDEDEDEDEDBDBDEDEDEDEDEDEDEDEDBDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDE521B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191919191717171717171717171717171717171716161616161616151515151515151516141414141414141414151515151514141414141414141414141413131313131313131313131313131313111212121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000003A7B7C7D7F8081838586898A8D8F919496999B9EA1A4A6AAADAFB3B6B9BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EFEDEBEAE7E62E0000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCEEB3B9D9F6FCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F3F3F3F3F3F1F1F0F0F0F0F0EFEFEFEDEDECECECEBE9E9E8E7E7E7E5E5E5E4E3E1E0E0E0DEDDDCDCDADAD9D8D7D6D4D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C0BEBDBBB9B7B7B5B3B0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38E76767A7B7D7F818386898C8E909397979B9EA1A4A7AAACB1B2B6B8B9BCBCBFC1C3C4C5C8C8C9CBCFD0D3D5D5D5D5D3D5D5D5D3D6D5D3D1D1D1D1D1D0D0CFCEB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD7676797B7E818386888D909093979B9C9FA2A5A8ABACB1B2B5B8BCBDC0C1C4C5C6C9CBCBCFCED0D3D3D1D3D5D5D5D6D6D7D7D7DADBDCDCDCDBDEDEDEDEE1E1E1E1DEDEDEDEE1E1E1E1E1DFDFDFDFDFE1DFDEDEDEDEDEDEE1E1E1E3E2E2E2E1E1E2E2E1E2E2E2E2E2E1E1E2E2E2E2E1E2E2E3E3E4E4E3E4E6E6E6E6E4E6E6E4E4E6E4E6E4E6E6E6E6E7E6E7E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2CC1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191917171717171717171717171717171717161616161616161515151515151515161414141414141414141515151514141414141414141414141414131313131313131313131313131313131112121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000000F7B7C7D7E8081838486888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADDDFE1E4E6E7E9EBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE9E7C90000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCF3E5FCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F6F6F5F5F5F5F5F5F5F5F3F3F3F3F1F1F1F0F0F0F0EFEFEFEDEDECECECEBE9E9E8E7E7E7E5E5E4E4E3E1E0E0DEDDDDDCDADADAD9D7D6D6D4D3D1D0D0CECCCCCBC9C7C7C5C4C3C1C1BEBDBBBAB7B7B5B4B2B1AFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39978787D7F818387898C8F9093979B9EA1A5A7ABB0B1B5B8BBBCC0C3C4C6C9CACBCFD0D3D5D6D7DADADCDCDEDEE1E1E3E3E3E4E6E7E7E6E3E3E3E1E2E1DFDEDEB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38B7F8181828386898A8D909496999C9EA2A5A7A8ABAEB1B3B8BBBCBFC3C3C5C9CACECFD1D3D3D5D6D9D9DCDCDFDFE1DFE1E1E1DFE1E1E1E2E1E1E1E1E1E2E2E2E1E1E1E1E1E1E1E2E1DFDFDFDEDEDEE1DEDEDEDCDEDFDFDEDEDEDEDEDCDBDBDADAD9D7D7D7D6D6D7D9D9D9DADBDADADADADBDCDBDBDADADADADADADADADADADAD9D9D9D9D9D9D7D7D7D7D7D5D5D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5751B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191917171717171717171717171717171717161616161616161515151515151515161414141414141414141515151514141414141414141414141414131313131313131313131313131313131212121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0000000000000000000000000000000000000000000000000000627B7C7E7F81838486888A8B8E909295979A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEECEAE9E780000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F7F6F6F6F6F5F5F5F5F5F5F5F3F3F3F3F1F1F0F0F0F0EFEFEFEDEDECECECEBE9E8E8E7E7E7E5E5E4E3E3E0E0E0DEDDDCDCDADAD9D8D7D6D4D4D3D1D0D0CCCCCBCAC9C7C7C5C4C3C1C1BEBDBDBAB9B7B5B4B3B1B1ADAEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B397757778797B7E8186898C8E909292979B9B9EA2A4A5A7A8ACB0B2B5B8B9BBBFC1C3C4C6C8CACACFD0D3D3D5D5D6D7D7DADBDCDCDCDCDEDCDCDCDBDCDADADAD7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3747577797C7D7F818386898A8D8F9294979B9C9FA4A7A8ABACB1B5B8BBBDC0C1C5C5C6C8CACED0D0D1D3D3D5D6D7D7D9D9DADADBDBDCDEDFE1E1E2E1E2E2E1E1E2E3E2E3E3E3E3E3E2E2E3E3E3E3E2E3E3E4E4E6E6E4E6E6E6E6E6E4E6E6E4E4E6E4E6E4E6E6E6E6E6E6E6E6E6E7E7E6E6E6E6E4E4E4E6E6E4E3E3E4E4E3E3E2E3E4E3E2E3E3E4E6E4E3E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDE321B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191919171717171717171717171717171717171616161616161615151515151515161614141414141414141515151515141414141414141414141414131313131313131313131313131313131112121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000407B7C7D7F8082848587898B8D8F929497999C9FA1A5A8AAADB0B3B7B9BDC0C2C5C9CBCED1D4D7D9DCDEE0E2E5E7E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEAE8E63F0000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F6F6F6F5F5F5F5F5F5F3F3F3F3F1F1F1F0F0F0EFEFEFEDEDECECECEBE9E8E8E7E7E7E5E5E4E3E1E0E0DEDEDDDCDADADAD9D7D7D6D4D3D1D0D0CECCCCCBC9C7C7C5C5C4C3C1C0BEBDBBBAB9B7B6B4B3B1B1AFACAAAEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D767B7D81838688898D8F9294979B9C9FA4A5A7ABAEB1B3B6B8BBBDC3C4C6C9C9CECFD1D3D5D5D7D9D9DADBDBDEDCDFDFE1E1E2E1E2E1DFDFDFDEDEDCDBDAD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37B6F73757677787B7C80818589898C9092969B9C9FA4A4A7AAACB1B3B5B9B9BCBFBFC1C4C5C9C9C9CBCBCECECECECECFD0D0D0D0D0D0D1D3D5D6D7D7D7D7D7D6D7D9DADAD9D7D7D9D7D7D7D7D9DADADBDBDADADADAD7D7D9DADAD9D7D7D7D6D6D5D7D7D6D7D9D9D9D9DADADAD9D9D9DAD9D7D9DADADADADAD7D7D7D7D7D7D7D6D6D7D7D7D7D9D9D9D7D7D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEAA1B1B1B1B1B1B1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191919171717171717171717171717171717161616161616161615151515151515161414141414141414141515151514141414141414141414141414131313131313131313131313131313131212121212121212121111111111111111111111111111111110101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000187B7C7D7F8081838587898A8D8F919496999B9EA1A4A6AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEBEAE8DD0000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9F9FBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F7F6F6F6F6F5F5F5F5F5F3F3F3F3F1F1F0F0F0F0EFEFEDEDECECECEBE9E8E8E7E7E7E5E4E4E3E1E0E0DEDDDCDCDADAD9D8D7D6D4D4D3D1D0D0CECCCCCBC9C7C7C5C4C3C1C1C0BDBDBBBAB7B7B6B4B3B2B1AFADABA9A8AFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A678787C7E808184888A8C8F929497999B9FA2A5AAACB1B1B5B8BBBFC1C3C5C5C6C9CACBCBCED0D1D3D3D3D5D7D7D7D9D9DADADBDAD9D7D6D6D5D3D3D5D5D1D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A56B6D6F727375777B7B7F8386888C8F9296999B9CA2A5A5AAACB1B3B6B8BBBFBFC1C4C5C6CACACED0D3D5D6D7DADADBDCDBDEE1E1E2E3E4E3E6E4E6E6E4E3E4E4E6E6E4E6E6E6E6E6E6E3E3E3E6E4E4E4E3E4E6E6E4E4E3E3E2E2E3E3E3E3E3E3E3E3E3E2E3E3E3E4E6E6E7E6E6E7E7E6E4E6E6E6E6E6E4E4E3E3E2E3E3E2E2E2E3E3E4E3E4E4E3E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4641B1B1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919191717171717171717171717171717171616161616161615151515151515151614141414141414141515151515141414141414141414141414131313131313131313131313131313131112121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0000000000000000000000000000000000000000000000000000717C7D7E8081838486888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBFC1C4C7CACDD0D3D5D8DBDDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EFEDEBE9E79B000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F8F8F8F7F7F6F6F6F5F5F5F5F5F3F3F3F1F1F0F0F0F0EFEFEFEDECECECEBE9E8E8E7E7E5E5E4E4E3E0E0E0DEDDDCDCDADAD9D8D7D6D4D3D3D1D0D0CCCCCBCAC9C7C7C5C4C3C1C1BEBDBDBAB9B7B7B5B4B3B1B1AFADABAAA8A7A4B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A67B7C7E81848688888C8F9396979B9C9EA2A7AAAEB0B3B6B9BCBDC0C3C5C6C8CACBCFD0D3D5D5D7D7DBDBDEDFE1E3E3E6E6E9EAEAEAEAE9EAE9E9E9E7E6E2E3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38573767778797C7E81818488898C8F9094979B9CA1A2A5AAABB0B1B5B6B9BFC0C1C4C5C9CACBCECFD1D3D3D5D6DADADBDEDCDEDEDEDEDEDFDEDEDEDEDFE1E1E1E3E3E2E2E2E2E2E2E2E1E1E2E3E4E6E7E6E4E4E4E6E6E7E9E9E9E9E9E9E9E7E7E7E9E7E6E6E6E6E6E7E6E7E7E7E7E9E9E9E9E9E9E9E9E9E7E6E6E9E9E9E9E9EAE9E9E9E7E7E7E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2EA251D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191917171717171717171717171717171716161616161616151515151515151616141414141414141415151515151414141414141414141414141313131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000004E7B7C7E7F81838486888A8B8E909295979A9DA0A2A5A8ABAEB2B4B8BBBDC1C4C6C9CDCFD2D4D7DADCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE9E75C0000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F8F8F8F7F6F6F6F5F5F5F5F5F3F3F3F1F1F0F0F0EFEFEFEDECECECEBE9E8E8E7E7E5E5E4E3E3E0E0E0DEDDDCDADADAD9D7D6D4D4D3D1D0D0CECCCCCBC9C7C7C5C5C4C3C1C0BEBDBDBAB9B7B7B5B4B3B1B1AFADABAAA9A7A5A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6787B7C7F8386898C8E909294999B9C9FA2A7AAAEB1B2B5B8BCBDC0C1C4C8C9CBCED3D1D6D6D9D9DADADBDBDCDEDEDFE1E1E1E1E1DEDEDEDFDEDEDCDADADADAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B175737578797C7D7F8183878A8C8F9094979B9EA2A5A7ABACB1B3B6BBBCBDC0C1C3C5C6C8C9CACECFD0D1D5D5D5D7D9D7D9DADBDCDBDCDCDEDEDEDEDEDFDFDFDFDFDFDFDFDFE1E1E1E1E1DFE1E1DFDFDFDFE1E1E2E2E3E4E4E4E3E3E3E2E2E3E1E1DFDFDFE1E1E2E1E2E3E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E3E3E4E4E4E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1961D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191917171717171717171717171717171716161616161616151515151515151614141414141414141415151515141414141414141414141414141313131313131313131313131313131112121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000277B7C7D7F8082848588898B8D8F929497999C9FA2A5A8ABAEB0B4B7BABDC0C3C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFEEECEAE9E71C00000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F8F8F8F7F7F6F6F5F5F5F5F5F3F3F3F1F0F0F0F0EFEFEDEDECECEBE9E8E8E7E7E5E5E4E3E3E0E0DEDDDDDCDADAD9D8D7D6D4D4D3D1D0D0CCCCCBCAC9C7C7C5C4C3C1C1BEBDBDBBBAB9B7B7B5B4B3B1B1AFADABAAA9A8A5A4A2A2ACB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6787B7D81818386898C8D909096979B9CA1A5A7A8ABACB1B3B8B9BDBFC1C3C5C9CACBCFD1D1D5D7D7D7D9D9D9D7D7D7D7D7D6D7D9D9D9D7D7D6D6D6D5D6D3D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39C757676797C7E8183868A8A8E909397999B9FA2A5A7ABAEB1B5B6B9BCC0C1C4C6C9CBCFD1D3D7D9DADADBDEDEDEE1E1E2E3E4E6E6E7E7E7E7E9EAEAEBEBECECECEBEBEBECEEEEEEEEEEECECEBECECECECEEEFEFEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEEFEFEFEFEFF1F1F1F1F1F2F1F1F1F2F1EFEFEFEFEFEEEEEEEEEEEFEFF1F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1521D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919171717171717171717171717171717161616161616161515151515151516141414141414141415151515151414141414141414141414141313131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000000A7B7C7D7F8081838587898B8D8F929496999C9FA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E6E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFFFF -FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEAE8C10000000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F8F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0EFEFEFEDECECECE9E9E8E7E7E5E5E4E3E1E0E0DEDDDCDCDADAD9D8D7D6D4D3D1D0D0CECCCCCBC9C7C7C5C5C4C3C1C1BEBDBDBAB9B7B7B6B5B3B2B1B1AFADABAAA9A8A5A4A3A2A09FB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6787B7D7F8285888A8D90929496999B9EA1A2A5A7AAACB0B2B5B9BBBDBFBFC3C5C8C9CACED0D1D1D3D5D6D7D7D7D9D9DBDBDCDEDCDEDEDCDBDADBDADAD9D7D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6B6D6F72767677787C7D818386898C8E909296979B9EA1A2A4A5A8ACAEB1B3B3B6B6B9BBBDC0C0C0C1C3C1C4C5C5C6C9CACBCBCECED0D0D1D1D3D3D5D5D7D6D6D6D5D3D5D5D5D3D5D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDBDBDBDBDCDEDEDBDBDBDBDBDBDEDEDEDEDEDEDEDFDFDEE1E1DFDFDFDEDFDFE1E1E2E1E2E3E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCCF1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191919171717171717171717171717171716161616161616151515151515151616141414141414141415151515141414141414141414141414141313131313131313131313131313131112121212121212121111111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000005E7C7D7E8081838586888A8D8F919396989B9EA1A4A6A9ADAFB2B6B8BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF -FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEBEAE878000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F8F8F8F7F6F6F5F5F5F5F3F3F3F1F1F0F0F0EFEFEDECECECEBE9E8E7E7E5E5E4E3E3E0E0DEDDDCDCDADAD9D7D6D4D4D3D1D0D0CCCCCBCAC9C7C7C5C4C3C1C1C0BEBDBBBAB9B7B7B5B4B3B1B1AFADACABAAA8A7A5A4A3A2A0A09CB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7828386898C8F909296979B9EA2A5A7AAACB0B1B5B8BBBDC1C3C4C8CACBCED1D3D5D6D7D7D9D9DCDCDEDEE1E1E2E3E3E4E4E4E3E4E4E4E4E3E2E1DEDEDEDEDCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B373717273757678797C7F8183878A8C8D8F93979B9C9FA4A5A7A8ACB1B2B5B8BBBCBDC0C3C5C8C9C9C9CACED0D3D1D5D3D5D5D6D7D9D9DADADADADADBDADBDBDEDEDEDCDBDEDEDEDFDEDEDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1DFDFDFDEDEDEDEDEDBDBDBDEDEDEDEDEDEDFDFDFDEDFE1E1E1E1E1DFE1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E18C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191717171717171717171717171717161616161616161515151515151516141414141414141414151515151414141414141414141414141313131313131313131313131313131312121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000003A7B7D7E7F81838486888A8C8E919395989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DBDDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF -FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EFEDEBE9E73700000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAF9F9F9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F3F1F0F0F0EFEFEDEDECECEBE9E8E7E7E7E5E4E3E3E0E0DEDDDCDCDADAD9D7D6D4D4D3D1D0D0CCCCCBC9C7C7C5C5C4C3C1C1BEBDBDBAB9B7B7B6B5B4B3B1B1AFADABAAA9A8A7A5A3A2A2A0A09E9CA8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A786878A8C8E8F9397999C9FA2A5A7ABAEB2B5B8BBBCBFC1C5C5C6C8CACBCED0D1D3D5D5D6D7D7D7D9DADBDBDCDEDEDFDEDEDFDEDEDCDCDBDBDBDAD9D9D6D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B16E71727375777A7C7E818285898C8E8F93979B9CA1A2A5A8ABACB0B3B5B8B9BCBDC0C3C5C9CACBCBD0D1D1D1D6D7DADADBDBDBDBDCDEDFDFDEDCDBDBDBDBDEDEDEDEDEDEDEDEDEDBDBDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E3E4E4E4E4E3E3E3E3E4E6E7E7E6E7E7E6E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDE431D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191717171717171717171717171717171616161616161615151515151515161414141414141414151515151514141414141414141414141413131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE00000000000000000000000000000000000000000000000000147B7C7D7F8082848588898B8E909294979A9C9FA2A5A8ABAEB1B4B7BABDC0C4C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF -FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE9DE0000000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F1F0F0F0EFEFEDECECECE9E8E8E7E7E5E4E4E3E0E0DEDDDCDCDADAD9D7D6D4D4D3D0D0CECCCCCBC9C7C7C5C4C3C1C1C0BEBDBDBAB9B7B7B5B4B3B2B1B1ADACABAAA9A8A5A4A3A2A2A09E9D9C9AA1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D80818385898A8D8F9294999B9B9EA2A4A7A8ACB1B2B5B6B8BCBFC1C4C5C5C8CACACACECFD0D0D1D3D6D6D7D9D9DADADADBDBDADADAD9D9D6D7D6D3D1D1D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A56E71737576777B7B7F818286898A8E9093969B9CA1A4A4A7ABACAEB1B2B5B6B9BCBFC0C3C4C4C8C9C9CACECECFD3D5D5D5D7D7D7D7D7D9D9D9D9D9D9DADADBDBDBDCDBDCDBDBDCDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9C21D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191717171717171717171717171717161616161616161515151515151516161414141414141414151515151414141414141414141414141313131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F00000000000000000000000000000000000000000000000000717C7D7F8082848587898B8D8F929497999C9FA1A5A8AAAEB0B3B7B9BDC0C3C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF -FFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEECEAE9A7000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F0F0F0EFEFEDEDECECEBE9E8E7E7E5E5E4E3E0E0DEDDDCDCDADAD9D7D6D4D3D1D0D0CECCCBCAC9C7C7C5C4C3C1C1BEBDBDBBBAB7B7B6B5B4B3B1B1AFADABAAA9A8A7A5A4A3A2A0A09E9D9C9A999FB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3838586888A8E90929396979B9EA2A2A7AAACB1B2B5B8BCBDC0C3C4C5C8C9CBCED0D0D3D3D7D7D7DAD9DADADADADBDBDADBDADADBDEDEDEDEDBDCDBDBDBDBDAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3957072747577797B7E80818688898E8F9097999C9EA1A5A7ACAEB2B5B6BBBDC0C3C4C5C9CACBCFD0D1D5D5D9DADBDCDEDEE1E1E1E2E3E2E3E3E3E3E3E3E4E4E4E3E3E4E4E3E3E2E3E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7811D1D1D1D1D1D1D1D1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191917171717171717171717171717171616161616161615151515151515161414141414141414151515151514141414141414141414141413131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5500000000000000000000000000000000000000000000000000537C7D7F8081838586898A8D8F919496999B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E6E9EAECEEEFF1F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFF -FFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEAE8650000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F0F0F0EFEFEDECECEBE9E8E7E7E5E5E4E3E0E0DEDDDCDCDADAD9D7D6D4D3D1D0D0CCCCCBCAC7C7C5C5C4C3C1C0BEBDBDBAB9B7B7B5B4B3B2B1B1AFADABAAA9A8A5A4A3A2A2A0A09E9C9A999897A4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39A7E80828586898A8D9093979B9C9FA2A5A7A7ABAEB0B2B6B9BBBFC0C1C3C5C5C6C9CECECFD0D1D5D6D7D7D7D7D7D7D9DADADADADBDBDADADADADBDADAD9D7D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3936A6D6E70737677787C7F818286898C8E9093979B9C9FA2A5A7ABAEB1B3B5B8B9BDC0C3C5C9CACBCED1D0D1D6D7D9DADADADCDADADBDEDFDFDFDEDEE1E1E2E4E3E4E4E4E4E4E4E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1441D1D1D1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919171717171717171717171717171716161616161616151515151515151614141414141414141515151514141414141414141414141413131313131313131313131313131313121212121212121211111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000002C7C7D7E8081838486888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC1C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF -FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEBEAE82500000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0F0EFEDEDECECE9E9E8E7E7E5E4E3E1E0E0DEDCDCDADAD9D7D6D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C1C0BDBDBBBAB9B7B6B5B4B3B1B1AFADACABA9A8A7A5A4A3A2A0A0A09E9C9A99989796ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D838689898C8E909396999B9CA2A2A5A7AAACAEB1B3B5B8BBBDBFC1C1C5C5C9C9CACBCFD0D0D0D1D5D6D7D6D7D9DBDBDBDCDEDCDEDCDAD9DAD9D7D7D5D3D0CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C70727575787B7D7F818388898E9096999CA1A4A8ACB0B2B5B6BDBFC1C5C6C9CACECFD1D3D5D7D9DBDEDCDFE3E3E4E4E6E6EAEAEAEAEBECEBECEEECEBEBEBECECECECEBEBEBECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6D01D1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191917171717171717171717171717171616161616161615151515151515161614141414141414141515151514141414141414141414141413131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED000000000000000000000000000000000000000000000000000F7B7C7E7F81838486888A8C8E919395989A9DA0A2A6A9ABAFB2B4B8BBBEC1C4C7CACDCFD2D5D8DBDDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF -FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EFEDEBE9D50000000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0EFEFEDECECEBE9E8E7E7E5E5E4E3E0E0DEDDDCDADAD9D7D6D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C1BEBDBDBAB9B7B7B5B4B3B2B1B1AFADABAAA9A8A5A4A3A2A2A0A09E9D9C9A999795959BB0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39383868A8E8F9393979B9EA2A4A7A7ABACB1B3B5B9BBBDBFC1C3C4C6CACACECED0D0D3D3D6D7D7D7D7DAD9D7D9DAD9D7D9D9D9D7D7D9DADAD9D9D6D7D7D7D6D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38772757777797B7D7E8183888A8C8E9094979B9C9EA2A5A8A8AEB1B3B9BBBCBDC0C3C4C6CACBD0D1D5D5D6D7DADBDADADBDBDCDEDEDFDFE1DFDFDFE1E1E1E1E1DFDEDEDEDEDBDBDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADA811F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919171717171717171717171717171716161616161616151515151515151614141414141414141515151514141414141414141414141413131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35000000000000000000000000000000000000000000000000006C7C7D7F8082848588898B8E909294979A9C9FA2A5A8ABAEB1B4B7BABDC0C4C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF -FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE99D0000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEFEDECECEBE9E8E7E7E5E4E3E0E0DEDDDCDADAD9D7D6D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C0BEBDBDBAB9B7B7B5B4B3B1B1AFADACABAAA8A7A5A4A3A2A2A0A09E9C9A999997959593A4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3907E8283868A8C8E9093979B9C9EA2A5A7A8ABACAEB0B3B5B9B9BFBFC1C3C4C6C9CBCBCFD0D1D3D5D6D7D7D7D7D7D7D9D9D9D9D9DADAD9D7D6D5D5D5D5D5D5D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382696A6D6F737576777B7D7F818286898E90939697999C9FA1A2A5A7AAAEB1B3B6B8BBBDBFC0C3C3C5C6C6C8C9CBCBCECECFD0D0D0D1D1D3D3D6D7D7D7D9DADBDBDBDEDEDEDCDCDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEE471F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919191717171717171717171717171717161616161616161515151515151616141414141414141415151515141414141414141414141414131313131313131313131313131313111212121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000457C7D7F8082838587898B8D8F929497999C9FA1A4A8AAADB0B3B7B9BDC0C3C6C9CBCED2D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF -FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEECEBE95300000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEDECECECE9E8E7E7E5E5E3E1E0E0DDDCDCDAD9D8D6D4D3D1D0D0CCCCCBC9C7C7C5C4C3C1C0BEBDBBBAB9B7B6B5B4B2B1B1AFADABAAA9A8A7A5A4A3A2A0A09E9D9C9A9998979595939CB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38D8A8C8E90929697999B9C9EA1A4A5A8ABB1B1B5B6B9BCBFC3C5C6C9CBCBCFD0D1D3D3D3D5D6D9DADADADADBDEDEE1E1E1E1E1DEE1E1E1E1E1DEDEDBDADAD9D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3867072757778787C7E818386888C8F9094979B9CA1A4A7ACAEB2B5B8BBBBBDC0C3C5C8CACBCFD0D3D6D6DADBDCDEDFDFE1E1E3E3E3E3E4E4E4E6E6E4E6E7E9E9E9E9E9E9E6E6E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2CB1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919171717171717171717171717171716161616161616151515151515151614141414141414141515151514141414141414141414141413131313131313131313131313131311121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD900000000000000000000000000000000000000000000000000287C7D7E8081838586898A8D8F919496999C9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED1D4D6D9DCDEE0E2E5E7E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF -FFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFEEECEAE91C00000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F3F3F3F1F0F0EFEFEDECECEBE9E8E7E7E5E4E3E0E0DEDDDCDADAD8D7D4D4D1D0D0CCCCCBC9C7C7C5C4C1C1C0BDBDBBB9B7B7B6B4B3B2B1AFADACABAAA9A8A5A4A3A2A2A0A09E9C9A9A99979595959396ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38E90929497999B9C9FA2A5A7AAACB1B2B6B8BCBDBFC1C4C5C9C9C9CACED0D3D3D5D5D9D9DADADADADADADADADADADCDBDBDAD9DAD9D9D7D6D7D5D3D5D3D1D1D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6D7071737577787B7C818386888C8E9296999C9EA1A4A7AAABAEB1B3B5B9BBBFC0C3C6C6CACACECFD1D1D3D5D5D6D6D7D7D7D7D9DADCDBDBDBDEDEDEDEDEDFE1E1E1E1E1E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDB8A1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191717171717171717171717171717161616161616161515151515151616141414141414141415151515141414141414141414141414131313131313131313131313131313111212121212121212111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0000000000000000000000000000000000000000000000000A7B7D7E8081838486888A8C8E919396989B9DA0A4A6A9ACAFB2B6B8BCBFC2C5C7CBCED0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFF -FFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEAD60000000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F3F3F1F1F0F0EFEFEDECECE9E8E7E7E5E4E3E1E0DEDDDCDADAD9D7D6D4D3D0D0CCCCCBC9C7C7C5C4C1C1BEBDBDBAB9B7B7B5B4B3B1B1AFADABAAA9A8A7A5A4A3A2A0A09E9D9C9A9998979595939396ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B387898C8E90939396979B9C9FA2A5A7AAACB0B1B5B8B9BBBDBFC0C0C4C4C8C9C9CACBCECFD0D0D1D3D5D3D5D5D5D6D7D6D6D7D9DAD9D7D7D6D7D7D7D7D7D6D5D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F72737677797C7E818184878C8E909397999C9EA1A5A8ABAEB1B3B6B8BCBFC1C4C6CACBCFD1D5D7D7DADCDEDCDFE1E1E2E3E3E3E4E4E6E6E6E6E9E7E7E7EAE9EAE9EAEAEAEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9571F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191917171717171717171717171717161616161616161515151515151516141414141414141415151515141414141414141414141414131313131313131313131313131313111212121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C00000000000000000000000000000000000000000000000000677C7D7F81838486888A8C8E919396989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEBEA9D0000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0F0EFEDECECEBE9E8E7E7E5E4E3E0E0DEDCDCDAD9D7D6D4D3D1D0CECCCBC9C7C7C5C4C3C1BEBDBDBAB9B7B7B5B4B3B1B1AFADABAAA9A8A5A4A3A2A2A0A09E9C9A9A9997959595939296ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A780818186898C8D90929697999C9CA1A4A5A8AAACB1B2B5B8B9B9BBBCBCBDC0C3C3C3C4C5C6C8C8C8C8C9CACBCBCBCBCBCECECECECFCFCECECFCFCECBCBCACACAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3826A6C6E6F727575787B7C808184898C8E9094999C9CA1A4A5A7ABACB0B2B5B8B9BDBFC0C3C4C5C6C9CBCECFCFD1D1D3D6D6D9D9DADADADBDADBDBDCDADADADEDEDEDEDEDEDEDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFD91F1F1F1F1F1F1F1F1F20202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191717171717171717171717171717161616161616161515151515151616141414141414141415151515141414141414141414141414131313131313131313131313131313121212121212121211111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000004A7C7D7F8082848588898B8E909295979A9DA0A2A5A8ABAEB1B4B7BBBDC1C4C7CACDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EFEDEBE96500000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0F0EFEDECECEBE9E8E7E5E5E4E1E0DEDDDCDADAD8D7D4D4D1D0D0CCCCCAC7C7C5C4C3C1C0BDBDBAB9B7B7B5B4B2B1B1ADACABAAA9A7A5A4A3A2A0A09E9D9C9A99989795959393929AADB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E8A8D8F909396999B9C9FA2A7A7AAABB0B0B2B5B6B9BCBFC0C1C4C5C5C5C5C9C9CACBCECFD0D1D3D3D5D5D6D7D7D7D7D6D6D5D5D5D6D5D5D6D6D5D3D5D5D5D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38772737577787A7C7E8183888A8C8E909396999B9EA1A5A7A8ACB1B3B5B8BBBFC1C3C5C6C8C9CACBCED0D3D3D6D7D7D9D7D7D7D7D6D7DADBDEDCDCDCDCDEDEDFDFDFDEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEA51F1F1F2020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A191919191919191919191919191919191919191917171717171717171717171717171616161616161515151515151516141414141414141415151515141414141414141414141414131313131313131313131313131313111212121212121212111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000002C7C7D7F8082848587898B8D8F929497999C9FA2A5A8ABAEB0B4B7BABDC0C3C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEBE9250000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEFEDECECE9E8E7E7E5E4E3E0E0DEDDDCDAD9D7D6D4D3D0D0CCCCCBC9C7C5C4C3C1C0BDBDBAB9B7B6B5B4B2B1AFADACAAA9A8A7A5A4A2A2A0A09E9C9A9A9997959595939292A0B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39A929396999B9C9EA2A4A7A8ABACAEB2B3B6B8B9BCC0C1C3C5C6C9CBCBCECFD0D3D3D5D7DADBDBDCDEDEDEE1E1E1DEDFDFDEDEDEDFDEDEDCDCDBDBDAD9D9D7D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38167686C6E7172757778787D818388898A8D909296999C9EA2A5A8ACAEB1B3B5B6B9BCBFC1C1C1C3C5C5C6C8CACBCBCED0D1D1D5D6D6D7D6D6D7D7D7D7D7D9DADADADAD7D7D7D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1652020202020202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919171717171717171717171717171616161616161615151515151516161414141414141414151515151414141414141414141414131313131313131313131313131313111212121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF190000000000000000000000000000000000000000000000000F7C7D7F8081838587898B8D8F929497999C9FA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEECEBD7000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEFEDECECE9E8E7E7E5E4E3E0E0DDDCDADAD8D7D4D3D1D0CECCCBC9C7C5C4C3C1C0BEBDBAB9B7B6B5B3B2B1AFADABAAA9A8A5A4A3A2A2A0A09D9C9A999897959593939296A5B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3928E8F9294979B9C9CA2A2A5A5A8ACAEB1B2B5B8B9B9BBBCBFC0C3C3C5C6C9C9CACBCFCFD0D3D5D3D5D3D3D1D3D3D5D6D6D7D7D9D7D9DAD9DAD9D9D7D6D6D5D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F737677787B7C7E818186898A8E909294999C9FA1A5A7ABAEB1B3B6B6BBBDBFC0C3C5C8CACACBD0CFD0D0CFD0D1D5D6D7D9DADADADBDEDEDEDEDCDCDCDCDEDEDEDBDBDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DF2E2020202020202020202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919171717171717171717171717171716161616161615151515151515161414141414141414151515151414141414141414141414141313131313131313131313131313131112121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55000000000000000000000000000000000000000000000000006D7D7E8081838586888A8D8F919396989B9EA1A4A6AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFEEECEA9E000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEFEDECECE9E8E7E5E5E4E1E0DEDDDCDAD9D7D6D4D3D0D0CCCCCAC7C7C5C4C1C1BEBDBBB9B7B7B5B4B2B1AFADABAAA9A8A5A4A3A2A0A09E9D9C9A99979595959392929DADB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B286898A8E8E909394979B9C9FA2A5A7AAACB0B1B3B3B8B9BBBDBFC1C3C3C5C6C8C9CBCECECECFD0D0D0D1D1D1D5D6D7D7D7D9D9D9D7D7D9D9DAD9D9D5D7D6D3D1CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6A6D6E6F71727577787C7E818385888A8C8E9093979B9EA1A2A5A7ACAEB0B1B2B5B8B9BCBFC3C3C3C5C5C5C8C8C8C9C9CBCACECECED0D1D5D5D5D5D5D6D6D6D7D6D7D7D7D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEABE20202020202020202020202020202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191919171717171717171717171717171616161616161615151515151515161414141414141414151515151414141414141414141414131313131313131313131313131313111212121212121212111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000004F7C7E7F81838486888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC2C5C7CACED0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEEECEA6F00000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEFEDECEBE9E8E7E5E4E3E0E0DEDCDCDAD9D7D4D3D1D0CECCCBC9C7C5C4C3C1BEBDBBBAB7B7B5B4B2B1AFADABAAA9A8A5A4A3A2A0A09E9C9A999897959593939297A7B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A794979B9C9E9FA2A4A7A8ABAEB1B2B5B8B9BBBDBFC0C3C4C6C9CBCECFCFD0D1D1D3D5D5D7D9DAD9DADBDCDCDEDEDFDFDFDFDEDEDEDEDEDCDBDEDBDCDADAD9D7D3D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F70727476757A7C7E818589898D9093979B9CA1A2A7AAACB0B2B5B8B9BCBFC0C1C4C5C8CACECBCECFCFD0D1D5D7D9D9DADBDBDEDEDEDCDCDEDEDCDCDEDEDEDEDCDEDFE1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDC7C20202020202020202020202020202020202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A19191919191919191919191919191919191919191717171717171717171717171716161616161615151515151515161414141414141414151515151414141414141414141414141313131313131313131313131313111212121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE300000000000000000000000000000000000000000000000000317C7D7F81828486888A8B8E909395989A9DA0A2A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEBEA370000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEDECECEBE9E7E7E5E4E3E0E0DDDCDADAD8D6D4D3D0D0CCCBC9C7C5C5C3C1C0BDBDBAB9B7B5B4B3B1AFADABAAA9A8A5A4A3A2A0A09E9C9A9998979595939393A1B0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39B8F90939496999B9C9EA2A4A7AAACB0B2B3B3B6B9B9BCBDC0C0C3C3C4C5C8C9C9CBCECED0D1D3D5D5D5D6D6D9D9DBDADADADBDBDBDEDEDFDEDEDCDEDBDCDBDADAD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3867272767778797B7D818186888A8E8F909397999B9CA1A4A5A7ACB0B2B5B8B9BDC0C3C5C8C9CACBCECFD1D1D5D7D7D7D9D9DADADBDBDEDEDEDCDEDEDEDEE1E2E2E3E3E3E3E2E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDB4E20202020202022222222222222222222222222202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191717171717171717171717171716161616161616151515151515161614141414141414141515151514141414141414141414141313131313131313131313131313131112121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19000000000000000000000000000000000000000000000000147C7D7F8082848588898B8E909295979A9D9FA2A5A8ABAEB1B4B7BBBDC1C4C7CACDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFF -FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3F2F0EFEDEBEA090000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F5F5F5F3F3F1F0F0EFEDECECEBE8E7E7E5E4E3E0DEDDDCDAD9D7D6D4D1D0CECCCBC9C7C5C4C1C1BEBDBAB9B7B6B4B3B1B1ADACAAA9A8A5A4A3A2A0A09E9C9A999795959593929CABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38F8C8E909394999B9B9EA2A5A7A7A8AAAEAEB1B3B5B8BBBFC0C3C4C5C6C6C6C8C9CECECECBCECFCFCFCFD0D1D0D3D5D5D5D6D7D7D7D5D5D5D5D3D1D1D3D3D1D1CFCBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F71727576777B7D8183888A8C909093969B9B9FA4A5A7ACB0B1B3B6B8BBBDC1C3C4C5C9CACECFD0D1D1D3D3D7D7D9D9DADCDCDEDEDFDFE1E2E1E1E1E1E1DFDFDFDEDFE1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3D42020222222222222222222222222222222222222222222222220202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A191919191919191919191919191919191919191917171717171717171717171717161616161616151515151515151614141414141414141515151514141414141414141414141313131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5500000000000000000000000000000000000000000000000000777D7F8082848587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF -FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EEECEBBA000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E1E0DEDDDCDAD9D7D4D3D1D0CCCCCAC7C5C4C3C1BEBDBBB9B7B6B5B3B1B1AFACAAA9A8A5A4A3A2A0A09E9C9A99979595939397A8B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B29397999C9C9FA2A5A7A8ACAEB0B1B3B5B6B9BDBDC1C1C4C5C5C5C6C6C6C9CBCED0D1D3D3D5D6D7D7D9DAD7D9D9DADADADAD9D9D9D9D9D7D7D7D6D3D3D3D3D0CFCBCEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E6F71737577797C7F8285898C8E909396979C9EA1A4A5A8ACB0B1B5B8BBBFBFC3C5C8C9CACED0D1D5D7D7D9DADBDADBDBDBDBDBDADBDBDADADADADADADADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2A822222222222222222222222222222222222222222222222222222222222220202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A191919191919191919191919191919191919191717171717171717171717171716161616161616151515151515161614141414141414151515151414141414141414141414141313131313131313131313131313111212121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000005E7D7F8081838586898B8D8F929497999C9FA1A4A8AAADB0B3B7B9BDC0C3C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF -FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECEB8300000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F6F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E3E1E0DEDCDADAD8D6D4D3D0D0CCCBC9C7C5C4C1C1BEBDBAB7B7B5B4B2B1AFACABA9A8A5A4A3A2A0A09E9C9A999795959396A3B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E8A8D8F90939799999C9CA1A2A5A7AAACB0B1B3B5B8B8B9B9B9BCBFC1C1C1C3C4C5C5C6C8C6C9C9C9CBCBCBCBCECECECED0D0D0D0D1D1D0D0D0D0D0D0D0D0CECFCBCAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3826A6D6E70737575787C7E8184898C8C8F9294969B9B9FA2A5A7AAACB1B2B5B8B9BBBFC1C4C4C6C8CACACFD0D1D3D5D7D6D7D7D9DADAD9DADADBDBDCDEDEDEDEDEDEDEDCDCDBDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E17622222222222222222222232223222222222222222222222222222222222222222222202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191919191917171717171717171717171717161616161616151515151515151614141414141414141515151514141414141414141414141313131313131313131313131313131112121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE300000000000000000000000000000000000000000000000000407D7E8081838586888A8D8F919396989B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED1D4D6D9DCDEE0E2E5E7E9EBECEEEFF1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF -FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEECEA5400000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E3E0E0DEDCDADAD8D6D4D1D0CECCCAC7C7C5C3C1BEBDBBB9B7B6B4B3B1AFADABAAA8A5A4A3A2A0A09E9C9A99979595959FAFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39590939397999B9E9FA2A5A5A8AAACB0B2B3B6B6B9BBBDBCBFC1C3C5C8C9CACBCFD0D0D0D1D5D6D7D9D9D7DADADAD9D7D7DADADBDAD7D9DADADAD7D7D7D5D5D3D1D0CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3806565686A6D6F707375787B7C7E818286898D909696979C9C9FA2A5A5A7AAAEB0B2B5B6BBBDC0C3C4C5C6CAC9CACECED0D1D1D1D3D0D1D5D5D7D7D9DAD9DADADADBDBDBDCDBDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E639222222232323232323232323232323232323232323232222222222222222222222222222222020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191917171717171717171717171717161616161616161515151515151614141414141414141515151514141414141414141414141413131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F000000000000000000000000000000000000000000000000287C7E7F81838486888A8C8E919396989B9DA0A4A6A9ADAFB3B6B9BCBFC2C5C8CBCED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF -FFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFEEECEA2500000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E3E0E0DDDCDAD9D7D6D4D1D0CCCCC9C7C5C4C3C1BEBDBAB7B7B5B3B1B1ADABAAA9A7A4A3A2A0A09E9C9A999795959DAAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2A2A5A8AAABACAEB1B1B3B5B6B9BDBFC0C3C5C6C9C9CACBCED0D1D5D5D6D7D9D9DADCDCDFDFE1E1E1E1E1E2E2E4E4E6E4E6E4E4E3E3E1E1E1DFE1DEDEDEDBDBDBDAD9D6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3826567686B6D6F727577787B7C7F8185898C8E9094979B9EA1A4A5A7A8AAACB0B3B3B5B8B9BCBDBFC0C0C3C4C5C6C8C9C9CACBCBCECFD0D0D1D3D3D5D3D3D3D5D6D7D7D6D7D7D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEC923232323232323232323232323232323232323232323232323232323222222222222222222222222222020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191917171717171717171717171717161616161616151515151515151614141414141414141515151514141414141414141414141313131313131313131313131313111212121212121212111111111111111111111111111111101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C0000000000000000000000000000000000000000000000000A7C7D7F81838486888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBFC1C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFF -FFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F0EFEEECE10000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F6F5F5F5F3F1F0F0EFEFECECE9E8E7E7E5E3E0E0DDDCDAD9D7D4D3D1D0CCCBC9C7C5C4C1C0BDBBB9B7B6B4B2B1AFACABA9A8A5A3A2A0A09E9C9A9997959BA8B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A09496979B9E9FA1A4A4A5A7AAACB0B2B3B5B8B9BDBFC1C4C4C6C9CACACECFD1D3D5D6D7D7DADADBDBDBDCDEDFDFDFDFE1E1DFE1E1E1E1E1E1DFDFE1E1DFDEDFDFDEDBDBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38671737677777B7C7E818283898C8D8F929497999C9EA2A5A5AAACB0B1B5B6B9BCBDC1C1C4C5C8C9CECED0D0D1D5D6D9DADADADBDBDBDEDFDFDFDFE1E1E1E1E3E3E3E3E4E4E4E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6A3232323232323232323232323232323232323232323232323232323232323232322222222222222222222222220202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191917171717171717171717171717161616161616161515151515151614141414141414141515151514141414141414141414141313131313131313131313131313131112121212121212111111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000006D7D7F8082848588898B8E909295979A9DA0A2A5A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFF -FFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEDEBB200000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEFEDECE9E8E7E7E5E3E0E0DDDCDAD9D7D4D3D0D0CCCBC9C7C5C3C1BEBDBAB9B7B5B3B1B1ADABAAA8A5A4A3A2A09E9C9A999799A4B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E9FA2A4A5A8AAABB0B2B6B8B9BBBDBFC1C4C6C8C9CBCBD0D1D3D5D7D9DADADBDBDCDBDEDFE1E1E3E3E3E6E6E6E6E6E6E7E7E7E7E7E6E6E3E4E4E4E3E3E3E3E1E1E1E1DEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6F7172757778787C7E8285898A8D909293979B9EA1A4A7A7AAACB1B5B8B9B9BBBFC0C4C6C6C9C9CACBCFCFD1D3D6D5D5D6D7D9D7D9DADBDBDBDBDBDCDEDEDFDEDEDEDEDEDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E168232323232323232323232323232323232323232323232323232323232323232323232322222222222222222222222220202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A19191919191919191919191919191919191919171717171717171717171717171616161616161515151515151516141414141414141515151514141414141414141414141413131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC400000000000000000000000000000000000000000000000000547D7F8082848587898B8D90929497999C9FA2A5A8ABAEB1B4B7BBBDC1C4C6CACDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFF -FFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEB8300000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEFEDECEBE8E7E7E5E3E0E0DDDCDAD9D7D4D3D0CECCCAC7C7C4C3C1BEBDBAB7B6B4B3B1AFACAAA9A7A4A3A2A0A09D9C9998A1AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9B9CA1A4A5A5A7ABACAEB1B2B6B8BBBDBFC0C4C5C6C9CBCFD0D1D3D5D6D7D9DADEDEDFDFE1DFE1E3E3E3E4E4E4E4E6E6E6E4E3E3E3E3E3E4E4E3E3E3E3E4E3E3E1E1DEDEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E717376777B7D7E818286888D8F9296979B9FA2A5A7ABAEB2B5B8B9BBBFBFBFC3C3C4C5C9CACBCED0D1D1D5D6D7D7D9DADADBDBDEE1E1DEDFDEDFDFE1E1E1E1DFDFDFDFE1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9392323232323232323232323232323232323232323232323232323232323232323232323232323232222222222222222222222202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191919171717171717171717171717171616161616161615151515151516141414141414141415151515141414141414141414141413131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000000000000000000000000000000000000000000000000003B7D7F8081838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7DADCDEE1E4E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EEEDEB5400000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F6F6F5F5F3F3F1F0F0EFEDECEBE8E7E7E5E3E0E0DDDCDAD9D7D4D3D0CECCCAC7C5C4C1C0BDBBB9B7B5B4B2B1ADABAAA8A5A4A2A0A09E9C9A9DA9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A09EA2A2A5A7ABACAEB1B3B5B6B8BBBDBFC1C4C5C6C9C9CECFD1D5D6D9DBDEDEE1E3E4E6E6E6E9EAEBEBEBEBEAECEAEBEBEAEAEAEBEBE9EBECEBEAE9E9E9EAE9E9E6E6E6E2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856E70727677777A7D818284888A8E909296979B9FA2A4A7ABAEB1B5B6B9BBBDBFC1C4C5C5C8C9CBD0D0D1D6D7D7D9DADADBDCDEDEDEDFE1E2E4E4E6E3E3E3E6E6E7E9E9E9E9E9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2DC2323232323232323232323232323232323232323232323232323232323232323232323232323232323232322222222222222222222202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A191919191919191919191919191919191919191717171717171717171717171716161616161615151515151515161414141414141415151515141414141414141414141413131313131313131313131313131311121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000237D7E8081838586898B8D8F929496999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F5F4F3F2F0EEECEB2500000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F8F8F7F6F5F5F3F3F1F0F0EFEDECEBE9E7E7E5E3E0E0DDDCDAD9D6D4D3D0CECCC9C7C5C4C1C0BDBAB9B7B5B3B1AFADABA9A7A4A3A2A09E9C9CA5B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B29EA1A4A5A7A8ABACAEB1B3B6B9BCBFC1C3C4C8CACACED0D1D3D5D6D7D9D9DADBDCDCDEDFE1E1E2E3E3E3E4E4E6E6E7E7E7E7E9EAEAE9E7E7E7E6E6E6E4E6E4E3E3E2E1E1DEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A7678797B7C7E818488898A8F909497999B9CA1A5A7AAACB0B2B6B8BBBFC1C4C5C9CACACECFD1D3D7D7DBDBDCDBDCDEDEDEDEDFDFE1E1E1E1E1E1E2E2E2E1E1E1E1E1E1E1E2E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D19423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323222222222222222222222020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A191919191919191919191919191919191919171717171717171717171717171616161616161515151515151516141414141414141415151515141414141414141414141413131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000000A7D7E8081838586888A8D8F919396999B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1F0EEECE2000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEDECECE9E7E7E5E4E0E0DDDCDAD9D6D4D1D0CECCC9C7C5C3C1BEBDBAB7B7B4B3B1AFACAAA8A5A4A2A0A09DA1ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A09B9C9EA1A2A5A5A7AAACACB0B1B3B9B9BBBCBDC0C3C5C6C9CACACED0D1D1D3D6D9D9DADCDADBDBDBDCDBDBDADADADADBDCDCDCDBDBDBDBDBDBDCDCDBDBDCDAD9DAD7D7D6D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B388757777797C7D818184868A8D909294979C9CA1A5A8AAAEB1B5B6BBBDC0C5C6C9C9CBCED0D3D5D5D9DADBDEDEDFE1E1E3E4E6E7E7E7EAEAEAEAEAEBEBECEEEEEEEEECECEBECEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E170232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323222222222222222222222020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191919191717171717171717171717171616161616161615151515151516141414141414141415151515141414141414141414141413131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000006D7E7F81838486888A8C8E919396989B9EA1A4A6A9ADAFB3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E7E9EBECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEECB200000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFBFBFBFBFAF9F9F9F9F8F7F6F6F5F5F3F1F0F0EFEDECECE9E8E7E5E4E1E0DDDCDAD9D7D4D1D0CCCCC9C7C5C3C1BEBDBAB7B6B4B2B1ADABA9A8A5A3A2A09EA7B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7A8AAACB0B2B3B5B6B9BDBFC1C3C5C6C9C9CBCFD0D3D6D7D9DAD9DADBDEDFE1E1E3E6E6E6E7E7E9EAEAEAEAEAEBEBEBEBEEECEBEBECECECECECECECECEBEBEBEBEAE9E7E6E6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856E70727477787B7C7D808285898C8E909396979B9FA2A5A7A8ACB0B1B2B5B6B9BBBCBFBFC0C3C5C9C9CACECFD0D0D3D3D5D7D7D9D7D7D9D9D9D9D9D9D9D9DAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADA3F2323232424242424242424242424242424242424242323232323232323232323232323232323232323232323232323232323232222222222222222222020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191717171717171717171717171716161616161615151515151515161414141414141415151515141414141414141414141413131313131313131313131313131312121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD900000000000000000000000000000000000000000000000000547D7F81838486888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC1C5C7CACED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F2F3F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFEEEC8300000000000000000000000000000000000000000000000000F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8F8F6F6F5F5F3F3F1F0EFEFECECE9E8E7E5E4E1E0DEDCDAD9D7D4D3D0CCCCC9C7C5C3C1BEBDB9B7B5B4B1B1ADABA9A7A4A2A0A2ABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A19EA1A2A2A4A5A8ABAEB0B1B2B3B5B8B9BCBFC0C0C3C4C4C6C8C9CACBCFD0D0D0D3D5D6D7D7D7D7D9DAD9DADADADBDBDBDCDBDCDEDCDEDEDEDEDEDEDCDBDBDAD7D9D6D5D3D1D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856E71737676787B7C7F818286898C8E9096979B9FA2A5A5A8ACAEB0B1B3B6B8BBBDBFC1C4C5C5C9C9CACBCECFD0D3D5D5D6D9D9D9D7D9DAD9D9D9DAD9DADADBDBDBDCDBDCDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD02324242424242424242424242424242424242424242424242424242323232323232323232323232323232323232323232323232323232222222222222222222220202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191919191917171717171717171717171716161616161616151515151515161414141414141414151515151414141414141414141414131313131313131313131313131311121212121212121111111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000417D7F80828486888A8B8E909395989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F0EFEEEC5E00000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFBFCFCFCFCFBFBFBFBFBFAF9F9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDCDAD9D7D4D3D0CECCC9C7C5C3C1BEBDB9B7B5B3B1AFACAAA8A5A4A2A6B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0A3A5A7AAACACAEB1B3B6B8B9BBBDBFC0C0C1C4C6C5C9CACACACBCFD0D0D1D1D3D3D7D7D7D7D7D7D7D9D9DAD9DADADAD9DADADADADAD9D7D7D7D7D6D6D7D5D5D5D1D1D1D0D0CECAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6C6E71737577787B7E818486888A8E9093979B9EA1A5A7AAACB1B2B6B9BBBDBFC1C4C6C9CACED0D1D5D5D6D9DADBDBDCDEDFDEDEDFE1E1E2E3E6E6E4E4E4E3E3E3E4E4E4E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4B124242424252525252525252525252525252525252424242424242424242424232323232323232323232323232323232323232323232323232322222222222222222220202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919191717171717171717171717171716161616161615151515151516161414141414141415151515141414141414141414141413131313131313131313131313131112121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000287D7F8082848587898B8E909294979A9DA0A2A5A8ABAEB2B4B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEDEB2F00000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFBFBFBFBFBFBFBFBFBFAF9F9F9F9F8F8F6F5F5F5F3F1F0F0EFEDECEBE9E7E7E5E3E0DEDCDAD9D7D4D3D0CECCC9C7C5C3C1BDBBB9B7B5B3B1AFACAAA8A5A4AAB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39F9B9B9C9E9EA1A4A5A7A7AAABACAEB1B1B2B5B6B6B9BBBCBDBFC0C1C3C5C6C6C8CACACBCBCECFCFD0D1D3D1D5D6D5D5D3D5D5D5D6D5D5D6D6D5D3D3D3D1D1D3D0D0D0CECECAC9C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F71737575787B7E8183868A8C8E9294979B9EA2A4A5A7ACAEB1B2B5B8BCBDC0C3C5C6C9CACBCECED0CFD1D5D7D7D9DADADCDBDADBDADADADADBDBDBDADBDBDBDBDADADBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DF87252525252525252525252525252525252525252525252525252424242424242424242323232323232323232323232323232323232323232323232322222222222222222220202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191919191917171717171717171717171716161616161615151515151515161414141414141415151515141414141414141414141413131313131313131313131313131312121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000147D7F8081838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BBBDC0C4C6CACDCFD2D5D8DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFF -FFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFEDEB090000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFBFBFBFBFBFBFBFBFAFAF9F9F9F8F8F7F6F5F5F3F3F1F0EFEFECECE9E7E7E5E3E0DEDDDCDAD7D4D3D0CECCC9C7C5C3C1BDBBB9B7B5B3B1AFABA9A8A4ACB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEA8AAABACAEAEB1B1B5B5B6B8BBBCBDBFBFC1C1C3C4C4C6C6C6C9CACBCECFD0D1D5D5D5D7D7D9DADADBDBDADBDCDCDCDBDBDCDEDEDEDFDFDEDEDFDFDEDCDADADAD9D9D7D7D7D6D5D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6F72737675787B7C7C8184898A8C8F9397999C9EA2A5A8ACB0B1B2B6B9BCC0C3C5C5C6C9CBCBD0D3D3D5D5D7DADCDEDFDFDEDFE1E2E2E2E4E4E6E4E3E3E6E4E3E4E3E4E6E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3612525252525252525252525252525252525252525252525252525252525252424242424242424232323232323232323232323232323232323232323232322222222222222222220202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A19191919191919191919191919191919191917171717171717171717171717161616161616151515151515161414141414141414151515151414141414141414141414131313131313131313131313131311121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000007D7F8081838586898B8D8F929497999C9FA2A5A8AAAEB0B4B7BABDC0C3C6C9CCCFD2D4D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F6F5F4F3F2F0EFEDC500000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFAFBFBFBFBFBFBFBFBFBFAFAF9F9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECE9E8E7E5E4E1E0DDDCDAD8D6D3D0CECCC9C7C5C3C1BDBBB9B7B5B3B1ADABA9A7AFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A2A4A5A7A7AAACACB1B2B3B6B8B8B9BBBDBFC0C3C5C5C8CACAC9CBCBCECFCFD0D0D1D1D3D5D5D7D9DADADAD9D9DADADAD9DAD9D7D7D7D7D7D7D7D9D9D7D9D9D9D9D7D6D5D5D6D5D6D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38671747677787B7C80818388898E909293979B9EA1A4A5AAABAEB1B5B6B9BBBDC0C1C1C4C5C6C8C9CBCBCED0D0D5D6D7D7D7DADBDCDCDEDFDFDFDEDEDEDEE1E1E1E1E1DFDFDFE1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E23325252525252425252525252525242424252525252525252525252525252525252524242424242424232323232323232323232323232323232323232323232322222222222222222220202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191919171717171717171717171717161616161616151515151515161614141414141414151515151414141414141414141414131313131313131313131313131311121212121212121111111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE00000000000000000000000000000000000000000000000000647E8081838586898A8D8F929497999C9FA1A4A8AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3F2F0EEEC9F00000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBFBFBFAFAF9F9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDCDAD9D6D4D1D0CCCAC7C5C3C1BEBDB9B7B5B3B1ADABAAB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ACAAACACB0B2B3B6B6B9B9BBBDC1C1C4C3C6C5C8C9CBCBCECECED0D0D0D0D1D1D1D5D5D6D5D5D7D9DBDADBDADCDEDEDEDFDFDFDFDEDEDEDEDFDFDFDEDEDEDEDCDBDBDBDAD9D7D7D7D6D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F73767677797B7E8183888A8E909296999B9FA2A4A5A8ABAEB0B2B6B8BBBDBFC1C4C5C8C9CACACECED0D0CFD0D1D5D5D6D7D7D7D7D9DADADADADBDCDBDBDEDEDBDCDCDEDCDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9C425252525252525252525252525252525252525252525252425252525252525252525252525242424242424242323232323232323232323232323232323232323232323222222222222222220202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191919171717171717171717171717161616161616161515151515151614141414141414151515151414141414141414141414131313131313131313131313131311121212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000004B7E8081838486888A8D8F919396999C9EA1A4A7AAADB0B3B6B9BCC0C2C5C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EEEC7B00000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBFBFAFAF9F9F9F9F8F8F7F6F5F5F3F3F1F0EFEDECECE9E7E7E5E3E0DEDCDAD9D7D4D1D0CCCBC7C5C3C1BEBDB9B7B5B3B1ADABB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1A3A5A7A8AAABACAEB1B2B5B8B9BCBFBFC0C1C1C4C4C5C6C8C9C9C9CBCFD0D1D3D5D5D3D3D5D5D6D6D7D7D6D6D7D7D7D7D7D9D9D7DADADBDADADADADADBDBDEDBDADADAD9D9DADADAD9D7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3867274767678787C7E818388898D8F909397999C9EA2A5A7A7ABACB0B1B3B6B9BBBDC0C3C6C6C9C9CED0D1D3D5D7D7D9D7D9DADBDEDEDEDEDEDEDEDEDEDEDFDFDFDEDFDFDFDFE2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDCD9D7D6D6D6D6D6D6D6D6D5D5D6D6D6D6D6D6D7D6D6D7D7D6D6D6D7D6D6D3D3D3D3D3D3D5D5D3D5D5D5D6D6D6D7D6D5D6D7D7D7D6D7D6D6D6D5D6D6D6D7D7D6D6D5D5D3D1D1D0D0D0CFCFCFCFCECFCFD0D0D1D1D1D1D1D0D1D3D3D3D1D0D0D1D0D0D0D1D1D3D3D5D5D5D5D5D3D1D1D3D3D3D1D0D0D0CFCFCFD0D0D0D0D1D1D1D3D3D3D3D1D1D3D3D1D1D1D3D3D3D5D3D1D0D0D1D1D1D1D0D0D1D0D0D1D3D3D1D0D0D0D0D1D3D5D6D6D6D6D6D6D3D6D6D3D3D6D3D1D1D1D3D1D1D3D3D1D3D1D1D1D3D5D5D3D5D5D5D5D5D3D3D3D3D5D3D3D5D5D5D5D5D5D5D6D5D6D6D6D6D6D6D6D6D6D3D3D3D3D3D5D6D6D6D6D6D7D6D6D6D6D5D5D6D6D6D7D7D6D6D6D5D5D6D7D7D6D6D7D9D9D9D9D9D7D7D681101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23000000000000000000000000000000000000000000000000367E7F81838486888A8C8F919396989B9EA1A4A7AAADAFB3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F5F4F3F1F0EEEC5500000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBFBFAF9F9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEDECE9E8E7E5E4E0E0DDDCDAD7D4D3D0CCCBC7C5C4C1BEBDB9B7B5B3B1ABB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A5A7ABACAEB0B1B2B3B3B8B9BBBDBFC1C0C1C4C4C8C9C9C9C9CACBCED0D0D0D1D1D1D5D5D6D7D7D7D9D7D9DADADADADBDBDBDADBDCDEDEDEDCDCDBDCDCDADBDADADAD9D7D9D6D7D7D5D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3877173757777797C7E7F8185898A8E8F9296979B9FA2A5A7A8ACB0B1B3B5B8BCBFC1C3C5C9CACBCBCFD0D1D0D0D3D3D5D5D6D7D7D9D9D9DADAD9D9DADADADBDCDCDCDEDEDCDBDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1991010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55000000000000000000000000000000000000000000000000237E7F81838486888A8C8E919396989B9DA1A4A6A9ACAFB2B6B8BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E7E9EBECEEEFF1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1EFEEEC2F0000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFAFBFBFBFBFBFAFAF9F9F9F9F8F8F7F6F5F5F3F1F0F0EFEDECEBE8E7E5E4E1E0DDDCDAD8D6D3D0CECBC9C7C4C1BEBDBAB7B5B3AEB1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ACACACAEB1B2B5B8B9BCBDC1C3C5C8C9CACBCECFD0D3D3D5D5D7D7D9DADBDCDCDCDFDFE1E1E3E3E4E4E6E6E7E7E9EAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E7E7E7E6E7E6E4E3E2E1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887576787A7C7D7F8285868A8D909293979B9CA2A5A7AAABAEB1B3B6BBBDC1C3C5C6C9C9CBCBCED0D1D3D3D6D7D7DADBDBDCDBDCDCDCDEDFDFE1DEDEDEDEDEDEDEE1DEDEDEDCDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDE96101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000000F7D7F80828486888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBFC1C5C7CBCED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEEEC00000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFAFAFAFAFAFAFAF9F9F9F9F9F8F7F6F5F5F3F3F1F0EFEFECECE9E7E7E5E3E0DEDCDAD9D6D4D1D0CCC9C7C5C3C0BDBAB7B5B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0A8ABABAEB1B1B1B2B3B6B6B6BBBBBDBDBFC1C3C4C4C5C6C5C6C8C9C9CBCECBCECECED0D0D0D1D1D1D1D3D3D3D5D5D5D6D5D6D7D7D7D7D7D6D6D7D7DADADADADADAD9D7D7D5D5D3D3D0D0CECBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F72757577787A7B7E818488888D9093969B9EA1A5A7AAACAEB2B5B8BBBCBFC1C5C9CACBCFD1D1D1D1D5D5D6D7D7D9D9DADADBDBDADADADADBDBDBDCDBDBDBDBDBDEDEDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DF9810101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000007D7F8082848588898B8E909395989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F5F5F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFEECF00000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFAFAFAFAFAFAF9F9F9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECEBE8E7E5E4E0E0DDDAD9D7D4D1D0CCCAC7C5C3C1BDBAB7B5B1B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A0A2A5A5A7A7A8AAAAABACAEB1B2B5B6B6B8BBBDBFBDBFC0C0C1C3C5C6C9C9C9C9C9C9C9CACACACACBCBCECECFD0D1D5D5D5D5D5D6D5D5D6D5D6D6D6D6D6D5D5D5D5D5D5D6D6D5D3D3D1D3D1CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887475777A7C7E818286898A8E909394979B9CA1A5A7AAAEB0B3B6BBBCBFC1C4C5C9C9CACBCFD1D3D5D6D7DADADBDADCDBDBDCDEDCDCDEDFDEDEDEDCDEDCDCDCDBDEDBDADBDBDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDA941110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE300000000000000000000000000000000000000000000000000647F8082848587898B8E909295979A9DA0A2A5A9ABAEB2B4B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F0EFEEAA00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9F9FAFAFAFAFAF9F9F9F9F9F9F8F7F6F5F5F3F3F1F0EFEDECECE9E7E7E4E3E0DDDCDAD7D4D3D0CCCBC7C5C4C1BEBBB9B3B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1BCBDBFC0C1C4C5C5C6C9CACBCECFD0D0D1D6D7DADBDBDBDBDBDBDBDEDEDFE1E1E1E3E3E3E4E4E3E3E4E4E4E6E6E6E6E6E6E6E7E7E9E7E9E7E6E6E6E6E6E6E6E7E6E6E4E3E2E1DEDEDCDADBDAD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38267696C6D6E71737576777A7C808385898D8E8F9294999C9EA2A5A7ABACB1B3B5B6B8B8B9BCBFC1C3C1C4C5C5C8C8C9C9CACBCBCBCBCECFCFD0D0D0D1D3D1D3D5D5D5D5D5D5D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E29B111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07000000000000000000000000000000000000000000000000507F8081838587898B8D909294979A9C9FA2A5A8ABAEB1B4B7BBBDC1C4C7CACDCFD2D5D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFEE8400000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9F9F9FAFAFAF9F9F9F9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD9D6D4D0CECCC9C7C4C1BEBDB5B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AAA7ABACAEB1B2B3B6B8BBBBBDBFC1C4C5C5C8C9CBCECECFD0D0D3D5D6D6D7D7D9D9DADADBDCDEDEDEDFE1E2E2E2E3E6E6E4E4E6E6E6E6E6E9E9E9E7E7E6E6E6E6E6E6E6E4E4E6E3E3E1DFDEDCDBDBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E70727577777B7C7F8185898A8C9093979B9EA2A2A5A7ABAEB1B5B6B9BDBFC3C5C6C9CBCED0D3D3D5D5D6D7D6D7D7D7D7DADBDADBDCDCDCDCDEDEDEDEDFDEDEDFE1E2E2E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDB9511111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000417F8081838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC0C4C6CACDCFD2D5D8DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFED5E00000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F3F3F1F0EFEDECECE9E7E5E4E1E0DDDCDAD7D4D1D0CCCAC7C5C3C0BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEA5A7A8ACAEB0B1B0B3B5B6B8B9B9BCBFBFC1C4C4C5C5C6C9CAC9CBCFCFCFD1D3D5D5D6D7D9D7D7D9D9D9D9D9DADADADADADADBDADADADADADADBDBDBDBDBDBDBDBDBDCDBDBDADAD9D7D7D6D6D3D1D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F71737576787B7C7E818385898C8F9092969B9C9EA1A4A5A7AAACB0B3B5B8BBBDC1C3C4C4C6C8CACFCED0D3D7D7D7D7DADBDBDCDEDEDEDEDEDEDEDEDFE1E1E1DEE1DEDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDA93111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000002D7F8081838587898B8D8F929497999C9FA2A5A8AAAEB0B4B7BABDC0C3C6C9CDCFD2D5D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EFED380000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD8D6D3D0CCCBC7C5C3C1B6B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2AAACACAEB1B2B2B3B5B5B6B9BBBFC0C1C3C4C6C6C6C8C9C9CACECED0D0D3D1D3D5D3D5D6D9D9D7D9DADBDBDCDEDEDCDBDBDCDEDEDEDEDFDFDFDFE1E1E2E2E1E1E1DEDEDEDEDCDADBDBDBDAD7D9D9D7D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6D6F717577787B7D7E8185898C8D8E9294979C9FA2A7A8ACB0B2B3B6BBBDC0C3C5C5C9C9C9CAD0D0D1D3D3D5D7DADBDEDEE1E1E1E2E2E2E3E3E3E3E3E3E4E4E4E4E4E4E4E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DA9211111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000197E8081838586898A8D8F929497999C9FA1A5A8AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDEE1E4E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F0EFED1D00000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F3F3F1F0EFEDECEBE8E7E5E4E1E0DDDAD9D7D4D1D0CCC9C7C4C0B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2ACAEB0B1B2B2B3B3B5B6B9B9BBBBBCBFC0C3C3C4C3C5C5C6C8C8C8CACECECBCBCECECECECECECECFCFD1D0D1D3D3D1D3D3D5D6D7D7D7D7D7D7D7D7D7D7D7D7D9D7D7D9DADADADAD9DADAD7D6D7D7D5D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38671757678797C7E818383888C8E90929499999C9FA4A5A7AAAEB1B5B8B9BDC0C1C3C5C6C9CBCBCFD1D0D1D3D3D5D5D7D9D9DBDCDEDEDEDFE1E1E3E3E3E3E2E4E4E4E4E3E2E1E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E49B1111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000057E8081838586898A8D8F919496999C9FA1A4A7AAADB0B3B6B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F6F5F4F3F2F0EFED00000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD8D6D3D0CCCBC7C5BCB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2AAAEB1B1B2B5B5B8BBB9BBBCBDBFBFC3C5C6C6C9CACACBCFCFCFD0D0D1D1D3D5D5D5D7D5D7DADADBDADBDEDEDEDEDFDFE1E2E3E2E2E2E2E1E1E1DEDEDEDCDCDCDBDADADAD9D9D7D7D6D7D6D5D3D5D1D0CFCEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D7073757677787B7C808386898A8C909294979C9EA2A4A7AAACB1B3B8B9BDBFC1C3C5C8CACBD0D0D1D3D6D9D9DADADADCDEDFDEDFE1E1DFE1E1E1E2E3E3E3E3E4E4E4E4E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDB94111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE00000000000000000000000000000000000000000000000000798081838486888A8D8F919396999B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3F2F0EEC600000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F3F3F1F0EFEDECECE9E7E5E4E1E0DDDAD9D6D4D1CECCC9C5B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2A9ACACAEAEB0B1B2B2B3B5B5B6B8BBBCBFC0C1C3C3C4C5C6C8C9CACACACBCECECECED0D1D3D5D5D6D6D7D7D7D6D6D7D7D7D7D6D6D6D5D5D5D6D7D6D7D9D9D7D7D9D9D9D7D7D7D7D6D6D5D6D5D3D3D3D0CECECBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6C6E6F7175777B7C7E8184898A8A8E9292969B9CA1A4A7A8ACAEB0B2B6BBBDBDC0C3C6C8C9CACECECFD0D1D5D6D7D7DADADBDCDEDEE1E1E1E1E1DFDFDEDFDFDEDFDFE1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E79E11111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000657F81838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCBFC2C5C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3F2F0EEAA00000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDCDAD8D4D3D0CCCAC3B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2A9ACAEAEB0B2B3B5B6B6B8B9BCBDBCBCBDBFC0C1C4C4C4C5C5C5C5C8C9CACACACBCACACBCBCECECECECECECECFCFD0D0CECECECBCECECBCECFD0D0D0D0D0D1D3D1D1D3D3D5D5D7D5D5D5D0CFD0CFCFCBCECECECEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B386717273767677787C7C7F8285898C8E909496999C9EA2A5A7ABACB1B1B3B6B8BCBDBFC1C4C5C8C9C9CACECFD0D1D3D7D7D7D9DADADAD9DADADADADADADADADBDCDEDEDEDEDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9921111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19000000000000000000000000000000000000000000000000517F81838486888A8C8E919396989B9EA1A4A6A9ADAFB3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3F2F0EE8E0000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F8F8F9F9F9F9F9F9F9F9F9F9F8F8F7F6F5F5F5F3F1F0F0EFECECE9E7E5E4E1E0DDDAD9D6D4D0CECBBFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2AAB1B2B5B6B8B9BCBDBCBDBFBFBFC0C3C4C4C4C6C8C8C9C9CACBCACACBCECECFD0CFD0D1D0D1D1D1D1D3D3D3D5D5D5D6D5D5D6D5D6D7D7D7D7D9D7D7D7D9DADBDBDADADADADAD9D7D9D7D7D5D5D1D1D1D1D0CFCECBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6C6E6E717376787A7D8083858A8C8F9396999C9EA2A5A7AAACB0B2B6BBBDC1C3C5C6C8C8CACACECED0D1D1D5D5D7D7D6D6D7D7D9DADADBDADADADADADCDEDEDFE1E1E2E1E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E29B111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6B390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F20821A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000467F81828486888A8C8E919396989B9DA0A4A6A9ADAFB3B6B9BCBFC2C5C8CBCED0D3D6D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F3F2F0EE680000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F8F8F9F9F9F9F9F9F9F9F9F9F8F8F6F6F5F5F3F3F1F0EFEDECEBE8E7E5E3E0DEDCDAD8D4D3D0CCBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2AAB2B1B5B5B6B8B9BBBBBDBFBFC0C1C1C4C4C5C5C8C8C9C9CBCFD0D0CFD0D1D5D6D6D7D9D9DADADCDCDEDEE1E1E1E2E1E1E1DFE1DEDEDEDCDBDBDEDEDEDEDEDEDEDEDCDCDEDEDEDEDFDEDEDFDBDBDBD9D7D7D7D7D7D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B388757676787B7D7F818486898D909296979C9EA2A5A7ABB0B3B6B8B9BDC0C1C5C8C9CBCED0D3D5D6D9D9DBDEDFE1E2E3E6E6E7E7E7E7E9EBEBECEBECEBEBEAECECECECEEEFEFEFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1DCDBDDDAD9D9D9D9D9D9DAD9D9D9D6D7D9D9D9D9D7D9D9D7D6D6D5D5D3D3D3D1D1D1D3D3D3D3D5D6D5D5D5D5D6D7D6D6D5D5D5D5D5D5D3D3D3D3D3D1D1D1D1D1D1D1D1D0D0D0CFCFCFCFCECCCCCCCCCECECECECFCFCECECCCECECECFCFCFD0D0D0D0D0CFCFCECBCBCECFCECBCBCBCBCBCCCAC9CACBCBCACACACBCBCBCBCBCBCECBCECFCFCFCFCFCFCFCFD0D0D0D1D1D0D0CFCFCFCFD0CFCFD0D0CFCFCFCFCFCFD0CFCFCFCFCFCECECFD0D1D1D1D1D1D3D5D5D5D5D3D3D3D3D3D3D3D5D5D5D3D1D1D0D0CFCFCFCFD0D0D0D3D3D3D3D0D1D3D1D1D1D0D1D3D3D5D5D3D3D3D3D5D5D3D5D6D5D5D6D6D6D6D7D7D7D7D7D6D7D6D6D6D6D6D6D6D6D6D6D6D6D6D5D5D5D6D6D6D6D6D6D5D6D6D7D6D7D7D6D6811111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB58A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000327F80828486888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC2C5C7CBCED0D3D6D9DBDEE0E2E5E7E9EAECEEEFF1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F5F4F3F1F0EE550000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F8F8F7F6F5F5F5F3F1F0F0EFECECE9E7E5E4E1E0DDDAD9D6D4D0CDBAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6B8BBBBBDBFBFBFC0C1C3C5C5C6C8C9CACBCFD0D0D1D3D3D3D5D6D7D9D9DADADBDCDCDBDEDEDEDEDEDEDEDFDFE1E1DEDEDEDFDFDFDFDEDEDFE1E1DEDEDEDEDEDEDEDCDBDBDADAD9DADADADAD7D7D5D5D3D3D0CFD0CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382696C6F71737577787B7D7F8185898A8E9093979B9C9FA2A5A7AAACB1B3B6B9BDBFC1C4C5C6CACBCECFD0D1D3D5D7D9DADADCDEDEDEE1E1E1E1E1E3E3E1E1E2E3E3E3E4E6E7E6E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E336282828282829292929292929292929282828282828282828282828282828282828282828282727272727272727272727272727262625252525252525252525252525252425252525252525252424242424232323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191919171717171717171717171717161616161616151515151515161414141414141415151515141414141414141414141313131313131313131313131313111212121212121211111111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000001E7F80828486888A8B8E909395989B9DA0A3A6A9ACAFB2B5B8BBBFC1C5C7CACED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1EFEE2F00000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F8F8F7F6F5F5F3F3F1F0EFEDECEBE8E7E5E3E0DEDCDAD8D4D3CCB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2AFB2B5B6B8B9B9BBBBBCBDBFBFBFC1C3C4C3C3C5C8C8C9C9C9CBCBCECFD0D0D1D1D1D1D3D5D5D5D7D7D7D7D6D7D9D9DADAD7D9DADAD9D9D9D9DADAD9D7D7D7D6D5D5D5D6D5D5D3D3D1D1D0D0CFCFCECECBCECBCAC9C9CAC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6F727576787B7E818187898E9292979B9CA1A4A5A8AAAEB1B5B9BBBFC0C3C5C6CACBCFD1D3D5D7DADADCDEDFE1E1E1E1E3E2E4E4E6E6E6E7E7E9E9E9E9EAE9EAEAEAEAEAE9E9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDED7282929292929292929292929292929292929292929292828282828282828282828282828282828282827272727272727272727272727262626252525252525252525252525252425252525252525252424242424232323232323232323232323232323232322222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171717161616161616151515151515161414141414141415151515141414141414141414141313131313131313131313131313111212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000197F8082848588898B8E909395989A9DA0A3A6A9ACAFB2B5B8BBBFC1C5C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3F1EFEE13000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F8F8F7F6F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DDDCD9D7D4CAB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2AEB1B3B3B5B8BBBBBDBDBDBFC1C3C4C4C5C6C8C8C8C9CACBCECFCFCFCFCFCECECFCFCFD0CFD0D0D0CFD0D0D1D5D6D6D6D7D7D6D7D7D9D9D7D6D7D9D7D7D7D7D9DADADBDBDADADAD9D7D7D7D7D7D6D5D3D3D0D0CFD0CFCECECEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382696C6E6F727577787B7D7F8288898A8E9094979B9B9FA2A2A5A7AAAEB2B6B9BBBDC0C3C4C4C6C8C9CACFD0D0D3D5D5D6D6D6D7DADBDBDBDBDCDEDEDEDEDEDEDEDEDEDFDFDEDFE1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEBC29292929292929292929292929292929292929292929292929292828282828282828282828282828282828282727272727272727272727272726262525252525252525252525252525252525252525252524242424232323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171717161616161616151515151515161414141414141415151515141414141414141414141413131313131313131313131313111212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE000000000000000000000000000000000000000000000000007F8082848588898B8E909295979A9DA0A2A5A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2F1EFEE00000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F8F8F8F7F6F5F5F5F3F1F0F0EFECECE9E7E5E4E0DEDCDAD9D6C8B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B4B8B9B9BDBDC0C0C1C1C1C1C3C3C3C3C5C8CACACACBCECFD0D0D1D3D0D1D3D5D5D6D6D5D5D5D5D6D6D7D7D7D7D7D7D7D7D7D7D7D9DADBDBDCDCDBDBDBDBDBDADADBDBDBDADAD9D9D9D7D6D6D6D5D5D5D3D3D5D3D1D1D0D1D1CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856E71737778787B7E81818487898C8D8F9294979B9B9FA2A4A5A7ABAEB2B3B6B9BBBCBFC0C3C4C4C8C8C9C9CBCED0D0D1D3D3D3D3D5D5D7D9D7D7D9D9DADADAD9DADADBDBDBDBDAD9D9DAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7A7292929292929292929292929292929292929292929292929292929292929282828282828282828282828282828282727272727272727272727272726262525252525252525252525252524252525252525252424242424232323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191919191717171717171717171717161616161616151515151515161614141414141414151515141414141414141414141413131313131313131313131313111212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED000000000000000000000000000000000000000000000000007A8082848587898B8D909295979A9DA0A2A5A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F3F2F1EFC800000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F8F8F7F6F6F5F5F3F3F1F0EFEDECEBE8E7E5E3E0DEDCDAD7CAB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFB2B5B6B5B8B9BBBCBDC0C1C3C3C4C6C6C8CACACACBCBCECFD0D0D0D0D3D5D6D6D9D9D7D9DADADADAD9DADADADBDCDCDCDCDBDADADCDEDEDEDEDEDEDEDBDEDEDEDEDEDEDCDBDCDCDEDEDCDADAD9DADADCDAD9D7D7D5D5D5D5D5D3D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F72737576787C7F838386898D909294999C9FA2A4A7AAACAEB2B5B8BBBDC1C3C4C8C9CBCBCECED0D3D3D5D5D9D9DADADADBDCDCDEDFE1E1E1DEE1E1DEDFDFDFE1E1E1E1E1E2E2E2E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E38D29292929292929292929292929292929292929292929292929292929292929292928282828282828282828282828282827272727272727272727272727262625252525252525252525252525242525252525252524242424242323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616161515151515151614141414141414151515151414141414141414141413131313131313131313131313131212121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000668081838587898B8D8F9294979A9C9FA2A5A8ABAEB2B4B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF1F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EFBE0000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F8F8F8F7F6F6F5F5F3F1F0F0EFEDECE9E8E7E4E1E0DDDAD9CAB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B9BCBDBFBFC1C3C4C5C5C8C9C9CBCACACBCBCECFCFCECECFD0D1D3D3D6D6D7DADADADADEDCDEDEDEDEDEDEDFE1E1E1E1E1E3E2E1E3E1E1E1E1E1E2E1DFE1DFDFE1E2E3E3E3E2E3E3E3E4E4E4E3E3E3E2E2E2E2E2E1DFDEDBDBDADBD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F72757777787C7F8185888A8E909296999B9EA2A4A7AAACB1B2B6B9BCBFC3C4C6C9C9CECFD0D1D3D5D6D7D9DADBDBDBDCDFE1DFE1DFE1E2E2E1E2E2E3E4E4E3E3E3E3E3E3E4E4E6E6E6E6E6E4E6E6E4E3E3E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D96F292929292929292929292929292929292929292929292929292929292929292929292929282828282828282828282828282828272727272727272727272727262625252525252525252525252525242525252525252524242424242323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616161515151515151614141414141414151515151414141414141414141413131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23000000000000000000000000000000000000000000000000568081838587898B8D8F929497999C9FA2A5A8ABAEB2B4B8BBBEC1C4C7CACDCFD2D5D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2F1EF8F0000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F8F9F9F9F8F8F8F8F7F6F5F5F5F3F1F0F0EFECECE9E7E5E4E0DEDCDACBB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2ABB1B3B3B5B5B6B9B9BBBCBFBFBFBFC0C1C3C3C5C8CACACACBCECECECFD0CED0D1D0D0D0D1D1D1D1D3D5D3D5D3D5D5D7D9D9D7D9D9D9DADAD9D9D7D9DADADADADBDBDBDBDBDBDCDBDBDCDBDBDBDADADADAD7D7D6D5D6D6D7D6D5D5D5D3D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846D6F71737675787A7D7E8185898C8C8F9296999C9CA2A5A8ACAEB1B5B6BBBDBDBFC1C3C5C8C8C9C9CACED0CFD0D1D3D3D5D6D7D7D9D9DADBDBDADADBDBDADADBDCDEDEDEDEDCDEDEDEDFDEDCDCDCDEDEDFDFE1E1E1E1E2E1E1E2E2E2E3E3E2E2E1DFDFE1E1E1E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEEC6029292929292A2A2A2A2A2A2A2A2A292929292929292929292929292929292929292929292929292828282828282828282828282828272727272727272727272727262625252525252525252525252525252525252525252524242424242323232323232323232323232323232322222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616161515151515151614141414141414151515151414141414141414141413131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000004C8081838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BBBDC1C4C7CACDCFD2D5D8DBDDDFE2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF850000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F8F8F8F8F8F8F8F7F6F6F5F5F3F3F1F0EFEDECEBE8E7E5E3E0DEDCCDB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B1B5B5B9BBBBBDBDBDBFC1C3C4C4C5C4C6C6C6C9C9CACBCECBCBCECECECECECECECECECECFCECECFCFD0D1D5D3D3D5D6D5D6D7D7D7D7D6D6D7D6D6D6D7D9DADADBDBDADADADAD7D7D9DADAD7D6D6D6D5D5D5D5D5D3D3D5D3D1D1D3D1D0CECEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6E71757577797C7E818286888A8C8F9093979BA1A2A5A7ACB0B1B2B5B8B9BCC0C1C4C5C9C9CACBCECFD0D3D5D5D6D7DADADADBDBDCDBDBDCDEDEDEDEDFE1E1E1E1E1E3E3E2E2E1E1E1DFDFDFDEDFDFE1E1DFE1E1E1DFDFDFDFDFDFE1DFDFE1DFDEDEDEDEDEDEDEDEDEDEDEDFDEDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDE4E292A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A29292929292929292929292929292929292929292928282828282828282828282828282727272727272727272727272626252525252525252525252525252525252525252525242424242323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171716161616161515151515151614141414141414151515151414141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000378081838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BBBDC1C4C6CACDCFD2D5D8DBDDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF5F00000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F8F7F6F6F5F5F3F1F0F0EFEDECE9E8E7E4E1E0DDD1B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BFC1C3C5C5C6C6C8C9CACBCECFD1D1D1D3D5D5D6D9D9DADADADADBDADCDCDEDEDFE1E1E2E3E3E3E4E3E6E6E6E6E6E6E4E3E4E6E6E6E6E6E9E7E9E9EAE9E7E9EAE9E9E7E6E6E6E7E7E6E6E6E7E4E4E3E3E2E1E1E1DEDEDCDEDBDAD9D6D7D5D3D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6F6F72737677787B7E8184858A8A8E9093969B9CA1A4A5A7ACB0B2B6B8B9BBBFC1C1C4C5C8C9CACBCFD0D1D5D5D7D7D9D9DADADBDBDBDCDBDCDBDBDBDBDCDEDEDEDEDEDFDFDFDEDFE1E1E1E1E1DFE1E1E1E2E3E2E1E1E1E2E1E2E3E2E2E1E2E3E4E6E6E4E3E3E4E4E4E4E6E6E6E6E4E4E6E4E3E4E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDB2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2929292929292929292929292929292929292929282828282828282828282828282727272727272727272727272626252525252525252525252525242525252525252524242424242323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616161515151515151614141414141414151515141414141414141414141413131313131313131313131313111212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000328081838586898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC1C4C6C9CDCFD2D5D8DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF5F0000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F7F7F6F5F5F5F3F1F0F0EFECECE9E7E5E4E0DED6B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B7C0C1C1C3C3C4C5C5C6C6C9CACBCBCECECFCFCED0D0D0D1D3D3D3D5D7D7D7D9D9DADADADADBDADADBDBDBDBDEDEDEDEDEDFDEDCDBDAD9D9DADCDEDEDEDCDCDEDFDFDFDFDEDEDEDEDEDEDEDBDBDBDADADADAD9D9D7D7D7D7D3D3D3D1D3D5D5D3D3D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6E71737677787B7E81828587898D8F9294979B9EA1A5A7ABAEB0B2B6B9BBBDC1C4C6C9CBCECFD1D3D3D3D5D5D6D6D6D6D7D7D7D7D7D7D9D7D7D7D9DADAD9DAD9D9D9D9D9DAD9D9D9D9D7D9D9DADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADADBDBDBDBDAD9D9D9D7D6D6D6D6D7D9D9D9D7D9D9D9D9D7D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1DC2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2929292929292929292929292929292929292828282828282828282828282828272727272727272727272726262525252525252525252525252425252525252525242424242423232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616161515151515151614141414141414151515151414141414141414141413131313131313131313131313111212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000238081838586898B8D8F929497999C9FA1A5A8ABAEB1B4B7BABDC0C4C6C9CCCFD2D5D7DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF2F00000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F7F6F6F5F5F3F3F1F0EFEFECEBE8E7E5E3E0DCBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B9BFBFC0C1C4C4C5C5C5C6C8C9CACBCBCBCFD0D3D1D1D3D1D3D3D3D5D6D5D5D6D6D6D7DADADBDCDBDEDEDFE1E1E2E1E2E2E2E2E2E3E3E4E3E3E1E2E3E4E3E3E2E3E3E3E3E3E3E3E1E1E2E1DFDFDFDEDCDCDCDCDADADBDCDEDBDBD9DADAD9D7D9D7D7D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38772757677787B7C7F818386898C8F909496999C9FA1A5A8ACB1B2B5B6B9BBBDC0C4C6CACBCED0D1D1D6D6D7D7D9DADADADBDCDCDEDEDEDEDFDFDFDFDFDEDEDEDEDCDADBDBDCDCDCDCDBDBDBDBDBDBDBDBDBDEDCDBDEDEDBDCDCDEDCDBDADAD9DAD9DADADADADADADADBDCDBDEDBDADBDEDEDEDCDEDBDCDBDADBDCDCDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6B72B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A29292929292929292929292929292929292928282828282828282828282828272727272727272727272726262525252525252525252525252525252525252525242424242323232323232323232323232323232323222222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616161515151515151614141414141414151515151414141414141414141413131313131313131313131313131212121212121211111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000198081838586898A8D8F929497999C9FA1A5A8AAAEB0B4B7BABDC0C4C6C9CCCFD2D4D7DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF2F000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F7F6F6F5F5F3F3F1F0EFEDECEBE8E7E5E3E0C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9BBBBBDBFBFBFC1C3C5C5C5C8C9C9CBCBCACACBCBCECFCECECBCED0D0CFD0D0D1D1D1D3D3D5D5D5D5D7D7D7D7D7D9D7D7D9DADBDBDBDBDADBDBDCDEDEDBDBDBDEDEDFDFE1E1E1E1E2E1E1E2E2E2E2E2E1E1DFDEDEDFDFDFDFDCDBDCDCDEDEDADBDADAD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887577787B7C7E818489898D8F929697999B9CA1A4A5A8ACB0B2B3B5B9BBBDC1C3C5C5C9C9CACECFD0D1D3D5D6D7D9D9D9D9DADADADADBDCDEDEDEDEDEDEDFDFDEE1E1E1E1E1E2E2E2E1E1E2E2E2E1E1E2E2E1E1E1E3E3E3E4E3E3E2E2E1E1E1E1DFDFDFE1E1E1E1E3E3E2E2E2E2E2E2E2E1E1E2E3E4E6E7E6E4E4E4E6E6E7E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBBB2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2929292929292929292929292929292929282828282828282828282828282727272727272727272727262625252525252525252525252525252525252525242424242423232323232323232323232323232323232222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171616161616161515151515151614141414141414151515151414141414141414141413131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD82200F0F0F0F0F0F0F0F135DB5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000000F8081838586898A8D8F919497999C9FA1A4A8AAAEB0B4B7BABDC0C3C6C9CCCFD2D4D7DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF09000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F7F6F6F5F5F5F3F1F0F0EFEDECE9E8E7E4E1C8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B8BFC0C3C1C3C3C5C5C8C9CBCBCBCECBCFD1D1D3D3D5D3D3D3D5D3D3D5D5D5D6D7D7D7D9D7D9D9D9D9DADBDBDADBDADBDBDBDBDCDEDEDEDEDEDEDEDEDEDFDFDFE1E1DEE1E1DFDFDFDFE1E1E2E2E3E4E3E3E2E2E2E1E1E1DFDFDEDCDBDCDCDCDADADADAD9D9D7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866E7173767777797B7E81838589898C8F9294979C9EA2A5A7ABB0B0B2B6B8BCBDBFC1C3C6C6CACACBCED0D1D1D3D5D7D7D7D6D7D6D9DAD9DADBDBDBDCDCDBDEDEDEDCDCDEDCDBDEDBDEDEDCDCDBDBDBDEDCDBDBDBDADBDADADADBDADADADBDEDEDCDBDBDCDEDEDEE1DFDFDFE1E1E1E1E2E3E2E3E4E3E3E2E1E1DFDEDEDEDCDBDEDEDEDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E39C2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A292929292929292929292929292929292828282828282828282828282727272727272727272727262625252525252525252525252525252525252525252424242423232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171716161616161615151515151616141414141414141515151414141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB55D130F0F0F0F0F399FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000008081838486888A8D8F919496999C9FA1A4A8AAADB0B4B7BABDC0C3C6C9CCCFD2D4D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0EF00000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F7F6F6F5F5F5F3F1F0F0EFECECE9E7E5E4D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9B9BBBDBDBDBFBFBFC0C0C1C3C4C4C5C5C6C9C9C9C9CACBCED0D0D3D1D3D3D5D6D7D7DADADADBDEDBDBDBDBDBDADADADAD9D9DADBDCDCDBDBDBDBDBDBDEDEDEDEE1DEDEE1DEDEDFDEDEDEE1E1E1DFDEDEDEDEDEDEDEDCDCDCDCDEDCDBDEDEDCDCDADBDAD9D9D7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A7576777A7C7D818285898A8D909396999B9FA2A5A8ACB1B2B5B9BBBDC1C4C6C9CBCFD0D0D3D5D7DADBDEDEE2E3E3E4E4E6E9EAE9E9E9E9EAEBEBECECEBEBECEEEEEEEEEEEFF1EFEFEFF1F1EFEFEFF1EFEFEEEEEFEEECEEECEEECEEEFF1F1EFEEECECEBEAEAEAEBECEAEAEBEBEBEBEAE9E9E9E9E9E9E9E9E9E9E7E7E9E9E9E9E9E9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDF8B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A292929292929292929292929292929292828282828282828282828282727272727272727272727262625252525252525252525252524252525252525252424242423232323232323232323232323232323232222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171716161616161615151515151516141414141414141515151414141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD9F390F0F2082BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000007581838486888A8D8F919496999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0C900000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F7F6F6F5F5F3F3F1F0EFEFECEBE8E7E5E0B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B1B5B6B9B9BBBBBBBDBFC1C1C3C4C6C8C9C9CACACACBCFCFD0D0D1D1D1D1D3D5D5D5D5D7D5D6D6D7D7D7D7D9D9DAD9D9D7D6D7D7D7D7D9DADAD9DADADADADADBDADADAD9D9D7D7D7D9D9D9DADADBDADBDCDCDEDEDEDEDCDCDCDCDCDBDCDBDCDEDEDEDCDBDAD9D6D6D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F72727677797B7C81838688898D8F9294979B9CA1A2A7A8ABAEB0B1B2B3B6B8BCBFC3C4C6C6C9CACECFD0D1D0D1D5D5D6D6D7D6D7D6D7D7D9D9D9D9D7D7D7D7D7D7D7D7D9DADBDBDCDBDADADADADBDADADBDADAD9D9D9D9D9D7D6D6D6D6D6D7D7D7D7D7D7D7D7DADBDBDADBDBDBDADADAD9D7DADADADADBDADADADADBDEDEDEDEDCDEDEDEDEDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1762C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A29292929292929292929292929292928282828282828282828282827272727272727272727272626252525252525252525252525252525252525252424242424232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171716161616161615151515151516141414141414141515151514141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8264B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF070000000000000000000000000000000000000000000000006681838486888A8D8F919396999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDEE1E4E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F0BF00000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F7F7F6F6F5F5F3F3F1F0EFEDECEBE8E7E5C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B2B9BBBBBDBDBDBFC1C1C3C3C4C4C5C5C5C6C8C9C9CAC9C9C9CAC9C9CACACACAC9CACACAC9CACBCECFD0D0D0D1D1D1D1D3D5D5D3D3D3D5D3D5D5D6D6D7D7D9D9D9D9D9D7D7D7D7D9D9D7D6D6D6D5D5D5D6D6D5D6D7D7D7D7D7D7D7D7D6D7D7D5D3D3D5D3D3D3D1CFCBCBCAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6C6E6F717577797C7E818387898A8E909296999C9FA2A5A7ABACAEB2B5B9BBBDBFC3C5C6C8CACACBCECFD0D3D3D5D7D7D9DADADBDCDFDFDFDFDFDEDEDEDEDEDCDEDEE1E1DEE1E1E1DEDEDEDEDEDEDFDEDEDFDEDEDEDEDEDEDEDEDCDEDEDEDEDEDCDEDEDEDBDEDCDEDEDCDCDCDEDEDEDEDEDFE1E1E1E1E2E1E2E1DFDEDFDEDEDFDEDCDBDBDCDEDBDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3772C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A29292929292929292929292929292928282828282828282828282827272727272727272727272626252525252525252525252525252525252525252424242423232323232323232323232323232323232222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171716161616161615151515151516141414141414141515151514141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000006681838486888A8D8F919396999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDEE1E3E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F0BF0000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F7F8F8F8F8F7F6F6F5F5F5F3F1F0F0EFEDECE9E8E7D2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BABDBFC1C1C4C5C6C9C9CAC9CACBCACBCBCBCECACBCECFD0D1D1D3D3D3D5D6D7D7D9D7DADADADADADADBDBDBDBDCDEDCDEDFDEDFE1E1E1E1E1E3E4E4E6E4E4E4E4E4E4E4E3E3E6E4E6E6E6E7E6E7E7E7E9E9E7E7E7E7E7E7E4E6E6E6E4E4E3E3E4E6E3E3E3E2E1DEDCDBDAD7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F72757677787B7C7F818489898D909297999B9EA1A5A7ABAEB2B3B6B9BDC0C1C5C6CACACED0D0D3D3D3D5D5D5D6D6D5D5D7D9DADADADADADADBDBDEDEDEDEDFDEDEDFDEDEDEDCDCDEDFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE1E1E1E2E1E2E1E1E3E2E1E1E2E2E2E2E2E1E1E1E1E1E3E3E3E2E2E2E3E3E3E3E3E3E3E3E2E2E3E3E3E3E3E3E2E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEB522C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A292929292929292929292929292929282828282828282828282828272727272727272727272626252525252525252525252525242525252525252524242424232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171717161616161615151515151516141414141414141515151514141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000005181838486888A8D8F919396999B9EA1A4A7AAADB0B3B6B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F08F00000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F7F7F8F8F7F7F6F6F5F5F5F3F1F0F0EFEDECE9E7E0B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BAC1C1C3C5C6C8CAC9CACBCED0CECFD0D0D1D1D5D6D5D7D6D7D7D7DADADADCDCDCDEDEDEDEDFE1E1E1E1DFE1DEE1E1E2E1E3E3E3E4E6E6E6E4E6E6E6E6E6E7E6E6E3E4E6E6E6E6E6E7E7E9E9EAE9E7E7E9E7E9E6E6E6E6E6E6E4E4E4E4E3E3E2E2DFDEDEDEDADAD9D9D7D6D3D0D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6F71757677787C7D818186898C8D909296999B9EA1A5A7AAACAEB2B6B8BCBDBFC0C3C5C5C8C9CACBCECFD1D0D5D6D6D7D9D9DADADADADBDBDBDADCDBDADADADBDCDBDBDBDCDEDEDEDBDEDEDFDFDFDFDEDEDEDEE1E1E1DEDEDEE1DEE1E1E1E1E1E1E2E3E4E4E3E2E2E3E3E3E3E4E6E6E4E3E3E4E3E3E4E3E4E6E6E6E4E4E6E4E4E3E3E2E3E3E2E1E1E2E2E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDE4E2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2929292929292929292929292929282828282828282828282828272727272727272727272626252525252525252525252525252525252525252424242423232323232323232323232323232323232222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171717161616161616151515151516161414141414141515151514141414141414141414131313131313131313131313131312121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004C81838486888A8C8F919396989B9EA1A4A7AAADB0B3B6B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F08F00000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F7F6F6F5F5F5F3F1F0F0EFECECE9E7C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B6C0C1C3C5C5C6C8C8C9C8C9C9C9CACBCED0D0D0D0D0D1D3D3D5D6D7D7D7D9D9DAD7DADADBDADADBDCDEDEE1E1E1DFE1E1E1DFE1E1E3E3E1E2E2E1E1E1DFDFE1E1E2E2E3E1E1E3E4E4E6E6E6E6E7E7E7E6E4E4E3E3E2E3E3E3E3E1E1E1E2E1E1E1DFDCDBDADBDADAD7D7D6D5D5D0D0D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38265686A6C6E70737477797C7E81828588898E9093979B9E9FA1A5A7A8ACAEB0B3B5B6B8BBBDBDC1C3C4C5C6C8CBCECECFD0D0D0D0D1D3D3D5D5D5D5D6D5D7D9D7D7D7D7D7D7D5D6D7D7D7D9D9DADADADADAD9D9DADBDCDCDCDADCDCDBDAD9D9DADADBDAD9DADBDBDBDADADBDBDBDADADADADADBDBDCDEDEDEDBDCDBDBDBDBDBDADBDADAD9D9DADBDADADADADADADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7322C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A29292929292929292929292929292828282828282828282828282727272727272727272726262525252525252525252525252525252525252524242424232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717161616161616151515151515161414141414141415151514141414141414141414131313131313131313131313131312121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004C81838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F08600000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F6F5F5F3F3F1F0F0EFECECE8DBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCBFBFBFC1C1C0C0C1C1C4C4C4C5C4C6C5C6C8C9CACACED0D0D1D1D3D3D3D6D7D9D7D9DADADADADBDCDEDEDCDCDEDCDEDEDEDEDEDEDFDFDFDEDEE1DFDFDEE1E1E1E2E2E1E1E1E1E1E1DFE1E1E1DFE1E2E2E1E1E1E2E2E2E2E1E1DFDFDFDEDEE1DFE1DEDEDEDADAD7D5D5D3D5D5D5D3D1D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382696B6E6F727375777B7E818386898C8F9294979B9C9FA2A5A7AAACB0B2B6B8B9BBBCBFC0C3C5C8CACACECED0D3D3D3D3D5D6D7D6D6D7D7D9DAD7DADBDBDCDBDCDFDFDEDEDFDFE1E1E2E1E1E1E1E1E1DFDEDEDCDBDBDBDADADADAD9D9D7D7D7D9D9D9D7DAD7D7D7D7D7D7D7D7D7D7D6D7D7D9D9D9D9D9D7D7D7D7D9DADADADADADBDBDAD9DADADBDBDBDBDAD9D9D9D7D6D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDC2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292929292828282828282828282828282727272727272727272726252525252525252525252525242525252525252424242424232323232323232323232323232323232222222222222020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717161616161616151515151515161414141414141415151514141414141414141414141313131313131313131313131311121212121212121111111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000003381838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F06000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3F3F1F0EFEDECEBE8BFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B8BBBBBCBBBBBCBCBDBDBDBDBDBDBDBFC0C3C3C4C5C5C6C6C6C8C8C9C9C8C8C8CACACACACBCBCECECFCFD0D0D0D0CECFD0D0D1D0CFD0D0CFD0CFD0D1D0D1D3D3D3D5D6D6D6D5D5D7D7D6D6D6D7D7D7D9D7D7D6D6D7D7D7D7D5D5D7D6D6D7D7D7D6D5D5D5D3D5D6D6D6D6D5D5D5D3D0D0CFCECAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846D6F70727677797B7D80818386888D8F9096999B9EA2A4A7ACAEB1B2B5B6B9BBBDBFC0C3C5C9C9CACBCFD0D0D0D1D3D3D6D7D7D7D9D7D9D9D9DADADBDBDADBDBDBDCDBDADBDBDCDADCDBDCDCDBDBDBDCDCDCDBDCDEDFDFDEDFE1DFE1DFDEDCDEDCDCDEDBDAD9D9DADBDADAD9DAD9D9DADADADADADBDCDCDBDBDBDBDADADADCDEDEDEDEDCDEDEDEDFDEDCDCDCDEDEDFDFE1E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E42D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A292929292929292929292929292928282828282828282828282727272727272727272726262525252525252525252525252525252525252524242424232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717161616161616151515151515161414141414141415151514141414141414141414141313131313131313131313131311121212121212121111111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970000000000000000000000000000000000000000000000003381838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F06000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3F3F1F0EFEDECEBD2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BFC4C5C5C5C5C6C8CAC9CACACBCBCBCBCECECECECECFCECBCECECECECECECECECECFD0D1D1D1D0D3D3D5D5D6D6D7D7D6D6D6D7D9D9D9D7D7D7D9D7D7D9DADADAD9DBDADADBDEDEDEE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E3E2E3E3E2E3E2E2E2E1E1E1DFDEDCDEDBDCDADADAD7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6D6F6F727577787B7D7F8285888C8E8F9396999B9C9CA1A2A5A7ABAEB1B2B5B8B9BDC0C1C4C4C5C8C9CBCECED0CFD0D1D0D3D5D5D6D6D5D6D5D6D5D3D3D3D3D3D1D1D1D0D0D0D1D3D5D5D5D5D5D5D5D5D6D7D7D5D5D5D5D5D5D5D5D5D7D7D9D9D9D9D9D7D6D6D7D7D7D6D5D5D5D5D5D5D6D6D5D6D7D7D7D7D9D9D9D7D7D7D9D9D7D9DADADADADAD7D7D7D7D7D7D7D6D6D7D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAB82D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2A2929292929292929292929292929282828282828282828282827272727272727272727262625252525252525252525252425252525252524242424242323232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717171616161616151515151515161414141414141415151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970000000000000000000000000000000000000000000000002E81838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F05600000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3F3F0F0EFEDECE9BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B9BFBFC0C1C1C3C4C3C4C4C5C5C4C4C5C8C9C9C9C9CACBCECBCBCED0D0D1D1D1D1D1D1D1D3D6D5D3D3D3D6D3D7D7D7D7D7D7DADADBDCDBDADADCDCDCDEDEDFE1DFDFDFE1E1DFE1DFE1E2E2E2E2E2E3E2E2E1E1E1E1E1E1DFDFE1E1E1E1DFDFDFDFE1E1E1E1DFDCDEDEDADBDADAD9D9D9D7D7D7D7D5D1D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866E70717375777B7B7E818388898D8F9294979B9CA1A4A5A7ACB0B2B3B5B8BBBDBFC0C1C4C6C8C9CBCACBCED0D0D1D3D3D3D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D7D7D7D7D7D7D6D6D6D6D3D3D6D5D5D5D3D5D5D5D5D3D1D1D1D1D1D3D3D1D3D3D1D1D1D1D3D3D1D3D1D1D1D1D1D1D1D0D0D0D0D0D0D0D0CECECECBCECECBCECFCFD0D0D0D0D1D3D3D3D5D5D5D6D7D6D6D6D5D3D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCBB2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2929292929292929292929292928282828282828282828282827272727272727272727262525252525252525252525252525252525252524242424232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191717171717171717171717171616161616161515151515161414141414141415151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0000000000000000000000000000000000000000000000001981838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F030000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3F1F0F0EFEDECD4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6B7BFBFBFC0C0C1C3C3C3C5C5C6C6C9C9CACACACACACACACACECFCFCECFCECECFD0D0D1D0D0D0D0D1D1D1D5D6D6D7D6D7D7D7D9D9D9D9DADADADADADADADADADADBDBDBDBDBDCDEDEDEDEDFDEDFDFDEDFE1E1E1E1E1E1E1E1E1E1E2E2E3E3E3E4E6E6E6E6E7E7E4E6E6E4E4E3E3E3E2E1E1DFDFDEDEDCDBDADAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A787A7B7D80828386888C8F909396979B9CA1A2A7A8ACB0B3B6B8B9BBBDBFC0C3C5C9CACBCED0D3D5D6D6D6D7D9DADBDCDCDCDEDEDEDFE1E1E2E1E3E3E1E1E1E1E2E3E3E4E3E3E2E2E1E1DFDFDFDEE1DEDEDEDEDEDEDEDEDEDEDCDCDCDEDEDEDCDBDBDBDBDBDBDCDBDBDBDADADCDEDCDCDBDCDCDBDADAD9D9D7D7D7D7D6D6D7D9D9D9DADBDADADADADBDEDBDBDADADADADADADADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5B42D2D2D2D2D2D2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A2A29292929292929292929292929282828282828282828282827272727272727272727262625252525252525252525252525252525252525242424242323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171616161616161515151515161614141414141415151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000001981838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F030000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3F1F0F0EFEDECBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8CCC9C4C5C6C6C6C6C5C6C9CBCACACACBCBCED0D0D1D0D1D0D1D5D5D5D5D5D3D3D3D3D3D1D1D1D1D1D3D3D5D5D3D5D5D3D3D3D5D5D5D5D3D3D5D5D6D6D7D7D7D7D7D7D7D7D7D9D9DADBDBDADBDCDADADBDBDEDEDFDFE1E2E2E2E1E1E1E1E1E1DFDFDEDEDEDEDEDFDEDEDFDEDEDEDEDEDEDBDBDBDADAD9D9D6D5D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E6F727376777B7C7E818389898C8E909697999C9EA2A4A7AAABAEB1B5B6B8BBBDBFC1C1C3C3C5C8C9C9CBCECED0D0D0D3D3D6D5D5D6D6D5D6D5D6D7D6D6D6D6D6D7D7D6D6D6D5D6D5D5D5D6D6D6D6D7D9D9D7D7D7D7D9DADADBDBDBDBDBDCDCDCDEDFDEDFE1DFDFDEDEDEDBDBDBDADAD9DBDCDCDCDBDBDBDBDBDBDEDEDEDEE1DEDEE1DEDEDFDEDEDEE1E1E1DFDFDEDEDEDFDFDFDEDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3A62E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292929282828282828282828282827272727272727272727262625252525252525252525252525252525252524242424232323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717161616161616151515151515161414141414141515151514141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000001981838486888A8C8E919396989B9EA1A4A7AAADB0B3B6B9BCC0C2C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F030000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F6F6F6F5F5F5F3F1F0F0EFEDD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BAC5D0C1BBB9BBBBBBBCBFBFBFBFBFBDBFC0C0C3C3C1C1C1C1C1C1C3C3C3C3C3C1C1C3C3C3C3C1C1C1C0C0C0C0C1C3C3C4C4C4C4C5C6C6C6C9C9C9CACBCACACBCAC9CBCBCBCBCECFD0D3D1D3D5D6D6D6D6D7D6D7D7D6D6D9D9D9D9DADADADBDBDADADADAD9D9DADADADADBDADADADAD9DAD9D7D7D7D5D5D5D3D3D3D1D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846C6E6E71737475777A7B7D8083888A8D90929396979B9E9FA2A5A7A8AAACB1B2B5B8B9BBBDC0C3C4C5C6C8C9CBCED0D0D0D1D3D3D5D7DADADADADADBDBDCDCDCDEDEDCDEDCDBDBDBDCDCDBDAD9D9D9DADADADBDBDBDEDCDCDEDFDEDEDEDEDEDEDCDEDEDFDEDFDFE1DFDEDFDEDEDEDEDEDEDEDCDEDCDEDEE1E1E1E1E1E2E2E3E3E3E4E3E4E3E3E3E3E6E6E6E4E4E3E3E3E6E3E4E3E4E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E29C2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A2A292929292929292929292929292828282828282828282828272727272727272727272625252525252525252525252525252525252525242424242323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717161616161616151515151515161414141414141415151514141414141414141414131313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000000F81838486888A8C8F919396989B9EA1A4A7AAADB0B3B6B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3F2F026000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F7F6F6F6F5F5F5F3F1F0F0EFECC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC5D0D1D5DCCEC9C9C9CACACBCACACACBCBCBCBCECFD0D0D0D1D1D1D0D1D1D1D3D3D3D3D0D1D0D0CFCFD0D1D1D1D1D1D1D1D1D5D5D7D7D7D7D6D7D9D9D9D7D7D6D7D7DADADAD9DADADADCDEDEDEDEDBDEE1E1E1E1E1E1DFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDCDCDEDEDBDBDADADADAD9D7D9D7D7D6D6D5D3D1D0D0D0CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38672737677797C7D818285888A8C8F9094979B9C9EA2A5A5A8AEB1B2B5B9BCBDBDC0C3C4C4C5C5C5C8C9CACBCECECFD0D1D3D1D3D1D1D3D5D5D5D7D7D7D7D7D7D9D7D9D9D9DAD9D9D9D9DAD9D9D9D9D7D9D9D7D7D7D7D7D7D6D6D5D7D7D6D7D7D7D7D9D9D7DADADAD7D7DAD9D7D9D7D9D9D9D9D7D9D9DADAD9DADAD9DAD9D9D9DAD9D9D9DBDCDCDBDADADBDEDEDEE1DFDFDFE1E1E1E1E2E3E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E19C2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A2A2929292929292929292929292928282828282828282828272727272727272727272626252525252525252525252525252525252525242424242323232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191717171717171717171717161616161616151515151515161414141414141415151514141414141414141414141313131313131313131313131112121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000081838486888A8D8F919396999B9EA1A4A7AAADB0B3B6B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F000000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F7F6F6F5F5F5F5F3F1F0F0EFE2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7BFC5C5C6C9CED7C9C1C0C3C3C3C3C4C4C4C6C6C8C8C9C9C9C9C9C9C9C9C9C9C9C9CACACACACBCACECACACECECECECFD0D0D1D0D0D0D0D0D1D0D1D1D3D3D5D6D5D7D7D6D7D7D7D9DAD9D9D9D7D7D7DAD9DADADADBDCDEDEDFDEDEDEDFDFDFE1E1DFDFE1E1E1E1DFDFDFDFDFDEDCDCDEDBDCDCDAD7D9D7D7D7D7D3D3D3D3D1CFCECBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B380646568696C6E70737778797C7E818284888A8D9093979C9CA1A2A7AAACACB1B2B3B6B8B9BCBFC0C3C4C5C6C9C9CACACBCBCBCFD0D0D1D1D5D5D5D6D7D6D7D7D7D7D7D7D7D7D7D9DAD9DADBDADADBDBDBDBDADBDBDADADADBDBDCDEDFDFDEDEDEDBDBDBDEDEDEDCDBDBDAD9D9D9D9D9DADADADBDBDBDBDBDBDCDBDCDCDEDEDEDEDBDBDBDADCDCDADCDCDCDCDEDBDBDBDBDCDCDEDEDEDEDEDEDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADA982E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A2A2929292929292929292929292828282828282828282828272727272727272727272625252525252525252525252525252525252525242424242323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191717171717171717171717171616161616151515151515161414141414141415151515141414141414141414141313131313131313131313131312121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000081838486888A8D8F919396999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDEE1E3E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F6F6F6F5F5F5F3F3F1F0F0EFCAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B8C3C8C9C6C8C9CAD0D9C9C5C4C3C4C4C6C6C6C5C5C6C6C9CAC9C9C9C9C9C9C9CACACBCACACACACACACACACBCBCBCBCACECFCFD0CFCFCECFCFCECECECFCFCFCFD0D0D0D1D1D1D3D3D3D5D3D3D5D5D5D5D6D5D5D5D5D6D7D7D7D7D9DADBDAD9DADBDEDEDEDEDBDCDCDCDEDFDEDBDBDBDEDADCDEDBDBDADADBDBDCDBDAD9D7D7D6D5D5D5D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6D6E7172757577787B7D7F8183868A8C8E9094979B9B9EA2A5A7ABACB1B3B6B8B9BBBFBFC3C3C5C6C9CACECFCFD1D3D3D3D3D5D5D7D6D7D6D5D6D6D9D7D9D7D7DADADADADADADADADADADADADADADADADBDBDADADADADADAD9D9D9DAD9DADAD7D7D7D7D9D9D9D7D7D7DADAD9D9D9D9D7D7D9D9D7D7D7D7D7D7D9D9DADAD9D7D7D7D7D7D7D7D7D7D7D7D7D7D9D9D7D6D6D6D6D6D7D7D6D7D6D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCF752E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A2929292929292929292929292928282828282828282828282727272727272727272626252525252525252525252525252525252525242424242323232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151515141414141414141414141313131313131313131313131312121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000081838486888A8D8F919396999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDEE1E4E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0F0EFB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BCC7CACACACACACBCECED6E1D0CACACBCBCBCFD0D0D0D0D0D0D0D0D3D3D3D3D3D1D1D3D5D3D5D1D3D1D1D1D3D3D3D0D0D1D0CFCFCFCECECECECBCBCBCECECFCFCFCED0D1D1D1D1D3D3D3D1D3D3D3D6D6D7D7D7D7D7D7D7D7D9D9D9D9DADADADADCDEDEDFDEDEDEDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDBDADBDADADADBDBD9D9D7D6D5D5D1D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856C6E6F7172737577797C7E818283868A8C8F9293969B9C9EA2A5A5A8ACAEB1B1B2B3B5B9B9BBBDBFC0C3C4C5C6C9C9CBCAC9CBCFCFD0D0D0CFD0CFCFD0D0D0D3D3D0D1D0D0CFCECECECECECBCBCBCAC9CACACBCECECECECECECECFD0D0D0CFCECECFCECECFD0D0D1D1D3D5D3D3D3D3D1D1D3D5D5D1D1D1D1D1D1D0D3D5D3D5D6D6D6D7D7D7D7D7D7D7D9D7D7D7D9DADADADAD7D7D7D7D7D7D7D6D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDA732E2E2E2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292929282828282828282828282727272727272727272726252525252525252525252525252525252525242424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151515141414141414141414141313131313131313131313131312121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000007C838486888A8D8F919496999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2F000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0F0DAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC8D3C9C9CACBCECFD0D0D1D1D6E1D0C8C9C9C9CACACACACACACBCBCACBCBCECBCFCECBCACACAC9C9C9CACBCBCACACAC9C9C9C9C9C9C9C9C9C9C9C9CAC9CACACBC9C9CACECECECFCECECFCECBCBCECECECECECBCECED0D0D0D0D0D1D0D0D1D1D0D1D3D3D1D0D0D0D0D0CFCECECFCFD0CFCFD0CFCECFCECFCFD0CFCFCECECBCBCBCACAC9C8C9C5C5C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856E6F72757677787C7E7F818588898D909297999B9FA1A4A5A8ACAEB1B2B3B6B6B9BBBDBFC0C3C4C6C9CACBCECFCFCFD0D0D1D3D3D3D3D1D3D3D1D1D1D3D3D3D5D5D6D6D6D6D7D9DADADADAD9DADADADAD9D7D6D7D7DAD9D9D7D9D9DADADBDBDADADADADBDCDCDCDBDBDADBDBDAD9DADADADADADADBDBDADCDCDBDCDCDEDEDCDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE1E1E1E1E1DFE1E1DFDFDFE1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3792F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292928282828282828282828282727272727272727272626252525252525252525252525252525252525242424242323232323232323232323232323232222222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515161614141414141415151515141414141414141414141313131313131313131313131311121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2300000000000000000000000000000000000000000000000067838486888A8D8F919496999C9FA1A4A8AAADB0B3B7BABDC0C3C6C9CCCFD2D4D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2DD00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0F0C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BECCDADACBBFBFBFC1C1C4C5C5C6C8CBD7C6C1C1C3C3C3C3C5C3C5C6C8C8C9C9C9CACAC9C9CBCBCACBCBCECECECECECFCECECBCBCBCBCBCECFD0D0D0D0D0D0D0D0CFD0D1D3D5D5D6D5D6D6D7D6D6D5D7D7D7D9D7DADADADADBDBDADADADCDCDCDCDBDEDEDFDFDFDEDEDCDCDEDEDEDEDEDEDEDEDEDBDCDCDCDEDEDEDEDCDBDBDBDBD9D9D9D7D6D5D3D1CECBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E7173757677787C7E7F8184888A8C8E909396999B9CA2A2A5A7AAABAEB1B2B6B8B9BDBFBFC1C4C3C5C5C6C9CACBCECFD1D3D3D3D3D3D3D3D3D1D3D1D1D1D3D5D5D3D5D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D9D9D9DADADADADADBDCDCDEDEDEDCDBDCDCDEDCDEDEDEDFDFDFE2E1E3E3E3E4E4E3E4E4E4E4E4E3E4E4E4E6E6E4E4E6E9E7E7E9E9E7E6E6E6E6E4E3E2E1E1E1E1E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2762F30303030303030303030303030302F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2A292929292929292929292929282828282828282828282727272727272727272726262525252525252525252525252525252525242424242323232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515151614141414141415151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F9FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD2D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000067838586888A8D8F919496999C9FA1A4A8AAAEB0B4B7BABDC0C3C6C9CCCFD2D4D7DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2C00000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F0F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0EFB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BFD1D9DADADCD6CBCECBCBCECFD0D3D1D3DAE2D1CBCBCECECECFCFD0D0CFCFCFD0D0D0D0D0D0D0D1D0D0D1D1D1D1D1D3D5D5D5D5D3D3D1D1D1D3D1D1D3D1D3D3D3D5D3D5D5D5D5D6D5D5D5D6D6D7D5D7D7D7D7D7D7D7DADCDBDCDEDEDCDBDCDBDCDBDBDAD9DADADADADADADADADBDBDADAD9D7D7D7D7D6D7D9D7D7D7D7D7D6D5D5D3D5D1D1D1D0D0CECBCACAC8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E6F6F72737577787C7D808183868A8C8E9296979B9E9EA2A5A5A8ABACAEB1B5B8B9BBBCBDBFBFC3C4C5C5C6C6C8C9CACACECFD0D1D0D3D1D3D3D3D3D3D3D3D3D5D3D3D5D5D5D5D5D5D5D3D3D3D5D5D5D5D7D6D6D6D5D5D6D6D7D6D6D6D6D7D7D7D9D9DBDBDBDBDCDEDEDFDFDFDFE1E1E1E1E1E1E1E1E2E3E3E3E3E4E3E4E4E6E4E6E6E7E7E7E9E9EBEBEAE9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF18030303030303030303030303030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A292929292929292929292929282828282828282828282827272727272727272726262525252525252525252525252525252525252424242423232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515151614141414141414151515141414141414141414141313131313131313131313131311121212121212111111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1391BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDAE340F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000067838586898A8D8F929497999C9FA1A5A8AAAEB0B4B7BABDC0C4C6C9CCCFD2D4D7DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2C00000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0DDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC6D4D9DADADADCDCCFC1C1C3C3C3C5C5C8C9C9CED7C9C5C5C5C5C4C4C4C5C5C5C5C6C6C8C6C5C5C4C3C3C3C1C1C3C3C3C5C5C5C5C3C4C5C3C3C3C3C3C5C4C5C5C4C4C4C4C5C5C5C5C6C5C5C8C9C9C9C9CACBCBCBCBCECBCECBCBCFCFCFCFD0D0D0D1D1D1D1D1D5D5D5D5D5D5D5D7D7D7D7D7D7D7D6D5D6D6D6D3D3D3D5D5D5D5D3D3D1D0D0D0CECECAC9CACACAC9C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38167696A6C6D6F7171747577797C7E8183898C8D8F9093979B9CA1A2A7A8ABACB0B2B3B6B9BBBCBFBFC0C3C4C5C6C6C8C6CAC9CACACACBCBCBCECECECECBCAC9CACBCACACACBCBCACBCBCBCBCECECECBCBC9C9C9C9C9CACACACBCBCECBCECFD0D0D0D1D1D0D1D1D1D1D0D3D3D5D7D7DADADADAD9D7D9D7D9D7D7D9D9D9D9DADAD7D7D7D7DADADADBDADADADADADCDEDEDEE1E1E2E1E2E2E3E4E6E6E4E4E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4793030303030303030303030303030303030303030303030302F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A292929292929292929292929282828282828282828282827272727272727272726262525252525252525252525252525252525242424242323232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171716161616161515151515151614141414141414151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2098BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB54F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000067838586898A8D8F929497999C9FA1A5A8ABAEB1B4B7BABDC0C4C6C9CCCFD2D5D7DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2C00000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0CBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BECCD7D8D9DADADCDCDDDDD7CECFCECFD0D0D1D1D3D3D9E3D3CBCACACBCAC9C9C9C9C8C9C9C9C9C9C9C6C9C8C6C6C6C6C6C9C8C8C8C9C9C8C5C5C5C5C5C4C4C4C4C4C4C4C4C5C4C5C4C4C5C6C8C8C9CACACBCACACACBCBCECECFCFD1D1D3D5D5D6D7D6D7D7D9D9DADADAD9D7D7D7DADADADADADBDBDCDCDCDBDBDBDADADADADADAD9D9D9D9D7D5D3D3D3D1CFCECBCECACAC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E6465646567696A6C6D6F747678797D7E8184878A8D909296999B9C9FA1A1A5A5A8AAACB0B2B5B6B9BBBDBFBFBFC1C3C3C4C3C4C5C6C6C8C8C9C9C9CAC9C9C9C9C9C9CBCBCBCBCECECECFCFCED0D0CFCFCFCECFCFD0D0D1D0D1D3D3D3D3D3D3D3D3D5D5D3D3D5D5D6D7D7DADBDADBDAD9D9DADADADBDADAD9D9D7D7D9D9D7DADADADBDBDBDCDCDEDEDCDCDCDEDEDEDEDCDCDCDBDEDEDBDEDEDEDEDEDBDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDF7630302F2F2F2F2F2F2F2F2F2F3030303030303030303030303030302F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2A2929292929292929292929292828282828282828282827272727272727272726262525252525252525252525252525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191919171717171717171717171716161616161515151515151614141414141414151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2DA7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD720F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000067838586898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC1C4C6C9CDCFD2D5D8DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3F2C00000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F6F6F6F6F6F5F5F5F3F3F1F0BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C2D0D6D7D8D9DADADCDCDDDDDEDAD0D1D3D5D3D5D3D3D5D5D7E1D1C9C8C9C9C9C8C8C9CACACACAC9CACBCBCBCBCBCBCBCACACACACACACACAC9C9C9C8C8C8C9C6C6C6C6C6C6C6C9C9CACBCACACACACACBCBCACBCBCBCBCECBCED0D0D1D1D1D3D3D5D6D9D9D7DADBDBDBDBDADBDCDBDBDEDCDEDCDEDEDEDEDFDEDFDEDEDEDEDCDBDBDBDADAD9D9D9D7D5D3D3D3D1D0CECECECBC9C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38268696B6D6F72737577777B7D81828388898C8D8F9094979B9C9EA1A2A4A4A5A8A8AAACAEAEB1B1B1B3B6B8BBBCBDBDBFBFBFC0C3C4C4C3C3C3C3C3C3C3C4C5C6C6C8C8C8C8C8C6C5C5C5C6C6C6C5C5C5C4C4C3C5C5C5C6C6C6C6C8C9C9C9C8C8C8C9C8C8C8C9C9CACBCAC9CACACACBCBCBCACACBCECECFD0D0D0D0D0D1D1D1D5D6D7D7D7D7DADAD7DADAD7D7DAD7D7D7D7D7D7D9DAD9D9D9D7D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDE532F303030303030303030303030302F2F2F2F3030303030303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2A29292929292929292929292828282828282828282828272727272727272727262625252525252525252525242525252525252424242423232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161615151515151614141414141414151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD911A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000067838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BBBDC1C4C6CACDCFD2D5D8DBDDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2C10000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F6F6F6F5F5F5F3F3F1EBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCC6D3D4D6D7D8D9DADADCDCDDDEDEE0D6CACECFCFCFCECBCECECED1DECBC4C3C3C4C5C5C5C5C5C5C5C6C6C6C6C6C6C6C9C8C9C9C9C9C8C8C8C9CACBCACACACACACACACACAC9C9CAC9C8C6C8C8C8C6C5C5C5C5C6C8C8C9C9C9CBCBCBCED0D0D0D1D1D3D3D3D5D5D6D6D7D7DAD9D9DAD9D9DADADADAD9D7D7D7D7D7DADADADADADADADADADADAD9D9D7D6D6D5D5D5D5D1D0CECBCBCBC9C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856E6E6F72757678797D7E818386888A8D8F929496999B9CA1A2A7A8AAACB1B1B5B6B6BBBBBCBDBFC1C1C3C4C5C6C6C6C8C9CACACACACACBCBCBCECECFD0D0CFCECECECECED0D0D1D1D1D1D1D0D3D1D0CFCFCFCECECECFCECECECECECECECECECFCBCECBCBCBCACACACECECECECECECECFCFCFCFD0D0D3D3D1D5D5D5D5D5D6D6D6D5D5D5D5D5D6D7D7D7D9D9D9DADADADCDBDADBDEDEDEDCDEDBDCDBDADBDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D950303030303030303030303030303030303030302F2F2F30303030303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2929292929292929292929292828282828282828282827272727272727272726262525252525252525252525252525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161615151515151614141414141414151515141414141414141414141313131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA72D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000058838587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BBBDC1C4C7CACDCFD2D5D8DBDDDFE2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2C10000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F7F6F6F5F5F5F3F3F1DBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7BFCDD1D3D4D6D7D8D9DADADCDCDDDEDEE0E0D9D1D3D5D3D5D5D5D5D5D7DAE3D5CBCBCBCBCBCECECECECECECECFCFD0D0CFD0D0CFCFCECECECECBCBCBCBCBCBCBCBCACACBCACACAC9CACACACAC9C9C9C9C9C9C9C9C9C9CACBCACACACACBCBCBCFCED0D3D1D3D1D3D3D3D5D7D7D9DADADBDBDADCDBDADADADADADADADADADAD9D7D7D7D7D6D6D5D3D1D0D0CFCBCACACAC9C9C8C6C4C3C3C3C0BFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3806767686A6B6D71737577787B7C7E7F8183888A8C8D8F909296979B9C9C9FA4A5A7A8ACAEB0B0B1B3B5B5B6B8B9BBBCBDBDBDBCBDBFBFBFBFBFBFC0C0C0C1C3C3C3C1C1C1C1C3C4C5C6C6C5C5C6C5C4C5C5C4C4C5C4C3C3C3C4C3C3C5C4C3C5C4C4C4C6C8C8C6C9C9C9C9CAC9C9C9CACBCBCBCECFCFCFCFD0D1D3D1D3D5D5D5D5D5D6D6D7D5D6D5D6D7D9DADADADADBDEDBDADBDBDBDBDEDCDCDEDEDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E15430303030303030303030303030303030303030303030302F2F303030303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292928282828282828282828272727272727272727262625252525252525252525242525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161615151515151616141414141414151515151414141414141414141413131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5410F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004D838587898B8D8F929497999C9FA2A5A8ABAEB2B4B8BBBEC1C4C7CACDCFD2D5D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3F2C10000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F7F6F6F5F5F5F5F3F1CCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9C2CED0D1D3D4D6D7D8D9DADADCDCDDDDDEE0E0E0D5CACAC9C9C9C9CBCACACAD0D7C9C3C4C4C4C4C4C3C3C3C3C4C5C4C4C4C4C4C4C3C1C3C3C4C3C3C3C1BFBFBFBDBBBBBBBBBBBCBCBBBBBBBBBBBBBBBBBBBBB9B9BBBBBBBBBBBBBCBCBDBDBDBDBFC1C3C3C3C5C8C9C9CACBCFCFCED0CFCFCFD0D0D1D0D1D0D0D0D0D0D1D1D1D0D0D1D1D0D1D3D0D1D0D0D0D0D0D0D0CFCECBCBCBCACAC9C5C5C5C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887274757778787C7C7D7F818383888A8D8D8E8F9396999B9C9FA2A4A5A8AAACACAEB1B2B5B5B6B8B8B9BBBBBDBDBFBFBFC0C1C1C1C1C1C3C3C4C3C3C4C4C4C5C5C5C5C6C6C6C9C9C9C6C8C6C6C8C9C9C9C9C9C9CACACBCBCBCBCBCBCECBCBCBCACACAC9C9C9CACAC9CACACBCBCECFCECFCFD1D0D1D1D3D6D7D5D7D6D7D7D9D9DADAD9DADADBDBDEDBDEDFDFDFE1DFDFDFE1E1DEE1E1DFDFDFDEDFDFE1E1E1E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDC5430303030303030303030303030303030303030303030303030302F2F303030303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2A292929292929292929292928282828282828282828272727272727272727262625252525252525252525252525252525252424242423232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161615151515151516141414141414151515151414141414141414141413131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1379BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004D838587898B8D8F929497999C9FA2A5A8ABAEB2B4B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF1F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F2C10000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F6F7F7F7F6F6F6F5F5F5F3F1C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BCC7CCCCD0D0D1D4D4D6D7D9DADADADCDCDDDEDEE0E0E0DCD3D5D5D5D3D3D1D1D3D0D5DED0C8C6C8C8C8C8C8C9C8C6C6C8C6C6C8C8C9C9C8C8C6C6C5C5C5C5C5C4C4C3C3C3C4C1C4C3C3C1C3C1C1C1C1C1BFC1C0C0C0C0BFC1C1C4C4C5C5C4C5C5C5C6C8C9CACBCBCBCECBCBD0D0D0D0D0CFCECFCFD0D0D1D1D1D3D3D5D3D1D1D1D3D3D5D3D3D3D3D3D3D3D3D3D3D1D3D1D1D1D0D0CECBCAC9C8C5C5C4C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6D6D6E717173757678787C7E7F81838689898D8E90929697999B9C9FA2A4A5A5A7A8A8ACACAEB1B1B1B1B3B3B3B3B3B3B2B3B6B8B8B9B8B8B9B9B9B9BBBBBCBDBDBDBDBDBDBCBDBDBDBDBDBFBDBDBCBCBCBDBDBDBDBDBDBDBDBDBDBDBDBDBCBDBDBFBDC0C0C0C1C3C3C3C3C3C3C4C4C5C6C6C8C9CBCAC9CACBCBCECBCBCFCFCECED0CFD0D1D1D3D3D3D5D7D7D7D7D7D7D7D7D7D7D9DADAD9D9D9D7DADADADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDF5430303030303030303030303030303030303030303030303030303030302F2F3030303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292928282828282828282828272727272727272727262625252525252525252525252525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161615151515151516141414141414151515151414141414141414141413131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1A91BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004E848587898B8D909295979A9DA0A2A5A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3C10000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F6F6F6F5F5F5F3F1B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8BEC7C9CBCCCED0D1D3D4D6D7D8D9DADADCDCDDDDDEDEE0E0E0D8CECFCECFD0D0D0CFD1D1D7E2D1CBCBCBCAC9C8C9C8C8C6C6C6C6C6C5C5C5C3C1C1C1C3C1C1C1BFBFBFBFBDBFBFBFBFC1C1C1C0C1C1C1C3C4C4C3C3C4C4C4C4C5C6C6C6C6C5C9C8C9C9CACACACBCBCECBCECED0D0D0D1D3D5D5D5D6D6D7D6D6D7D6D6D7D7D7D6D7D7D7D7D7D7D7D7D7D6D5D3D1D1D1D0CFD0CECECBCACAC8C5C4C1BFBFBFBFBFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B381656768696B6E6F72737576787C7E818185898A8D8F90939797999B9C9FA2A4A5A8AAABACACACB0B1B3B6B6B8B9BBBCBDBFBDBDBFBFBFBFBFBFC0C0C1BFC1C3C3C3C3C3C5C5C4C4C5C5C5C8C9C6C6C6C6C5C5C5C4C4C3C3C1C3C3C1C1C1C1C1C1C1C1C3C3C3C3C4C4C3C3C4C4C5C4C5C5C6C5C8C8C9CACBCBCBCBCECECED0D1D0D1D3D3D5D5D5D3D5D7D7D9DADAD9D7D7D7D7D5D5D5D6D7D9D9D9D7D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D95330303030303030303030303030303030303030303030303030303030303030302F2F30303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A292929292929292929292928282828282828282828272727272727272727262625252525252525252525242525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919191717171717171717171717161616161615151515151516141414141414151515151414141414141414141413131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F20A7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD9F200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004E848588898B8E909295979A9DA0A2A5A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4F3B70000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B8C0C5C7C7CACCCCD0D0D1D3D4D6D7D9D9DADADCDCDDDDDEDEE0E0E0D7CECECECBCFD1D0D0D0D0D5DECBC5C6C6C5C6C8C8C8C6C8C8C9C9C8C6C5C5C5C4C4C3C1C3C3C4C3C0C1C1C1BFBFBFBDBDBDBFBDBDBDBCBBBBBBBBBBBBBBB9BBBCBDBFBDBDBFBFBFBFC1C0C3C3C3C4C4C6C6C8C8C9CACECFCFD0D1D1D3D1D0D1D1D1D1D3D0D0CFCFD0D1CFCFCFCFCECECECBCECECACACBCAC9C9C8C6C4C4C3C3C3C1C0BFBDBDBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887377767778797B7D7E818185898A8D8F909296999B9CA1A2A4A5A7AAABACAEB1B2B3B6B8B9BBBCBDBDBFC0C0C1C3C4C5C6C8C8C9CACACBCACAC9C9C8C9C9C9C9C8C9C9C6C6C6C6C6C8C6C6C5C5C4C4C5C5C5C5C5C5C5C5C5C4C5C4C4C4C4C4C4C4C5C5C5C5C6C5C8C8C8C9CACACBCBCECFCFCFD0D1D3D3D1D3D5D6D5D6D7DADADADCDBDBDBDCDBDCDCDCDBDCDEDEDFDFDFE1E2E1E1E1E2E2E2E2E1E1E2E3E4E6E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E755313131313131313131313131313131303030303030303030303030303030303030302F2F30303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A292929292929292929292929282828282828282828282727272727272727272625252525252525252525252525252525252524242424232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919191717171717171717171717161616161615151515151516141414141414151515151414141414141414141413131313131313131313131311121212121212121111111111111111111111111110101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004E848588898B8E909395989A9DA0A2A6A9ACAFB2B5B8BBBFC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F5F4F39100000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3E1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C0C1C3C5C7C9CBCCCCD0D0D3D4D4D6D7D9DADADADCDCDDDDDEDEE0E0E0DACFD0D0D0D1D0D1D0D0D0D5DECEC5C8C8C8C8C6C8C6C5C5C5C5C6C6C6C5C5C4C3C5C5C3C0BFBDBCBBBBBCBCBCBBBBBBB9B9B9B8B6B6B9B9B9B9B9B9BBBBBBBBBDBDBFBFC0C1C3C4C4C4C4C5C5C5C6C6C9CACBCECFD0D0D0D0D3D3D5D7D9D9D9DADADAD9DADADBDADADADBDBDBDCDCDAD9D9D9D7D5D5D3D5D5D1D1CFCECBC9C6C6C5C4C4C3C3BFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E636465656769696C6E6F72757878787C7E81818386898A8C8F90929396979B9B9C9EA1A4A4A5A5A7A8AAAAAAACACAEAEAEB1B0B1B2B3B3B3B3B3B3B3B5B5B6B6B8B9B6B5B6B6B6B6B5B5B6B6B6B6B6B5B6B8B8B8B8B8B8B9BBBBBBBBB9BBBBBCBCBDBDBFBFBFBFBDC0C1C3C3C3C3C3C3C3C3C4C5C9C9C9CBCBCED0D0CFCFD1D5D6D6D7D5D7D7D7D6D6D6D7D9DADAD9DADBDBDBDBDBDBDBDBDBDBDBDBDBDCDCDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADA53313131313131313131313131313131313131313130303030303030303030303030303030302F30303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2929292929292929292929282828282828282828282727272727272727272626252525252525252525252425252525252524242424232323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616151515151515161414141414141415151514141414141414141414131313131313131313131313111212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F48B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD560F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004E8486888A8B8E909395989B9DA0A3A6A9ACAFB2B5B8BBBFC1C5C7CACED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F39100000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3D7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9BBBDC0C1C4C5C7C9CBCCCCD0D0D3D4D4D6D7D9D9DADADCDCDCDDDDDEDEE0E0D8D0D1D1D1D1D3D3D5D6D6DAE1D1CACACAC9CACACAC9C9C6C6C6C9C6C6C5C6C4C4C4C4C3C1C0BFC0BFBCBCBBBBB9B9B9B8B6B6B6B8B8B6B6B6B8B8B8B8B9B9B9B9B9BBBBBBBDBDBFBFBFBFBFC0C1C3C5C5C5C5C6C8C9CACBCECFD3D1D3D3D3D3D3D5D3D6D6D6D6D6D5D5D6D6D5D5D3D3D3D5D5D5D5D1D1D1D0CFCECBCBCAC9C8C8C5C5C3C3C1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382676869696C6D6F7172757678797C7D81818286898A8A8C8E8F929396999B9C9C9FA2A4A7A7AAA8AAACAEB1B1B1B2B2B2B2B3B3B6B6B8B9B6B6B6B6B5B3B5B3B3B3B3B3B3B2B1B2B2B3B3B5B5B5B6B5B5B5B6B8B9B6B6B6B6B6B6B6B8B8BBBBBBBCBCBCBDBDBBBCBDBFBFBFBDBDBFBDBFBFC1C3C3C4C6C6C8C8C9CACBCACBCECFCECFCFD1D3D3D3D3D3D1D3D3D5D6D6D5D5D7D6D6D7D7D7D9D7D7D7D7D9DADADBDBDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DA523131313131313131313131313131313131313131313131303030303030303030303030303030302F2F30303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A292929292929292929292929282828282828282828282727272727272727272625252525252525252525252525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313111212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F56BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD79130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004E8486888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC2C5C7CBCED0D3D6D9DBDEE0E2E5E7E9EAECEEEFF1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F39100000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3CCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B0B5B7B9BDBDC1C1C4C5C7C9CBCCCED0D0D3D4D4D6D7D8D9DADADADCDCDCDDDDDEDEDED6CBCBCBCBCECECACBCBCBD0DAC9C3C3C3C1C1C0BFBFBFC0C1C1C0C0BFC0C0C0BFBDBDBDBCB9BBB9B9B9B9B6B8B8B8B8B6B6B8B8B6B6B6B6B8B9BBB9B9B9B9B9B9B9B8B8B8B8B9B9B9B9B9BBBBBCBCBDBFC0C1C3C3C4C4C4C4C5C5C9C6C8C8C8C6C9C9CBCBCBCBCBCACAC9C9CACAC9C9C9C9C9C8C5C4C5C5C4C4C3C1C0BFBCBBB9B6B5B3B2B2B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3846A6C6D6D6F7273757576787B7C7F818186888A8C8F909294999C9C9FA1A2A5A7A7AAACAEB1B1B2B2B5B6B8B8B9BBBBBCBDBDBDBDBDBCBDBDBDBFC0BFBFC1C3C3C3C4C3C3C1C3C3C3C4C4C4C5C5C5C5C6C6C6C6C6C6C6C6C6C6C5C6C5C5C5C5C5C4C5C5C5C4C4C4C5C6C8C8C9C9C9CACACBCBCBCBCECECFD0D0D0D1D1D1D1D3D5D5D5D5D6D7D7D7D7D7D9D9D9DADADADADBDBDCDCDEDCDEDEDFE1E1E1DFE1DFDFE1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E15431313131313131313131313131313131313131313131313131313030303030303030303030303030302F2F303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2929292929292929292929282828282828282828282727272727272727272626252525252525252525252525252525252524242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313111212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F72BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD98200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004E8486888A8C8E919396989B9DA0A4A6A9ACAFB2B6B8BCBFC2C5C8CBCED0D3D6D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3AF00000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F5F5F5F3C7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ADACB1B3B5B7B9BDBDC1C1C4C5C7C9CBCCCCD0D0D1D3D4D6D7D8D9DADADADADCDCDCDDDDDDDED6CAC9C9CACBCBCBCACBCBD0D7C8C1C1C1C1C1BFBFBFBFBFBFBFBCBBBBBBBBBDBBB9B9B8B6B6B6B6B6B6B3B3B2B2B2B2B2B1B2B2B2B1B0B1B2B2B2B2B1B1B2B2B2B3B3B5B5B5B6B8B9BBBCBCBFBFBFC0C3C3C4C5C5C6C5C8C8C6C8C9CACECECECECFD1D1D0CFD0D1D1D1D1D1D0D0D0CFD0D0CFCBCACACBC9C9C9C6C6C5C5C4C4C4C4C1BDBCBCBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3816567676A6C6D6E717275747577787B7B7E7E818585898A8E8F90929397999B9C9EA2A2A5A5A7A8AAABABACAEAEB1B1B3B6B6B6B6B6B6B6B8B8B9B8B9B8B8B8B8B9B8B9B9B9BBBBBCBCBCBBBBBBBBBBBBBCBCBCBCBDBDBDBDBDBDBDBDBDBCBDBDBFBDBFC0BFBFBFC0C0C1C1C1C3C4C5C5C5C6C5C6C8C9C9C9C9CACACBCBCECFCFD0D0D0D0D0D1D3D0D1D3D5D5D5D3D5D6D7D7D6D5D5D5D5D5D7D7D6D7D6D5D5D5D5D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D069313131313131313131313131313131313131313131313131313131313130303030303030303030303030302F2F303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292929292828282828282828282727272727272727272626252525252525252525252525252525252524242424232323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F138ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA7340F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004F8486888A8C8E919396989B9EA1A4A6A9ADAFB3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F7F7F7F6F6F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEA8AAACAFB1B3B5B7B9BDBDC1C1C4C5C7C9CBCCCCD0D0D1D3D4D4D6D7D8D9DADADADADCDCDCDCDDDDD6CBCECED0D0D1D1D0D0D1D7DCCEC9C9C9C8C6C5C6C5C5C4C4C4C4C4C3C1C1BFBFBFBDBDBCBDBCBCBCBBB9B9B6B6B6B5B3B5B5B5B2B3B3B3B2B2B2B3B5B5B5B5B3B5B6B5B5B6B9B9BBBBBCBDBCBDBDBCBCBFC0C3C5C5C6C5C6C9CACACBCBCBCBCECECECECECBCBCACACACACAC9C9C9C9C6C6C4C3C3C3C3C4C4C3C3C0BFBCBCBBB9B6B5B5B3B2AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3826767696A6A6C6E7172747577787B7C7C81838586898C8D90939697979B9C9C9F9F9FA1A2A2A4A5A5A5A7A7A7A7A7A8A8ABACACACAEACACACACACAEAEAEAEAEACAEAEAEB0B0B0B0AEAEAEAEB0B2B1B1B1B1B2B2B1AEB1B2B2B2B2B3B3B1B2B2B1B1B1B1B2B3B5B6B6B6B8B9B9BBBBBBBCBDBCBDBFC0C0C1C3C3C3C5C5C6C5C6C8CACBCBCED0D3D3D5D5D7D9D9D9D9D9D9D9DADADAD9DAD9D9DADADADBDBDBDADADBDCDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3793131313132323232313131313131313131313131313131313131313131313130303030303030303030303030302F2F303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A2929292929292929292929282828282828282828282727272727272727272625252525252525252525252525252525252424242423232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2098BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB54F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004F8486888A8C8E919396989B9EA1A4A6AAADB0B3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F6F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8E9ECEDEFF0F1F3F3F5F5F5F6F6F7F7F8F7F7F7F6F6F5F5F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2A8A3A4A8AAACAFB1B3B5B7B9BBBDC0C1C3C5C7C7CACBCCCED0D0D1D3D4D6D6D7D8D9D9DADADADADADCDCDCCFC3C3C3C4C4C4C4C5C6C4C9D1C3BDBDBCBCB9B9B9B9B9B9B8B6B6B6B5B3B3B2B2B2B1B0B0AEAEACAAAAAAA8A7A5A4A5A5A5A5A5A5A5A5A4A4A2A4A5A5A5A5A5A8A7A8AAABAAABAAAAABAEB1B0B0B1B2B2B3B6B5B5B6B9BBBBBCBCBDBFBFC0C0C1C4C3C3C5C5C5C5C5C5C5C5C5C5C4C5C4C3C3C1C0BFBDBFBCBBBBB9B8B6B3B2B1B1B1AEACABAAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38065676769696C6D6E6F7172737678797B7D7E81828688898C8D90909293969799999B9B9F9FA1A4A5A5A5A7A7A8A7A8A7ABACACAEB0B0B0B1B1AEAEAEAEAEACAEAEAEACAEAEAEAEACACACACABABACACACACACACACABACACACACACAEACAEAEAEAEAEAEB0B0B2B3B3B3B6B6B6B6B9B9BCBFBFC0C1C1C3C3C4C4C5C5C6C8C8C6C8CACACBCECBCED0D0D0D0D0D0D0D0D1D1D3D5D5D7D7D7D9D9D7D7D9DADBDADBDCDEDEDEDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DF7932323232323232323232323232323232313131313131313131313131313131313131303030303030303030303030302F2F303030303030302F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292929292828282828282828282727272727272727272626252525252525252525252425252525252524242424232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F27A7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD720F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004F8486888A8D8F919396999B9EA1A4A7AAADB0B3B6B9BCC0C2C5C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFE -FEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F7F8F8F8F7F7F6F6F5F5F5B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0A39EA0A2A4A8A9ABAFB1B3B5B7B9BBBDBEC1C3C4C5C7C9CBCCCCD0D0D1D3D3D4D4D6D7D7D8D9D9DADADADADADACFC4C5C5C5C4C4C4C6C6C8CBD5C4BDBBB9B9B9B8B6B6B5B3B3B3B3B3B3B2B1B1B0AEAEAEACACAEACAAA8A7A7A5A5A5A2A2A4A2A5A2A2A4A2A1A2A2A4A5A5A7A7A8A8A8A8A8ABACACAEB1B0B2B5B6B9B9BCBDBFC1C0C1C4C5C5C6C9CACACBCBCBCFCECECFCFCFCFCFD0D1D1D1D0D0D0D0CFCFCBCBCBCBCBCACAC8C9C6C5C4C3C0BFBDBCBBB9B9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3826767696A6C6D6F7173757677787C7E8181838688888A8C8D8E9093969797999B9C9EA2A2A4A5A5A5A7AAABACACACACACAEAEAEACACAEB0B0B0B1B1B1B0B1B1B0B1B1B1B1B0B1B0B0B0B0B0B0B1B1B1B1B1B1B1B1B1B1B1B1B3B3B2B3B5B2B2B3B3B6B6B9B9BBBDBDBFBDBFBFC0C1C3C1C3C3C3C4C5C8CAC9CBCECECFD1D3D3D5D5D7D7D9DADADADBDBDCDEDEDFDFDFE2E1E1E2E3E3E3E3E6E6E7E9E7E7E7E6E6E6E6E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E97D333333333333333333333333333332323232323231313131313131313131313131313131303030303030303030303030302F2F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2A29292929292929292929292828282828282828282827272727272727272726252525252525252525252525252525252524242424232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD911A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004F8486888A8D8F919496999C9FA1A4A7AAADB0B3B6B9BDC0C2C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFE -FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F7F8F8F8F8F7F6F6F5F5F5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9D989A9EA0A2A4A7A9ABADB1B2B4B7B7BABDBEC1C1C4C5C7C7CACBCCCCD0D0D1D3D3D4D4D6D6D7D7D8D8D9D9D9D9DAC9B9B9BBB9B8B8B6B5B6B6B9C3B5AEAEAEAEAEAEAEAEAEAEAEAEAEB0AEACACAAA8AAAAA8A7A7A8A8AAA8A7A7A8A7A7A7A7A7A5A5A5A5A5A5A7A7A7A7A7A8A8A8A7A8AAABACACAEB1B1B2B5B6B8B8B9BDBDBFBFC0C1C3C4C5C8C9C9CBCECBCED0D0D1D1D1D3D3D1D1D1D1D1D1D1D3D3D1D0CFCBCACACAC9C8C5C4C1BFBDBBBBB8B6B6B3B1B2B1AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B380646567696A6B6D6F6F72757678797B7C7F818385888A8C8C8F8F9090939697979799999B9C9EA1A2A2A4A7A7A7A8ABABABACACACACACAEAEAEAEB0B0B1B0AEB0AEB0B0B0B0B0AEACACACACAEB0B1B1B1B0B1B1B2B2B3B3B3B3B3B3B3B5B5B5B6B6B6B6B6B8BBB9BCBBBDBDBDBFC0C1C1C1C3C5C5C4C5C5C6C5C6C9C9C9CACECFD1D0D1D0D3D7D7D7D9DADADBDADBDBDBDEDFDFDEDEDEDEDEDEDEE1DFDFDEDFDFDFDFE1E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E47C3333333333333333333333333333333333333232323232313131313131313131313131313131313030303030303030303030302F2F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929292928282828282828282827272727272727272726262525252525252525252525252525252524242424232323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171616161616161515151515161414141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34989898989898989898989898989898989898989898989898989898AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA79898989898989898989898989898989898989898989898989898821A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004F8586898A8D8F929497999C9FA1A5A8AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7DADCDEE1E4E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFE -FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BBBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F7F7F6F6F5F5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB969395979A9DA0A2A3A5A9AAADB1B1B4B5B7B9BDBDC0C1C3C4C5C7C9CACBCCCCD0D0D0D1D3D3D4D4D4D6D6D7D7D7D7D7D8CDC1C3C3C3C0BFBFC1C0C0C3CEC0B8B9B8B6B8B8B8B5B6B6B6B5B5B5B3B5B5B5B5B3B5B5B3B5B2B3B2B2B2B1B1B1AEAEAEB0B0AEAEAEAEAEAEB0B0AEB1B1B1B1B3B3B3B6B6B8B9B9B9BBBBBDBFC1C1C3C5C5C9C9C9CBCBCED0D0D1D1D5D5D3D3D3D5D5D6D6D6D7D6D7D6D7D6D5D5D5D3D3D0CECBCBCBCAC8C6C5C5C4C3BFBDBBB9B6B5B2B1B0B0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B380656767676769696D6D71717373757678787B7D7F8181828586898A8C8E909292929697999B9B9C9C9E9F9E9FA1A2A2A2A4A5A5A5A7A5A7A8A8A8A8A8A8A8A8A8A7A8A7A7A7A7A7A8A7A7A7A8AAABABA8ABABACACACACABACACACB0B1B0AEB0B0B1B1B2B5B5B6B5B6B9BCBDBFBDBDBFC1C3C4C4C6C9C9CACACBCECECFD0D0D5D5D6D7D7D9DBDADADADBDBDBDEDCDCDEDEDFE1E1DFDFDFE1E1E1E1E2E2E1E1E1DFE1DFDFE1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDE7833333333333333333333333333333333333333333333323232323131313131313131313131313131313030303030303030303030302F2F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929292828282828282828282827272727272727272626252525252525252525252425252525252524242424232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161515151515161414141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD2D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000548587898B8D8F929497999C9FA2A5A8AAAEB0B4B7BABDC0C3C6C9CDCFD2D5D7DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F7F6F6F5F5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A4919091939597999CA0A0A3A5A8AAACAFB1B3B5B7B9BABDBEC1C1C3C5C5C7C9CACBCCCCCED0D0D1D1D3D3D4D4D4D4D4D4D6D6D6CFC6C6C6C6C6C5C5C5C5C5C8D1C1BBB9B9B8B8B8B5B6B5B3B5B3B5B2B2B2B2B1B0B0B0AEABAAA8A7A7A7A7A5A5A5A4A2A2A2A2A2A1A1A1A2A2A2A2A5A4A4A2A4A4A5A5A5A7A7A8AAABACAEB1B2B3B3B3B8BBBBBDBFC1C3C5C5C5C5C6C8CACACACACBCECFD0CFD0D0CFCFCECECECFCBCBC9C8C6C5C6C5C5C1C1C1C0C0BDBDBBBBB8B6B5B3B2B1AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37D6162616361646565676969696C6D6E6F71737575757777797C7C7E8181858686898A8D8E8E90909296979797979797999B9B9B9B9C9EA19FA1A1A2A2A2A2A2A2A2A4A2A2A4A4A4A4A4A4A5A5A5A4A4A5A5A5A5A5A7A7A7A8A8A8AAABAAABACABACACAEB0B0B1B2B5B5B6B8B9BBBCBDBDBFC0C3C4C3C5C5C6C9CACED0D1D1D3D3D3D3D5D7D9DAD9D9D9D7D7D9D9DAD9DBDADBDEDEDEDEDCDEDEDEDEDEDFDFDFDFDEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDF80333333333333333333333333333333333333333333333333333232323231313131313131313131313131313030303030303030303030302F2F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929292828282828282828282827272727272727272726252525252525252525252525252525252524242424232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161515151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA70F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000698587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC0C4C6CACDCFD2D5D8DADDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F7F6F6F5F5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A28D8B8D8F91939597999C9EA0A2A4A7A9ABADB1B2B4B6B7B9BBBDBEC1C1C4C5C5C7C9CACBCCCCCCCED0D0D0D1D1D1D3D3D3D3D3D4D4D1C9C9C9C9C9C9CACAC9C9CED1C4BFBCBDBCBBBBBBB9B9BBB9B8B8B8B8B6B3B3B1B1B0AEACAAAAA8A8A7A7A5A5A5A5A5A2A2A2A1A19F9F9FA2A2A2A2A4A4A5A5A5A7A7A8A8AAABACB0B0B1B2B2B3B8B8B9B9BBBDBFC0C0C0C0C3C4C4C5C6C8C9C9CAC9CACBCBC9C9CAC9C8C9C6C8C6C5C4C3C3C1C1BFBFBCBBB9B9B5B3B3B2B0AEACACACABA7A7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38267696A6A6C6D6E6E6F727275767778787C7E7E8081838688898C8C8E8F8F90929496979799999B9C9C9FA1A2A2A4A5A5A7A7A8AAAAA8ABABAAABAAABABABABABABABAAACABABACACACACACACACAEAEB0B1B1B0AEAEB0AEB0B0B0B1B1B1B2B2B3B3B3B6B6B9BBBBBCBCBDBFBFC1C1C4C5C8C9C9CAC9CBCBD0D0D3D3D6DADADADBDCDEE1E1E1E2E2E3E4E6E7E9E9E9E9EAEAEBECECEEEEEFEFEFEFF1F2F1F1F1F2F1EFEFEFF1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBA53333343434343434343434343333333333333333333333333333333332323231313131313131313131313131313030303030303030303030302F2F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A292929292929292929292928282828282828282828272727272727272726262525252525252525252525252525252524242424232323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161515151515151614141414141415151514141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD5D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000698587898B8D909294979A9C9FA2A5A8ABAEB1B4B7BBBDC1C4C7CACDCFD2D5D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F5F4F3C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C7CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F7F7F6F5E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78B87888B8D8F90929395989A9EA0A2A3A5A8AAADAFB1B3B5B7B7BABDBDBEC1C1C4C5C5C7C7C9CACBCCCCCCCED0D0D0D0D0D0D0D0D1D1D1C8BBB9B9B9B9BBB8B8B8B8BBC4B5AEAEAEAEACABAAA8A8AAAAA8A7A7A7A7A7A5A4A4A5A5A4A4A2A29E9E9E9C9B9B9B999B9B99999999999999999B9B9B9B9B9B9C9C9C9E9FA1A2A2A4A5A5A7AAACAEB0B2B5B8B9BBBDBFC0C0C1C1C3C3C4C5C6C5C6C5C5C5C5C5C6C6C6C5C5C5C5C5C5C5C4C4C3C1C0BFBFBFBDBDBBB9B8B6B6B3B2B1AEACACABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E6F6E6E71727273757777777979797B7D7E81818284888988898C8D8F8F9090929393949696979999999999999B9C9C9C9C9C9C9C9C9E9C9C9E9F9F9F9F9F9FA1A1A2A2A2A2A2A2A2A2A2A2A2A2A4A4A4A5A5A5A5A7A7A7A8A8A8A7A8A7A7A7A7A7A7AAABABACAEAEB0B1B2B2B5B6B8B8BBBCBFC1C3C3C5C4C5C8C9CACBCECECFD0D1D1D5D3D7D7D9D9DBDADBDCDCDEDBDEDEDEDEDEDCDEDEE1E1E1E1DFE1E1DFDFE1E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDE9D34343434343434343434343434343434343333333333333333333333333332323232313131313131313131313131313030303030303030303030302F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A292929292929292929292928282828282828282828272727272727272726262525252525252525252524252525252525242424232323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161515151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F72BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000006A8587898B8E909295979A9DA0A2A5A9ABAEB2B4B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4C20000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F7F6F6E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD8C838586888B8B8D90929395979A9CA0A0A3A4A8A9ABADB1B1B4B5B7B9BABDBDBEC1C1C3C4C5C7C7C7C9CACBCBCCCCCCCCCCCECECECED0D0D0C4B9B8B8B6B6B6B6B6B5B5B9BFB1AAA7A7A7A5A5A2A2A2A2A2A2A1A1A1A19E9E9C9C9C9C9B9B9B9B9B9B9B9B979794939393969292929292929392909393949496979799999B9C9EA1A1A4A5A7A8AAACACAEB1B3B5B6B9B9B9BBBCBDBDBDC0C0C1C1C3C1C1C1C1C1C1C3C1C1C0BFBDBCBBBBBBBCB9B9B8B6B6B6B5B3B2AEACACA8A8A7A5A5A4A2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3806465656567676969696A6E6F717274757777787A7B7C7C7F8183848789898C8C8C8C8E8E8F8F909292929394949694979796949497979797979797979997979797979797979797979799979999999999999999999B9C9C9C9E9E9E9F9E9F9EA1A1A2A2A2A2A4A4A4A5A7A7A8AAABAEACAEAEAEB1B3B5B6B9B9BCBDC1C1C3C3C4C5C9CAC9CED0D1D3D5D5D7D7D7DADADBDBDCDCDEDEDEDEDFDFDFDEE1DEDEDEDEDFDFDFDFE1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDC9B343434343434343434343434343434343434343433333333333333333333333333323232313131313131313131313131313030303030303030303030302F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292929282828282828282828272727272727272727262525252525252525252524252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191919171717171717171717171716161616161515151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F39BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD980F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000006A8588898B8E909395989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F5F5F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F4E000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828386888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F7F6F6EDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B292808083848687898B8D8F91939597999C9EA0A2A3A5A8AAACAFB1B2B4B5B7B9BABDBDBEC1C1C3C4C4C5C5C7C7C7C9C9CACBCBCBCCCCCCCCCCCCCCC9C1C3C1C0BFC1C1C0C0C0C3C9B9B2B2B1B0B0AEACACACABABAAAAA8A8A7A7A5A5A5A4A2A2A2A19F9E9E9E9E9C9C9C9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9CA1A1A2A4A5A7AAABAAACAEAEB0B2B1B3B3B6B8B9BCBFBFC1C4C4C5C6C9CACBCACBCBCECECECECECECECECECECBCBCBCAC9C9C9C8C6C5C5C5C3C3C1BFBDBBB9B8B6B3B2B1B0AEACAAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38064656567676768696A6C6D6D6F7172737577777A7B7D7D7E7F8181818286888889888A8C8E8E8E8F8F909290909293939494969797979797979999999C9B9B9B9C9C9C9C9C9E9E9E9F9E9E9E9C9C9C9C9C9B9B9B9B9C9C9C9C9C9C9E9F9FA2A2A2A4A5A5A5A8A8A8AAAAABACB0B1B2B2B3B5B6B8BBBCBFBFBFC1C1C5C5C6CACBCED1D0D3D3D5D7D9D9D9DADADBDCDEDEDEDEDFE1E1E1E1E1E1E1E2E2E3E3E3E3E3E3E2E2E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAA53434343434343434343434343434343434343434343434343333333333333333333333323232313131313131313131313131313030303030303030303030302F303030303030302F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A292929292929292929292928282828282828282828272727272727272726262525252525252525252525252525252524242424232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD5D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000006A86888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBFC1C5C7CBCED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F5F4F300000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F6F7F8F8F8F8F8F8F8F8F7F6F5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3817D808082848587888B8D8F90929395989A9CA0A0A2A4A7A9AAADAFB1B3B4B5B7B7BABBBDBEC0C1C1C3C3C4C5C5C5C7C7C7C7C9C9C9C9C9C9C9C9C9C4B9BBBBBCBBBBBBB9B8B8BBC4B5ABABABACACAAABAAA8A7A7A5A5A5A4A4A4A2A2A29F9E9E9C9C9C9C9B9B9B999B9997979797969797979797979799999B999C9C9FA1A2A2A5A5A7A8A8AAABACAEB1B1B1B2B3B6B9B9BBBBBDBFBFC0C1C4C4C4C4C6C8C6C6C6C6C5C5C5C5C5C5C5C4C3C1C1C1C0BFBCBBB9B9B8B6B6B5B3B1B1B0ACAAAAA7A7A5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6E706F7172727275757576777A7A7B7C7E817F818283858889898D8E8F90929394969694969697979799999B9B9B99999B9B9C9B9B9B9B9B9B9B9B9B9B9C9B9B9B9B9B9B999B9B999999999999999B9B9B9B9B9B9B9C9C9C9C9F9FA19FA1A1A4A4A2A4A5A7A7A8A8ACAEAEB1B1B2B3B5B5B6B9B9B9BCBDBFC1C4C5C8C9CACBCBCFD0D1D3D1D5D6D9DADCDEDFDEDFDFE1E2E3E4E6E6E7E6E7E7E6E6E7E9E7E6E6E6E6E6E7E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7C8343434343434343434343434343434343434343434343434343433333333333333333333333232323231313131313131313131313130303030303030303030302F2F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282828272727272727272726262525252525252525252525252525252524242424232323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000006A86888A8C8E919396989B9DA0A4A6A9ACAFB2B6B8BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E7E9EBECEEEFF1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F4F300000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F8F8F8F8F8F8F8F7F6F6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1907B7B7D808082838586888B8B8D9091939597999A9EA0A2A3A5A8A9ABADAFB1B3B4B5B7B7B9BABDBDBEC0C1C1C1C3C3C4C4C5C5C5C5C7C7C7C7C7C7C7C7C4BCBDBDBDBDBCB9BBBBB9BCC4B5AEB0AEAEACACACABAAA8A7A5A5A5A4A2A2A2A1A1A19E9E9C9C9C9C9B9B9B99999797979796969697969799999997999B9999999B9B9B9E9FA1A2A4A5A5A7A8AAACAEAEB2B3B6B8B9BDBDBFBDBFC0C0C1C1C3C3C4C4C5C5C5C6C6C5C4C4C4C5C4C4C4C4C3C3BFBFBDBCB9B8B6B6B3B5B1B2B1AEACABA8A7A5A4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E6060616363646564656768696A6A6C6C6D6E7072727476757576777B7C7B7C7C7E7F808081838182828285858686858484858686858889898A8A8A8A8A8C8C8C8D8D8D8E8F8E8E8E8D8C8E8E8E8D8E8F909292929396969696969797979797999B9B9B9C9EA1A2A2A2A4A5A7A7A7ACACAEB1B2B5B6B8B9BBBFC0C1C3C4C5C6C8CACBCFD0D1D5D5D6D9D9DADADADCDEDCDEDEDFE1E1E2E4E4E4E4E3E2E3E3E4E4E4E3E2E1DFDFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFBF3434343434343434343434343434343434343434343434343434343434333333333333333333333232323231313131313131313131313130303030303030303030302F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292929282828282828282828272727272727272727262525252525252525252524252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161615151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F48BDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000007A86888A8C8E919396989B9EA1A4A6AAADAFB3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F4F300000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F8F8F8F9F9F8F8F8F7F6F6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE85797B7B7D7E808283848687898B8D8F9192939597999C9EA0A2A3A5A8A9ABADAFB1B2B4B5B6B7B9BABABDBDBDBEC0C1C1C1C1C3C3C3C4C4C4C4C4C4C4C4C4BDB1B1B0B0B1B1B1B1B1B1B5BDACA5A5A4A2A2A5A2A4A2A2A2A2A19E9C9B9B9B999999979696969494929090908F8F8F8E8E8E8E8E8E8D8E8E8E8E8F8F8F90909293949699979B9C9E9FA2A4A4A5A8AAACB1B2B3B5B8B9B9BBBBBDBFBFBFC0BFBFC3C1C1C3C1C1C3C1C1BFBFBDBCBCBBB9B9B9B8B6B5B5B3B2B0AEACACACA7A7A7A7A5A5A2A19EB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3816565656567686768696C6C6C6D6F70717171727376777778787B7B7C7D7F818183868988888A8C8E8F9090909292939494969797979797979797979797979797979796969797979797979797979797979797979697979797999999999B9B9C9C9E9E9F9FA1A2A2A2A4A7A7A8AAABACACAEAEAEB0B2B5B6BBBBBFBFC0C1C5C5C6C9C9C9CACECED0D0CFD0D1D1D3D5D5D5D6D5D6D7D7D6D7D7D7D9DADBDCDEDCDBDBDBDBDBDADBDCDBDBDADADADADAD9D9D9D9D9D7D9D9B834353535353535353535353534343434343434343434343434343434343434343333333333333333333332323231313131313131313131313130303030303030303030302F303030303030302F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292929282828282828282828282727272727272727262625252525252525252525252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161615151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000008486888A8D8F919396999C9EA1A4A7AAADB0B3B6B9BCC0C2C5C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F6F5F4F300000000000000000000000000000000000000000000000000F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F8F9F9F9F9F8F8F8F7F6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D78787B7B7D7E808082838587888B8B8D9091939595989A9DA0A0A2A4A5A8A9ABADAFB1B1B3B4B5B7B7B9B9BABBBDBDBDBEBEC0C1C1C1C1C1C1C1C1C1C1C1C1C1BBBBB9B9B9B9B6B8B6B6BCC0B1ACACACAAA8A7A7A5A5A4A19F9F9E9C9C9C9B999B9B9B9797949392929292929292909090929090909293929292939694969799999B9C9C9C9EA2A4A5A5A7A7AAACACB1B1B2B5B8B9BBBDBFC0C0C1C3C3C3C4C4C5C5C5C5C4C4C4C5C4C4C3C3C0C0BFBDBDBCB9B9B8B6B6B5B2B1AEACACABAAAAA7A5A4A2A29FB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38065656567696969696A6C6E6E6E707272747576777878797B7D7C7E7F8182838688898A8C8E8E8E8F909090929093929393939494949494979697979797979797979999999B9B9B999999979999999999999B9B9B9B9B9B9C9C9E9E9EA1A2A2A2A2A4A5A7A8AAABACACACACB1B2B5B5B9BCBDBDBFC1C3C5C8C9CACBCED0D1D3D7D7D7DADBDEDFE1E2E3E3E7E7E9E9EAEBEBEBEBECECECECEEEEEEECEEECEEEEEFEFF1F1EFEEEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E93535353535353535353535353535353535343434343434343434343434343434343433333333333333333333323232313131313131313131313131303030303030303030302F2F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282828272727272727272726262525252525252525252525252525252524242424232323232323232323232323232322222222222220202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919191717171717171717171716161616161615151515151614141414141415151515141414141414141414131313131313131313131313131212121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000008586898A8D8F929497999C9FA1A4A8AAADB0B3B7B9BDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFF -FFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F4F31D000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E4E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F8F8F8F7F6BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A478787878797B7B7D80808283858687898B8D8F9092939597999A9DA0A0A2A4A5A8A9AAACADB1B1B2B3B4B5B7B7B7B9B9BABBBDBDBDBDBDBDBEBEBEBEBEBEBEBEBEB4AAA8A8A8A8AAA8A7A5A7ABB3A59E9E9C9B9B9999969696949494939392929290908F8E8E8D8C8C8A8C8A8A89898988888887888889888A8A8C8D8F8F9092939394969797999B9E9E9FA2A2A4A5A7A8ACAEB1B1B3B6B9BBBDBFBFC1C1C4C4C5C6C9C9C9C9C9C9CACACAC9C8C6C6C6C6C5C3C1C0BFBFBCBBB9B8B6B5B2B2B1AEACACABA8A7A5A2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38265656567686969696A6A6C6D6D6D6E6F71727373757676777778787A7B7C7C7D7F7F8181828283838686888889898A8C8C8C8A8C8D8D8D8D8D8E8E8F8F8F8F8F8F9090908F8F8F8F8E8E8D8C8C8D8D8C8D8E8E8F8F8F8F9090929092939497979799999B9B9C9E9FA1A1A2A4A5A5A8AAACB0B1B1B6B6B8B9BCBFBFC1C1C3C5C5C5C9CACED0D0D1D1D5D6D5D6D9D9DBDBDCDEDEDCDEE1E1DFDEDEDCDBDBDBDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E335353535353535353535353535353535353535353534343434343434343434343434343433333333333333333333323232313131313131313131313130303030303030303030302F303030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292929282828282828282828272727272727272727262525252525252525252524252525252525242424232323232323232323232323232322222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5DBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000000000000000000000000000000000000000000000000008586898B8D8F929497999C9FA2A5A8AAAEB0B4B7BABDC0C3C6C9CCCFD2D4D7DADCDFE1E4E5E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFF -FFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F4F330000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDBEC3C5C9CCD0D1D4D8DADDE0E1E5E7E8EBECEDEFF0F1F3F5F5F5F6F7F8F8F9F9F9F9F9F9F8F8F8F7C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD7C76787878797B7B7D7E808082848587888B8B8D8F9192939597999A9DA0A0A2A3A5A7A9AAABADAFB1B1B2B3B4B5B5B7B7B7B7B9B9BABABABBBBBBBBBBBBBBBBBBBBB6ACAEAEACACACABAAAAAAACB5A59C9E9C9C9C9C9B999997979796949494949393929290929292908F8F8E8E8E8E8E8E8E8D8D8E8F8F8F8F95A092939392939494969697999B9C9C9FA2A4A5A7AAABACAEB2B2B5B8B9BDBFBFC1C0C3C4C5C5C6C8C6C6C6C8C8C9C6C9C9C8C6C6C5C5C4C3C1BFBFBDB9B8B6B5B3B1B1B1AEACA8A8A7A2A2A19F9EB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B382656768696A6C6C6C6D6E6F6F707172737576777675777878787A7C7D7E7E80818383868689898A8A8A8A8A8A8A898A8A8C8C8C8C8C8C8D8C8C8C8C8A8A898C8C8C8A898A8A8A898888888889898A8A8A8A89888A8A8A8A8A8A8A8A8A8C8C8C8F8E8E8E8F90909092929394979B9C9E9EA1A2A4A5A7AAACAEB1B2B3B6B9B9BBBCBDBFC1C3C4C5C6C5C8C9CACACBCBCED0D0D0D0D1D3D3D3D1D3D3D5D3D3D5D3D5D6D6D6D6D5D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D73C3535353535353535353535353535353535353535353535343434343434343434343434343433333333333333333333323232313131313131313131313130303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929282828282828282828282727272727272727262625252525252525252525252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F20BDBDBDBDBDBDBDBDBDBDBDBDBD480F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE000000000000000000000000000000000000000000000000108587898B8D8F929497999C9FA2A5A8ABAEB1B4B7BBBDC0C4C6CACDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F330000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828486888B8D909295979A9EA2A4A8ABAFB2B5B7BDC0C3C5C9CCD0D1D4D8DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F8F8F7C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37F7676787878787B7B7B7D80808283858687888B8D8D909193959597999A9DA0A0A2A3A4A5A8A9AAABADAFB1B1B1B3B3B4B5B5B6B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B2AAA8A8A8A8A8A7A7A7A7AAB2A29C9B999997999997979696979694929394939392928F8F8E8E8F8F8F8D8D8C8D8C8D8D8C8C8C8D8E98AAB3AA8F9092939496979B9B9B9C9EA2A2A4A5A7AAACAEB1B2B3B6B8BBBBBDBDBFC1C1C3C3C5C6C6C6C8C8C9C9C9C9C9C9C9C6C8C6C5C5C3C1C1C0C0BDBDBDBBB9B5B3B2B0ACAAA7A5A4A19F9E9B9B97B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38065656565656567696A6A6A6C6E6F6F6E6F7272727374757777777878787B7B7B7C7D7D7E7E8181818181818181818182828182818383838383838283838381818382828281828282828281818181818383818382828282838585848685858689898A8A8A8A8A8D8E8F929292949497979B9B9CA2A2A5A7A8AAACB0B2B3B8B9BBBDC1C1C3C3C4C3C5C8C9C9CACED0D3D1D5D5D7D7D9D9DAD9D9D9D9D9DADBDBDBDBDBDCDEDEDBDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E159353535353535353535353535353535353535353535353535353534343434343434343434343434333333333333333333333232313131313131313131313131303030303030303030302F2F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929292828282828282828282727272727272727272625252525252525252525252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA7BDBDBDBDBDBDBDBDBDBDBDB5130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000001A8587898B8E909294979A9DA0A2A5A8ABAEB2B4B8BBBEC1C4C7CACDCFD2D5D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4F330000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828486888B8D909295989A9EA2A4A8ABAFB2B5B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F8F8F7CDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B397767676787878787B7B7B7D7E80808284858688898B8D8F909293959597999A9D9EA0A2A3A4A5A7A8A9AAABADAFAFB1B1B1B2B3B3B4B4B4B5B5B5B5B5B5B5B5B5B5B5B5B1ABA8A8A7A8A7A5A7A5A4A7B0A199999797979696949492929290908F8E8E8E8D8D8D8C8C8C8C8C8C8C8989888989898A88888893ACB3B3B3AA8E8F90929292939496969797999B9C9FA1A4A5A7A8ABAEB0B1B2B6B6B9BBBDC1C1C1C4C3C5C5C6C8C8C9C6C6C6C6C6C8C5C5C5C5C5C4C1C1BFBDBDB9B9B6B3B1B1ACACABAAA8A7A4A1A19E9B99B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B381656565676769696B6D6D6C6E6F7070717173757576777775777778787A7C7C7D7D7E8182828385868486868888878788868687878989888688898888888685858385868684838383838284848484858583838383858385868588888688888888888A8C8C8D8D8F90909092939397999C9CA1A1A2A5A5A7AAACAEB1B3B6B9BBBCBDBDC0C1C3C4C5C6C8C9C9CACACBCBCECFCFD1D1D0D3D3D3D5D3D1D3D3D5D3D5D5D3D5D6D6D6D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9553535353535353535353535353535353535353535353535353535353534343434343434343434343434343333333333333333323232313131313131313131313130303030303030303030302F303030303030302F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292929292828282828282828282727272727272727272625252525252525252525242525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F64BDBDBDBDBDBDBDBDBDBDBD820F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000001A85888A8B8E909395989A9DA0A2A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F45700000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828586888B8D909395989CA0A2A4A8ABAFB3B5B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F8F8D5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B17776767678787878797B7B7D7D80808283858687888B8B8D8F909293959597999A9C9EA0A0A2A3A4A5A7A8A9AAABACADADAFAFB1B1B1B1B2B2B2B3B3B3B3B3B3B3B3B3B3ABA2A2A2A2A2A2A2A2A2A2A5AC9F999997979697979794939392909290909090908F8E8F8E8D8D8D8E8E8D8D8D8C8C8C8A8E9AB2B3B3B3B3B3AA9090909293979799999B9B9C9EA1A4A5A7A8ACAEB3B5B6B8BBBBBFC1C3C5C6C8CACBCECFD1D1D3D3D3D3D3D3D3D1D0D1CFCECBCACAC8C6C5C4C1BDBCBCBBB9B6B3B2B1ACACABA7A5A4A19C9C9BB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E616163636565656567676768696A6B6C6D6D6D6E717072737575777777777778787B7B7A7B7B7B7D7D7F7F81817F81818181828283838383838181838383838181818181818181818181818181818181818183838384868888888A8A8A8D8E8F90929294949797979B9B9C9EA1A4A5A7AAAAACAEB1B3B8BBBDBDC0C3C4C4C6C9CACBCED0D3D5D7DADBDBDBDCDEDFDEDFE1E3E3E3E3E4E3E2E3E1E2E2E3E3E4E6E3E3E4E6E6E7E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E47536363636363636363636363635353535353535353535353535353535353534343434343434343434343434343333333333333333323232313131313131313131313130303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A292929292929292929292828282828282828282827272727272727272625252525252525252525242525252525252424242323232323232323232323232323232222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34BDBDBDBDBDBDBDBDBDBDBD410F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0000000000000000000000000000000000000000000000001A86888A8C8E919395989B9DA0A3A6A9ACAFB2B6B8BCBFC1C5C7CACED0D3D6D8DBDDE0E2E4E6E9EAECEEEFF1F2F3F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F46100000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80828586888B8D909395989CA0A2A4A9ABAFB3B5B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F6F7F8F8F9F9F9F9F9F9F9F9F8F8DDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7676767678787878797B7B7B7D7E80808283858687888B8B8D8F909293959597999A9C9DA0A0A2A2A3A4A5A7A8A9A9AAABABACADADADAFAFAFAFB1B1B1B1B1B1B1B1B1AFA59B9B9B9B9B9B999799979BA2938E8D8D8C8A8A8A8A8A898989898788888585838385858583838281828281818181849AB2B3B3B3B3B3B3B3A78283818485858889898D8E8F9293979B9C9C9EA1A4A7A7ACAEB1B5B5B6B9BBBDBFC1C3C3C5C5C5C6C6C6C9C8C8C5C6C5C5C4C3C3C1C0BFBFBDB9B9B5B2B1B0ACABA8A7A5A4A2A19E9B9B999794B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3806465656767676768696A6A6A6A6D6D6D6F6F70717072737375757577787878787879797B7B7C7C7C7C7C7D7F7F7E81818181818181818181818181818181818181807F7E7C7D7D7E7F8181817F7F818181818181818182818183828383858586888988888C8C8D8E8F909296999B9C9FA1A2A4A7A7ABACACB1B2B3B5B6B9BBBDBDBFBFC3C3C4C6C8C9CBCECECFD0D3D5D5D5D7D7D7D7D9D7D7D7D9D9D9D9DBDADADADADBDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDE7A3635353535353535353535363636363636353535353535353535353535353535353434343434343434343434343433333333333333333232323131313131313131313131303030303030303030302F2F3030303030302F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929292828282828282828282727272727272727262625252525252525252525252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FAEBDBDBDBDBDBDBDBDBDB5130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970000000000000000000000000000000000000000000000002A86888A8C8E919396989B9EA1A4A6A9ADAFB3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E7E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F5F46100000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7E80838587888B8D919395989CA0A2A4A9ABB1B3B5B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F6F8F8F9F9F9F9F9F9F9F9F9F9F8E9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A7676767678787878787B7B7B7D7E8080828384858687898B8B8D8F90929393959598999A9C9EA0A0A2A2A3A4A4A5A7A8A8A9A9AAAAAAABABABACACACACACACACACACACABA8A2A2A2A19F9F9F9F9E9EA2A79B969496949393929292929090908F8E8E8C8D8A8D8C89898A8889898889898890A4B3B3B3B3B3B3B3B3B3B3A988898A8C8F8F8F929396999B9C9C9EA1A4A5A7ABAEB1B2B3B6B8BBBCBDBDBFC1C1C3C4C5C5C5C5C6C8C8C9C9C9C8C5C5C4C4C1BFBFBDBDBCBBB9B6B3B2B2B0ACABA8A7A7A4A2A19F9B9B979794B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37D5E5D5D5F6061616060616161626264646467676767696A6B6B6C6D6E6E6E6F6F72727273747273757575757576767577777778787878787878787B7B7C7C7B7B7C7B7B7B7B7B7B7B7B7878787B78787B7B7B7C7A7B7C7D7E7E7E7F81818283838585868988898D8E90929294979B9B9CA1A2A4A7A7A8ACACAEB1B1B3B6B9BDBFC0C3C5C8C8C8C9CACACED0D0D3D5D7D6D7D7D7D9DADBDCDBDBDCDEDEDEDEDFDEDEDEDEDFDFDEE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E19135353535353535353535353535353535363636363535353535353535353535353535353434343434343434343434343433333333333333333232323131313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A2A292929292929292929292828282828282828282727272727272727272625252525252525252525252525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79BDBDBDBDBDBDBDBDBD720F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970000000000000000000000000000000000000000000000003586888A8D8F919396999B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F47F00000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8080838587888B8D919395989CA0A2A5A9ABB1B3B6B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F8F5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37F767676787878787878797B7B7B7D7E8080828384858788898B8B8D8F9091929395959798999A9C9EA0A0A0A2A2A3A3A4A5A5A7A7A8A8A8A9A9A9A9A9A9A9A9A9A9A9A9A99F92909292909090929293979E908C8A8A888A898988868685858585838383838381818080807E817F7F8092AAB3B3B3B3B3B3B3B3B3B3B3B3A98689898A8C8D8E90929497979B9C9E9FA1A5A7A8ACB1B2B3B6B6B6BBBCBFC1C3C3C3C3C3C3C3C4C5C4C5C5C5C6C6C6C5C4C5C4C3C1BFBFBDBCBBB8B6B3B1B1AEABAAA7A5A5A29F9E9B99979693B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E6262616161616464656565676869696A6D6C6D6E6E6E6F6F717273727575777675767776767777787777787878797B7C7C7D7C7D7E7E7F7F7F7F7F7E7E7F7F7F7F8180807E7E7E817E817F817F7F7F807F817F7F80807E8080818181818182838688898A8C8C8E90929497999B9C9C9EA1A2A7A8ABACAEB1B2B3B6B8BCBDBFBFC3C5C5C8CACED0D3D3D5D6D7D9DADBDADBDEDEDEDFDFE1E1E1E1E2E1E2E2E4E4E6E6E4E6E6E6E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7A43535353535353535353535353535353535353536363636353535353535353535353535353534343434343434343434343433333333333333333332323231313131313131313131303030303030303030302F2F3030303030302F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A292929292929292929292828282828282828282727272727272727272625252525252525252525242525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F41BDBDBDBDBDBDBDBDBD390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000003586898B8D8F929496999C9FA1A4A7AAADB0B3B7B9BDC0C2C6C9CBCFD2D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFF -FFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F49200000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8080838587898B8F919395999CA0A2A5A9ACB1B3B6B9BDC0C3C5C9CCD0D3D6D9DADDE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F8BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37F767678787878787878797B7B7B7D7D808080828385868788898B8B8D8F909192939395959799999A9C9D9EA0A0A0A2A2A2A3A3A4A4A4A5A5A5A5A5A5A5A5A5A5A5A5A5A5A29B9B9997979997979694979E908A8A8C8C8C8A89898889888886868583838383828181817F817F869EB2B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78183848786898C8C8C8F8F92949697999B9EA1A2A4A7A8AAACACB0B2B3B5B6B9BBBDBFBFBFC0C3C4C5C5C6C6C6C6C6C6C5C5C5C6C5C4C4C1BFBDBBB9B6B2B1AEACA8A7A7A5A29F9E9C99979696B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E636464656567676869696A6C6D6C6D6D6E6E6F707272727273737475777777787878797B7B7C7D7D7F7F7E7E7E7E7D7F7F7F8181818181818181818181828282838383828282838384848383838383848484868689898989898A8A8C8C8D8E8F909092969697979B9B9EA1A2A5A5AAACAEB1B2B6B8B9BDBFC0C3C4C5C9CACBCFD0D1D5D7DADCDEDEDEDEDEDEDFE1E1E3E4E4E6E6E7E7E9E7E6E6E6E7E7E7E9E9E9E9E7E7E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6B935353535353535353535353535353535353535353535363636363535353535353535353535353534343434343434343434343433333333333333333232323131313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A292929292929292929292928282828282828282827272727272727272626252525252525252525252525252525252424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F13B5BDBDBDBDBDBDBDAE0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000004B87898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFF -FFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F49200000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D8080838587898B8F919395999CA0A2A5A9ACB1B3B6B9BDC1C3C7C9CCD0D3D6D9DADDE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F8C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B381787878787878787878797B7B7B7B7D7E808082838385868788898B8B8D8D8F909192939595959798999A9C9C9D9EA0A0A0A0A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A3A3A2A29C9C9C9B9B9B9B9B9B9B9FA2968F8E8E8D8C8989898888888886868684848281817F7F818293A7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78181818383858688898A8C8D909294979B9E9EA2A2A5A8ACACAEB0B1B3B5B6B9B9BBBCBDBDBDBFBFBFBFBFC0BFBDBDBDBBBBBBB9B8B3B2B2B1B1AEACABAAA8A5A4A19F9E9C9B99979693928F8EB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37C5D5E5E5D5F60606060616161636361636363636363646565676869696A6A6A6D6C6D6D6D6D6E6F7272717272727273737374737576767676757777757775777676757577757575777775777775757777777878787878797B7C7B7D7D7D7E7F81818181838589898C8E9090939697999B9C9CA1A5A5AAABAEB1B3B5B6B8B9BBBCBDC0C3C4C5C6C9C9CACACECFCECECFD0D1D3D3D3D5D5D5D6D6D6D6D6D6D6D7D7D7D7D6D6D7D6D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCBD3535353535353535353535353535353535353535353535353536363635353535353535353535353535343434343434343434343434333333333333333332323231313131313131313131303030303030303030302F2F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282827272727272727272626252525252525252525252525252525252424242423232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8ABDBDBDBDBDBDBD720F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000005087898B8D90929497999C9FA2A5A8ABAEB1B4B7BBBDC1C4C6C9CDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFF -FFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4B90000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D80828385878B8B8F919395999CA0A2A5A9ACB1B3B6B9BDC1C3C7C9CCD0D3D6D9DADDE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C78787878787878787878797B7B7B7D7D7E808082838385868787888B8B8D8D8F9091929393959595979899999A9A9C9C9D9E9EA0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A09990909290909392929092979C8F8A8A8A88868684848383828381817F7F7F7F7C7E7E89A0B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77E7F8181838588888A8E8F90929497999C9FA1A2A5A5A7A7AAACAEB0B1B3B3B6B9BBBCBDBCBFBDBFBFBFBFC0C1C1BFBDBDBCBBB9B8B5B3B3B1B2AEAEACAAA7A7A5A4A4A19E9C9B99979492908FB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38063636463636364646565656767676769676A6A6A6B6D6D6F6F6F7171727173757475757575747575767776777776767877787877777777777778787877777677777777777777777777777779787B7B7B7B7B7C7D7C7C7D7C7C7C7E81818181818486898A8C8C8E8F90949699999B9C9E9FA4A4A5A7AAACB0B1B3B6B8B9BDBFC0C1C4C5C9C9CACACECFD1D1D3D5D7D7D7D9D9DADADBDCDEDEDFDFDEE1E1DEDEDFDFE1E1E2E2E3E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3DB37373737373737373737373737353535353535353535353535353535363636353535353535353535353535343434343434343434343434333333333333333332323231313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282827272727272727272726252525252525252525252525252525252424242423232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313131112121212121211111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F4FBDBDBDBDBDBDBD340F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000005588898B8E909295979A9DA0A2A5A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFF -FFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F4C200000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D80828486878B8D8F919395999DA0A3A5A9ACB1B3B7B9BDC1C4C7C9CCD0D3D6D9DADDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F7F8F8F9F9F9F9F9F9F9F9F9F9F9F9E3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39278787878787878787878797B7B7B7B7D7E80808082838385868687888B8B8B8D8D8F90919292939395959597979899999A9A9C9C9C9C9D9D9E9E9E9E9E9E9E9E9E9D9D9D989292929090909090908F90978982818181818181817F7F7E7C7D7D7C7C7C7D8195ADB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78386878788898D8F929497979B9C9F9FA2A5A8AAABAEB1B5B8BBBDBFBFC3C3C5C5C5C8CACACACACBCBCBCBCACACACACBCACAC8C6C6C6C5C5C5C3C1C0BDBCB9B5B3B1ACAAAAA7A5A49F9C9B9B97B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37A5A5A5B5B5C5B5C5D5D5E5F5F5F5F5F60615F6161636263636465656565656767676869696A6C6B6D6D6B6D6D6D6D6C6D6E6E6D6D6E6D6E6F6F6F6F6F6F71717171716F716F7171717272717171707273737372737373737575767777787A7B7D7E817F818286888A8A8C8F90929294979B9B9FA1A2A5A7ABACAEB1B3B5B6B9BBBCBFC0C4C5C8CACBCECECFCFD0D1D3D3D3D5D5D6D5D5D7D9D7D7D7D9DAD9DADBDBDBDBDADADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDB373737373737373737373737373737373735353535353535353535353535363636353535353535353535353535343434343434343434343434333333333333333232323131313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A292929292929292929292928282828282828282827272727272727272625252525252525252525242525252525242424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F20BDBDBDBDBDBDA70F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000006B888A8C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBFC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFF -FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5CD00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D80828486888B8D90929397999DA0A3A5A9ADB1B3B7B9BDC1C4C7C9CCD0D3D6D9DADDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F7F8F9F9F9F9F9F9F9F9F9F9F9F9F9F3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A078787878787878787878797B7B7B7B7D7D7E8080808283838586868788898B8B8B8D8F8F909191929393939595959597979899999999999A9A9A9A9A9A9A9A9A9A9A9A99948C8A8A8A8C8A898C8C8C9096898281818181818180808181817F7F7F818EA7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7838385898A898C8E8F90939396979B9C9FA2A2A4A5AAABAEB1B1B3B5B8BBBBBCBDBFBFC1C1C3C3C4C3C4C3C4C4C4C3C3C1BFBFBFBDB9B9B9B6B5B3B1B0AEACAAA7A4A29F9E9B9B999693908E8DB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37D5F5D5D5F5F5F60616161616363646464656767676767676869696B6D6D6E6E6E6F6F6F72727272737272727575757675777777757676767575757675757372727273727372727373737375757575757575767676767676767776777879797C7C7C7C7E8181828689898C8E9090929397999B9C9FA2A2A5A7ACAEB1B5B6B9B9BBBDBFC0C1C4C5C5C6C8C9CBCECED0D1D1D3D5D6D7D9D9D9DADBDBDEDEDEDEDEDEDFE1E2E3E2E2E2E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E159373737373737373737373737373737373737373735353535353535353535353636363535353535353535353535353434343434343434343434333333333333333332323231313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A2A2929292929292929292928282828282828282827272727272727272626252525252525252525242525252525252424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98BDBDBDBDBD640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF070000000000000000000000000000000000000000000000006B888A8C8E919396989B9DA0A4A6A9ADAFB3B6B9BCBFC2C5C7CBCED0D3D6D8DBDDE0E2E5E6E9EAECEEEFF1F2F3F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF -FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5F400000000000000000000000000000000000000000000000000F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E80828586888B8D909295979A9EA0A3A7AAADB1B4B7BABDC1C4C7CACCD0D3D6D9DADDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F7F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B079787878787878787879797B7B7B7B7B7D7D7E808080828383858586878788898B8B8D8D8F8F909091929293939393959595959597979797979797979797979797979797948D8D8D8C8C8C8A8989898C92837D7D7D7D7D7C7C7B787B78787B8BA0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D7E8181828685888A898D8F929497979B9C9C9E9FA4A4A5A8AAABACAEB0B1B3B6B9BBBCBDBFBFBFBFC1C1C1C0BFBFBFBFBDBDBDBCBCBBBBB9B8B5B3B1ACABAAA8A7A4A19F9C9B979494928F8EB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37C5D5D5D5D5D5D5E60605F5F5F616261636364656565656565656565656769696A6A6A6C6D6C6A6D6D6D6D6E6D6E6F6F6F6F6F6F6F7071717070717272727272717170717272717273737373757575757676767575757676757777777A787B7C7D7E7E8081828386898A8D8E8F90929697999C9CA1A4A5A8AAACB0B1B3B5B9BBBDBFC0C3C4C6C9CAC9CED0D3D3D5D7DAD9DADADADADBDBDBDEDBDAD9DADBDCDBDBDBDBDBDBDBDBDCDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDE603737373737373737373737373737373737373737373735353535353535353535353636363535353535353535353535353434343434343434343434333333333333333332323131313131313131313131303030303030303030302F3030303030302F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282827272727272727272626252525252525252525252525252525252424242323232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5DBDBDBDBDBD2D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000007B888A8D8F919396989B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED1D4D6D9DCDEE0E2E5E7E9EBECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF -FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5F400000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E80838587888B8D909295979A9EA0A3A7AAADB1B4B7BABDC1C4C7CACCD0D3D6D9DCDDE0E3E5E7E8ECECEFF0F0F3F3F5F5F6F7F8F9F9F9F9F9F9FAFAFAF9F9F9F9F9D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A797978787878787979797B7B7B7B7B7B7D7D7E808080828383848586868788888B8B8B8D8D8D8F8F9090919192929293939393939595959595959595959595959595959490908F8F8E8F8D8D8D8D9094898181817F7E7E7C7B7B7E8CA2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D7F818383868A8C8C8E9093949697999B9EA1A4A5A7AAACACAEB2B5B6B9BBBDBFBFBFC1C1C3C4C4C5C4C4C4C4C5C5C5C3C1C0C0C0C1BFBCB9B9B6B5B2B2B1AEABA8A7A5A4A19E9C9B99979492B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37E6363636364646464646565656565656768676969696A6A6A6A6A6A6B6C6D6C6D6D6D6E6E6D6E6E6E6F707072727071716F7070707171727172727272717172716F6F6F6E6E6E6E6F6F6F6F6E6F6F6E6E6F6F6F71727373757575747575777777797A7B7D7E7F818586898A8C8E929396999C9EA2A4A5A8ABACB0B1B3B6BBBDC0C3C5C6C9CACBCBCFD1D3D3D5D6D6D7D7DADADCDCDEDEDFE1E1E2E1E2E2E2E2E3E3E3E3E3E3E4E4E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E17C373737373737373737373737373737373737373737373737373535353535353535353535363635353535353535353535353534343434343434343434343333333333333333323231313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282827272727272727272726252525252525252525252525252525252424242423232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2DBDBDBDBDA70F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30000000000000000000000000000000000000000000000000086898B8D8F929497999C9FA1A4A7AAADB0B3B7B9BDC0C3C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF -FFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F6F5F431000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E82838587898B8D909395989A9EA2A4A8AAADB1B4B7BABDC1C4C7CBCCD0D4D7D9DCDEE0E3E5E7E9ECECEFF0F0F3F3F5F5F6F8F8F9F9F9F9F9FAFAFAFAFAF9F9F9F9E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A67B7B7B797979797979797B7B7B7B7B7B7D7D7D7E80808082828384858586868788888B8B8B8B8D8D8D8F8F9090909191919292929292929393939393939393929292928D86858585838383838383848C7F7B7B797B7A787D8CA0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A67B7C7B7E7E7F828385888A8C8E8F929497979B9E9FA2A5A7A8ACAEAEB1B3B6B9BCBDBFB3B6B6B6B6B6B6B6B6B6B6B3B3B6B3B3B3B3B3B3B3B3B2B2B2B0B0AFAFAFAFAFAFAEAEAEAEACABABABABB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A9A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A6A6A5A5A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A5A5A6A5A6A6A6A6A6A6A6A6A6A6A6A6A6A6A7A7A7A79E8181828586898C8D8F90909396979B9CA1A2A5A7A8ABACAEB1B1B2B3B9BCBFC1C3C4C5C8CACBCED0CFD0D0D3D3D5D6D5D6D6D6D7D9D9D9D9D7D9D9D9D7D7D7D9DADBDCDCDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD98D3737373737373737373737373737373737373737373737373737373735353535353535353535363636353535353535353535353534343434343434343434343333333333333332323231313131313131313131303030303030303030302F30303030302F2F2F2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A2A29292929292929292929282828282828282828272727272727272726252525252525252525252525252525252424242423232323232323232323232323232222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131312121212121212111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA7BDBDBD5D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000000A87898B8D8F929497999C9FA2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFF -FFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F7F7F5F43100000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E828486878B8B8F919395989C9EA2A4A8ABAFB1B4B7BABDC1C4C7CBCCD0D4D7DADCDEE0E3E5E7E9ECECEFF0F0F3F3F5F5F6F8F8F9F9F9F9FAFAFAFAFAFAFAF9F9F9F5B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887B7B7B7B7B7B797B7B7B7B7B7B7B7B7B7D7D7E7E808080828283838485858687878888898B8B8B8B8D8D8D8D8F8F8F909090909091919191919191919191919090908E898989868686888687868C90837E7D7D8091A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D7E7E8181838688898D8F90939697999B9CA1A2A4A7A7A8ACAEB1B5B8B9BBBCBCBCBFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A782838388898A8A8E909293979B9C9FA2A4A7A8AAAEB1B1B3B6B9BCBDC0C3C5C5C6C9CBCECFD0D1D3D6D7D6DADADBDEDEDEDEDEDFE1E1E2E3E4E4E4E4E4E4E6E6E4E3E3E3E2E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFA5373737373737373737373737373737373737373737373737373737373737353535353535353535353636353535353535353535353535343434343434343434343333333333333333323231313131313131313131303030303030303030302F3030303030302F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A29292929292929292929282828282828282828272727272727272726262525252525252525252425252525252424242423232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131312121212121212111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F72BDBDBD200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB90000000000000000000000000000000000000000000000001B88898B8E909295979A9D9FA2A5A8ABAEB1B4B7BBBDC1C4C6CACDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFF -FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F45800000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E838586888B8D8F919395999CA0A2A4A8ABAFB2B5B7BBBEC1C5C7CBCCD0D4D7DADCDEE0E3E5E7E9ECEDEFF0F0F3F3F5F5F6F8F8F9F9F9F9FAFAFAFBFBFAFAFAF9F9F9C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE7C7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7D7D7D7E808080808082828383848585868687878888898B8B8B8B8B8D8D8D8D8D8D8D8F8F8F8F8F8F8F8F8F8F8F8F8F8F8D867D7D7E7E7D7E7E7D7E7E8186798293ADB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7E7F818183868A8A8C8F929497999B9C9FA1A4A5AAABACB1B3B5B8B9BDBFC1C3C4C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7878789898D8E8F90939497999C9EA2A5A7ACAEB0B3B5B6B8B9BBBFC1C3C5C5C9CACACBCFD1D3D5D5D7D7D9D9DADADBDBDEDFDEDFDFE1DFDFDEDFDFDEDEDFDFDFDFDFE1E1DFE1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D3D3D3D1D1D1911A1A1A1A191919191919191919191919191919171717171717171717171716161616161515151515161414141414141515151514141414141414141413131313131313131313131312121212121212111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F39BDBD980F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000020888A8B8E909395989A9DA0A2A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F46100000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F3F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E838587888B8D90929395999CA0A2A5A9ABAFB2B5B7BBBEC1C5C7CBCED1D4D7DADCDEE0E4E5E7E9ECEDEFF0F1F3F3F5F5F6F8F8F9F9F9F9FAFAFBFBFBFBFAFAF9F9F9D9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A17D7B7B7B7B7B7B7B7B7B7B7B7B7B7B7D7D7D7D7E808080808082828383848485858686878788888889898B8B8B8B8B8B8B8B8B8D8D8D8D8D8D8D8D8D8D8D8D8B8B82787B7C7879797876787A89A1AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77E8081838588888D8E909394979B9C9FA1A4A5A8AAACB0B2B3B6BBBDC0C1C3C4C4C5C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A67B7C7D7F818388888A8C8F9094969B9B9EA1A2A4A7A8ACB1B1B3B6B8BBBDBFC0C4C5C6C6CACBCECFD1D5D6DADADADADBDCDEDEDEE1E1E1E1E1E1E1E2E2E3E3E2E3E3E4E4E6E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDB991A1A1A1A1A1919191919191919191919191919191717171717171717171717161616161615151515151614141414141415151514141414141414141414131313131313131313131313121212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5BD5D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7500000000000000000000000000000000000000000000000036888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5890000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A08486878B8B8F909295979A9DA0A3A5A9ACB1B3B5B9BDBEC1C5C7CBCED1D4D7DADCDEE0E4E5E7E9ECEDEFF0F1F3F3F5F5F6F8F8F9F9F9F9FAFBFBFBFBFBFBFAFAF9F9F1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7D7D7B7B7B7B7B7B7B7B7B7B7B7B7B7D7D7D7E7E80808080808282828383848485858686868787878888888889898B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B867E7D7D7C7B7B8695A5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A781818484868A8C8D8E909397979B9C9FA2A5A7A8A8ACAEB1B1B5B8B9BDBDBFC0C0C1C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A677797B7D7F8182848588898A8C8E909296999B9E9FA4A5A8A8ABAEB0B2B3B6B8BBBCBDBFC3C3C5C5C6C8C9CACBCFD0D1D3D6D7D7D9DBDCDBDADADADADADBDBDBDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DF9B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171717161616161615151515151614141414141415151514141414141414141414131313131313131313131313121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82BD200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000003B888A8D8F919396989B9EA1A4A6AAADAFB3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F5920000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A08587888B8D8F919395989A9EA0A3A7AAADB1B3B6B9BDC0C3C5C9CCD0D1D4D8DADCDEE0E4E5E7E9ECEDEFF0F1F3F5F5F6F6F8F9F9F9F9FAFAFBFBFBFBFBFBFBFAFAF9F9C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7F7D7D7D7B7B7B7B7B7B7B7B7B7D7D7D7D7D7E7E808080808080828282838383848585858686868787878787888888888888888888888888888888888888888681818994A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77E7F81818286898C8C8F909397999B9EA1A2A5A5A8ABAEB1B3B5B8B9B9BCBDBFC0C3C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6767879787C7E818386898A8D8F90929397999C9E9FA2A5A7A7AAACB0B2B3B6B9BCBFC0C3C5C6C6C8C9CBCBCBCED0D1D3D5D5D3D3D5D6D6D7D7D5D5D7D6D7D7D9D9D9D7D7D7D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAA51B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171717161616161615151515151614141414141415151514141414141414141414131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F488A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3500000000000000000000000000000000000000000000000050898B8D8F929497999C9FA1A4A7AAADB0B3B6B9BCC0C2C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F5C30000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A18687898B8D90929395999CA0A2A4A8AAADB1B4B7B9BDC1C3C5C9CCD0D1D4D8DADCE0E1E4E7E7E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBFBFBFBFAFAF9DFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD847D7D7D7D7D7B7B7B7B7B7D7D7D7D7D7D7E7E7E80808080808082828282838383848485858585868686868686878787878787878787878787878787878F99A3B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7F808181828586868A8C8D8F9394999B9C9EA1A4A5A7A8AAACAEB0B3B3B6B6B9BBBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7E80818385898A8D8F9093979B9B9C9FA1A2A4A5A7AAACB0B2B3B6B9BBBDBFC3C4C5C6CACACECFD1D5D6D5D7D7D7D9DBDCDCDEDCDEDEDEDEDFDEE1E1E1E1E2E1E1E1E1E1E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7941B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171717161616161615151515151614141414141415151514141414141414141414131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1A4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000005C898B8D8F929497999C9FA2A5A8AAAEB0B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5CD00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A187888B8D8F91929597999DA0A2A4A8ABAFB1B4B7BABDC1C4C7C9CCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBFBFBFBFBFAF9F7B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B29B837E7E7D7D7D7D7D7D7D7D7D7D7D7D7D7E7E80808080808080808282828283838383848485858585858585868686868686868686868689929DA8B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D7E81818588888C8D909296979B9CA1A2A5A7A8ABB0B1B2B6B6B9BCBFC1C1C3C5C5C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7E7F80818385898A8D8F929396999B9C9EA2A5A8ABAEB1B1B3B6B9BDBFBFBFC1C1C3C4C9C9CBCECFD0D0D1D3D3D5D5D7D9DADBDBDEDEDEDEDEE1E1E1E2E3E3E4E4E4E4E3E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDC9A1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171717161616161615151515151614141414141415151514141414141414141413131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000006D898B8E909295979A9DA0A2A5A8ABAEB1B4B7BBBDC1C4C6CACDCFD2D5D8DADCDFE1E4E6E7EAEBEDEFF0F2F3F4F5F6F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5F400000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A188898B8D90919395989A9EA0A3A5A9ABAFB2B5B7BABEC1C4C7CACCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFBFBFBFBFBFBFBFBFAFAF9CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B29B83807E7E7D7D7D7D7D7D7D7D7D7E7E7E7E808080808080808080828282828283838383838384848484858585858585868F99A3AEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7858486898A8C8D8E8F909397999B9EA1A2A7A7ABAEB2B3B6B6B9BBBDBFC1C3C5C5C8C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7C7E7F81818285898A8C8E909294979B9B9EA1A4A7A8ABAEB1B2B5B8BBBCBDBFBFC1C3C4C6C9C9CACECFD0D1D5D5D6D6D6D7DADADBDADBDADADBDADADCDCDEDEDBDBDADADAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DE9A1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171716161616161615151515151614141414141415151514141414141414141413131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED000000000000000000000000000000000000000000000000007D8A8C8E919395989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDD0D3D6D8DBDDDFE2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFF -FFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F5F413000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A1888B8D8F91929595999CA0A2A3A7AAADB1B3B5B7BDBEC1C5C7CBCCD0D4D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFAFBFBFBFBFCFCFCFBFBFBFBFAFAE7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A58D81807E7E7E7E7E7E7E7E7E7E7E808080808080808080808080828282828282828383838383838387919AA3ACB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A988888C8E9090949797999B9C9E9FA1A4A4A7A8ABACB1B1B1B5B8B9BBBCBDBFC0C1C3C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7838486888A898E8F909397979B9CA1A2A5A7ABB0B2B3B5B8B9BCC0C1C3C6C9C9CBCFD1D5D5D7D9DBDEDEDFE2E3E3E3E4E6E9E9EAEBEBEBEAEAEAEBEBEBECEEEFEFEEEEEEEEF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADB991B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171717161616161615151515151614141414141415151514141414141414141413131313131313131313131311121212121212111111111111111111111111101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE00000000000000000000000000000000000000000000000000888A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BCBFC2C5C7CACED0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFF -FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F53100000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F7F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A18B8B8D90919395979A9DA0A2A4A8AAADB1B4B7B9BDC0C3C5C7CBCED1D4D7DADCDDE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFBFCFCFCFCFCFBFBFBFBFAF9BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7988B838080807E7E7E7E8080808080808080808080808080808082828282868A939BA3ACB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78384868688898C8E8F92929697999B9EA1A4A5A7ABACAEB1B2B5B5B8B9BCBFC0C3C3C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D7D80818386898C8E8F909396999B9C9EA2A5A8ACB0B2B5B6B9BBBFC0C4C6C9CBCED0D1D3D5D6D7DADADADBDBDCDEE1E1E2E2E3E4E6E6E6E7E9E9E7E9E9E7E6E6E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D3D3D3D1D1D1D0D1D1D1D0D1D1D1D3D1D3D3D5D7D7D7D7D7D7D9D7D7D7D7D5D6D6D7D7D5D5D5D5D5D6D6D6D6D7D7D7D7D7D7D7D7D7D9D9DADAD9D9D9D9DADADADBDCDCDEDEDEDCDEDFE1DFE1E1E1DFDEDEDEDEDEDFE1E2E3E2E2E3E3E4E3E2E3E3E3E3E1E3E2E2E1E2E2E2E2E2E39D1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515141414141414141414131313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA200000000000000000000000000000000000000000000000016898A8D8F919496999B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED1D3D6D9DCDEE0E2E5E6E9EAECEEEFF1F2F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF -FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F54E0000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A28B8D8F91939597999C9EA0A3A5A9ABAFB2B4B7BABDC1C3C5C9CCD0D1D4D7DADCDEE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFBFBFBFBFADFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0A79E98918D8787878380808080818787888892929A9E9FA8B0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77F81828688898C8C8F8F909394979B9CA1A1A2A4A5A5A8AAABACB0B1B5B5B8B9BBBBBDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77E7F8183858589898C8E8F9294979B9C9EA1A2A5A7AAACB1B1B6B8B8BDBFBFC1C3C5C9CACBCFD1D5D6D7D7D9DADADADBDBDCDBDBDCDEDFE1DFE1E2E1E1E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4A01B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515141414141414141414131313131313131313131313121212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000020898B8D8F929497999C9FA1A4A8AAADB0B3B7B9BDC0C2C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF -FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6F56200000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A28D8F91929395989A9DA0A2A4A8AAADB1B3B5B7BBBDC1C4C7C9CCD0D3D4D8DADCDEE0E4E5E7E9ECEDEFF0F0F3F3F5F5F6F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFBFBFBFBFABEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A98A8D8E9090929697999B9C9E9FA2A4A5A7AAACB0B1B1B5B6B9BCBDBFC1C3C3C5C5C5C8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A5747678787B7D7E81818589898D90939496999B9B9FA2A5A5A8ACB0B3B5B9BBBFC0C1C3C5C6C8C9C9CACECFD0D1D3D5D5D7D9D9D7D9DADADADBDCDCDCDEDEDEDFDFDEE1E1DFE1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DF9B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515141414141414141414131313131313131313131313121212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000000000000000000000000000000000000000000000000036898B8E90929497999C9FA2A5A8ABAEB1B4B7BABDC0C4C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF -FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7F5920000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A38F9092939597999C9EA0A3A5A9ABAFB1B4B7B9BDBEC1C5C7CACCD0D3D6D9DADCE0E1E4E5E7E9ECEDEFF0F0F3F3F5F5F6F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFBFBFBFAD9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8D8E90939697999B9C9EA1A4A5A7ABACAEB1B5B5B8B9BBBBBDC0C3C4C6C8C9CBCFD1D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77E81818486888A8D8F9293979B9C9EA1A2A5A7A8ABAEB1B2B6B9BCBDBFC1C4C5C9CBCFD1D1D5D5D7D6D9DADBDCDEDEE1E3E3E6E6E4E4E6E6E6E6E6E6E7E9E7E7E7E6E4E4E3E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDB991B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161616151515151516141414141414151515141414141414141414131313131313131313131313121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35000000000000000000000000000000000000000000000000478A8C8E919395989A9DA0A2A5A9ABAFB2B4B8BBBEC1C4C7CACDCFD2D5D8DBDDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF -FFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5B000000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F6F5F3C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A49192939597999A9EA0A2A4A8AAACB1B2B5B7BABDC1C3C5C7CBCCD0D4D7D9DADDE0E1E4E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFBFBFBF7B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8E9092929497979B9C9CA1A2A5A7A8ACB1B1B3B5B5BBBBBCBFC1C3C4C5C6C9CACBCBCBB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77C7E8082838389888A8C8F9090939497999B9FA1A4A5A7A8ACB1B3B6B6B9BCBDBFC3C3C4C5C6C9C9CBCECFD1D1D3D5D5D7D6D7D9DADADADADADADAD9D9D9D9DADBDCDCDCDCDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBA41B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161615151515151516141414141414151515141414141414141414131313131313131313131313121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19000000000000000000000000000000000000000000000000578A8C8E919396989B9DA0A3A6A9ACAFB2B6B8BBBFC1C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFF -FFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F7F6C400000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A492939595989A9DA0A2A3A5A9ABADB1B3B6B7BBBEC1C4C7C9CCD0D1D4D7DADCDDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBDAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A987888A8D8D9090939497979B9C9F9FA1A4A5A5A7A8AAAEB0B1B2B3B3B6B6B8B9BBBBBDBBB4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78182838589898C8D8F9092949797999CA1A2A5A8ABABAEB1B5B6B6B9BBBDBFC1C4C5C6C9C9C9CACED0D1D3D5D6D7D6D5D7D9DADADADCDADADADBDEDEDCDBDBDBDBDCDEDCDCDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E19E1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161615151515151514141414141414151515141414141414141414131313131313131313131311121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000006E8A8D8F919496999B9EA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDDE0E2E5E6E9EAECEEEFF1F2F3F4F5F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFF -FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6F500000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A4939595989A9CA0A0A3A5A8AAADB1B2B4B7B9BDC0C1C5C7CACCD0D3D4D8DADCDEE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBF7BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8E8F90929496979B9C9C9E9FA2A5A5AAABB0B0B2B3B5B6B6B9B9BBBCBFC3C3C4C5C6C5C6C0B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A98687888A888A8C8D909294979B9B9EA1A2A5A8ACB0B2B3B6B9BCBDC0C0C1C3C5C8CBCBCECED0D3D5D7DADADADBDBDEDFE1E1E2E1E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E19C1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191919171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE000000000000000000000000000000000000000000000000007E8B8D8F929497999C9FA1A4A8AAADB0B3B7B9BDC0C2C6C9CBCED1D4D7D9DCDEE0E2E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF -FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6F51E00000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A49597989A9C9EA0A2A4A7A9ABAFB1B3B6B7BBBDC1C3C5C7CBCCD0D3D6D9DADCDEE0E4E5E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBE3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA909293939697999B9E9FA2A4A5A7ABACB0B1B3B6B9BCBDBDBFC1C1C3C3C4C4C5C8C9C9CACBC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A78183838688888A8D8E9092929494999C9C9EA2A2A5A5A8AAACACAEB0B1B2B6B9BBBDBDC0C1C3C4C5C8C9CACECECFD0D0D0D0D1D1D3D5D5D6D5D5D3D3D5D6D5D5D5D5D7D6D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E29E1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171616161616151515151516141414141414151515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD00000000000000000000000000000000000000000000000005898B8E909294979A9C9FA2A5A8ABAEB1B4B7BABDC0C4C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF -FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F7F53A0000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F8F6F5F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A697999A9C9EA0A2A4A5A9ABADB1B3B5B7B9BDBEC1C4C7C9CCD0D1D4D7D9DADDE0E1E4E7E7E9ECEDEFF0F0F3F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8C8D8F8F92939396999B9C9EA2A2A5A5A7A8ABAEB2B2B5B6B9BBBDBFBDC0C3C4C6C6C8C9C8C8B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7858689898A8D8F8F92929497979B9C9FA2A5A7A8ABAEB0B2B6B9BCBCBFBFC1C5C6C9CACBCED0D3D3D6D7D7DADBDCDEDEDCDEDEDBDEDCDBDBDCDEDCDEDEDEDEDEDFDEDEDEE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6941B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191919171717171717171717171616161616151515151516141414141414151515141414141414141414131313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000001B8A8C8E919395989B9DA0A2A6A9ABAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF -FFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5620000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6999C9DA0A0A2A4A5A9AAADAFB1B4B6B9BBBDC1C3C5C7CBCCD0D3D4D8DADCDEE0E3E5E7E8E9ECEDEFF0F1F3F3F5F5F6F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBEBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8F9090949697999B9E9FA2A4A5A8ABACACB1B2B5B8B9BDBDC0C3C5C6C8CBCED0D1D1D5D5D7D9D7BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A9868888898D8E90929397999B9C9EA1A2A4A5A8A8ACACAEB1B2B6B9BBBDBFC3C4C6C8C8CACBD0D1D1D5D3D6D7D7DADBDCDBDBDCDFDEE1E1E1E1E1E1E2E4E6E6E4E3E3E4E4E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5951B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171616161616151515151516141414141414151515141414141414141414131313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000318A8D8F919396989B9EA0A4A6A9ADAFB2B6B8BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFF -FFFFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F58900000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F6F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A89C9EA0A0A2A4A5A8AAACAFB1B3B5B7BABDC0C1C4C7C9CCCED0D4D6D9DADCDEE0E4E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBCFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB97999B9B9E9FA2A5A5A7A8ACAEB0B2B5B9BBBBBDBFC1C3C5C6C9CBCECFD0D0D3D5D5D7D9D9D9DADAB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A989898A8C8E8F9092939797999C9B9EA1A4A5A8ABACB1B3B5B8B9BDC0C1C4C5C8CBCBD0D0D1D3D3D5D6D7D9DADBDEDEDFE1DEE1E1E1E2E4E6E6E4E6E6E6E4E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6D23A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939393A3A3A3A3A3939393939393939393939383838383837373737373737373737373737373737353535353535353636353535353535353535353434343434353535353434343434343435353434343333333333333232323232323232323131313131313131313030302F2F2F2F2F2F2E2E2E2E2E2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828282727272727272727262525252525252525252425252525252424242423232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171616161616151515151516141414141414151515141414141414141414131313131313131313131313121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C000000000000000000000000000000000000000000000000428B8D8F929496999C9FA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDEE0E2E5E6E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F6B100000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A9A0A0A2A3A4A7A9AAACAFB1B3B5B7B9BDBEC1C3C5C7CBCCD0D1D4D7DADCDDE0E1E4E7E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBF9BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB949799999B9B9CA1A1A2A4A7A7AAABACAEB1B2B6B8B9BBBCBDBFC1C4C5C5C9C9C9CACACBCECFCECFCBB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA8C8E8E8F9092939497979B9C9C9C9FA2A5A7A7ACACAEB1B2B3B9BBBDBFC4C5C8C9CBCBD0D3D5D7D7D9DADBDCDEDFE1E2E3E3E2E3E3E3E3E4E4E4E4E4E6E4E3E3E4E3E3E3E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3493A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3939393939393939393A3A3A3A3A3939393939393939393939383838383737373737373737373737373737373735353535353535353636353535353535353535343434353535353535343434353535353535343434343333353535353535353533333333323131313131313131313030302F2F2F2F2F2F2E2E2E2E2E2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282827272727272727272625252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919171717171717171717171616161616151515151516141414141414151515141414141414141414131313131313131313131313121212121212111111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07000000000000000000000000000000000000000000000000588B8D8F929497999C9FA2A5A8ABAEB0B4B7BABDC0C3C6C9CBCED1D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFAF9F9F8F7F6CE00000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AAA0A2A3A5A7A9AAACAFB1B3B5B7B9BBBDC0C1C5C7C9CCCED0D3D6D8DADCDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBE6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AC97999B9C9C9FA1A4A5A5A7A7AAABACB1B2B6B6B9BBBDBFC1C1C3C4C5C6C8C9C9C9CBCECED0D0D1D3D1C7B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9696979799999B9C9EA1A4A5A7A8ACB0B1B3B5B6B8BCBDC0C1C5C6C9CBCFD0D3D5D7D9DADADCDEDEDEDEE1E1E1E1E2E3E2E3E3E3E2E1E1E3E3E3E3E3E4E4E3E3E4E3E3E2E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDE6B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A39393939393939393A3A3A3A3A39393939393939393939393838383837373737373737373737373737373737353535353535353636353535353535353535363535353535353535363535353535353536363535353535353535353535353535333333333232323232313131313030303030302F2F2F2E2E2E2E2E2E2E2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282727272727272727262625252525252525252525252525252524242423232323232323232323232323222222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000006E8B8E909295979A9DA0A2A5A8ABAEB2B4B7BBBDC1C4C6C9CCCFD2D4D7DADCDEE1E3E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F7F500000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F5C0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AAA3A4A5A8A9ABADAFB1B3B4B7B7BABDBEC1C4C5C7CBCCD0D1D4D7D9DADDE0E0E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBCFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA7AAACACAEB0B2B2B6B8BBBDBDBDBFBFC0C1C3C5C8C9CACBCED0D1D3D3D5D5D5D7D7D9DADADBDCDBDCDCC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A98A8C8E90909293939697999B9C9FA2A4A5A5A7A7AAAAACAEB1B3B5B8BCBFBFC0C0C3C5C6C8C8C8CACECFD0D1D1D3D5D5D6D7D6D7DAD9D9DADBDBDBDCDEDEDEDEDEDEDBDCDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDE933B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3939393939393939393A3A3A3A3939393939393939393939383838383737373737373737373737373737373535353535353535363635353535353535353535353535353636363635353536363636363635353535353535353535353535353333333332323232323232323130303030303030302F2E2E2E2E2E2E2E2E2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727272626252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB900000000000000000000000000000000000000000000000000858C8E919396989B9DA0A3A6A9ACAFB2B5B8BBBFC1C4C7CACDD0D3D5D8DBDDDFE1E4E6E7EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F53100000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F6C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ACA5A8A9AAABADAFB1B3B5B7B7BABDBEC1C3C5C7CACCD0D1D3D6D8DADCDEE0E3E4E7E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBF9BFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEA1A1A2A5A7A8A8ABACAEB0B2B2B5B6B9BCBDBFC1C4C4C5C9CBCECECFD0D3D3D6D7DADADBDBDCDBDCDEDEDEC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB93949497999B9B9B9B9B9E9EA2A4A5A7A8ACACAEB1B2B2B5B9BBBFBFC1C4C5C8C9CACFD0D1D3D5D7DADADBDCDCDCDEDEDEDEDFE1E1E3E3E3E3E2E3E3E3E4E6E7E7E6E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9BE3B3B3B3C3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A393939393939393A3A3A3A3A3939393939393939393938383838373737373737373737373737373737373535353535353536363535353535353535353535363636363636373736363636363636363635353535353535353535353535353535353532323232323232323131303030303030302F2E2E2E2E2E2E2E2E2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A2929292929292929292928282828282828282827272727272727262625252525252525252525252525252524242423232323232323232323232323232222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000118A8D8F919496999B9EA1A4A6AAADB0B3B6B9BCBFC2C5C7CBCED0D3D6D8DBDDE0E2E4E6E8EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F64F00000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ADA9AAABADAFB1B1B3B5B7B7BABDBEC1C3C5C7C9CCCCD0D3D4D7D9DADDDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AC9B9B9E9F9FA1A4A5A7A7ABABACACAEB1B2B3B5B6B6B9BBBCBFC1C3C3C3C4C5C6C8CACBCFCFCFD0D1D1D0D3D3BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9293949797999B9C9C9E9FA2A5A7A8ACAEB1B1B5B5B8B9BDBFC1C3C4C5C5C5C8CACBCED0D0D1D5D6D7DADADCDEDEDFE1E1E1E2E2E1E2E3E3E3E3E3E4E4E4E6E6E7E9EAEAEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEE23C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A393939393939393A3A3A3A3A3939393939393939393938383838373737373737373737373737373737373535353535353536363535353535353536363636363636373737373636353535353536363535363536363636363535353535353535353533333332323232323131313130303030302F2E2E2E2E2E2E2E2E2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282827272727272727262625252525252525252525252525252524242423232323232323232323232323232222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919191717171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55000000000000000000000000000000000000000000000000268B8D8F929497999C9FA1A5A8AAADB0B3B7B9BDC0C2C5C9CBCED1D4D7D9DCDEE0E2E5E7E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F67500000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEABADAFB1B1B3B4B5B7B9BABDBEC1C3C5C7C9CBCCD0D1D4D6D9DADCDEE0E1E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA8A8ABAEB0B1B1B2B5B6B6B9B9BCBCBDC0C1C4C4C5C6C9CACBCBCBCED0D1D1D3D3D6D9D9D7D7D9DADADADBDBDCB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA90929393949799999B9C9E9EA2A5A7A7AAABACB0B2B2B3B5B8B9BBBDBFC1C3C4C6C6C9CBCACBD0D0D1D3D3D3D5D5D5D5D5D5D7D9DADADADBDCDEDBDBDBDBDBDBDEDCDCDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1573C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3A3A3A3A3A3A3A393939393939393A3A3A3A3939393939393939393939383838383737373737373737373737373737373535353535353536363535353535363636363636363636373736363636353535373737373636363636363636363535353535353535353533333333333332323131313131303030302F2F2E2E2E2E2E2E2E2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282827272727272727272625252525252525252524252525252524242424232323232323232323232323232222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161615151515151614141414141415151514141414141414141313131313131313131313131112121212121211111111111111111111111110101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000003D8B8E909295979A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F6A600000000000000000000000000000000000000000000000000F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEAFB1B1B2B4B5B7B7B9BBBDBEC1C3C5C7C9CBCCD0D1D3D6D7DADCDDE0E0E3E5E7E8E9ECECEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBCFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AE9E9FA2A4A7A7A8A8ABAEB0B1B3B3B6B6B8B9BCBDBFBFC1C4C5C9C8C9CACBCECED0D1D3D3D3D7D6D9D9DADADADCD6B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB9797999B9C9E9FA1A2A2A5A5A7A8AAACACB0B1B5B5B8BBBBBFBFC3C3C5C5C8CACACACBCECFCECFD0D3D5D5D6D6D9DADBDBDADCDEDFDFDFE1DEDFDFE1E2E3E2E1E1E1E2E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E67D3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A393939393939393A3A3A3A39393939393939393939393838383737373737373737373737373737373535353535353636363635353636363638383836363636363636363836373737373737383837373737373737373736363635353535353434353533333333333131313131313130302F2F2F2F2E2E2E2E2E2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727272625252525252525252524252525252524242424232323232323232323232323232222222222202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171717161616161615151515161614141414141515151514141414141414141313131313131313131313131212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000538C8E919396989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADDDFE1E4E6E7E9EBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7CE00000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F8F7C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B1B2B4B5B6B7B9BABDBDC0C1C3C5C7C7CBCCCED0D3D4D7D9DADCDEE0E3E4E5E7E8EBECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBF9C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA2A4A5A5A5A8AAA8ABAEB1B1B3B5B5B5B6B8B9BCBDBDBDBFC1C3C3C5C8C8C8C8CACACACECFD0D3D3D3D3D5D5D3D5CAB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AC999B9B9C9E9EA1A2A5A5A5A7A7AAACAEB1B2B6B8B9BCBFBFC0C3C5C5C9CACBCBCBCBCED1D1D3D5D5D6D9DADBDEDEE1E1E1E2E2E2E2E3E3E3E3E3E3E4E4E4E4E4E4E6E6E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFB23C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A393939393939393A3A3A3A393939393939393939393838383837373737373737373737373737373735353536363636363836363636383838383836363636383838383836383838383838383837373737373737373736363636363636363534353535353333333232313131313131302F2F2F2F2F2E2E2E2E2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727272625252525252525252525252525252524242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191917171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313131212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE000000000000000000000000000000000000000000000000006E8D8F919496999B9EA1A4A6A9ADAFB3B6B8BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7F5000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B4B5B6B7B7BABBBDBEC1C1C3C5C7C9CBCCCED0D3D4D6D9DADCDDE0E0E3E5E7E8E9ECECEFEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBF1BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA4A4A5A5A8A8AAABACAEAEB0B2B3B6B9B9B9BDBFBFBFC1C3C5C8C9C9CACBCBCECECECFCFD0D0D0CFCFD1D1D0D1D0D0C2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AEA1A2A2A2A2A4A5A5A7AAABACAEB1B1B1B1B2B2B3B6B9BBBFBFC1C3C3C5C8C9CACBCBCECED0D0D1D3D1D3D3D5D5D5D6D7D7D7D7D7D7D7D7D7D7D9DBDCDCDEDCDBDBDBDBDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADAC83D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A393939393939393A3A3A3A393939393939393939393838383837373737373737373737373737373737363636363738383837373738383737373638383838393939393838383939393939393838383838383838383737373736363636363535353535353333333232323131313131302F2F2F2F2F2E2E2E2D2D2D2D2C2C2C2C2C2B2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727272625252525252525252525252525252524242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191717171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA200000000000000000000000000000000000000000000000000868D8F929497999C9FA1A4A8AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDDE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F63100000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B7B7B9BABBBDBDC0C1C1C4C5C7C9CBCCCED0D1D4D6D8DADCDDDEE0E3E4E5E7E8EBECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBE9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0AAACACAEB0B1B2B3B6B6B8B9B9B9BBBDBFC3C3C5C5C6C9CACBCBCBCECFD0D0D0D0D1D3D5D5D6D7D7D9D7D9DADADADADAC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA7AAAAAAAAABABACAEB0B2B5B5B6B9BBBFC0C1C3C4C4C8C9CACBCFD1D3D5D7D7DBDBDEDEDFDFE1E3E3E2E2E3E3E3E3E4E4E4E4E4E4E3E2E2E3E3E4E4E4E4E4E3E3E4E3E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDE523D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393A3A3A3939393939393939393938383838373737373737373737373737373737373736373737373939373738373737393939383A3A3A3A393A3A3A3A39393A393A3A3A3A3939393939393939383737373737373736353535353535353333323232323231313131302F2F2F2F2F2E2E2E2D2D2D2D2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727272626252525252525252525252525252524242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191717171717171717171716161616161515151515161414141414141515151414141414141414141313131313131313131313111212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A000000000000000000000000000000000000000000000000168B8E909295979A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F66200000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9BABBBDBDBEC1C1C3C5C5C7C9CBCCCED0D1D4D6D8DADADCDEE0E1E4E5E7E8E9ECECEFEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBE9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFABACB1B0B1B1B2B3B5B6B9BBBCBCBDBFBFC0C1C4C4C6C9C9C9CACECFD0D1D1D1D1D3D5D5D5D6D6D6D6D7D9D7D9DAD9DADABBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA5A5A7A8AAAAACACAEB0B1B3B5B6B6B9BCBCBDBFBFC1C3C4C5C5C6CAC9CBCECBCECFD0D1D3D3D3D6D7D7D9D9D9DADADADADADBDADADADADADADADBDBDBDADADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6753E3E3E3E3E3E3E3E3E3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3A3A3939393939393A3A3A3A39393939393939393939383838383737373737373737373737373737373837373739393939383838393939393B3B3A3A3B3B3B3A3A3B3B3A3A3A3A3B3B3B3A3A3A3A3A393939393938383838383837373736363535353535333332323232323231313130302F2F2F2F2F2E2E2D2D2D2D2D2C2C2C2C2B2B2B2B2B2B2B2B2A292929292929292929282828282828282828272727272727272626252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171717161616161615151515151614141414141415151514141414141414141413131313131313131313131112121212121211111111111111111111111110101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000002C8C8E919396989B9DA0A3A6A9ABAFB2B5B8BBBEC1C4C7CACDCFD2D5D7DADCDEE1E4E5E7E9EBECEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F78900000000000000000000000000000000000000000000000000F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F8C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BDBDBEC0C1C1C3C4C5C7C7CACCCCD0D0D3D4D6D7D9DADCDEE0E1E3E5E7E7E9ECECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBE3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFAAABABAEB0B0B2B1B3B3B3B5B6B8B9BBBDBFC0C3C4C5C4C5C8C9CBCACED0D1D3D3D3D6D6D7D7D9D9D9DADADADADADADBDAD7B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA2A2A4A4A5A5A5A7A7A8A8AAABAEB1B2B5B6B9B9B9BBBDBFC0C0C1C4C5C6C6C8C9C9CACACACBCBCECED0D0D1D3D5D5D5D6D9D9D9D9DADADADADADAD9D7DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFA83E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3A3A3939393939393A3A3A3A39393939393939393939383838373737373737373737383837373A3A3837393939393939393939393B3B3B3B3C3C3B3B3C3C3C3B3C3C3B3B3B3B3B3C3C3C3C3B3B3B3A3A3939393939393938383838383736363635353534343232323232323231313030302F2F2F2F2F2E2D2D2D2D2D2C2C2C2C2B2B2B2B2B2B2B2B2A292929292929292929282828282828282828272727272727272626252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171717161616161615151515151614141414141415151514141414141414141413131313131313131313131112121212121211111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07000000000000000000000000000000000000000000000000428D8F919496999B9EA1A4A6AAADAFB2B6B8BCBFC1C5C7CACDD0D3D6D8DBDDDFE1E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7B100000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BEC1C1C1C3C4C5C7C7C9CBCCCCD0D1D3D4D6D8D9DADCDDE0E0E3E5E5E7E8EBECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBBBBCBCBDBFC1C1C3C4C6C9C9CBCECECED0D0D3D1D3D3D7D7D7D9D9D9D9DAD9DADADADCDEDEDEDEDFE1E1E3E3E3E3E3E3E3DBB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFA2A5A7A7A8A8A8ABACAEB1B1B1B2B2B5B6B6B8B9BBBFBFC3C4C5C5C5C8C6C9CACACBCBCFCECFCFCFD1D5D3D3D3D5D7D6D9DADADADAD9D9D9D9DBDADBDBDBDBDAD9DADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6C43E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3A393939393939393A3A3A393939393939393939393838383837373737373738383838373A3A3A3939393939393B3B3B393B3B3B3C3C3C3C3C3C3C3C3C3C3C3D3D3D3C3C3C3D3D3D3B3B3C3C3C3C3A3A3A3A3A3939393939383838383736363636353434343232323232323231303030302F2F2F2F2E2D2D2D2D2D2D2C2C2C2B2B2B2B2B2B2B2B2A292929292929292929282828282828282828272727272727272726252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171717161616161615151515151614141414141415151514141414141414141313131313131313131313131212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9000000000000000000000000000000000000000000000000005E8D8F929497999C9FA1A5A8AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D9DBDDE0E2E4E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7E3000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C1C3C4C5C5C7C7C9CBCCCCD0D0D1D3D4D6D8DADADCDDE0E0E3E4E5E7E8E9ECECEDEFF0F0F1F3F5F5F6F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B5B6B8B9BBBDBDBDC0C1C3C3C3C4C5C5C6C9C9CACBCBCBCECFD0D0D1D1D1D5D5D6D7D7D6D7D7D9D7D9D9DADAD9D9D9DADADAD9CCB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B0B1B1B1B1B2B2B3B6B6B8B8B9B9BBBCBDBDBFC0C0C1C4C5C5C6C8CACBCBCFD0D0D1D3D5D6D7D9DADADADADCDEDEDEDEDFE1DFDFDFE2E2E2E3E3E3E2E2E1E1E1E1DFE1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7553E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3A3939393939393A3A3A3A3939393939393939393838383837373737393938383839393A3B3B3B3939393B3B3B3B3C3C3B3B3B3C3C3C3D3D3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3B3B3B3B3B3B3939393938383838373737373636353434333232323232323231303030302F2F2F2F2D2D2D2D2D2D2C2C2C2B2B2B2B2B2B2B2B2A292929292929292929292828282828282828272727272727272726252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171717161616161615151515151614141414141415151514141414141414141313131313131313131313131212121212121111111111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000007A8E909395989A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7F61E00000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8C4C5C5C7C7C9CBCCCCCED0D0D3D4D6D7D9DADADCDDE0E0E3E4E5E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9B9BBBBBCBFBFC0C0C3C3C5C5C5C6C6C9C9CAC9C9CACBCECED0D0D0D1D3D5D5D7D7D7D6D7D9D7D7D9D7DADAD9D9D7D9D9DAD9D7C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8B9B9BBBDBDC0C0C1C0C1C1C5C5C6C8C9CECFCFD0D1D1D6D7D7D9D9DADBDEDEE1E1E1E2E3E4E6E7E9E9EAEBEBEBEBEEEFEEEEEEEFEFEFEEEEEFEFEEEEEEEEEEEFEFF2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9863E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3C3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3A3939393939393A3A3A3A393939393939393939383838383737393939383939393B3B3B3B3B393B3B3B3B3B3B3D3D3D3D3D3D3D3D3E3E3F3D3D3D3E3E3F3F3F3D3E3E3E3E3E3E3E3E3D3D3D3B3B3B3B3B3B3A3A3A393838383838373737373636353433333332323232323230303030312F2F2F2F2D2D2D2D2D2D2C2C2B2B2B2B2B2B2B2B2A292929292929292929292828282828282828272727272727272726252525252525252525252525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919171717171717171717171616161616151515151516141414141415151514141414141414141413131313131313131313131112121212121211111111111111111111111110101010101010101010100F0F0F0F0F0F3A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000000B8D8E919396989B9DA0A3A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D5D7DADCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F74F00000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8C7C7C9C9CBCCCCCED0D0D1D3D4D6D7D9DADCDCDDE0E0E3E4E5E7E7E9EBECEDEFEFF0F0F1F3F5F5F6F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBE3B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C8C8C9CACECFD0D1D0D1D1D1D1D1D3D5D6D7D7D7DADADBDCDEDBDCDCDEDEDFE1E1E1E1E1E2E3E3E4E3E6E4E3E3E3E3E3E4E4E6E4E3C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFABABAAABACACAEAEB1B2B3B3B5B3B5B5B6B6B8B8B9BCBDBFC3C4C5C5C5C6C9C9CACACACED0D0D1D3D3D3D5D5D6D7D6D7DAD9D9DADADBDBDCDEDEDEDEDEDEDBDCDBDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEAD3E3E3E3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A393939393939393A3A3A39393939393939393939383838393939393B3B39393B3B3B3B3B3B3B3B3B3B3C3C3C3D3D3C3C3D3E3E3E3E3E3F3E3E3F3F3F40403F3F3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3B3B3B3A3A3A383838383737373737353535333333323232323231303030312F2F2F2F2D2D2D2D2D2D2C2C2B2B2B2B2B2B2B2B2A292929292929292929292828282828282828272727272727272726252525252525252525242525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919171717171717171717171616161616151515151614141414141415151514141414141414141413131313131313131313131112121212121211111111111111111111111110101010101010101010100F0F0F0F0F8A82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F20828A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35000000000000000000000000000000000000000000000000278D8F929497999C9FA1A4A7AAADAFB3B6B8BCBFC2C5C7CACDD0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F78000000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BACACBCBCCCCCED0D0D1D3D4D6D7D8DADADCDDDEE0E0E3E4E5E7E7E8EBECECEDEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBE9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDBFC0C0C1C0C3C3C3C4C5C6C8C9C9CACACACBCACACBCBCECFCFD0D1D1D3D3D3D5D5D7D7D6D7D5D6D5D5D5D6D7D7D9D9D9D7D9DADADBBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0ACACACAEB0B2B2B2B3B5B6B6B8B8B9B9BBBDBDBFC0C1C3C4C5C6C9C9CBCBCED0D1D1D3D5D5D7D6D6D7D7D7D9DADADBDCDBDADADADADBDCDEDEDEDEDEDFE1E1DFDEDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4D83F3F3F3F3F3F3F3F3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3C3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3939393939393A3A3A3A3939393939393939393838393939393B3B3B3B3B3B3A3A3B3B3B3C3B3C3C3E3E3D3D3E3F3D3F3F3F3F3F3F3F3F3F3F3F40414141413F3F3F40403F3F3F3E3E3E3E3E3D3D3D3D3C3C3C3B3B3A3A3A3838373737373737353535333333323232323131303030312F2F2F2E2D2D2D2D2D2D2C2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272726252525252525252525242525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191919171717171717171717171616161615151515151614141414141415151514141414141414141413131313131313131313131112121212121211111111111111111111111010101010101010101010100F0F0F0F4FBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000438E90929497999C9FA2A5A8AAAEB0B3B7B9BCC0C2C5C9CBCED1D3D6D9DBDEE0E2E4E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F7B200000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCCCCCCED0D0D0D1D3D4D6D7D8D9DADADCDDDEE0E0E3E4E5E7E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F6F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBECBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBBDBFBFBFC0C1C3C3C3C3C3C4C4C5C8C9C9C9CACBCED0CFD1D0D0D1D5D6D6D5D6D5D7D6D6D7D9D9DADAD9D9D7D9D7D6D6D5D5D5D1D1CEB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B5B5B6B6B8B9BCBDBDBDBDBDBFBFBFC1C1C3C4C5C8C6C9CACBCACBCECFD0D0D3D3D3D6D6D6D7D7D7D9D9DAD9DBDBDBDEDCDBDCDCDEDBDEDCDEDEDEDEDEDEDEDEDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDC653F3F3F3F3F3F3F3F3F3F3F3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3A3939393939393A3A3A393939393939393939393939393B3B3B3B3B3B3A3A3B3B3C3C3C3E3C3E3E3D3D3F3F40404040403F3F4040404140404141414142424241414141414141413F3F3F3F3F3E3E3E3D3D3D3C3C3A3A3A3A3937373737373737353535333333323232313131303031312F2F2E2E2D2D2D2D2D2C2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828282727272727272726252525252525252525242525252525242424232323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191919171717171717171717161616161615151515151614141414141415151514141414141414141413131313131313131313131212121212121111111111111111111111111010101010101010101010100F0F0F1ABDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4000000000000000000000000000000000000000000000000005F8E919396989B9DA0A2A5A9ABAEB1B4B7BABDC0C4C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7E30000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDD0D0D0D1D3D3D4D6D7D7D9DADADCDCDDDEE0E1E3E4E5E7E7E8E9ECECEDEFF0F0F1F1F3F5F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBF1C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9BBB9BBBCBBBDBDBDBDBDBDC0C0C1C3C4C4C5C5C5C6C5C8C9C9CACBCECFCFD0D0D0D0D0CECECED0D1D0D0D0D0D0D0D0CFCECFCECECECBC7B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B0B1B1B2B2B3B3B3B5B5B6B6B8B9BBBBBCBDBDBDBFC0C1C3C3C4C8C8C8C9CBCACBCBCFD1D3D3D5D5D6D6D6D7D6D7D7D7D7D7D6D6D7D7D7D9D7D7D9D9D9D7D7D6D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E18E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3D3D3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3A39393939393A3A3A3A393939393939393A3A39393A3B3B3B3B3B3B3B3B3B3C3C3E3E3E3E3D3D3F3F40414141404141404141424242424243434342424242424242424242424242404040403F3F3F3E3D3D3D3D3B3B3A3A3939373737373737373535353333333232323131303031312F2F2E2E2D2D2D2D2D2D2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272726262525252525252525252525252525242424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919191717171717171717171616161616151515151516141414141414151515141414141414141414131313131313131313131312121212121211111111111111111111111110101010101010101010100F0F0F0F8ABDBDBDBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D000000000000000000000000000000000000000000000000007C8F919396989B9EA1A4A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D5D8DADDDFE1E4E5E7E9EBECEEF0F1F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F7F71E00000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCD1D3D3D4D4D6D7D8D9DADADCDCDDDEE0E0E3E4E5E5E7E7E8E9ECECEDEFEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBF9CFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C5C5C5C5C6C8C8C9CAC9CACACBCECECECFD0CFD0D0D0D0D1D1D3D1D3D5D5D5D6D5D5D5D5D6D3D5D7D7D7D7D6D6D6D7D7D5D5D5D5D5D3D5D3C7B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B5B5B6B6B6B9BBBCBDBFBFBFBFBFC0C0C1C1C4C4C4C3C4C5C8C9C9CACBCBCECFD0D1D1D3D5D5D6D7DADADADADADBDEDFE1E1E1E1E1E2E2E3E3E3E4E3E3E4E3E2E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4BF3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3C3C3C3C3C3C3C3B3B3B3B3B3A3A3A3A3A3939393939393A3A3A39393939393A3A3A3A3A3A3A3B3B3B3B3B3C3B3C3C3D3D3E3E3F403F40404141414142434242434343434444434444444544444444444343434343434242424241414140403E3E3D3D3D3D3D3B3B3A3A39393737373737363535353333323232313131303131312F2E2E2E2D2D2D2D2D2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828282727272727272726262525252525252525252525252525242424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919171717171717171717171616161616151515151516141414141414151515141414141414141413131313131313131313131112121212121211111111111111111111111110101010101010101010100F0F0F4FBDBDBDBDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C0000000000000000000000000000000000000000000000000B8D8F929497999C9FA1A4A7AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F75800000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDD4D4D6D7D7D8D9DADADCDCDDDEE0E0E0E3E4E5E5E7E7E8E9ECECEDEFEFF0F0F1F3F3F5F5F6F6F7F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBDDB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C3C4C4C4C5C6CAC9CAC9CBCECFD0D1D1D1D3D1D3D5D5D7D7D9D7D7D7D9D9DADADBDBDBDBDBDCDEDEDFE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B2B3B3B3B5B6B8B9BBBCBCBDBFBFBFBDBFC0C3C3C3C3C3C4C4C5C5C6C8C8CACBCECECFD0D1D3D1D1D3D5D3D3D5D7D7D7D9D7D7D6D6D7D7D7D7D6D6D7D7D7D7D9D9D9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DA4C3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3A39393939393A3A3A3A3939393A3A3A3A3B3B3B3B3B3B3B3C3C3D3D3D3D3D3D3E404041404141414243434343444444444545464647464646464747474746464646444444444343434242424141403E3E3E3E3D3D3D3B3B3A3A393937373737363635353533333232313131313131312F2E2E2E2D2D2D2D2D2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828282727272727272726262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919171717171717171717171616161616151515151516141414141414151515141414141414141413131313131313131313131112121212121211111111111111111111111010101010101010101010100F0F1ABDBDBDBDBDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19000000000000000000000000000000000000000000000000278E909395979A9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CBCED1D4D6D9DCDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F78A00000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BFD7D7D8D9DADADADCDCDDDEDEE0E0E3E3E4E5E7E7E8E9EBECECEDEFEFF0F0F1F3F3F5F5F5F6F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBECBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BAC3C4C4C4C3C3C3C3C4C5C5C5C5C5C5C6C8C9CACECBCECECFCFD0D1D3D3D1D1D1D3D3D3D3D5D6D7D7D9D9D9D9D9D7D7D7D7D7D7D6D5D5D5D3D3D0BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDBCBFBFBFC0BFBFC1C1C3C1C4C4C5C6C5C6C8CACACACBCBCFD1D1D3D5D6D6D7D7D7D7D7D7D9DAD7D7D7D7DADBDADAD9DAD9DADADADBDCDBDBDEDEDCDCDCDCDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E37D3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3939393939393A3A3A39393A3A3A3B3B3B3C3B3B3B3C3C3D3D3F3F3D3D3E40404142424242424343434545454545464647474848484747474747464647474747474747474747444343434242424240403E3E3E3D3D3D3D3B3B3A393937373736363635353333333231313131303131312F2E2E2D2D2D2D2D2D2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828282727272727272726262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919171717171717171717171616161616151515151516141414141415151514141414141414141413131313131313131313131112121212121111111111111111111111111010101010101010101010100F0F8ABDBDBDBDBDBDBDBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000004A8F919396989B9DA0A3A6A9ACAFB2B4B8BBBDC1C4C6C9CCCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7BB000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C0D9DADADADCDCDCDDDEE0E0E0E1E3E4E5E5E7E7E8E9EBECECEDEFEFF0F0F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBF5C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B6C0C0BFC0C3C3C3C4C5C6C6C6C6C6C8C9CECECFD0D0D0D3D3D0D3D5D3D3D6D5D1D3D3D5D5D5D7D7D6D7D6D7D7D7D9D9D7D9D9D9D9D9D7D7D7D7D9D7D7D7BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C1C1C1C4C5C5C5C5C5C6C5C5C5C9C9CACACACACED0D1D3D3D5D6D7D7D9DADADADBDBDBDEDEDFDFE1E1E1E1E3E3E4E6E7E9E9EBEBECEFEFEFEFEEF1F1F1F1F1F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEBA4040404040403E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3A39393939393A3A3A3A39393A3B3B3C3C3C3C3B3C3C3D3D3F3F3F3E40404142424243444344454545474747494748484848494949484848484848494849474747474646464647474444434342424141403E3E3E3E3D3D3C3B3B3A3939373737363635353533333331313131313131312F2E2E2E2D2D2D2D2D2C2B2B2B2B2B2B2B2A2929292929292929292928282828282828282727272727272726262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191717171717171717171716161616161515151515141414141414151515141414141414141414131313131313131313131312121212121211111111111111111111111110101010101010101010100F0F4FBDBDBDBDBDBDBDBDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA200000000000000000000000000000000000000000000000000668F929497999C9FA1A4A7AAADAFB3B6B8BCBFC1C5C7CACDD0D3D5D8DBDDDFE1E4E6E7E9EBEDEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7F7000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C1DADCDCDCDDDDDEE0E0E0E1E3E4E5E5E7E7E8E8E9ECECECEDEFEFF0F0F1F3F3F5F5F5F6F6F7F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBE3B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B8C0C5C5C8C6C8C9C9C9C9CACECECBCECFCFD1D3D3D6D6D7D9D9DADADADBDADADBDADBDBDBDBDEDEDEDCDCDEDEDCDEDEDFDEDFDEDCDBDADAD9D9D9DADBDBDADAD9D4B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C8C8C8C8C6C6C6C8C9C9CACACBCBCFCFD0D0D0D1D1D3D3D3D5D6D7D5D6D6D6D6D7D7D9D9DBDBDCDCDEDEDFE1E2E2E3E3E1E3E3E3E3E3E2E1E2E3E4E3E3E2E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1D5404040404040404040403E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3939393939393A3A3A39393B3B3C3C3C3C3D3C3D3D3F3F3F40404141424242424444444545474747494948494849494A4A4B4B4B4B4B4B4B4B4A4A4A4A4949494848484847464646464644444341424140403E3E3E3D3C3C3B3B3A3A38373736363635353333333131313131313131312E2E2E2D2D2D2D2D2C2B2B2B2B2B2B2B2A2929292929292929292928282828282828282727272727272727262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191717171717171717171716161616161515151516141414141414151515141414141414141414131313131313131313131312121212121211111111111111111111111110101010101010101010100F1ABDBDBDBDBDBDBDBDBDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000000088909294979A9C9FA2A5A8AAAEB0B3B6B9BCC0C2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F73B0000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C0DCDDDDDEDEE0E0E0E1E3E4E5E5E7E7E7E8E9EBECECEDEDEFF0F0F0F1F3F3F5F5F5F6F6F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBF5C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BCC6C9C8CACACACACACBCED0D1D3D3D3D3D5D7D7D6D9DADADBDBDEDCDFDEE1DFDFDFE1E1E1E2E1E3E3E3E3E3E3E2E2E2E3E3E3E3E2E3E4E4E3E3E2E1E1E1E1E2E1E1E1E1DBB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C6C9C8C9CACBCBCBCBCFD0D1D3D3D3D3D3D5D5D6D6D6D9D7DADADBDCDBDEDFE1E1E2E1E3E3E3E3E4E3E4E4E4E4E6E4E4E6E9E7E7E9E9E9E6E6E6E6E4E3E2E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E16D404040404040404040404040403E3E3E3E3E3E3E3F3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3A39393939393A3A3A3C3A3A3C3C3C3C3D3D3F3F3F3E404041424342424244454545474747474848494A4B4B494A4C4B4C4C4C4F4C4B4E4E4E4E4E4C4C4C4B4B494949494948474646454646444442424141403E3E3E3D3C3C3B3A3A39383736363635353533333331313131313131312E2E2E2D2D2D2D2D2C2B2B2B2B2B2B2B2A2929292929292929292928282828282828282727272727272726262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191717171717171717171716161616151515151516141414141414151515141414141414141413131313131313131313131112121212121211111111111111111111111010101010101010101010100F8ABDBDBDBDBDBDBDBDBDBDBDBD82200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2082BDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23000000000000000000000000000000000000000000000000178E919396989B9DA0A2A6A9ABAEB1B4B7BABDC0C3C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8F76C00000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3DEDEE0E0E0E1E3E3E4E5E5E5E7E7E8E8E9EBECECEDEFEFF0F0F0F1F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBE3B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BDC5C4C5C5C6C6C6C9C9C9CACACACECECECFD0D0CFD0D0D1D5D5D5D5D5D6D6D7D9D9D7D7D7DADADBDBDEDFDFDFE1DEDEE1E1E1E2E2E1E1DFDEDEE1E1E1E1DEDEDFE1E1E2E1E2E2D3B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C6C8C9CACBCECFD0CFCFD0D1D1D3D5D7D7D9D7D9DAD9DADADCDBDBDBDBDCDEDFDEDFE1E1E2E3E4E4E6E6E6E6E6E6E6E4E6E7E7E7E9E9EAE9E9E9E7E7E7E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEA04040404040404040404040404040403E3E3E3E3E3E3F3F3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3939393A3A3A3A3C3C3C3C3C3C3D3D3E3F403E3E40414242434344444545474747484948494A4A4B4C4C4C4D4E4E4E4E5050505050505050504F4F4F4E4E4D4B4B4B4B494948484745454545464342424241403E3E3E3C3C3C3B3A3A383737363635353535333331313131313131312E2E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2A2A29292929292929292928282828282828282727272727272727262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414141515151414141414141414131313131313131313131311121212121212111111111111111111111110101010101010101010100F4FBDBDBDBDBDBDBDBDBDBDBDBDBDB55D130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F135DB5BDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED00000000000000000000000000000000000000000000000000388F929496999C9EA1A4A6A9ADAFB2B5B8BBBEC1C4C7CACDCFD2D5D7DADCDEE1E3E5E7E9EBECEEF0F1F3F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F7A700000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4E0E0E0E1E3E3E4E5E5E5E7E7E7E8E9EBECECECEDEFEFF0F0F0F1F3F3F5F5F5F5F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBF7D3B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BBC2C5C5C5C5C5C6C8C6C8C9C9C9C8C8C9C9CACACACBCBCBCBCACACBCBCBC9C9CBCBCECECECFD0D0CFCFCFD0D1D1D3D5D5D6D5D6D6D6D5D3D1D0D0D1D3D1D0D0D0D0D0D0D0CFD0CFCFCFCEC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C4C4C4C4C5C5C3C3C3C5C5C5C5C5C6C8C6C8C8C8CACACACACBCBCBCBCECECFCFD0D3D1D3D5D5D3D3D5D7D9DADADADADADADADADADADADAD9D9D7D7D9D9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFCD40404040404040404040404040404040403E3E3E3E3E3E3E3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A393A3A3A3A3C3C3D3D3C3C3D3D3E4040404040404343434445474547474848494949494B4C4C4C4E4E4E4E50505051515152525050505050505050504E4E4E4E4E4D4D4B494949484745454544434342424040403E3D3B3C3C3B3A393837373635353535333332313131313131312F2E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272727262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414141515151414141414141414131313131313131313131311121212121211111111111111111111111110101010101010101010101ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBD9F390F0F0F0F0F0F0F0F0F0F0F0F0F0F399FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000005B90929497999C9FA2A5A8AAADB0B3B6B9BCBFC2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F7E40000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4E1E3E3E4E4E5E5E7E7E7E7E8E9E9EBECECECEDEFEFF0F0F0F1F3F3F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBEEC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B7BFC4C4C4C5C6C6C5C5C5C6C5C5C5C5C6C6C6C6C8C6C6C6C6C6C8C8C9C9CACACACACBCFCFCECBCBCBCECECFD0D3D1D0D1D1D0D0D0D0CFCFD0CFD0D0D0D1D3D5D5D5D5D5D6D5D5D6D5D6D6D5D5D5D1BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CACACACACAC9C9C9C9CACBCBCBCECECBCECFD0D1D1D1D3D3D3D1D5D5D6D6D6D7D7D6D7D7DADADAD9D9D9DADADCDADADADBDADBDBDCDCDEDBDBDBDBDBDBDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E161404040404040404040404040404040404040403E3E3E3E3E3E3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3A3A3A3A3A3A3C3C3C3D3D3D3C3D3E3E40404040424343444445474647474849494A4B4C4C4C4E4E50505151515252525252535353535352525252525252524F50504F4E4E4E4D4B4B49494948474545444443424240403E3E3C3B3C3C3B39383737363635353535333231313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414151515141414141414141414131313131313131313131312121212121211111111111111111111111110101010101010101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD82200F0F0F0F0F0F0F0F0F0F2082BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A000000000000000000000000000000000000000000000000007D919395989B9DA0A2A5A8ABAEB1B4B7BABDC0C3C6C9CBCED1D4D6D9DBDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8F7280000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4E4E4E5E5E5E7E7E7E7E8E8E9EBECECECEDEDEFEFF0F0F0F1F3F3F3F5F5F5F6F6F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBFAE7BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B7C0C9C9C9C9C9C9CACBCECED0D0CFD0D1D1D1D0D0D0D0D0D3D3D3D5D5D5D3D5D6D7D7D7D7D9D9D7D7D9DADADADADBDADADADADCDCDBDADADADBDBDEDBDBDADBDADBDADBDBDCDBDBDADBDBDADADADBDBDBDAD9BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C9CACACACECBCBCECECECFCED0D0D1D1D5D6D6D7D9D7D9D9D9DADBDADADADADADADEDCDEDEDEDFE1E1E1E2E1E1E1E2E2E2E3E3E3E3E3E4E4E3E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDC934040404040404040404040404040404040404040403E3E3E3E3E3E3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3C3B3B3B3A3A3A3A3C3C3A3C3C3D3D3D3D3E3D4040404042434343434444454747484949494A4C4C4C4D4F4E505151535353535353535454545454565554545454535353535252525250504F4E4E4D4B4A494948474645454443414240403E3C3C3B3C3B39393837373635353535333231313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272727262525252525252525252525252525242424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717171616161616151515151514141414141415151514141414141414141413131313131313131313131212121212121111111111111111111111101010101010101010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB55D130F0F0F0F0F0F135DB5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF230000000000000000000000000000000000000000000000000B8F919496999B9EA1A4A6A9ACAFB2B5B8BBBEC1C4C7CACDCFD2D4D7D9DCDEE1E3E5E7E9EBECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F75900000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C5E5E5E5E7E7E7E7E8E8E9E9EBECECECEDEFEFEFF0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFADFBEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C2CACED0D0CED0D0D1D3D3D3D3D3D3D3D5D6D7D9D9DADADBDADBDBDADADADADADADBDBDADBDBDBDBDCDCDCDEDEDBDBDCDCDBDADADADADADADBDBDADADBDBDBDBDBDBDEDCDBDEDEDBDBDBDCDBDAD9D7D7D7D7D7D9D7D4B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7C6C8C6C8C9C9CBCBCBCECED0CECECFCFCFCFD1D0D1D5D5D5D5D6D5D5D6D9D9D7D9DADBDBDBDCDEDCDBDBDCDEDEDEDEDFDFDFE1E1E1E3E3E2E2E1E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDECD42424242424242424040404040404040404040404040403E3E3E3E3E3E3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3B3B3B3B3A3A3C3C3C3C3C3D3D3D3D3E404040404042434343434445464647494B4A4C4C4C4C4F505151525353535355555556575656565757575757565656565656565454535352525252504F4E4D4B4C4A49494845454544434142403E3E3C3B3B3C3B393837373636353535333232313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919171717171717171717171616161616151515151614141414141415151514141414141414141313131313131313131313111212121212121111111111111111111111101010101010101010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD9F390F0F0F0F399FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000002E90929497999C9FA1A4A7AAADB0B3B6B9BCBFC2C5C7CACDD0D3D6D8DBDDDFE1E4E6E7E9EBEDEEF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBF9F9F8F79E000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C5E5E7E7E7E7E8E8E9E9EBECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFADFBEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7BDC6CACACACBCBCBCBCBC9C9CACACACACBCECECECFCFCFD0D0D1D1D1D1D0D0CFD0D0D3D3D3D5D6D6D5D7D9D9DBDBDBDBDADCDCDCDCDBDCDCDEE1E1E2E2E2E1E1DFE1DFDFDEDEDEDEDEDEDFDEDBDADADADBDBDADBDADADADAD9D2B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CECECECED0CECECFCFCFD0D0D0D1D1D0D0D0D0D1D1D5D6D7D7D7D7D9DADADADADADADADADADBDBDBDCDADCDEDEDEDEDEE1E1E1E1E1E1E2E3E4E3E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADA614242424242424242424242404040404040404040404040403E3E3E3E3E3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3B3B3B3C3C3C3C3D3D3D3D3D3D3E4040404041434343444647484648484B4A4C4C4D4E4F5151535353535355555657585959595959595A5A5A5A5A59595959595957575655545353535252504E4D4E4D4C4A49494745454444434142403E3E3C3B3C3B3A3937373736353535353332313131313131312E2E2E2E2D2D2D2D2B2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919171717171717171717171616161615151515151614141414141415151514141414141414141313131313131313131313111212121212111111111111111111111111101010101010101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD82202082BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA20000000000000000000000000000000000000000000000000050919395989B9DA0A2A5A8ABAEB1B4B7B9BDC0C2C6C9CBCED1D3D6D9DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F7F7F8F9F9FBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8D9000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C7E7E7E7E7E8E8E9E9ECECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAE2C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B6BDC7CACAC9C9C8C9CACAC9C9CAC9CAC9C9CACECBCBCECECFCECFD1D1D1D1D1D0D1D1D3D3D5D5D5D5D5D3D5D6D6D7D7D6D7D7D9D7D7D7D7D9D9D7D7D6D6D5D3D5D5D5D6D6D5D5D3D3D1D1D0D0D0D1D1D3D1D0D0D1D3D3D1D0D0D0D0CFD0C5B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9CECECECECFCECBCECFCFCFCFD0D1D3D1D3D5D5D6D7D7D7D9D7D7D7D9D9D7D9DADBDBDBDEDFDEDEDFDFDEDCDCDCDCDCDEDEDEDEDEDEDBDBDEDEDEDEDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDC9541414141414141414242424242404040404040404040404040403E3E3E3E3E3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3B3B3C3C3C3D3D3D3E3D3D3E3E4040404043434443444648484848494A4B4C4D4F51515153535355565758585859595A5B5A5B5C5C5D5D5D5D5D5D5D5C5C5B5B5B5A59595856565653535352504F4E4D4D4C4A494847454545434142403E3E3C3C3B3C3A3937373736363535353332313131313131312F2E2E2E2D2D2D2D2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171717161616161515151515161414141414141515151414141414141414131313131313131313131312121212121211111111111111111111111110101010101010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000000078919496989B9EA1A3A6A9ACAFB2B5B8BBBDC1C4C6C9CCCFD2D4D7D9DCDEE1E2E5E7E9EAECEEEFF1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F8F8F71E00000000000000000000000000000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C7E7E7E8E8E9E9EBECECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAE7CBB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B8BFC7CAC9C9CACACBCBCBCECBCFD0CFD1D1D1D1D1D1D3D3D3D3D1D5D3D1D1D3D5D6D6D6D6D7D9D9DAD7DADADCDCDCDEDBDCDEDEE1E1E1DEDEDEE1DEE1E1E1E1E1E1E2E3E6E6E4E3E3E4E4E4E4E6E6E6E6E4E4E6E4E3E3E3E3E4E4E3E3E3E3E2E2E1CAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CACBCBCBCACACBCECECECBCECECECFCECBCECECECED0D0CFD0D0CFCFD0D0D0D1D0D1D0D1D1D1D3D3D1D0D0D0D0D0D0D0D0CFCFCFCECECECECED0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADACA414141414141414141414142424242424040404040404040404040403E3E3E3E3E3F3F3F3F3F3D3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3C3C3C3C3C3C3D3D3E3E3F3E3E40404041434344444446464848494B4A4B4C4E4F51515355535356575859595B5B5B5B5D5D5D5E5F5F5F5F5F5F5F605F5F5F5E5E5E5D5D5C5B5B5959595656545352504F4F4D4D4C4A484847454544434142403E3E3C3B3C3A3A38373737363535353332313131313131312F2E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414151515141414141414141414131313131313131313131312121212121211111111111111111111111010101010101010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0000000000000000000000000000000000000000000000000B90929497999C9FA1A4A7AAADB0B3B6B9BCBFC1C5C7CACDD0D3D5D8DADDDFE1E4E5E7E9EBECEEF0F1F3F4F5F6F7F8F8F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F75900000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCC2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C7E7E8E8E9E9EBECECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAF9F3D9BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7BBC2CBCACBCBCECECBCBCACACECECBCECBCECECECFCFD0D0D0D0D1D3D3D3D3D5D3D3D3D5D6D6D6D7D6D7D7D9DADAD7D7D9DADADCDCDFDFDFDFE1DEDEE1E1E1E2E2E1E1DFDEDFE1E1E1E1E1DFE1E2E3E4E3E4E4E4E4E4E4E4E4E3E3E3E3E3E3E3E3E3E2E2E3E3C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCD9DBDCDEDEDEDCDCDCDBDCDEDEDCDCDCDCDEDEE1DEDFE1E1E1E3E3E3E4E6E6E4E6E6E4E3E3E6E6E6E6E6E9E7E7E7E6E7E7E9E9E9E9E9E9E9E9EAEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EF6641414141414141414141414141424242424040404040404040404040403E3E3E3E3E3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3D3C3C3D3D3E3E3F3F40404040414243444444454848484B4A4C4D4F4E515153555556565858595B5B5B5C5F605E5F61626362636362636262626262626260605F5F5E5E5B5A5A5959595554535152504F4D4D4C49484845454544434140403E3E3B3B3B3A39373737363535353332323131313131312F2E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414151515141414141414141414131313131313131313131112121212121211111111111111111111111010101010101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9000000000000000000000000000000000000000000000000002E919396989A9DA0A2A5A8ABAEB0B4B7B9BDC0C2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F79E0000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCC2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C7E8E8E9E9EBECECECECEDEDEFEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9E4C9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B8BAC3C8C5C6C8C9C9C8C6C6C6C6C6C5C8C9C8CACACBCBCECECECECECECFD0CECFCFD0D1D1D3D3D0D0D1D1D1D1D1D0D0D3D3D3D3D5D6D5D5D5D5D5D6D7D9DADADADADBDAD9DADAD9DADBDAD9D9D9D9D9D9DAD9D9D9D7D9D9DADBDBDADADADADADAD9D9D7D7D9D7D7D9D9D9BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8D3D3D3D5D7D7D7D7D9D7D7DADADADADADADAD9D7D9DBDBDBDBDBDBDCDEDFE1E1E2E2E2E2E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E6E6E7E9EAEAEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1A0414141414141414141414141414141424242424040404040404040404040403E3E3E3E3E3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3C3C3C3C3E3D3D3D3D3F3E3F4040414040414243444646484848494B4B4D4F4F515153555556585859595B5B5D5F5F616162636464646666666666666766666664646462626262605F5E5D5C5A5A59595555545152504F4D4D4B494847454545434140403E3E3C3B3B3A39373737363535353532323131313131312F2E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2A29292929292929292929282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919191717171717171717171616161616151515151514141414141415151514141414141414141313131313131313131313111212121212111111111111111111111111101010101010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820000000000000000000000000000000000000000000000000050929496989B9EA1A3A6A9ACAFB2B4B8BBBDC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8D9000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCE5DEDEDEDEDDDDDDDBDBDBDBDADADADADAD9D9D8D8D8D8D7D7D7D7D7D6D5D5D5D4D4D3D3D3D3D3D2D0D0D0D0D0D0D0CFCFCFCFCFCFCECECECECECECECECECECECECECECECECFCFCFCFCFCFD0D0D9E8E9E9E9EBECECECEDEDEFEFEFF0F0F0F1F1F3F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F7E2C8B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8BEC6D1D1D1D1D3D5D5D6D6D6D7D7D6D7D9D7D6D6D7D6D6D7D7D7D7D7D7D7D7D9D9D9D9D7D7D7D7D6D5D5D6D7D7D7D7D7D6D6D9D9D9D9D9D9DBDADADBDBDADADADBDADAD9D9D7D9D7D9DADADADADADADBDCDBDEDBDADBDEDEDEDCDEDBDCDBDADBDCDCDCDCDADADAD9D7D7D7D5D5D5D0B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B397848485868688888B8C8E8E90919294959797999C9C9C9E9EA2A2A4A7A7A9AAACADADB0B1B3B3B3B5B5B7B8B8BBB8BBBCBCBBBDBDBDBDBDBEBEC0C0C0C1C1C1C1C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C2C1C1C1C1C1C1C2C1C1C2C2C2C2C2C1C1C2C5D3D3D3D5D6D6D7D7D7D6D6D6D7D7D7D7D7DADADADADBDCDEDEDEDEDEDCDEDCDEDEDCDEDEDFDFDEE1E1E1DEDEDEDFDFDFE1DFDFE1DFDEDEDEDEDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DECD42424242424141414141414141414141414142424242404040404040404040403E3E3E3E3E3F3F3F3F3F3D3E3E3E3E3E3E3E3E3D3D3C3C3C3E3E3E3E3D3F3F3F40404143424243444445464948484A4A4D4D4F5152535355565859595C5B5D5D6061626364656466676769696A6A6868696A6A6868686666666664636262625F5E5D5C5A5A595555545252504F4D4D4A4948474545444342403E3E3C3B3B3B3A38373736363535353232313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2A2A292929292929292929282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717171616161616151515151614141414141415151514141414141414141313131313131313131313121212121212111111111111111111111110101010101010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000000000000000000000000000000000000000000000000079929497999C9FA1A4A7AAADB0B3B6B9BCBFC1C5C7CACDD0D3D5D8DADDDFE1E3E5E7E9EBECEEF0F1F2F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8F72800000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFAFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F1F0F0F0EFEFEFEDEDECECECEBE9E9E9E8E8E7E7E7E7E7E7E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E7E7E7E7E7E7E8E8E9E9EBECECECECEDEDEFEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F7E1C8B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BEBFC3CBCECECECECFCFCFCFD0CFCECED0D1D1D1D0D1D1D0D0D1D1D1D3D3D5D3D1D5D5D6D7D6D3D5D5D5D5D7D7D7D6D6D6D7D7D7D9DAD9D9D9D9D9DADADADBDBDBDADADBDCDCDEDEDEDCDEDEDCDEDEDEDEDEDEDEDEDEDFDEDFDFDFDFDFDFDFDFDEDEDEDEDEDBDBDBDCDEDCDCDCDCDEDEDEDBDEDED6B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3877273757575777A7B7C7C7E818286888A8E8F929297999B9E9FA2A5A7ABACB0B2B5B6B8B9BBBCBFBFC0C1C3C4C5C6C8C9CACBCACACECFD0D0D0D1D3D5D3D3D3D3D3D5D3D5D5D7D7D9D9D9D9D9D9D9D7D9D9DAD9D7D7D7D7D7D9D7D9D7D7D9D9DADADADADADADADADADBDBDBDADCDEDEDCDCDCDEDEDEDBDCDCDEDEDEDEDCDBDCDEDEDEDEDEDEDEDEDEDEDEDEDEDCDCDEDEDCDCDBDBDADBDBDBDBDBDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D36D4242424242424242414141414141414141414142424240404040404040404040403E3E3E3E3E3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3C3E3E3E3F3E403F3F404141434243434444454849484B4A4D4D4F5153535555565759595C5B5D606162636465666969686B6B6C6B6B6D6D6B6C6C6B6B6B6C6C6A696868666766636361605F5E5D5C59595655545252504F4D4C4A4848454545444340403E3E3C3B3B3A38373737363535353232313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717171616161615151515151614141414141415151514141414141414141313131313131313131313121212121212111111111111111111111110101010101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000011919396989A9DA0A2A5A8ABAEB0B4B7B9BDC0C2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F76C00000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F1F0F0F0EFEFEFEDEDECECECEBE9E9E9E8E8E7E7E7E7E7E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E7E7E7E7E7E8E8E9E9EBECECECECEDEDEFEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F5E4D3BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B8BCC3CBD7C9C3C3C3C1C1C3C3C3C4C4C4C4C4C4C5C5C6C9C8C8C9CACACACACACACBCECECED0D0CECFCFCFD0D0D1D0D0D0D1D0D0D0D0D0D1D3D1D3D3D3D3D1D1D3D5D7D7D7D7D7D7DADADADAD7D7D9D9D9D9DADBDBDBDAD9D9D7D6D5D5D5D5D6D7D7D9DADAD9D7D9DAD9D9D9D7D7D9D9DADAD7D7D7D7D9D9D7CBB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3856D6F71727475757778797B7E818286878A8D8E929396999B9E9FA2A5A7A8AAACB0B1B3B8B9B9BDBFBFBFC1C3C5C9C9C9CACBCBCBCECECECECECECECBCBCECECECECECECFCECECBCBCBCACBCBCBCBCECECFCFD0D0D0CFCFD0D0D3D0D3D5D6D6D6D5D7D7D7D7D7D7D7D9D9D9D9D9D9DADADAD9DADADADADADBDBDBDBDBDCDBDBDAD9DADAD9D9D9DADBDADADADADADCDEDCDBDBDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEA242424242424242424242424141414141414141414142424240404040404040404040403E3E3E3E3F3F3F3F3F3D3E3E3E3E3E3E3E3E3D3D3E3E3E3F3F40403F404141434243444445474848494B4C4E4F4F52535556575958595B5C5D606162636566676A6A6B6D6B6E6F6F6F6F707070706F6F6F6F6F6F6D6B6B6A69696866666262625F5F5D5B59595655535152504F4D4C4948474545444342403E3E3C3B3B3A38373737363535353232313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525252425252525252424242323232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414151515141414141414141414131313131313131313131112121212121211111111111111111111111010101010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0000000000000000000000000000000000000000000000000034929496999B9EA1A4A6A9ACAFB2B5B8BBBDC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8A8000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F1F0F0F0EFEFEFEDEDECECECEBE9E9E8E8E8E7E7E7E7E7E5E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E5E7E7E7E7E7E8E8E8E9E9EBECECECEDEDEFEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F3DFCBBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BBC0C9D2D7D9DAD9DEE9D9D1D1D3D3D1D1D5D5D3D1D0D0D1D1D3D3D3D3D5D5D1D1D5D6D6D6D7D7D7D6D5D6D6D6D7D7D9D7D6D7D7DADAD9D7D7D7D9D9DBDADADADAD9DADADADADBDADADADBDBDADBDBDCDCDEDCDBDEDEDEDFDEDEDEDEDEDCDEDEDEDEDEDEDEDEDEDFDEDFDFDFDFDFDFDFDFDEDEDCDEDCDBDBDADBDCDBDBDBDBC7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3877273737676787C7B7F81838686888C8E90929396979B9EA1A2A5A7A8ACAEB0B2B3B6B8BCBFBFC1C4C5C5C5C6C8C9C9C9CACACBCECECFD0D0D0D1D1D1D3D5D5D5D6D7D7D9D7D7D6D7D7D7D7D7D7D9D9DADBDADBDBDADADADADADBDADAD9D7D7D7DADADADADADBDBDCDEDEDCDEDEDEDEDEDFDFDEDEE1E1E1E1DFE1E1E1E1DFDFDFE1DFE1E1DEDEDEDFDFDFDFDEDFDFE1E1DEDEDEDEDEDEDEDEDCDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5CA4842424242424242424242424242414141414141414141424242424040404040404040403E3E3E3E3E3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3F404040404041424242434445474748484A4C4C4F4F515353565658595B5B5D5F6061626466676A6A6B6D6E6F7171717372727373727373737372727271716F6F6D6C6A6A696665626162605F5E5B5A5756545351504F4D4C4A4848474545434240403E3C3B3B3A38383737363535353232313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525252525252525252424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515161414141414151515141414141414141413131313131313131313131112121212121111111111111111111111111010101010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000005C929497999C9FA1A4A7AAADB0B3B6B9BCBFC1C5C7CACDD0D3D5D8DADCDEE1E3E5E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8ED000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F5F3F3F1F1F0F0F0EFEFEFEDECECECECEBE9E9E8E8E7E7E7E7E5E5E5E5E5E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E5E5E5E5E5E7E7E7E7E8E8E9E9EBECECECECEDEFEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F3E3D3C6B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBC5CDD6DBE2E2E3E4E4E3E4E7E6EBF1E2DCDCDCDEDCDEDCDBDBDBDCDCDBDCDBDCDBDCDBDBDADADADAD7D7D9DAD9D9D9D7DAD7D7D7D6D9D7D6D7D9D9D9D9DADADBDADBDCDCDCDEDEDEDEDCDCDCDCDEDCDCDEDEDEDEE1E1DFDFE1E1E1DEDEDEDEDEDEDEDEDEDEDEDBDBDEDEDEDEDEDEDEDEDBDEDEDEDEDEDEDCDBDBDBDEDEDCDAD9D9DADADCDABEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3887273757677797C7E818183888A8E909293979B9C9FA2A5A8ACAEB0B2B5B6B9BCBDC0C4C5C6C8C9CBCBCECFD0CFD1D3D3D1D3D5D6D6D7D7D7D7D7DADADADADAD7D9D9D7D7D7D7D7D7D9D9DADADADAD9D9DAD9D7D6D6D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D7D7D7D7D9D7D7D7D7D7D6D6D7D7D6D7D7D7D9D9DADADAD9D9DADBDBDBDCDEDEE1DEDEDEDEDEDFDEDFDFE1E1E2E3E2E3E3E2E2E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E179424242424242424242424242424242424141414141414141424242404040404040404040403E3E3E3E3E3F3F3F3F3D3E3E3E3E3E3E3E3F3E3E3F404040404142424243444645474848494A4C4E4F4F52535556575A5A5B5D5F6062646567696B6C6D6E6F7172727275757575767676767676757574757373737272706F6D6C6A6A6666636262605F5E5A5A5755545252504F4C4C4948474545444340403E3E3C3B3B3A383737363535353232313131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262625252525252525252425252525252424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151515141414141414151515141414141414141413131313131313131313131212121212121111111111111111111111101010101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1900000000000000000000000000000000000000000000000000869396989B9DA0A2A5A8ABAEB1B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F73B00000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F1F0F0F0EFEFEDEDECECECEBE9E9E8E8E7E7E7E7E5E5E5E5E4E4E4E4E3E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E5E5E5E5E7E7E7E7E8E8E9E9EBECECECEDEDEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F8ECDFD5C9C1B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6BFC7CDD7E2F0F0F0F0E5D9DAD9D6D9DAD9D7DADADEE7D6CFCFCECBCBCECECFCFCECECECECFCECECECFCFCFCFCFD0D0CFCFD1D0D1D3D1D1D3D5D1D1D3D5D7D7D7D7D7D9D9D9D9D7D9D7D7D7D7D6D6D7D7D7D7D6D6D7D7D7D6D6D6D5D6D6D6D7D7D7D7D7DADADAD7D7D9DADBDADBDCDFDFDFDEDFDEDEDFE1DFDFE1DFDFDFDFDFE1E1DFDEDFDEDEDCDCDEDEDEDEDCBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38670727475777A7B7E7F8184888A8F909296999B9EA2A5A7AAACB0B1B5B5B9BBBDC0C1C4C5C8C9C9CBCECED0D0D3D5D5D6D7D7D7D7D7D9D9D7DADADAD9DADADBDADBDBDBDBDBDBDBDADADADADADADBDADBDADADAD9D7D7D5D5D5D6D7DAD9D9D7D7D9DADADADAD7D9D9D9D9D9D9D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D7D7DADADADBDBDADADADADBDADADBDBDBDADADADADAD9D7D7D7D7D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEB64242424242424242424242424242424242424141414141414142424242404040404040404040403E3E3E3E3F3F3F3F3F3E3E3E3E3E3E3F3F3F3F3F40404141424242434446454748494A4C4C4E5052535557575A5A5B5D5F6264646667696C6D6E707172737375757779787979797A7A7A79797979777778757473727271706F6F6A696866666262605F5D5A5A5855535152504D4C4A48484545444340403E3E3C3B3B3A383737363635353332323131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262625252525252525252525252525252424242323232323232323232323232222222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919191717171717171717171616161616151515151614141414141415151514141414141414141313131313131313131313121212121212111111111111111111111110101010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE0000000000000000000000000000000000000000000000000017929497999B9EA1A4A6A9ACAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8810000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0F0EFEFEDEDECECECEBE9E9E8E8E7E7E7E7E5E5E5E4E4E4E3E3E3E3E1E1E1E1E1E1E1E1E1E1E3E3E3E3E4E4E4E5E5E5E7E7E7E7E8E8E9E9EBECECECEDEFEFEFF0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F0E5DACDCDC1C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C0C0C6CAD6DBE2EEF0F0F0F0F0F0F0F0F0F0EDE3E4E7E9E7E7E6E6E7E7EEF3E3DFDFDEDFE1DFE1E1E1E1E1E1E1E1DEE1E1E2E1E2E2E2E3E3E4E4E4E3E4E6E4E4E4E4E3E3E3E4E4E4E4E4E6E6E6E6E7E7E6E6E7E6E7E6E4E4E6E6E6E4E6E4E6E4E6E4E4E3E2E2E2E1E1E1E1E1DFDFDEDFDEDEDCDCDEDCDBDCDCDCDCDCDEDEDFDEDEDEDEDEE1DFDFDFDEDEDEDEDEDCDCDCDEDEDEDFDFDEDAB9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3877273757775787B7D7F818385898A8D8F909394999B9B9EA2A5A8AAACB0B2B6B8BBBBBFC1C5C5C8C9CACACBCED1D3D3D1D3D3D7D6D9DADADAD9DADBDEDEDEDEDCDCDEDFDFDFE1E1E1E1DFDFE1DFDEDFDEDFE1E1E1DFDFE1DFDFDEDEDCDEDEDEDCDCDEDEDEDEDCDCDCDEDEDEDEDEDEDCDEDEDCDEDCDEDEDEDFDEDFE1E1E1DEDEDFDEDEDCDCDBDBDBDCDCDCDCDCDBDCDBDBDBDBDBDBDCDCDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3584242424242424242424242424242424242424241414141414141424242424040404040404040403E3E3E3E3E3F3F3F3F3D3E3E3E3E3F3F40403F3F404141424242434446474748494C4C4C4F5153545657595A5C5B5F60626467676A6A6D7071727375757878797A7C7C7C7D7C7D7D7D7D7E7D7D7C7C7B7979787775757272706F6F6C696966666262605F5B5A5956545352504D4C4A49484545454341403E3E3C3B3B3A383737363635353532323131313131312E2E2E2D2D2D2D2D2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252524242423232323232323232323232322222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717171616161615151515151614141414141415151514141414141414141313131313131313131311121212121212111111111111111111111110101010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000459395979A9C9FA2A5A8AAADB0B3B6B9BCBFC2C5C7CACDD0D3D5D8DADDDFE1E3E5E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8C60000000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBFBFAFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F3F1F0F0F0EFEFEFEDECECECEBE9E9E8E7E7E7E7E5E5E5E4E4E3E3E3E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E3E3E3E4E4E5E5E5E7E7E7E7E8E9E9EBECECECEDEFEFF0F0F0F1F1F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F9F8F8F8F8F7F7F7F6F6EAE7DED8D8D8D6CDCCCCCCCCCCCCCBCBCBCBCBCBD1D7D7D7DFE5E5E7F3F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F3F3F3E8DBDBDEDEDEDFDEDEE1E1E4EEDED6D7D7D7D9DAD9DADBDADADBDBDCDBDBDCDEDBDBDCDEDEDEDFE2E2E1E1E1DEDFDFE1E1E1E1DFDEDEDCDCDCDCDBDEDCDCDEDEDEDEDCDEDEDEDEDEDEDEDEDEDEDEDEDBDEDEDBDEDEDEDEDEDBDBDBDBDCDCDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDADBDCDEDEDEDEDEDBDBDBDBDADADADAD7D7D7D7D7D7D7D2B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38875757577777B7C81818586888C8F909497999C9EA2A4A7AAACB0B1B3B6B6BBBDBFC3C3C5C5C8CACBCBCFCED0D1D1D0D1D3D3D3D5D5D5D5D5D6D7D9D9D9D7DADADADADBDCDCDCDADBDBDBDCDCDCDBDBDADBDADADADBDBDBDADBDADADADCDEDEE1DFDFDFDEDEDFDFDEDFDFDFDFE1DFDFE1E1E1E1E1E1E1E2E3E4E4E3E4E4E4E4E4E3E4E4E3E3E4E4E6E4E6E6E6E6E7E6E7E7E6E7E7E6E6E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E39144444444444242424242424242424242424242424241414141414141424242404040404040404040403E3E3E3E3F3F3F3F3F3E3E3E3F3F3F40413F3F4141424243444646474748494C4D4F4F5254555758595B5C5F5F626365676A6C6D6F717275757879797C7E7D7E8081818182828282828282807F7E7E7E7D7B79797777757372706F6C6A69666362625F5D5A5A58555351504E4D4C4948474545434140403E3C3B3B3A383737363635353532323131313131312E2E2E2D2D2D2D2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252524242423232323232323232323232322222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717171616161615151515151614141414141515151414141414141414131313131313131313131311121212121211111111111111111111111010101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C00000000000000000000000000000000000000000000000000699396989B9DA0A2A5A8ABAEB1B4B7BABDC0C2C6C9CBCED1D3D6D8DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F71300000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0F0EFEFEDECECECEBE9E8E8E7E7E7E5E5E5E4E4E3E3E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E3E3E4E4E5E5E5E7E7E7E8E8E9EBECECECEDEFEFF0F0F0F1F1F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3ECE2E1E1DFE1DFDFDFE1DFE4EEDCD6D7D7D7D7D6D7D7D6D5D5D5D5D3D1D3D1D1D1D3D3D5D5D6D7D6D7D7D7D9DAD9D9D7D7D7D9D9D9D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D5D5D5D5D3D1D0D3D3D3D3D3D3D5D5D3D3D1D3D3D3D5D5D5D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D1D0D0D0D0D0D0D0D0D0D0D0D0D0D1D3D1D1D3D3D3D3D1C5B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B386717273757677787B7C7E81838687898E909396999C9FA1A4A5A8AAACAEB1B5B5B9B9BFBFC0C1C4C4C5C6C9CBCBCECFCFD0D3D3D6D5D7D7D6D6D6D7D7D7D6D7D7D9D9D9DADADADADADADAD9D9D7D9DADADBDBDBDBDCDBDADAD9D9D9D7D9D9D9D7D7D7D7D7D6D7D7D6D5D5D6D7D7D7D6D6D6D5D6D5D6D6D6D6D6D6D6D6D6D5D5D6D5D6D7D7D7D9D9D7D7D7D9DADBDBDBDBDBDBDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1CD4444444444444444444242424242424242424242424242414141414141414242424040404040404040403E3E3E3E3E3F3F3F3F3D3E3F3F3F3F41414141414242434446474747484A4C4D4F5052545657595C5C5F5F606465666A6C6E7071727577797A7D7D7D82828283868685858585878585858585858383807F7E7E7B797877757372706F6C6967676361605F5D5A59585452524E4D4C4A48484545434140403E3C3B3B3A383737373635353532323131313131312E2E2E2D2D2D2D2C2B2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252524242423232323232323232323232322222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191917171717171717171716161616161515151515161414141414151515141414141414141413131313131313131313131212121212121111111111111111111111101010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE30000000000000000000000000000000000000000000000000006929497999C9FA1A4A6A9ACAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8590000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F1F0F0F0EFEFEDECECECEBE9E8E7E7E7E5E5E5E4E4E3E3E1E0E0E0E0E0DEDEDEDEDDDDDDDDDDDDDDDDDEDEDEDEE0E0E0E0E0E1E3E3E4E4E5E5E7E7E7E8E8E9EBECECECEDEFEFF0F0F0F1F3F3F3F5F5F5F6F6F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F7F7F7F7F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E8DBDCDCDBDEDCDCDEDEDEE3ECDBD5D5D3D3D1D1D3D5D6D7D7D7D7D9D7D6D7D7D6D7D9D7D9DADBDADADAD9D9DADBDCDBDBDCDEDEDEDEDEDCDBDBDCDEDEDCDEDFDFDFDFE1E1E2E2E2E2E1E1E1DFDFDFDEDFDFE1E1DFE1E1E1DFDFDFE1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDEDEDEDCDEDEDEDEDEDEDCDEDEDEDCDCDEDFDFDEDFDFC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38A777779797C7E81818386898A8D8F9094979B9C9FA2A5A7ABB0B1B6B9BDC0C3C6C9CED0D1D3D5D9DADCDEDEDEDEE1E1E1E3E3E3E3E6E6E4E7EAEAE9E9E9E9EAEAEBEAEBEBEAEAEBE9E9E9E9E9E9E7E9E7E7E7E7E7E7E6E6E6E6E7E6E7E9E9E9EAEAEAEAE9E9E7E6E6E6E6E6E6E4E6E6E4E3E3E4E4E4E4E4E3E3E2E2E2E2E2E2E3E2E2E2E2E1E1E1E1E1DFDFDFDFDFDFDFE1E1DFE1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E36D444444444444444444444442424242424242424242424241414141414141414242424040404040404040403E3E3E3E3F3F3F3F3F3F3F3F3F4141414241424243444747474B484A4C4E5050545556575A5C5C6060646468686C6D7072747578797C7E7E82828585858588888889898989898989898988878784848382807D7B7B79787573726F6F6C69676763625F5E5A5A58555351504D4C4C48484545444140403E3C3B3B3A383737363635353532323131313131312E2E2E2D2D2D2D2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252524252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151516141414141414151515141414141414141413131313131313131313111212121212121111111111111111111111101010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D000000000000000000000000000000000000000000000000002F9395989A9D9FA2A5A8AAADB0B3B6B9BCBFC2C5C7CACDD0D3D5D8DADDDFE1E3E5E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F8A8000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAFAF9F9F9F9F8F8F7F6F5F5F5F3F3F3F1F0F0F0EFEFEDECECECE9E9E8E7E7E7E5E5E4E4E3E1E0E0E0E0DEDEDDDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDEDEDEE0E0E0E0E1E3E4E4E5E5E7E7E7E8E9EBECECECEDEFEFF0F0F0F1F3F3F5F5F5F5F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5ECDEDEDEDBDBDADADADBDCE1ECDCD5D3D6D7D7D9D9D9D9D7DADADADAD9DADADCDEDEDFDFDFDEDEDCDEDCDEDCDCDCDCDCDCDEDCDADADADADADADADBDBDBDADADADCDEDEDEE1E1E2E1E2E2E3E4E6E6E4E4E6E6E6E6E6E7E7E7E6E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E3E3E2E3E2E1E2E2E2E1E2E2E2E1E1E1E1E1E1E1E1DFDEC2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3866F7173757577787B7C7E818386898C8E90929697999B9EA2A4A7AAACAEB1B3B6BBBDBFC1C3C5C6C9CACBCED0CFD0D0D1D3D3D5D6D7D7D7D7D6D7D7D7D9DBDBDBDBDBDBDEDEDCDBDBDBDBDADADADADADBDADBDCDCDEDCDEDFDFDEDEDFDFE1E1E2E1E1E1E1E1E1DFDEDEDCDBDBDBDADADADAD9D9D7D7D7DADADAD9DAD9D7D7D7D7DAD9D9D9D9D7D9D9DADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9A64444444444444444444444444442424242424242424242424241414141414141424242404040404040404040403E3E3E3E3F3F3F403E3F3F4141414242434343444747484A4A4A4C4F5052545657575A5D5F5F636467686A6D707274757A797D7E808284858588888B8B8D8D8D8F8F8F8F8F8F8F8C8C89898A8786848484807F7C7B79787573726F6C6A696766615F5F5B5A59565452514E4D4C49484745454341403E3E3C3B3A383737373635353532313131313131312E2E2E2D2D2D2D2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171716161616161515151516141414141414151515141414141414141413131313131313131313111212121212111111111111111111111110101010108ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000589496989B9DA0A3A6A9ABAEB1B4B7BABDC0C3C6C9CBCED1D3D6D9DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8E40000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEFEDECECECE9E8E8E7E7E5E5E4E4E3E1E0E0E0DEDEDDDDDCDCDCDCDCDADADADADADADADADADADADADCDCDCDCDCDDDDDEDEE0E0E0E1E3E4E4E5E5E7E7E8E9E9ECECECEDEFEFF0F0F0F1F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6E9DBDCDCDADADBDEDFDEE1E6F1E1D9D7D9DADADADBDBDBDBDBDBDBDBDBDEDCDCDBDCDBDBDBDBDEDEDEDEDEDEDCDBDAD9DADAD9D9D9DADADADADADADADBDCDBDADADADAD9D9D9DADADADBDBDBDADBDEDEDEDEDEDEDEDEDEDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDBDBDCDCDCDEDBDBDBDBDBDCDEDEDEE1DFE1DFE1E1E1E2BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38875777778787B7D7E81828489898C8D90929497999B9E9FA2A5A7AAACAEB1B3B5B6B9B9BDC0C4C5C8C9CACACACECFD0D0D0D3D3D3D3D3D5D3D5D3D1D3D3D3D3D5D5D5D6D7D7D7D7D9D9D9D9DADADAD9D9D7D7D6D7D7D7D7D9D9D9D9D9DADBDBDBDBDADCDCDCDCDCDCDEDBDBDBDBDBDBDBDBDCDCDCDBDBDADADBDCDEDEDEDEDEDFE1E1DFDEDEDEDEDEDEDEDEDEDEDCDEDFDFE1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADAD5504444444444444444444444444444444242424242424242424242414141414141414242424040404040404040403E3E3E3E3F3F4040403F4141414242434443464747484A4A4D4C4F50545556585B5C5C5F606466676A6C6F727475787A7D8082848685888A8C8D8F8F8F9191919392929292929091918F8F8C8B8A8787848481807D7B79787573726F6C6A696763605F5D5A59585552514E4D4C4A484745454341403E3E3C3B3A383737373635353532323131313131312E2E2E2D2D2D2D2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919191717171717171717171616161615151515151614141414141515151414141414141414131313131313131313131312121212121211111111111111111111111010101050BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0000000000000000000000000000000000000000000000000000809497999C9FA1A4A7AAADAFB2B6B8BBBEC1C4C7CACDCFD2D4D7D9DCDEE0E2E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F83B0000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F6F5F5F5F3F3F1F0F0F0EFEFEDECECEBE9E8E7E7E7E5E5E4E3E1E0E0E0DEDDDDDCDCDCDADADADADADAD9D9D9D9D9D9D9D9D9D9DADADADADADADCDCDCDDDDDEE0E0E0E1E3E4E5E5E7E7E7E8E9EBECECEDEFEFF0F0F0F1F3F3F5F5F5F6F6F7F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F3EAEBEBEAEBEAEAE9EAEAEFF7E6DFDFE1E1E1E1DEDFE1E1DEE1DFE1E2E2E1E1E1E1E1E1E2E2E3E3E3E3E4E3E4E4E3E1E1E1E1E1E1E2E1E1E1E1E1E1E1E1E1E1DFDEDEDEDEDBDBDBDCDCDCDCDBDBDBDBDBDBDBDBDBDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDCDEDBDCDBDADBDCDBDCDCDADAD9D9D7D6D6D5D2B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38772727575767778787C7E818285868A8C8E9094999B9EA2A4A7A8AAAEB1B1B3B8B9B9BBBDBFC0C3C5C5C6C9C9CACBCED1D1D0D3D3D3D5D5D5D5D5D6D7D6D7D7D9D9D9D9D9D9DAD9DADADADADADADADADAD7D7D7D7D7D9DADADADADBDCDADADADAD9DADBDADADBDCDBDBDBDADADBDCDEDCDCDEDEDEDEDEDEDEDCDCDEDFDFDEDFE1E1E1E1E1E1E3E3E2E2E1E1E1DFDFDFDFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E290434343434343444444444444444444444442424242424242424242424141414141414142424040404040404040403E3E3E3E3E404040414141414242434444444747484A4A4D4F5051545557585A5D5F5F6263676A6C6F727275787A7D7F828485878B8C8D8F90919193939595969898979696969595929490908E8C8B8A898684837F7D7B79787573706D6A696766615F5E5B5A58555352504D4C49484745454341403E3E3C3B3A383737373635353532313131313131312F2E2E2D2D2D2D2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252424242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717171616161615151515151614141414141515151414141414141414131313131313131313131312121212121211111111111111111111111010101BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000001D9396989B9DA0A2A5A8ABAEB0B3B7B9BCBFC2C5C8CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F881000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F6F6F5F5F5F3F3F1F0F0F0EFEFEDECECEBE9E8E7E7E5E5E4E3E1E0E0E0DEDDDCDCDCDADADADAD9D9D8D8D7D7D7D7D7D7D7D7D7D7D7D7D8D8D9D9DADADADADCDCDDDDDEE0E0E0E1E3E4E5E5E7E7E8E9EBECECEDEFEFF0F0F0F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F9F9F9F9F9F9F9F9F9F9F2EAEAEAE9EAE9EAEBEBECF1F7E7E1DFDFDEDEDEDEDEDEDEDEDEDEDEDFDFDEDEDEDFDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFE1E1DEE1E1DFDFDFDFE1E1E2E2E3E4E4E4E3E3E3E2E2E3E1E1DFDFDFE1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E4E4E6E7E7E9E7E7E7E6E6E4E6E4E4E4E3E4E4E4E6E4DDB7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C777778787B7D7E7F81818688898C8E909297999B9EA2A5A5A7ABACAEB2B2B8B9BBBFBFC0C3C5C6C8C9CACACECECFCFD1D1D3D3D5D7D7D7D7D7D9DADBDBDEDEDEDEDEDFDFDFE1E1E1E1E3E1E1E1DFDFDEDCDCDBDADADBDCDCDCDBDBDBDBDBDBDEDEDEDEDFDEDEDFDEDEDEDEDEDEDFDFDFDEDEDEDEDEDEDEDEDEDEDEDEDFDFDFE1E2E2E3E2E3E2E2E3E3E2E2E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAD74343434343434343434444444444444444444442424242424242424242424141414141414242424040404040404040403E3E3E404040414242414242434444464847484A4A4D4D51515455575A5C5D5F606465686A6D70727577797D7F8284878A8B8C8F90919395969798989A9B9A9B9B9A9A989A9A989796959392908E8D8B89868483807E7A797774726F6C6A696662605F5D5A59565352504D4C4A484745454341403E3E3C3B3A383737363635353532313131313131312E2E2D2D2D2D2D2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272625252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1919191919191919191919191917171717171717171716161616161515151515141414141414151515141414141414141413131313131313131313111212121212111111111111111111111110101050B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB54F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4000000000000000000000000000000000000000000000000000469497999C9EA1A4A6A9ACAFB2B4B8BBBDC0C3C6C9CCCED1D4D6D9DBDDE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8D90000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0F0EFEDEDECECE9E8E8E7E7E5E4E4E3E0E0E0DEDDDCDCDADADAD9D9D8D7D7D6D6D6D4D4D4D4D4D4D4D4D4D4D4D4D6D6D6D7D7D8D9D9DADADADCDCDDDEE0E0E0E3E4E5E5E7E7E8E9E9ECECEDEFEFF0F0F0F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9EDE1DFDFDEDFE1DEDFE1E1E6EFDFD7D9DAD9D9DADADADADADADADAD7D7D7D7D7D9DADADADADBDCDADADADAD9DADCDBDBDCDEDCDCDCDBDBDCDEDEDEDEDEDFDFDFDFDFDEDEDEDEDFDFDEDFE1E1E1E1E1E1E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDCDEDCDEDEDBDBDBDCDCDCDACFB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C79797A7B7E7F80818385898C8F9293979B9C9EA2A4A7AAACAEB1B3B6B9BCBFC1C4C5C9CACED0D5D6D9DBDEDFE3E3E4E6E6E9E9EAEBEBEAEAEBEAEAEBEAEAEAEBEBEAEBEEEEECEBEBEBEEEEEEECEEEEECECEEEBEBEBEBEBEBEAEBEAEAEBEBEBEAE9E9E9E9EAE9EAEBEBEBECECECECEBEBEAE9E7E7E7E9E9E7E9E9E7E6E6E6E6E7E6E6E4E4E3E3E3E3E3E3E3E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3744444444443434343434343444444444444444444424242424242424242424141414141414142424040404040404040403E3E404040414142424242434444464848484A4A4D4D51545555575A5C5C60626567696A6F727476797C7F828486888C8D8F90929596989A9B9B9BA0A0A0A0A0A0A0A0A09E9C9C9B9A9896939291918F8A888684837F7C7B7875736F6D6C696566615F5D5A59565452504D4C4A484845454341403E3E3C3B3A383737363635353332313131313131312F2E2D2D2D2D2D2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272626252525252525252525252525252424242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717161616161615151515161414141414141515151414141414141414131313131313131313131112121212121111111111111111111111105DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD720F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED00000000000000000000000000000000000000000000000000007695989A9C9FA2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D5D7D9DCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F8280000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F3F1F0F0F0EFEDECECECE9E8E7E7E5E5E4E3E1E0E0DEDDDCDCDADAD9D9D8D7D6D6D4D4D4D3D3D3D3D1D1D1D1D1D1D1D1D3D3D3D3D4D4D4D6D6D7D8D9DADADADCDCDDDEE0E0E1E3E4E5E7E7E7E8E9ECECEDEDEFF0F0F1F1F3F3F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9EFE1E3E2DFE3E3E3E4E3E4E7F2E1D9DADADADBDBDADAD9D9D7D6D6D6D6D6D5D5D5D3D3D5D5D5D6D7D7D7D7D7D6D7D7D9D9D7D6D6D7D7D7D7D7D9DADADBDBDADADADAD7D7D9DADAD9D7D7D7D6D6D5D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D7D7D7D9DADADBDBDBDBDCDAD9DADAD7D7DAD7D6D6D5C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38B7878797B7D7E818182848688898D909394979B9CA2A2A7A8AEB1B2B5B6B8BBBCBFC0C1C5C6C9CBCAD0D0D1D1D3D3D6D7D7D9D7DADADADADBDBDBDCDCDCDBDCDCDCDEDCDBDCDEDEDBDEDCDEDEDCDCDCDEDEDEDCDEDEE1E1DFE1E1E1E1E1DEDEDEDEDEDEDCDBDADADBDCDBDBDADADADADADADCDCDBDBDEDEDCDCDCDCDBDBDBDCDEDEDEDEDCDEDEDEDFDEDCDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1C544444444444444444343434343444444444444444444424242424242424242424141414141414242424040404040404040404040404241424242434344444648484A4A4A4D4D51545558595A5D5E616265686A6C717475797C7E828286888B8F8F919297999A9B9FA0A0A2A3A3A2A2A4A4A4A4A1A1A1A1A0A09E9B9A97969592908F8B888683817F7C7B7773726F6C6A6766615F5E5B59565452504E4D4C484845454341403E3E3C3B3A3837373636353533323131313131312F2F2E2D2D2D2D2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272625252525252525252525252525252424242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191919171717171717171717161616161515151515161414141414151515141414141414141413131313131313131313131212121212121111111111111111111574BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD911A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000129496989B9DA0A3A6A9ABAEB1B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E6E7E9EBECEEF0F1F2F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F876000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F6F6F5F5F3F3F1F0F0F0EFEDECECEBE9E8E7E7E5E4E3E1E0E0DEDDDCDCDADAD9D8D7D6D6D4D4D3D3D1D1D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D1D1D3D3D4D4D6D6D7D8D9DADADCDCDDDEE0E0E3E4E5E5E7E7E8E9ECECECEDEFF0F0F1F1F3F3F5F5F6F6F7F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF0E3E3E2E2E3E3E2E1E3E1E6EEDED7D9D7D7D7D7D9D7D9DADADADAD9D7D7D7D9D7D9DADADADAD7D9DADADADAD9DADADAD9DADADADADAD9D7D7D7D6D5D5D5D6D6D6D5D5D3D3D1D1D0D0D0D1D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D7D7D7D7D7D5D5D7D7D7D7D9DAD9DAD7D7DADAD9DAD9BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B390818181838586898A8C8D8F909497999B9EA1A2A4A7AAAEB1B2B5B9BBBFC1C4C6C6C9CBCBD0D0D1D3D5D7D9D9DADBDCDCDEDEDEDEDEDEDEDCDEDEDFDEDEDEDBDEDBDBDBDBDCDBDADBDBDBDBDBDCDCDEDCDCDEDEDEDFDEDEDEDEDEDEDEDEDCDCDEDEDEDEE1E1DEDEE1E1DFDEDEDEDEDEDEDEDEDEDEDEDBDBDEDEDEDEDEDEDEDEDBDEDEDEDEDEDEDCDBDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDE60444444444444444444444343434344444444444444444442424242424242424242414141414141424242404040404040404040404242424242434444444648474A4A4C4D4D515455575B5C5D5E616465696A6E7174777A7D818285888B8F8F939597999B9FA0A2A3A5A5A5A8A8A8A8A8A8A8A8A8A8A5A4A4A1A09D9C9B98979392908D8B898683807E7B7875726F6D6A696662605F5B5A585552504E4D4C484845454341403E3E3C3B3A3837373635353533323131313131312F2F2E2D2D2D2D2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272625252525252525252525252525252424242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191917171717171717171716161616151515151516141414141415151514141414141414141313131313131313131311121212121211111111111111111591BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA72D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000003A9497999C9FA1A4A7AAADAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8C60000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F6F5F5F3F3F1F0F0F0EFEDECECEBE9E8E7E7E5E4E3E0E0DEDDDCDCDADAD9D8D7D6D4D4D3D1D1D0D0D0D0CECCCCCCCCCCCCCCCCCCCCCCCCCCCCCED0D0D0D0D1D1D3D4D4D6D7D8D9DADADCDCDDE0E0E1E3E4E5E7E7E8E9EBECECEDEFF0F0F1F1F3F3F5F5F6F6F7F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBEFE2E1E2E1E2E2E1E1E2E2E7F2E1DADADBDBDADADADADADADBDBDBDBDCDEDEDEDEDEDFDFDEDEDEDEDEDEDFE1E1E1E2E3E2E2E3E3E3E3E3E3E3E2E2E2E3E3E3E4E6E7E6E6E4E3E3E3E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDEDEDEDEDEDEDEDBDCDCDADADADADAD9DADADBDCDCDBBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38E7D7E808082818386868A8C8E8F9294999B9C9EA1A2A5A7ABACB1B1B3B5B8BCBFC3C4C8C8CBCBD0D3D5D6D6D9D9DADADBDEDEDFDFE1DEDFE1E3E1E2E1E3E1E1E1E3E2E2E1E1E1E1DEDEDEDEDCDCDCDCDBDBDCDEDEDEDEDCDEDFDFDFE1E1E1E1DEDEDEDEE1E1E1E1E1DFDFDFDFDFE1DFDFDEDFDFDFDFE1E2E2E3E3E3E3E2E2E3E3E2E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4A1444444444444444444444444434343434344444444444444424242424242424242424141414141414242424040404040404042424242434342434446444648474A4A4C4F4D505456575B5C5E5F616367696D707276797C7F8284878B8E8F9395999A9EA0A0A1A6A6A8A8A9ABADADADADAEADADADABAAA9A8A8A5A4A2A09D9C99979592908C8A8984817F7B797773706F6C6A66625F5F5D5A585552504E4D4C494845454341403E3E3B3B3A3837373635353533323131313031312F2F2E2D2D2D2D2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272625252525252525252525252525252424242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171716161616161515151515141414141414151515141414141414141413131313131313131313111212121212111111111111239FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5410F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED00000000000000000000000000000000000000000000000000006A96989B9DA0A2A5A8ABAEB0B3B6B9BCBFC2C5C7CACDD0D3D5D8DADCDEE1E3E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8F81E0000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F8F6F6F5F5F3F3F1F1F0F0EFEDECECEBE9E8E7E5E5E4E3E0E0DEDDDCDADAD9D8D7D6D4D3D3D1D0D0D0CECCCCCCCCCBCBCACACACAC9C9CACACACBCBCBCCCCCCCCCED0D0D0D1D3D3D4D6D7D8D9DADADCDDDEE0E0E3E4E5E5E7E8E9EBECECEDEFF0F0F1F1F3F5F5F5F6F6F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBEBDAD9D9D7D9D7DADBDEDBDEE9D7D0D0D0D0CFCFD0CFD0D0D0D1D3D5D5D5D5D5D6D5D5D6D5D6D6D6D6D7D5D5D7D7D7D9DADBDADADADADBDBDBDCDBDBDADADADBDADADADBDCDCDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBE9E9EAEAEAEAE9E9E9E6E9E7E9E7E9E7E7E9E9E7E7E6E2BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C7B7D7D7D7F818181838689888C8F9294979B9C9EA1A5A7AAABACAEB1B3B8B9BDBFC1C3C3C4C8CACACECFD0D1D1D1D3D5D6D6D7D9D7D7D9DADCDCDBDAD9D9DADBDEDBDBDADBDADBDADBDBDCDBDBDBDBDBDBDBDBDEDEDEDCDBDEDEDEDFDEDEDEDEDEDCDEDEDEDEDEDEDEDEDEDFDEDFDFDFDFDFDFDFDFDEDEDEDEDEDBDBDBDEDEDEDEDEDEE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2DC4C4444444444444444444444444444434343434444444444444442424242424242424242414141414141424242404040404042424242434343434446464548474A4A4C4F50515456575B5C5F606263676A6D7175767A7D8182868A8C8F9196999A9DA0A0A6A6A8A9ACADADB0B0B2B2B2B2B2B2B2B1AEAEADACA9A8A6A4A2A09D9B99979392908C888683807E7B7873726F6C6A6562605F5D5A585552504E4D4C494845454341403E3E3B3B3A3837373635353533323131313031312F2F2E2D2D2D2D2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282828272727272727272625252525252525252525252525252424242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717161616161615151515161414141414141515141414141414141414131313131313131313131212121212121111111135A7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000000B9497999C9EA1A4A6A9ACAFB2B4B7BBBDC0C3C6C9CBCED1D4D6D8DBDDE0E2E4E6E7EAEBEDEEF0F1F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F863000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F8F7F6F5F5F5F3F1F1F0F0EFEDECECEBE8E7E7E5E4E3E1E0DEDDDCDADAD9D8D7D6D4D3D1D0D0D0CCCCCCCBCBCAC9C9C7C7C7C7C7C7C7C7C7C7C7C7C7C7C9C9CACBCBCCCCCCD0D0D0D1D3D4D6D7D8D9DADCDCDDE0E0E1E3E5E5E7E7E9EBECECEDEFF0F0F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF6ECEBEAEAEAEBEAEAEBEAEFF8E6DEDEDFDFDEDEDEDFDFDFDEDEDCDCDEDBDCDCDCDCDCDCDEDEDCDCDEDEDEE1E1E1E1E2E2E2E3E3E3E2E1E1E1E1E1E1DFDFE1E1E1DEDEE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADAD9D9D7D9D9DADADADAD9D9D7D7D7D7D6D7D7D7D6D3CBB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39080808181838588898C8D8F92939697999C9EA2A4A5A8ACAEB1B5B6B8BBBDC1C3C4C6C6CACBD0D0D1D3D3D3D5D7DADADBDCDEDEDEDEDEDFE1E1E2E4E4E4E4E4E6E6E4E3E4E6E6E6E6E4E4E3E3E2E3E3E2E2E2E3E3E4E3E4E4E3E3E3E3E3E3E3E3E3E1E1E1DFDEDEDFDFDFE1E1E1E1E1E1E2E3E4E4E4E4E3E4E4E4E4E3E2E1E2E3E4E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E68E4444444444444444444444444444444443434344444444444444444242424242424242424141414141414242424040404042424242434343434446464749474A4A4C4F50515456585B5C5E616466686A6D7276797D7F8284878B8F909599999DA1A3A6A6ABADADAEB0B2B2B3B3B4B4B4B4B4B4B4B3B2B2B1B0ADACAAA8A5A2A19E9C989693908D8B8784837F7B7874726F6C6B6766615F5D5A595552514E4D4C494845454342403E3C3B3B3A3837373635353533333131313031312F2F2D2D2D2D2D2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191717171717171717171616161615151515151614141414141515151414141414141414131313131313131313131312121212121211113CB5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8A130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000002F95989A9C9FA2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D4D7D9DCDEE0E2E5E6E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8B30000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F7F6F5F5F5F3F3F1F0F0EFEDECECEBE8E7E7E5E4E3E0E0DEDDDCDADAD8D7D6D4D3D1D0D0CECCCCCBCAC9C7C7C7C7C5C5C5C5C4C4C4C4C4C4C4C4C5C5C5C5C7C7C7C7C9CACBCCCCCED0D0D1D3D4D6D7D9DADADCDDDEE0E0E3E4E5E7E7E8EBECECEDEFF0F0F1F3F3F5F5F5F6F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF6EBECECECEBEBEBEAE9E9ECF4E3DEDEDCDEDEDEDEDEDEDEDEDEDEDEDEDEDFE2E2E1E1DFE1E1E1E1E1E1DFDFDFDFDFE1DFE1E1E1E1E2E1E1E1E1E1DFE1E1DFE1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E3E4E4E4E4E3E3E3E3E3E2E1E2E2E3E3E3E3E1E1E1E1D3B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B390818181818182818588898A8A8C8F909396999B9C9FA2A4A7A8ABACAEB2B5B6BBBBBDBFBFC1C4C4C5C9C8C9C9CBCBCECBCBCECECECED0D1D3D1D1D3D3D3D3D3D3D5D6D6D7D7D7D7D6D6D6D6D6D6D7D6D6D5D5D5D6D5D5D5D5D7D6D5D6D6D6D6D5D3D5D5D5D3D5D5D3D5D6D6D6D6D5D5D5D5D6D6D6D7D7D9D7D6D7D7D7D7D6D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCCA454545454444444444444444444444444444434343444444444444444242424242424242424241414141414142424040404242424342434343444646474849484A4C4F5051545657595C5E616466696A6D7276797C818286888E8F93979A9DA0A2A6A6ABADAEB1B2B3B7B7B8B8BABABABABBBAB7B7B7B7B4B2B2AFB0ADACA8A5A2A29E99989592908B8986837F7B797573706C6A6766615F5D5A585553504E4D4A484845454342403E3C3B3B3A3937373635353533323131313031312F2F2D2D2D2D2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232322222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919191717171717171717171616161615151515151614141414141515151414141414141414131313131313131313131112121212121151BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD9F200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE300000000000000000000000000000000000000000000000000006496989B9DA0A3A6A9ABAEB1B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8130000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F9F8F7F6F5F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E3E0E0DDDCDADAD9D7D6D4D3D1D0D0CCCCCCCBC9C7C7C7C5C5C4C4C3C3C1C1C1C1C1C1C1C1C1C1C1C1C3C3C4C4C5C5C7C7C7C9CBCCCCCED0D0D1D3D4D6D7D9DADCDCDEE0E0E3E4E5E7E7E8EBECECEDEFF0F0F1F3F3F5F5F6F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCEDDEE1DFDEDFDEDCDCDCDEE3ECDAD3D1D1D1D3D3D3D1D0D0D0D0D0D0D1D0CFCFCFCECECECECED0D0D0D0D0D0D1D3D3D3D5D5D5D6D7D6D6D6D5D3D5D5D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E3E3E3E3E2E2E2E3E3E3E4E6E6E4E4E3E1E1E1E2E2E2CAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38E7D7C7D7E7E7F818282838688898C8F909496999B9EA2A4A7A8ABB0B2B6B8B9BDBFC1C4C8CACECED0D1D3D5D7D9DADBDBDBDEDEDEDEDEDFE1DFDEDCDCDEDEDFDFE1E1E1E3E2E2E3E4E3E3E3E3E3E3E2E3E3E3E3E3E3E6E3E3E3E2E2E2E2E2E2E1DFE1DFDFE1E2E3E3E3E2E3E3E4E6E6E6E4E6E4E4E4E4E6E6E6E4E4E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E37C46464645454544444444444444444444444444434343444444444444444242424242424242424141414141414242424041424243434243434444464748494A4B4C4F5053555658595C5E616466696D6E72767A7D8183888B909096999C9FA3A5A8ABADAFB2B4B7B7B8BBBBBBBBBDBDBEBEC0BDBDBDBBB9B9B8B5B4B2AFADAAA8A5A1A09E999693908D888784807C7A7773706D6A6766615F5D5A595553514E4C4C484745454342403E3C3B3B3A39373736353533333231313130312F2F2F2D2D2D2D2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232322222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171716161616161515151515141414141414151515141414141414141413131313131313131313121212121274BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5390F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000068F97999C9FA1A4A7AAADAFB2B5B8BBBEC1C4C6C9CCCFD2D4D7D9DBDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F8630000000000000000000000000000000000000000000000000019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E1E0DEDDDCDADAD8D7D4D4D1D0D0CCCCCBCAC9C7C7C5C5C4C3C1C1C1C1C0BEBEBEBEBEBEBEBEBEBEBEBEC0C1C1C1C1C3C4C5C5C7C7C9CACBCCCED0D0D1D4D4D7D9DADADCDDDEE0E3E4E5E7E7E8EBECECEDEFF0F0F1F3F3F5F5F6F6F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF7ECECECECEBEBEBECECEEF3FBEBE4E4E3E2E2E3E4E4E4E3E2E1DFDEDEDEDEDEDFDEDEDFDFDFDFDEDFDFDEDEDEDFDFDFDFDEDEDEDBDEDEDBDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDEDFE1E2E3E2E2E2E3E3E3E3E3E3E3E1E3E1E1E1E1DFC2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3928383838588888A8A8C8D8F8F939497979B9C9E9FA2A5A5A7ABACB1B1B3B8BBBFBFC1C3C5C9CACBCFD0D1D3D3D5D6D7D9DADBDADBDBDBDCDEDEDEDEDEDEDEDEDEDEE1E2E2E3E3E3E3E2E2E3E3E2E3E3E3E3E3E2E2E3E3E3E3E2E3E3E4E4E6E6E4E6E6E6E6E6E4E6E6E4E4E6E4E6E4E6E6E6E6E7E6E7E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEBB46464646464646454544444444444444444444444443434344444444444444424242424242424242414141414142424240414143434243444344464748494A4C4D4F50515556585B5E5F6164686B6C7172767A7F82848A8C9091979A9FA0A5A7A9ADB0B4B5B7BABBBCBEBEC1C2C1C2C2C2C2C2C2C1C0BEBDBBBAB8B7B4B3B0ADA9A8A5A19E9B9895928D8B8784817E7A7874726F6A6966615F5D5A595552514E4C4A484745454340403E3C3B3B3938373636353533333231313030312F2F2F2D2D2D2D2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717171616161616151515151614141414141515151414141414141414131313131313131313131312121682BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD560F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23000000000000000000000000000000000000000000000000002F96989B9DA0A2A5A8ABAEB0B3B6B9BCBFC2C5C7CACDD0D3D5D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8B30000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F6F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E1E0DEDDDCDAD9D7D6D4D3D1D0CECCCBCAC9C7C5C5C4C3C1C1C1BEBEBDBDBDBDBDBBBBBBBBBBBBBBBBBDBDBDBDBDBEBEC1C1C1C3C4C5C5C7C9CACBCCCED0D1D3D4D6D8D9DADCDDDEE0E1E4E5E7E7E8EBECECEDEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF3E7E9E9E9E9EAE9E9EAEAEEF8E7DFE1E1E2E2E3E4E4E4E3E3E3E2E2E3E1E1DFDFDFE1E1E2E1E2E3E2E2E3E3E3E3E3E3E3E3E3E3E3E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E1E1E1E1E1DFE1E1E1DFDFDEDCDCDCDCDBDEDEDEDEDEDCBCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38E7D7D7F8181818283888A8A8D909294979B9C9FA2A5A8A8ACB1B2B5B6B8BBBCBFBFC0C3C3C5CACACBCECFD0D0D1D5D7D7D9DADCDBDBDEDEDEDEDCDCDEDFDFDFDEDFDEDEDEDFDFDFDEDEDEDEDFDFDFE1E2E2E3E2E3E2E2E3E3E2E2E3E3E3E3E3E2E2E2E2E2E3E3E3E2E2E2E3E3E3E3E3E3E3E3E2E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEE71464646464646464646454544444444444444444444434343434444444444444242424242424242424141414141414242424142434243434446464647494A4C4C5050515556595B5E5F6164686B6D7175797B8083868A8E9095999CA0A3A7A9ADB0B4B5B8B8BCBEC0C2C4C5C5C5C5C6C5C6C6C6C6C4C1C2C1BDBDBBB7B7B4B1AEACA9A6A4A09C9B9792908B8984837F7A7874726F6A6966615F5D5A585552514E4C4A484745444340403E3C3B3A3938373635353533333231313030312F2F2E2D2D2D2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919171717171717171717161616161515151515161414141414151515141414141414141413131313131313131313112391BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD79130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE00000000000000000000000000000000000000000000000000006497999C9FA1A4A6A9ACAFB2B4B8BBBDC0C3C6C9CBCED1D4D6D8DBDDE0E2E4E6E7E9EBECEEF0F1F2F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9F8130000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F8F8F7F6F5F5F3F3F1F0F0EFEDECECE9E8E7E7E5E4E1E0DEDCDCDAD9D7D4D4D1D0CECCCBCAC7C7C5C5C4C1C1C1BEBDBDBDBBBABAB9B9B9B7B7B7B7B7B7B7B7B9B9B9BABABBBDBDBDBEC1C1C3C4C5C5C7C9CACCCCD0D0D1D4D6D7D9DADCDDDEE0E1E4E5E7E7E8EBECECEFEFF0F0F1F3F5F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCEFE1DFDFDEDEDCDEDEDEDEE2EEDFDAD9DADADBDBDBDADBDBDBDBDADADBDBDBDBDBDBDCDEDEDBDBDBDBDBDBDEDEDEDEDEDEDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDBDEDEDEDEDEDBDBDBDBDBDBDCDEDCDCDCDCDBDBD9D6B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3948384848686868788898A8D8F909396979C9CA1A4A7A8ACAEB1B2B6B6BBBDC0C1C4C6CACACBCFCFD0D1D3D5D6D7D6D7D7D7DADEDEDFE1E1E1E2E3E3E4E4E3E4E4E4E4E4E6E6E6E4E4E3E3E3E6E3E4E3E4E3E3E3E3E3E3E1E1E2E1DFDFDFDEDEDEDEDEDCDCDEDEDFDEDEDEDFE1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4BB464646464646464646464646454444444444444444444443434344444444444444424242424242424242414141414142424241424242434445464647494A4A4C4F51515556595A5D5F6164676B6D7176797B8083878B8E93969B9FA2A6A9ADB0B2B7B7BBBDBEC2C4C5C5C7C8CACACACBCBCACACACAC7C7C6C4C2BDBDBABAB7B2B1AEACA8A5A19E9B9793908C8886837F7B7874726F6A6966615F5D5A585552514E4C4A4847454441403E3E3C3C3B39383736353535333232313130302F2F2F2E2D2D2D2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191919171717171717171717161616161515151515161414141414151515141414141414141413131313131313131323A7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD98200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000000C90989A9DA0A2A5A8AAADB0B3B6B9BCBFC1C4C7CACDCFD2D4D7D9DCDEE0E2E5E6E8EAECEDEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8630000000000000000000000000000000000000000000000000007F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEFECECEBE8E7E7E5E4E1E0DEDCDADAD8D6D4D3D1D0CCCCCAC9C7C5C4C3C1C1C0BEBDBDBABAB9B7B7B7B7B6B6B5B5B5B5B5B5B5B5B6B6B7B7B7B7B9BABABDBDBEC0C1C1C3C5C5C7C9CBCCCCD0D1D3D4D7D9DADADCDEE0E1E4E5E7E7E8EBECEDEFEFF0F0F1F3F5F5F6F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF6EBEAE9E7E9EAEBECECEEF4FBEAE1E1E2E2E2E3E3E3E4E3E2E2E2E3E2E2E2E1E1E1E1E1E1E1E1DFDFDFE1E1E1E1DFDEDEDFDEDEDEDEDEDEDEDFDEDEDEDEDEDFE1E1E2E2E3E3E3E3E3E3E3E2E2E2E1E1E1E1E1E2E1E1DFDFE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDBDBDBDEDEDEDEDEDEDEDBDAD9D9D7D7D7D7D6D6D6D0B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39283848486868989898C8C8E8F9294979B9C9EA2A4A7AAACAEB1B5B8BBBDC1C3C5C6CACACBCED0D3D5D5D6DADADBDBDEDEDCDEDFE1E1E2E2E1E3E3E3E3E3E2E3E2E2E3E3E3E3E3E3E3E3E3E2E3E3E3E4E6E6E7E6E6E7E7E6E4E6E6E6E6E6E4E4E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E161474747474746464646464646464544444444444444444444434343444444444444424242424242424242414141414142424242424243444546474849484B4C4F50535556595A5C5F6164676A6E7175797D8083888B9093979CA0A3A6AAADB3B5B7BABDBEC1C5C5C8CACACDCECECECFCFCFCECECECBCBCAC7C7C4C1C0BEBBB9B7B2B0AEA9A6A19F9C9893908C8A86837F7B7874726F6A6766605F5D5A585452504D4C4A4847454441403E3E3B3C3B39383736353533333232313130302F2F2F2E2D2D2D2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717171616161616151515151514141414141415151414141414141414131313131313131337B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA7340F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F000000000000000000000000000000000000000000000000003B97999B9EA1A4A6A9ABAEB2B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8BD0000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBFAF9F9F9F8F8F6F6F5F5F3F3F1F0EFEFEDECEBE8E7E7E5E4E1E0DEDCDADAD8D6D4D3D0D0CCCBC9C7C5C5C3C1C1BEBDBDBBBAB9B7B7B6B5B5B4B4B3B3B3B3B2B2B2B2B3B3B3B3B4B4B5B5B6B7B7B9BABBBDBDBEC1C1C4C5C7C7C9CBCCD0D0D3D4D6D8DADADCDEE0E1E4E5E7E7E9EBECEDEFF0F0F1F3F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF9F3F3F2F3F2F3F3F3F3F3F7FCECE6E6E6E7E7E7E6E7E9EAE9EAE9E9E7E9E9EAEAEAEAECECECECECEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E2E2E3E3E3E3E4E4E4E3E2E1E1DEDEDCDBDBDCDCDBDBCEB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39487868686888A898A898C8C8D8F929397999B9C9FA2A5A5A8AAAEB1B5B6B9BCBFC1C4C5C9CBCBCFD1D3D6D7D9DADADBDBDCDEDEDEDFE1E2E2E3E3E2E3E3E3E4E6E7E7E6E7E7E6E4E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7A6474747474747474746464646464645454444444444444444444343434444444444444442424242424242424141414141424243434243444545474749484B4C4F50515556595A5C5F6164686B6D7176797D8084888D9095979CA1A4A9ADAFB2B8BABCC0C2C5C5C8CACDCECFD1D2D0D2D2D2D2D2CFCFCFCECECBCAC7C4C1BDBDBAB7B2AFAEAAA6A2A09C9895908D8886837F7B7874726F6A6766615F5D5A585451504D4C494845454341403E3C3B3C3B38373636353533333232313030302F2F2F2E2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292928282828282828282727272727272726252525252525252524252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919171717171717171717161616161615151515161414141414151515141414141414141413131313131351B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB54F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD00000000000000000000000000000000000000000000000000006C989A9C9FA2A5A8AAADB0B3B6B8BBBEC1C4C6C9CCCFD2D4D7D9DBDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9F81E0000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECEBE9E7E7E5E4E1E0DEDCDADAD7D6D4D1D0CECCCBC9C7C5C4C1C1BEBDBDBAB9B7B7B6B5B4B3B3B2B1B1B1B1B1AFAFAFAFAFAFB1B1B1B1B1B2B3B3B4B5B6B7B7B9BABDBDC0C1C3C4C5C7C9CBCCCED0D1D4D6D8DADADCDEE0E1E4E5E7E7E9ECECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF5E7E9EAE9E9E9EAECECEAEFF8E9E1E1E1E1E1DFDFDFDFDFE1DFE1E1E1E1E2E1E1E1E1E1E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E6E4E6E6E7E6E6E6E7E9E9E9E9E7E6E6E6E6E4E3E3E4CCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39283838383838586888A8A8C8C8D8F92939497999B9C9FA1A4A5A5A8AAACAEB3B5B9B8B9BDBDC0C1C4C5C6CACBCBCECFD0D0D0D0D1D1D3D5D3D5D3D3D3D5D3D5D5D5D7D6D5D6D6D6D6D5D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDA5B47474747474747474746464646464646454444444444444444444343434444444444444242424242424242424141414242434343434444454647484A4A4C4D50515556595A5C5F6164686B6D7175797D8086888E90959A9EA1A6ACADB1B4B8BCBEC1C5C7C8CBCDCFD1D2D6D6D5D6D6D8D6D6D5D5D5D1CFCFCECBC8C7C4C1C0BDB9B7B1B0ACA8A5A29E9895928D8A86847F7B7873726D6A6766605F5B5A585451504D4C494745454342403E3C3B3B3A383736363535333332323130302F2F2F2E2E2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525242525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717171616161615151515151614141414141515151414141414141414131313135FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD720F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C000000000000000000000000000000000000000000000000000C96989B9DA0A3A6A9ABAEB1B4B7B9BCC0C2C5C8CACDD0D3D5D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8770000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F5F3F1F0F0EFEDECECE9E7E7E5E4E1E0DEDCDAD9D7D6D4D1D0CCCCCAC7C7C5C3C1C0BDBDBAB9B7B7B5B4B3B2B1B1B1AFAFADADACACABABABABABABACACADADAFAFB1B1B1B3B3B4B5B7B7B9BABDBEC0C1C3C5C7C7CACCCCD0D1D4D6D8DADADCDEE0E1E4E5E7E8E9ECECEDEFF0F0F1F3F5F5F5F6F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF3E6E6E6E9E9E9E9E9E9EAEFF8E7DFDEDFDFE1E1E2E1E2E3E2E2E3E3E3E3E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADAD9D9DADADADADADADADBDBDBDBDBDBDADBDBDEDCDCDBC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39588888989898A8C8E8F90939397999B9EA1A2A5A7AAACAEB1B3B6BBBBBDBFC0C4C6C6C9CACECED0D1D3D3D6D6D7DAD9D7D9DADADADADADBDADADBDEDEDEDEDEDFE1E1E1E1E1E1E1DFE1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2A04747474747474747474747474646464646454544444444444444444443434344444444444442424242424242424141424242434343444445464748494B4C4D50515456595B5C5F6165686B6D7375797D8086888C91969A9FA3A6ACAFB3B7B8BDC0C2C6CACDCED0D2D5D6D7D9DADADAD8D8DAD8D7D6D6D6D5D1D0CFCBC8C5C4C1BEBAB7B2B1ADA9A5A19E9996928D8A87837F7A7874706D6A6763605F5B59565352504D4A4847454443423E3E3C3C3B3A383736363535333232323130302F2F2F2E2E2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525242525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717171616161615151515151614141414141515151414141414141413131774BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD911A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED00000000000000000000000000000000000000000000000000003C97999C9FA1A4A7AAADAFB2B5B8BBBEC1C4C6C9CCCED1D4D6D9DBDDE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9D0000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F6F5F5F3F1F0F0EFEDECECE9E8E7E5E4E1E0DEDCDAD9D7D6D3D1D0CCCBC9C7C5C4C1C1BEBDBBB9B7B7B5B4B3B1B1AFAFADACABAAAAAAA9A9A9A9A9A9A9A9A9A9AAAAABABACADAFB1B1B1B3B4B5B7B7B9BBBDBEC1C3C4C5C7C9CBCCD0D1D4D6D8DADADCDEE0E3E4E5E7E8E9ECECEFEFF0F1F3F3F5F5F6F7F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDDBDEDEDEDCDEDEDCDEDFE3EEDED5D5D5D5D6D6D6D7D7D9D9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADBDADAD9D9DADBDADADADADAD9DADBDBDADAD9D7D7D7D9BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3907F807F7E81818181818584898A8A8E909396979B9C9FA2A5A8A8ACAEB1B3B5B6B8BCBDC0C3C5C8C9CACACED0D1D1D5D5D5D5D5D6D7D7D9D9DADADBDEDBDBDEDEDEDCDEDFDFDFDFE2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFD95548484848474747474747474747464646464645454444444444444444434343444444444444424242424242424242414242434443444545454747494B4C4D50515356575A5D606164656B6E7276797D8086888D91969A9DA4A9ADB0B5B8BBBEC2C5C8CACED0D2D5D6D7DBDADBDCDCDCDCDEDCDBDBDAD8D7D6D4D1D0CDCBC7C4C1C0BDB7B4B1ADA9A5A19F9B96928E8A86837F7A7873706C6A6563605E5A59555352504C4A4847454441423E3C3B3C3B3A383736363533333232323030302F2F2E2E2E2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525242525252524242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191917171717171717171716161616161515151516141414141415151514141414141414141892BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA72D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000000078989B9DA0A2A5A8ABAEB0B3B7B9BCBFC2C5C7CACDCFD2D5D7D9DCDEE1E2E5E6E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9F831000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F3F3F1F0F0EFEDECE9E8E7E5E4E3E0DEDCDADAD7D6D3D1D0CCCBC9C7C5C3C1C0BDBDBAB7B7B5B4B3B1B1AFADACABAAA9A9A8A7A7A5A5A5A5A4A4A5A5A5A5A7A8A8A9A9AAABACADAFB1B1B3B4B5B7B9BABDBDC0C1C4C5C7C9CBCCD0D1D4D6D8DADADCDEE0E3E4E5E7E8EBECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFAF3F3F2F3F6F3F3F6F6F6F9FDEEE9E6E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDEDEDEDEDBDBDEDEDEDEDEDEDEDCDBDBDBDBDBDBDCDAD5B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3978A8A8C8A8C898C8C8C8E8F92949497999C9EA2A4A5A7ABB0B1B3B6B6B9BCBFC1C5C5C5C8CACECBD0D3D5D5D6D9DADCDEDFDFDEDFE1E2E2E2E4E4E6E4E3E4E6E4E3E4E3E4E6E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3A348484848484848474747474747474746464646464544444444444444444443434344444444444442424242424242424242434344444547454647494A4C4D50505356575A5D5F636465696E7175797E8184888E91989B9FA4A9ADB2B5B8BCC0C4C5CACED0D2D6D6D8DBDCDEDFDFE1E2E1E1E1E1DFDEDCDCDAD6D6D5D2D0CDC8C5C4C1BBB9B4B1AEA9A5A19E9B96928E8A86837F7A77736F6C6965625F5E5A595552504F4C494845454441403E3C3B3C3B393737363635333332323230302F2F2F2E2E2E2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282827272727272727262525252525252525252525252524242424232323232323232323232323222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171716161616161515151516141414141415151514141414141425A0BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5410F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23000000000000000000000000000000000000000000000000001297999C9FA1A4A7A9ACAFB2B5B8BBBDC0C3C6C9CBCED0D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F88B0000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F5F5F5F3F1F0F0EFEDECEBE8E7E7E5E3E0DEDDDADAD7D6D3D1D0CCCBC9C7C5C3C1BEBDBBB9B7B6B4B3B1B1AFADABAAA9A8A8A5A5A4A4A3A3A3A2A2A2A2A2A2A3A3A3A4A4A5A5A8A8A9AAABADAFB1B1B3B4B6B7B9BBBDBEC1C3C5C7C9CBCCD0D1D4D6D8DADCDDDEE0E3E5E7E7E9ECECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF8EEEFEFEFEEEEEFEFEFEEF2FBEAE3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DEDFDFE1E1E1E1DFE1E1DFDEE1E1E1E1E1E1DFDEDEDFD9B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39A9290929292909294979799999B9FA1A2A7A7A7ACAEB1B1B3B5BBBDBDC0C3C4C4C6C6CACBCED0D1D5D3D6D9DBDBDEE1E1E1E3E3E4E3E3E3E3E2E1E3E3E3E4E3E2E3E3E3E2E2E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADAD353484848484848484848474747474747474646464646454444444444444444434343444444444444424242424242424444434344444445474747484A4C4D50515355575A5C5F616466686D7175797E82848A8D91969BA0A4A8ADB2B7BABEC1C5C8CDCFD1D6D7D9DBDCDFE1E2E2E2E3E4E2E4E4E2E2E2E1DEDBDAD8D5D5D0CECBC7C4C1BEB9B5B2AEA9A5A19E9B96928D8886837E7B77726F6C696762605D5A585451504D4C494845454342403E3C3C3B3A393737363535333232323230302F2F2F2E2E2E2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282727272727272727262525252525252525252525252524242424232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171716161616151515151516141414141415151514141414143E5252525252525251515151515151515151515151505050505050509FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD5D4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F130F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC400000000000000000000000000000000000000000000000000004E989B9DA0A2A5A8ABAEB0B3B6B9BCBFC1C4C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9E5000000000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F3F3F1F0EFEDECECE9E7E7E5E3E0E0DDDCDAD8D6D4D1D0CCCBC9C7C4C3C1BEBDBAB7B7B5B3B2B1AFADABAAA9A8A5A4A4A3A2A2A2A0A0A0A0A0A0A0A0A0A0A0A0A2A2A2A3A4A5A5A8A9AAABADAFB1B2B4B5B7B9BABDBEC1C3C5C7C9CBCCD0D1D4D6D8DADCDDE0E0E4E5E7E8E9ECECEFEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFFFFFFFFFFFFFFFFFFF6E9E9E9EAE9E9E9EAEAEAEFF9EAE3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E6E4E6E6E7E6E6E6E7E9E7E9E9E7E6E6E6E6E3E3E3D7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3978C8C8A8C8C8C8D8E8E8E9092929697979B9B9CA1A1A4A7A7A8AAAEAEB1B2B2B5B6B8BBBDC0C3C1C4C5C5C8C9CACBCED0D1D1D1D3D3D3D3D5D5D5D5D6D5D6D5D5D5D6D5D5D5D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD99E48484848484848484848484747474747474746464646454544444444444444444343434444444444444242424242444444444444444547474748484B4C4F4E535457595B5F606367686B7074797E80848A8D91969B9FA4A9ADB2B7B8BEC2C6C8CFD0D5D6D9DCDEE1E2E4E3E5E5E7E6E6E6E6E5E5E4E2E1E1DEDCDAD7D5D1CFCBC7C4C1BDBAB5B1AEAAA5A19E9996908D8886837E7975726F6C6967615F5B5A565351504D4A484745444142403E3B3C3B3A393737363533333232323130302F2F2E2E2E2E2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282727272727272726262525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919171717171717171717161616161515151516141414141414151514141414141414141313131313131313131311121212121211111111111111111165BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA70F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55000000000000000000000000000000000000000000000000000085999C9FA1A4A6A9ACAFB2B4B7BABDC0C2C5C8CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8450000000000000000000000000000000000000000000000000000E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F5F5F5F3F1F0F0EFEDECE9E8E7E5E4E1E0DDDCDAD8D6D4D1D0CCCBC9C7C4C3C1BDBDBAB7B6B4B3B1AFADABAAA9A7A5A4A3A2A2A0A0A09E9E9E9D9D9C9C9C9C9D9D9E9E9EA0A0A0A2A2A3A4A5A8A9AAABADAFB1B3B4B6B7BABDBEC1C3C5C7C9CBCCD0D1D4D6D9DADCDDE0E1E4E5E7E8EBECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E7E7E9E9E9E9E9EAEBEFF9E9DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDEDEDEDEDEDFDFDFDEDEDFE1E1E1DFDEDEDEDEE1E1C9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B399909090909090909393939497979B9C9E9FA2A5A7A8AAACB1B1B1B3B5B8B9BCBFBFC1C4C5C5C9C9CACACECFCFD3D5D5D5D9D7D7D7D9DAD9D9D9D9D9DADADBDBDBDCDBDCDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5CF52484848484848484848484848474747474747464646464645444444444444444443434344444444444442424242424444444444444547474749484B4C4F4E515556575A5C606365696C6F74787B8084888D91969AA0A5AAAEB3B7BBBEC2C9CBD0D2D6D7DADCE1E2E2E5E6E7E8E8E9E9E9E9E7E8E6E5E5E3E3DFDEDBD7D6D5D0CBC8C5C1BDBAB7B2AEAAA6A19E9995908C8984807C7875726D6A6763625F5A595552524F4D4A484545434140403D3B3C3A393737373635333332323231302F2F2F2E2E2E2E2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292929282828282828282727272727272726262525252525252525252525252524242423232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191917171717171717171716161616161515151516141414141415151514141414141414141313131313131313131312121212121111111111111111112FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD640F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED00000000000000000000000000000000000000000000000000001E989B9DA0A2A5A8AAADB0B3B6B9BCBFC1C4C7CACCCFD2D4D7D9DBDDE0E2E4E6E8EAEBEDEEF0F1F2F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F9A8000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F9F8F7F6F5F5F3F1F0F0EFEDECEBE8E7E5E4E3E0DEDCDAD9D6D4D1D0CCCBC9C7C4C1C1BDBBB9B7B5B4B2B1ADACAAA9A7A5A4A3A2A0A09E9E9D9C9A9A9A99999999999999999A9A9C9C9D9EA0A0A0A2A3A4A5A8A9AAACAFB1B2B4B6B7B9BDBDC1C3C5C7C9CBCCD0D1D4D7D9DADCDEE0E3E5E7E7E9ECECEDEFF0F0F3F3F5F5F6F7F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E2E2E1E2E1DFE2E1E1E6F2E1D9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E1E3E3E2E2E1E1E1DFDFDEDEDEDEE1DFDEDFDFDFDEDCC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3978D8E8F8E8E8E8F90909093949797999C9F9FA1A4A7A7A8ACAEB1B3B6B9B9BDBFC1C5C5C5C6C9CBCED0D1D5D6D7D9DAD9DADEDEDEE1E1E1E1DEDEDEE1E1E1E1E1DFE1E2E3E4E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1A64848484848484848484848484848474747474747464646464645444444444444444443434344444444444242424244444444444444454747494A4A4C4D50505457575A5D616365696D6F73787B7F84888C90959AA0A4A9AEB2B8BBBEC1C9CBD0D2D7DADCDEE2E4E5E7E8E9E9EAEBECECECEAE9E9E9E8E6E5E3E2DFDCD8D6D4D0CDC8C7C1BDBAB7B1AEA9A5A19E9893908B87847F7C7874706D6A6663605F5A575452504F4D494845454342403E3D3C3B3A393737373533333232323131302F2F2F2E2E2E2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282827272727272727262525252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717171616161615151515151614141414141515151414141414141413131313131313131313111212121212111111111111111111A7BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD270F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8200000000000000000000000000000000000000000000000000005B999C9FA1A4A6A9ACAFB2B4B7BABDC0C2C5C8CBCED0D3D5D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9EE13000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F5F5F3F3F1F0EFEFECECE9E7E7E5E3E0DEDCDAD9D7D4D3D0CCCBC9C7C4C3C1BDBBB9B7B5B3B1AFADABA9A8A5A4A3A2A0A09E9D9C9A9999989797979595959595959797979899999A9C9D9EA0A0A2A3A4A5A8A9ABADB1B1B3B5B7B9BDBDC1C3C5C7C9CBCCD0D3D4D7DADADDDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAEAEAE9E9E9E7E7E7E7ECF8E9DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E3E4E4E6E6E6E6E6E4E6E6E3E2E2E2E1E1E1E1E1E1DFDEBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3998F909090909090929292949697999B9B9C9EA2A2A4A4A5A8AAABAEB0B1B2B5B6BBBDC0C1C3C4C6C6C9CBCECECECECFD1D1D1D1D3D5D7D7D9D9DADADAD9D7D7D9DADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDF6348484848484848484848484848484847474747474746464646454544444444444444434343444444444444424242444444444444454747474A4B4C4C4E505356585A5D5F6065686C6F73777B7E82898C90959A9FA4A9AEB2B7BBC0C4C8CDD0D2D7DADDE1E2E5E7E7E8EAEBEBEDEDECEDEFECEBEBE9E9E6E6E5E3DFDCD8D6D4D0CDCAC5C1BEBAB7B1AEA9A5A29C9893908B86837E7A77736F6C696762605D5A565451504D4C484745444242403E3C3C3B3A373737373533333232323131302F2F2E2E2E2E2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282827272727272727262525252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717171616161615151515161414141414141515141414141414141413131313131313131313121212121212111111111111111174BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD980F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF190000000000000000000000000000000000000000000000000006929B9DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CCCFD2D4D6D9DBDDE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F86D0000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFEDECEBE8E7E5E4E1E0DDDCDAD7D6D3D0CECCC9C7C5C3C1BDBBB9B7B5B3B1AFACAAA9A7A4A3A2A0A09E9C9A9999979795959595959393939393939595959595979799999A9C9EA0A0A2A3A4A7A9AAADAFB1B3B5B7B9BDBDC1C3C5C7C9CCCED0D3D6D8DADCDDE0E1E4E5E7E8EBECEDEFF0F0F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEBEBEBECECECEEEEEEF2FBE9E2E1E1E1E1E1E2E1E1DFDFE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADADBDBDBDCDCDEDEDCDCDEDEDCDEDEDEDEDEDEDEDFDCDAB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39C96969797979797999B9B9B9C9EA1A2A4A7A8ABACB0B2B5B6B6BBBDBDC1C4C4C5C5C8CACBCECFD1D1D5D7D9DADADBDBDBDEDEDEDFE1E1E1DFDFDFDEDEDEDFDFDFE1E1E1E1E1E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9B44948484848484848484848484848484848474747474747464646464544444444444444444343444444444444424244444444444546474747484A4C4D4E505155575B5C5F6065676B6F7276797E83878C90939A9DA4A7ADB3B7BBC0C5C8CDD0D6D8DCDEE2E4E5E8E9EBEBEFEFEFEFEFF1F0EFEFEFEDEBE9E8E7E6E3E0DEDBD7D4D0CDCAC5C1BEBAB5B1AEA8A5A09B97928E8A86837E7B75726F6C6766625F5D5A5653524F4D4A4845454442403E3E3C3B3A393737373535333232323231312F2F2F2E2E2E2E2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292929292828282828282827272727272727262525252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717161616161615151515161414141414151515141414141414141413131313131313131311121212121211111111111111113CBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD5D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9000000000000000000000000000000000000000000000000000036999C9FA1A4A6A9ABAEB1B4B7BABDC0C2C5C8CACDD0D3D5D7DADCDEE1E2E5E6E9EAECEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F9C6000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F5F5F3F3F1F0EFEFECECE9E7E7E4E3E0DEDCDAD9D6D4D1D0CCCAC7C5C3C1BDBBB9B7B5B3B1AFABAAA8A5A4A2A0A09E9C9A999897959593939392929292919191919292929293939595959798999A9C9EA0A0A2A4A5A8AAACAFB1B3B5B7B9BDBEC1C3C5C7CACCD0D1D4D6D9DADCDEE0E3E5E7E7E9ECECEFF0F0F1F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEFEFEEEEEEEEEEEFEFF4FBEBE6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEDFDFDFDEDEDEDEDBDEDBDCDCDBDBDADADADBDADAD9D2B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D96969697969697979999999B9B9E9FA2A2A4A5A7AAACAEB1B2B5B6B8BBBDBFC4C5C8CACBCECFD1D3D5D5D6D9DADADBDBDCDEDEDEDFE1E1E1E1E1E1E2E2E3E3E3E3E3E3E2E2E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F16649494949484848484848484848484848484847474747474646464645454444444444444443434344444444444444444444444445474747484A4A4E4F50505357595C5E6164666A6C7075797E80848A9094999EA3A7AEB2B7BBC0C4C9CBD0D6D7DADCE3E4E6E8EAECEDEFF0F2F0F1F2F2F2F1F0F0EFEDEBE9E7E6E4E2DEDAD8D4D1CEC8C4C1BDB7B4B0ADA8A49F9B96928D8884807B7875726C6A6662625F5B595552504D4D4A4845454342403E3E3C3B3A393737373533333232323131312F2F2E2E2E2E2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292929282828282828282827272727272727262525252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191917171717171717171716161616161515151516141414141415151514141414141414131313131313131313131112121212121111111111111115B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD200F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000000000000000000000000000000000000000000000000000749B9DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CCCED1D4D6D8DBDDE0E1E4E5E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8320000000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFEDECE9E8E7E5E3E0DEDDDAD9D7D4D1D0CCCBC7C5C3C1BEBDB9B7B5B3B1AFABAAA8A5A3A2A09E9C9A99979595959393929191909090908F8F8F8F90909090919192939395959798999A9D9EA0A2A3A5A8AAACAFB1B3B5B7B9BDBEC1C4C5C7CBCCD0D1D4D7D9DADDE0E0E4E5E7E8EBECEDEFF0F0F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7EAEAEAEAEAEAEBEBEBF1F9E9E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1DFDFDEDEDEDFDFDFDEDEDEDEDEDEDEDFE1E1E1E1E1DFD0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A39F9E9C9E9C9E9F9FA1A2A2A4A5A7A7A8ABAEAEB2B3B6B9BCBFC0C4C6C6C8C9CBCBD0D1D5D5D7D9DADBDEDEDEE1E2E4E4E6E7E9E9E9E9E9EAEBECEEEEECEEECECEBECECECECEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDAD6D5D3D3D3D3D3D3D5D5D5D6D6D6D6D6D6D6D9D6D6D6D6D6D6D6D6D5D5D5D5D5D3D3D3D3D3D3D3D3D1D1D1CFCFCFCFCFCECCCECECFCFCFCFD1D1CFCFCECFCFCFD0D0D0D3D2D4D4D4D1D2D0CFCFD0D2D0CFD1D1D0D0D0D0CFD0D0D0D1D1D1D1D1D1D3D3D5D6D5D5D7D7D7D7D7D7D7D7D9D9D7DADAD7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D5D6D7D6D6D6D3D3D3D3D3D5D6D6D6D6D6D6D7D7D7D7D6D6D6D5D5D5D6D7D7D7D6D3D3D2D1D0D0D0D0D0D2D1D3D5D5D3D1D3D5D3D3D3D1D3D5D5D6D6D5D5D3D3D5D5D3D5D6D5D5D6D6D6D6D7D9D9D7D7D7D7D6D6D6D6D6D6D6D6D6D6D6D6D6D5D5D5D6D6D6D6D6D6D6D7D7D9D7D98D2525252525252525252525242424232323232323232323232322222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171716161616151515151514141414141415151414141414141414131313131313131313131212121212111111111111111182BDBDBDBDBDBDBDBDBDBDBDBDBDBDBD980F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9000000000000000000000000000000000000000000000000000012999C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDD0D2D5D7D9DCDEE0E2E5E6E8EAEBEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F995000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F6F5F5F3F1F0EFEFECECE9E7E5E4E3E0DDDCDAD7D4D3D0CCCBC7C5C4C1BEBDB9B7B5B3B1AFABA9A8A4A3A2A09E9C9A9897959393929191908F8F8D8D8D8D8D8D8D8D8D8D8D8D8F8F9091919293959597989A9C9EA0A2A3A5A8AAABAFB1B3B5B7BABDBEC1C4C7C9CBCCD0D3D6D8DADCDEE0E3E5E7E7E9ECECEFF0F0F1F3F5F5F6F6F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEAE9EAEBEAEAEAEAEBEFF9E9E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDBDEDEDFDEDEDEDEDEDFE1E1E2E1E1E1E1E1E2E1E1E2CAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E9B9B9B9B9C9B9C9C9EA1A2A2A4A5A5A7AAABAEB0B1B3B5B6B6BBBDBDC1C3C5C5C6C9CBCBCFCED0D3D1D1D3D5D6D6D6D7D7D7D9DADBDEDCDCDBDEDFDFDFE1E1E1E1DFDFDFE1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDE9E252525252525242525252525242424232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171716161616151515151614141414141515151414141414141414131313131313131313111212121212111111111111114ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000004F9B9DA0A2A5A8AAADAFB2B6B8BBBEC1C4C6C9CBCED1D3D6D8DBDDDFE1E4E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9E50A0000000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F3F0F0EFEDECE9E8E7E5E3E0DEDCDAD9D6D4D1CECCC9C7C4C1C0BDBAB7B5B3B1AFABA9A8A4A3A0A09D9A9997959593929190908F8D8D8B8B8B8B8B8B8B8B8B8B8B8B8B8B8D8D8F9090919293959597999A9DA0A2A3A5A8AAABAFB1B3B5B7BABDC0C1C5C7C9CCD0D1D4D6D9DADCDEE0E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F1F2F1F1F1F2F3F3F4F6F9FDEFE9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D6D5D5D5D6D5D5D5D5D7D5D5D5D5D5D5D3D1D3D3D3D0BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39C9494949396979797979799999B9B9C9EA2A2A5A7AAACAEB1B1B2B6B9BCBFBFC0C4C5C5C6C6C9CACBD0CFCFD1D5D6D6D6D7D7D9D9D9D9D9D9D9DBDBDCDEDEDEDCDCDBDBDBDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDE9E25252525252525242525252524242424232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919171717171717171716161616161515151516141414141415151514141414141414131313131313131313131112121212121111111111111CBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED0700000000000000000000000000000000000000000000000000008D9C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEFF0F1F3F4F5F5F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F963000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFECECE9E7E5E4E3E0DDDCDAD7D4D3D0CCCAC7C5C3C1BDBAB7B6B3B1AFABAAA8A4A2A0A09C9A989795939291908F8D8D8B8B8B8B8988888888888888888888898B8B8B8D8D8F8F909192939597999A9DA0A0A3A4A8AAACAFB1B4B6B7BBBDC1C3C5C7CBCCD0D3D4D7DADCDDE0E3E4E7E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEBEBECEAEBEBEAEAEFF8E7E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E7E9E9E7E9E9E9E7E6E6E4E3E2E3E3E3E3E1E1E1E1E1DFBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39B9493949292929393969697999B9B9C9E9FA2A2A4A5A7AAABAEAEB1B2B3B5B9B9BBBDBFC3C3C3C5C6C8C9C9C9CBCBCECECFD0D0D0D3D5D5D5D5D5D3D3D5D6D6D7D7D9D7D6D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDE9E25252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919171717171717171717161616161515151515141414141414151514141414141414141313131313131313131312121212121111111111111191BDBDBDBDBDBDBDBDBDBDBDBDBD8A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D0000000000000000000000000000000000000000000000000000319B9DA0A2A5A8AAADAFB2B5B8BBBDC0C3C6C9CBCED1D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFBFBFAF9F9C600000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F8F6F5F5F3F3F1F0EFEDECEBE8E7E5E3E0DEDCDAD9D6D3D0CECBC9C5C4C1BEBBB9B7B4B1AFACAAA8A4A4A2A0A3A29C9999969291908D8D8B8B8B8988878787868686868686868687878788898B8B8B8D8F909192939595989A9DA0A0A3A5A8AAACAFB2B4B7B9BDBEC1C4C7C9CCCED1D4D6D9DADCDEE0E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F8F8F9F9FAFBFBFBFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF3F4F4F4F4F6F4F6F7F7FCFFF1EBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E6E6E4E4E2E2E2E1E2E1E1DEB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A09B9B9B9B9B9C9B9B9B9C9C9C9E9FA1A2A2A5A7A7A8A8ACAEB0B1B3B3B6B9B8BBBCBDBDBFBFC1C3C5C6C8C9CACBCACBCBCECFD0D0D1D3D5D5D6D6D6D5D5D3D1D1D3D5D3D1D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDF9F2625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191919171717171717171717161616161515151516141414141415151514141414141414131313131313131313131112121212121111111111115DBDBDBDBDBDBDBDBDBDBDBDBDBD4F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF190000000000000000000000000000000000000000000000000000749C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBEDEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F8320000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFEDECE9E7E7E4E3E0DDDCDAD7D4D1D0CCCAC7C5C1C0BDBAB7B5AFADAEB0B1B3B3B3B3B3B3B3B3B3B3B3B3ADA7A0948B888787868685858584848484848585858586868788888B8B8B8D8F9091939595989A9CA0A0A3A5A8AAADB1B3B5B7BABDC0C3C5C7CACCD0D3D4D7DADCDDE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E9E9E9E6E9E9E7E6E4E4EBF6E6DCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D0D3D3D5D5D5D6D6D7D6D6D6D5D6D6D6D6D6D5D3D5D3CEB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7A7A7A5A5A5A5A5A7A7AAAAAAAAACACB0B2B3B5B6B8BBBDC0C1C3C5C6C9C9CBCBCFCFD3D3D6D7DADADCDEDEE1E1E1E2E4E4E4E6E6E6E6E4E4E6E7E7E7E9EAE9E9E9EAEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3A2262625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171616161616151515151614141414141515151414141414141413131313131313131313121212121211111111111123BDBDBDBDBDBDBDBDBDBDBDBDB51A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA20000000000000000000000000000000000000000000000000000189B9DA0A2A5A8AAADAFB2B5B8BBBDC0C3C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFBFBFAF9F995000000000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECEBE8E7E5E4E0DEDCDAD9D6D3D0CCCBC7C5C3C1BDB9B2B2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD9E928684838383828282828282838383848585868787888B8B8D8F9091929395989A9DA0A2A3A5A9ABADB1B3B6B7BBBDC1C4C5C9CBCED1D4D6D9DADCDEE0E4E5E7E9ECECEFEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFCFBFBFCFBF9FBF9FBFDFFF3F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D7D7D7D7D7D5D5D5D5D3D0D0D1D0D1D0C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E9B9999999999999B9B9B9B9E9E9E9FA1A2A4A5A8A8AAACAEB0B1B2B3B6B9BBBCBDBFC0C3C1C3C5C6CACBCBCECFD0D3D5D6D6D5D6D7D7D7D7D7DADADADAD9D9D7D6D5D5D5D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2A227262625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191917171717171717171716161616151515151514141414141515151414141414141414131313131313131313111212121212111111111111A7BDBDBDBDBDBDBDBDBDBDBD82100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000000000569C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9EE130000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F3F1F0EFEDECE9E8E7E5E3E0DDDCDAD7D4D1D0CCC9C7C4C1B7B6B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B19E8980808080808080808080828283838485868788898B8B8D9091929395989A9DA0A2A4A7A9ABAFB1B4B7B9BDBEC1C5C7CACCD0D3D4D7DADCDEE0E3E5E7E8EBECEDEFF0F1F3F3F5F5F6F8F8F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEECECECEBEAEBECEBEFF8E6E1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1DFDFDFDFDFDFDFDEDEDEDEDCDBDBDBDBDCDBDBDBDCDCC7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A9A7A7A8A8A7A7A7A8A7A8A8AAA8ABACAEACB0B1B2B5B6B6B9BBBDBFC1C3C5C5C5C9C9CACBCBCFD0D1D5D5D7D9DADAD9DADCDBDADADBDADADADBDBDBDBDCDBDCDBDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDE9F2727262625252525252525252525252525242424232323232323232323232322222222222020202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A19191919191919191919191917171717171717171716161616151515151614141414141515151414141414141413131313131313131313121212121211111111111165BDBDBDBDBDBDBDBDBDBDBD42100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC40000000000000000000000000000000000000000000000000000068F9DA0A2A5A8AAADAFB2B5B8BBBDC0C3C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F96D000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFECECE9E7E5E4E1E0DDDAD9D6D4D0CECBC7C4BAB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AD93817E7E7E7E80808080808082838385858687888B8B8D8F91929595999A9EA0A2A4A8AAADB1B3B5B7BABDC1C3C5C9CBCED1D4D6D9DADDE0E1E4E5E7E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF2F2F2F3F4F2F2F2F2EFF4FBEBE4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D5D3D5D5D3D5D6D6D6D6D5D5D3D3D5D5D5D6D6D7D5D3BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A39FA1A2A2A2A2A2A2A4A2A4A5A7A8AAABABACB0B1B0B1B2B5B6B9BBBBBDC1C1C4C4C5C8C9CACACBCECFCFD3D5D6D7D7D9D7D9D7D9DADADAD7DAD9DAD7D9DADBDADADADADADADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1A02727272625252525252525252525252525252424242323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171616161616151515151614141414141515141414141414141413131313131313131311121212121211111111113CBDBDBDBDBDBDBDBDBDBDB51410100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000000000379C9FA1A4A6A9ABAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9D0000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECEBE8E7E5E3E0DEDCDAD7D4D3D0CCC7BBB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0927F7D7D7D7D7D7E80808080828384858687888B8B8D8F91939597999C9EA0A3A5A9ABAFB1B4B7B9BDBEC1C5C7CACCD0D3D6D8DADCDEE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E7E7E6E6E6E6E6E4E4E7F2E2DBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDBDBDBDBDBDBDBDCDCDBDBDCDCDBDBDBDADADADADADBDABBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ACACACACACABABABABACACACACAEB0B1B2B3B6B9BBBDC0C1C5C6C9CECFD0D1D3D7D9DADCDEDEDEE1E1E1E3E3E3E4E6E7E6E9EBEBEBEBEBEBEEEFEFECEEEFEEEEEFEEECECECEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D3D3D3D1D1D1D0D1D1D1D0D1D1D1D3D1D3D3D5D7D7D7D7D7D7D9D7D7D7D7D5D6D698272727272625252525252525252425252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919171717171717171717161616161515151516141414141415151514141414141414131313131313131313131112121212121111111111AEBDBDBDBDBDBDBDBDBD821010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD90000000000000000000000000000000000000000000000000000007C9DA0A2A5A8AAADB0B3B5B8BBBDC0C3C6C9CBCED0D3D6D8DADCDEE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F94500000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F1F0EFEDECE9E8E7E4E3E0DDDCD9D7D4D1CEBFB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B08F7B7B7B7B7B7D7D7E8080808283858687888B8B8D90919395979A9CA0A2A4A7AAACB1B3B5B7BABDC1C3C5C9CCD0D1D4D7DADCDDE0E3E5E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E2E2E3E4E4E3E4E3E3E6F1E1D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E3E3E3E4E6E6E7E6E6E7E7E4E3E4E6E3E3E3E3E2E1E1DDB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ADAEACABAAABACACACACACACAEB0B1B2B3B5B6B6B9BBBCBFC0C1C3C3C4C5C6C6C9CACBCECFD0D1D1D3D5D6D7D7D7DADADADBDBDBDCDEDEDEDEDFDFDEDEDFDFDFDFE1E1E1E1E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBA927272727272625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191917171717171717171716161616151515151614141414141515151414141414141413131313131313131313121212121211111111117BBDBDBDBDBDBDBDBDBD3B101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF550000000000000000000000000000000000000000000000000000259C9FA1A4A6A9ACAEB1B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DBDDE0E2E4E6E7E9EBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9BD000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F8F6F5F5F3F1F0F0EFECECE9E7E5E4E0DEDCDAD9D6D3C6B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6817B7B7B7B7B7D7D7E80808283848687888B8B8F90929395989A9EA0A3A5A8ABAFB1B4B7B9BDBEC1C5C7CBCCD0D3D6D9DADDE0E1E4E7E7E9ECEDEFF0F0F3F3F5F5F6F8F8F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFCFCFBFDFDFCFCFCFDFDFFF3F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDADADADADADAD9D9D9D9D9D7D7D7D6D6D6D5D5D3D3D0C8B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A39F9E9E9E9E9EA1A1A1A1A2A4A5A5A5A7A7AAACAEAEB1B3B2B3B5B6B9B9BDBDBFC1C3C3C4C5C5C6C9CBCACBCBCECECECED0D1D3D5D6D6D7D7DADADADAD9D9D9D9D9D9DADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3A32727272727272625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919191717171717171717161616161615151515161414141414151514141414141414141313131313131313131112121212121111111143BDBDBDBDBDBDBDBDAE10101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3000000000000000000000000000000000000000000000000000000639DA0A2A5A8AAADB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DADCDEE1E3E5E7E9EAECEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9F928000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0F0EFECEBE8E7E5E3E0DEDCDAD7D1BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3977A797B7B7B7B7D7E80808283848687888B8D8F91929597999CA0A2A4A7AAACB1B3B5B7BABDC1C4C7C9CCD0D3D4D8DADCDEE0E4E5E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E6E7E6E6E6E4E6E6E7ECF6E6DFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADAD9D7D9D9D9D9D7D6D6D6D6D5D7D6D5D6D5D3D3D3D3D3C7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7A5A4A4A4A2A2A2A5A5A7A7A8AAACACAEAEB1B2B2B3B3B6B8B9BCBDBFC0C3C5C5C6C8C9C9CACBD0D0D1D3D6D7D7D7DADADBDCDCDEDEDCDEDEDFE1E1E1E2E3E2E2E3E3E3E3E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2A2272727272727272625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171616161615151515161414141414151515141414141414141313131313131313131312121212121111111116BDBDBDBDBDBDBDBD7310101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000000000139C9FA1A4A6A9ACAFB2B4B7B9BCBFC2C5C7CACDCFD2D4D7D9DBDDE0E2E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF995000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECEBE8E7E5E3E0DDDCD9CEB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A77D78787B7B7B7D7D80808283858687898B8D8F919395979A9DA0A2A5A8ABAFB1B4B7BABDC0C3C5C7CBCED1D4D7DADCDDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAEAEAEAEAEBEAEAEAEBEFF8E7E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDBDBDBDEDCDBDEDEDBDCDBDCDBDAD9D7D7D7D7D7D9D7C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7A8A8A7A7A8A7A7A7A8A8AAA8A8A8ABABACAEB0B1B3B5B8B9B9BCBDBDBDBFC1C4C5C4C5C6C6C6C9C9CBCECECFD1D1D1D5D5D6D7D6D6D7D7D7D7D7D9DADADADAD7D7D7D7D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6A7282727272727272626252525252525252525252525252424242323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191919171717171717171717161616161515151516141414141415151414141414141414131313131313131313111212121212111111118ABDBDBDBDBDBDBD3B1010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED070000000000000000000000000000000000000000000000000000579DA0A2A5A8ABADB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DBDCDEE1E3E5E7E9EAECEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9EF13000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECE9E8E7E4E1E0DDDAC8B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1887878797B7B7B7D808082838586888B8B8D90929395999CA0A2A4A7AAADB1B3B6B9BDBEC1C5C7CBCCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E7E9E7E7E7E6E6E4E6EBF6E3DBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E4E4E4E4E4E4E3E3E4E3E3E1E1E1E1E1DFDFDFDEDEDCC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B5B5B3B3B3B5B5B5B3B2B3B3B2B2B2B2B3B6B6B6B9BBBCBDBFC1C1C3C5C6C6C9CACBD0D1D0D3D1D5D6D7D9D9DAD9DADBDBDBDEDEDFDFDFE1E1E1E1E1E1E1DFE1E1DFDFE1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDC9F28282727272727272626252525252525252525252525252424242323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191917171717171717171616161615151515151414141414151515141414141414141313131313131313131312121212121111111150BDBDBDBDBDBDAE101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A000000000000000000000000000000000000000000000000000006909FA1A4A7A9ACAFB2B4B7BABDC0C2C5C7CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF96D000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F0F0EFECECE9E7E5E4E0DEDCC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3927878797B7B7B7D808082838587888B8D8F919395979A9EA0A3A5A9ABAFB2B5B7BABDC1C4C7C9CCD0D3D6D9DADCDEE0E4E5E7E9ECEDEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EFF2F1EFEFF1EFF2F1F2F7FDECE9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDAD9D9D9D7D7D7D6D6D6D5D3D5D5D5D6D7D7D7D6D6D5D5BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ACAEAEACABACACABABABACAEAEB0B0AEAEB0B1B2B3B5B3B6B9B9BBBDBFC0C1C1C3C3C4C6C9CBCFCFD0D0D3D3D1D5D6D5D5D7D6D5D6D6D7D7D7D9D7D7D9D7D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3A32828282727272727272625252525252525252525252525242424232323232323232323232323222222222220202020202020201F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191917171717171717171716161616151515151614141414141515151414141414141413131313131313131311121212121211111123BDBDBDBDBDBD6510101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED070000000000000000000000000000000000000000000000000000459EA0A3A5A8ABAEB0B3B6B8BBBEC1C4C6C9CBCED0D3D6D8DBDDDFE1E3E5E7E9EAECEDEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9E50A000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F8F6F5F5F3F1F0F0EFECECE8E7E5E3E0DCC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39B7878787B7B7D7E808083848687898B8D90929395999CA0A2A4A8AAADB1B4B7BABDC1C3C5C9CCD0D1D4D7DADCDEE0E3E5E7E9ECECEFF0F0F1F3F5F5F6F8F8F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E4E3E3E3E2DFE1E1E1E6F1E1D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E6E7E9EAE9EAE9E9E7E9E9E9E9EAE9EAEAEAE9EAEAE7BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B6B5B3B3B3B3B2B2B2B2B3B5B5B5B5B5B6B8B9B9BBBCBFBFC1C1C4C4C6C6CACBCED0CFD0D0D1D3D6D7D9D9DADADCDEDEDFDFE1E2E2E3E1E1E1E1DEDFDEDEDEDEDEDEDEDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDE9E282828272727272727272625252525252525252425252525242424232323232323232323232323222222222220202020202020416C241F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919194F5C191917171717171717171716161616151515151614141414141515141414141414141413131313131313131312121212121111111198BDBDBDBDBD2E10101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A000000000000000000000000000000000000000000000000000000849FA2A4A7AAADAFB2B4B7BABDC0C2C5C8CACDCFD2D4D7D9DCDEE0E2E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF959000000000000000000000000000000000000000000000000000000EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECEBE8E7E5E3DDBEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D7978797B7B7D7E8082838586888B8D8F919395989A9EA2A3A7AAADB1B3B6B9BDC0C3C5C7CBCED1D4D7DADCDDE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F7F8F9F9F9FBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E3E4E4E3E3E3E3E3E1E1E7F1E2DBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D3D3D3D3D1D1D1D0D0D0D1CFD0D0D0D1D3D5D5D3D5D3CDB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B5B5B5B5B2B5B5B5B5B5B8B6B9B9BCBDBDC0C1C4C5C5C6C9CACBCBCECFD0D1D3D5D9D9DADADBDCDCDFE1E1E2E3E3E4E6E6E6E7E7E9E9E7E7E7E6E7E9E9E9E9E9E9EAEAEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2A328282828272727272727272625252525252525252425252525242424232323232323232323232323222222222220202020202020AEA94D1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919192F92BD35191919171717171717171716161616151515151514141414141515151414141414141413131313131313131311121212121211111165BDBDBDBDA7101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED070000000000000000000000000000000000000000000000000000389EA1A3A6A9ABAEB0B3B6B9BCBFC1C4C6C9CCCED1D3D6D8DBDDDFE1E3E5E7E9EAECEDEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9D100000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECE9E8E7E4DFBEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A07878797B7B7D808082848687898B8F909295979A9DA0A3A5A9ABAFB3B5B7BBBEC1C5C7CBCCD0D3D6D9DADDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEAEAEAEAEAECECECF1F9E9E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E3E3E4E4E4E4E3E3E3E3E4E6E6E6E4E4E4E4E3E3E3E4D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8C1C1C1C0BFBDBDBCBCBBBDBDBDBFBDBFBFC0C1C1C3C1C3C3C3C5C6C8C9C9C9C9CBCBCECFD0D0D0D3D3D5D5D5D5D3D6D7D7D9D9D7D7D7D7D9D7D7DAD7D7D6D7D6D6D5D3D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBA92828282828272727272727272625252525252525252525252525242424232323232323232323232323222222222020202020202079BDBD8E351F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191D6FBDBDA71919191917171717171717171716161616151515151614141414141515141414141414141413131313131313131312121212121111112FBDBDBDBD65111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000000000007EA0A2A5A8AAADAFB2B5B8BBBDC0C2C5C8CBCDD0D2D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF959000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5F3F1F0EFEDECE9E7E7E4C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3997878797B7B7E8082838587888B8D90929395999CA0A2A4A8ABAFB1B4B7BABDC1C4C7CACCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E9E9E7E9E9EAEAEBEAEFF8E9E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDEDFDFDFE1E2E2E3E2E3E1E1E3E2E1E1E1E1E1E1E1DFC9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBC3C3C3C3C3C3C3C3C3C1C3C3C3C3C4C4C5C5C8C8C9CACBCBCED0D1D3D5D5D7DADBDBDBDCDEDEDFE1E1E2E3E3E4E6E6E7E6E7E7E9EAEAEBECEBEBEBEBEBECEEEEEEEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDC9F2828282828282727272727272726252525252525252525252525252424242323232323232323232323222222222220202020202046BDBDBDB56C241F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A194FAEBDBDBD6919191919191717171717171717161616161615151515141414141415151514141414141414131313131313131313111212121212111111A7BDBDBD29111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED070000000000000000000000000000000000000000000000000000259FA1A4A6A9ABAEB1B4B7B9BCBFC1C4C7CACCCFD1D4D6D8DBDDDFE1E3E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9BD00000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F3F3F1F0EFEDECE9E7E5C5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39578787B7B7D8080828486888B8D8F919395989C9EA2A4A8AAADB1B4B7BABDC1C3C7C9CCD0D3D4D8DADCDEE1E4E7E7E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEBEBECEEECEAEBEBECF1FBEAE3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E2E3E3E2E2E2E2E2E3E2E1E1DFDFDFE1DFE1DFDFE1DFC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BDBCBDBCBBBBB9B9B9B9B9B9B9BBB9B9B9BCBDBDBFBFBFBFC1C3C3C3C3C5C5C8C8C8CACACECECECECECECFD0D1D1D1D3D3D3D3D3D5D5D5D3D3D1D3D3D3D3D3D3D1D1D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3A42828282828282827272727272726262525252525252525252525252524242423232323232323232323232222222222202020202020AEBDBDBDBDA94D1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A3192BDBDBDBDBD351919191919191717171717171717161616161515151516141414141415151514141414141414131313131313131313121212121211111174BDBD981111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000000077A0A2A5A8AAADB0B3B5B8BBBDC0C3C6C8CBCED0D3D5D7D9DCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF93B000000000000000000000000000000000000000000000000000000D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F0F0EFEDECE9E7CBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B38C78797B7D7E8082838587898B8D909295979A9EA0A3A7AAADB1B3B7B9BDC0C3C5C9CCD0D1D4D7DADCDEE0E4E5E7E9ECEDEFF0F1F3F3F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFE2E1E1E2E3E3E2E1E1E6EFE1DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1DFDFE1DFDEDEDEDEDEDEDEDCDEDEDEDEDCDBDCDCDCDABBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBBBB9B9B9BBBBB9B9BCBCBBBBBCBCBCBDBDBFC1C3C3C3C4C5C5C9CACAC9CACBCFD0D1D3D6D7D7D9DAD9D9DCDCDEDFDFDFE1DEDEDEDFE1E1E1DFDFE1E2E3E4E3E4E4E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3DCDCDCDFDEDEE0DFDFDDDDDCDCDCDCDADADADCDCDCDCDFDFDDDDDDDDDDDDDDDCDCDCDEE0E1E2E3E0E0E0E1E1E3E4E5E5E5E4E4E4E2E3E3E4E2E1E1E1E1E1E2E3E2E2E3E3E5E4E4E4E4E6E5E6E4E4E3E5E6E6E6E6E6E9E7E7E7E6E6E7E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F1EFEFEEEEEEEEEEEEECECEBEBECECECECECECECEBEBECEBEBEBEBEBEBEBEBEBEBEBEDECECECECEEEFEEEEEBEBEBECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE9E8E6E6E6E6E6E8E8E8E7E7E6E6E6E6E5E5E5E2E3E1E1DFDFDFDCDDDDDDDDDBDCDCDCDADADDDCDCDBDBDAD9D9D98C282828282828282827272727272726262525252525252524252525252424242423232323232323232323232222222222202020202079BDBDBDBDBDBD8E351F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1E71BDBDBDBDBDBDA719191919191919171717171717171717161616161515151516141414141415151414141414141413131313131313131311121212121211113CBDBD5D1111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9070000000000000000000000000000000000000000000000000000199FA1A4A6A9ACAFB1B4B7B9BCBFC2C5C7CACDCFD2D4D6D8DBDDDFE1E4E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9BD00000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F0F0EFECECE9D8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B17F787B7B7D8080838587888B8D909295979A9DA0A3A5A9ACB1B3B6B9BDBEC3C5C7CBCED1D4D7DADCDEE0E4E5E7E9ECEDEFF0F0F3F3F5F6F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFBFCFBF9FBF9FBF9FBFDFFF4F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D3D1D0D3D3D3D3D3D3D5D5D1D1D0D1D3D3D5D5D3D5D5D2B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1B6B5B5B5B5B5B6B6B6B8B8B6B6B6B8B8B9BBB9BBBDBDBDBDBFC0C1C3C4C4C5C6C5C6C6C8C9CBCFCFD0D0D1D3D6D6D7D7D6D7D7D7D7D7D9DADADBDAD9D9D7D6D5D5D5D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCC6534B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A494949494949494949484848484848484847474747464648484747484849484A4A4C4C4D4F51525456585C5E616366676C6E74777A7F82868B90939A9DA4A8ABB0B5BABDC0C5CACFD2D2D8DADEDFE2E4E6E7E8E9EAEAEAEAEAEAEAE9E7E7E6E4E2E1DCDCD8D6D2CFCDC8C4C1BDBAB4B2ADA8A4A09B9793918A8783807B7875706F6B6764605E5A59565352504B4A4846464442413F3D3D3B3B3A39383736363535353332323131303030302E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292828282828282828272727272727262525252525252525242525252524242423232323232323232323232322222222202020202046BDBDBDBDBDBDBDB56C241F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B4FAEBDBDBDBDBDBDBD6B191919191919191917171717171717171616161615151515161414141414151515141414141414141313131313131313131212121212111116B5BD23111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5500000000000000000000000000000000000000000000000000000065A1A3A6A8ABAEB0B3B6B8BBBEC1C3C6C9CBCED0D3D5D8DADCDEE0E2E4E6E8EAEBECEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF928000000000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3F0F0EFECECE4B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA7A7B7B7D8080838586888B8D90929395999CA0A2A5A9ABB1B3B5B7BDBEC1C5C7CBCED1D4D7DADCDEE0E3E5E7E9ECECEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F1F1F1F1F2F3F2F2F3F4FBFFEFEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E1E1E1E1DFDFDFDFDFE1DEE1E1E1DFE1DFDFDFDFDFD6B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BFC0BFBFBFBFBFBFBFBFBDBDBFBFC0C1C3C3C5C5C6C8C8CACBCBCED0D1D3D3D5D6D7D7D7D9DADADADBDBDFDFE1E1DFE1E1E1E2E4E6E6E4E6E6E6E4E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7954B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A49494949494949494848484848484848474747474646484848474849494A4A4A4C4D4D4F51535657595B5F616467696D7173777B8081888B90949A9EA4A8ACB0B5B9BDC0C5C9CDD0D2D7D8DDDCE1E3E3E6E6E8E8E8E8E8E8E8E6E6E5E4E2E1DFDCDAD7D5D2CECBC5C4C1BBB8B4B2AFA9A5A09B9794918C8785807C7773726F6C6764625E5B59565352504E4A484747444342403E3D3B3B3A3939373736353535353332313131303030302E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292928282828282828272727272727272625252525252525252525252525242424232323232323232323232322222222222020202020AEBDBDBDBDBDBDBDBDA94D1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B3194BDBDBDBDBDBDBDBDBD36191919191919191919171717171717171716161616151515151614141414141515141414141414141313131313131313131112121212121111829811111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD900000000000000000000000000000000000000000000000000000019A0A2A5A7AAADAFB2B4B7BABDC0C2C5C7CACDCFD2D4D7D9DBDDE0E1E4E5E7E9EAECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF99F00000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1F0F0EFECECC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39E797B7D8080828486888B8D8F919395999CA0A2A4A9ABAFB2B5B7BBBEC1C5C7CBCCD0D4D7DADCDEE0E3E5E7E8ECECEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E9E9E9E9E7E9E9E7E7EAF3E4DCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D7D7D7D7D5D5D7D7D7D9DADAD9DAD9D7DADAD9DADAD9CBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDCACACACAC9C9C9C8C8C9CACACACACACACBCBCFD0D0D1D3D3D5D6D6D7D9DADBDBDCDCDCDBDEDFE1E1E2E3E3E6E6E6E6E6E6E7E9E7E7E9E9E7E6E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE16C4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A49494949494949494948484848484848484747474746484848474849494A4A4C4C4D4E4F52535657595B5F6265676B6E7174777B8183888B9394999EA3A8ABB0B5B9BDC0C4C8CAD0D1D6D9D8DCDEE1E2E3E4E5E5E6E6E6E5E4E4E4E1E1DCDCDAD8D6D2D0CECAC8C2BEBCB8B4B0ADA8A4A29B98948F8C8885807C7975716F6C6764625E5C59565452504E4C494747444342403F3D3D3B3A3939393736363535353333313131303030302E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292928282828282828272727272727272625252525252525252525252525242424232323232323232323232322222222222020202079BDBDBDBDBDBDBDBDBDBD8E341F1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1F71BDBDBDBDBDBDBDBDBDBDA7191919191919191919191717171717171717161616161615151515141414141415151514141414141414131313131313131313121212121211114A581111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5500000000000000000000000000000000000000000000000000000066A1A4A6A9ABAEB0B3B6B9BCBEC1C4C6C9CBCED0D3D6D8DADCDEE1E2E5E6E8EAEBEDEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF928000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1F0F0EFECD2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3877B7D7E80828486878B8D8F919395999CA0A2A4A8ABAFB2B5B7BBBEC1C5C7CBCCD0D4D7D9DCDDE0E3E5E7E8ECECEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDCDEDEDFDEDEDEDEDEDEE3ECDED9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDCDCDEDEDEDEDCDCDBDBDBDBDAD9DAD7D9D7D6D7D9C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7BFBFBFBFBFBFBDBCBCBBB9BBBBBCBCBCBCBDBCBCBCBCBCBDBFC0C0C3C3C3C4C5C8C9C8C8C8C8C9C9CBCED0CFCED0CFCFD0D0D0CFCFD0CFD0D0D0D3D3D5D5D5D6D6D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DECD534B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A494949494949494948484848484848484747474748484848484849494A4A4C4C4D4E4F525456585B5D5F6265676A6D7074797B8185898D9395999EA4A7ABB0B4B8BBBEC1C8C9CDD0D2D6D8D8DCDEDEE1E1E1E3E3E3E2E2E2E1DFDCDBDAD8D6D2D0CECBC8C5C2BEBBB8B3B0ACA6A2A09D98948F8D8785807C7975716F6C6866625F5C5A565452504E4C4A4746444342413F3E3D3D3B3A39393836363535353333313131303030302F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B292929292929292929282828282828282727272727272726252525252525252525252525252424242323232323232323232323222222222220202046BDBDBDBDBDBDBDBDBDBDBDB56C231F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B50AEBDBDBDBDBDBDBDBDBDBDBD6B191919191919191919191917171717171717171616161615151515161414141414151514141414141414131313131313131313111212121212111D1C1111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC400000000000000000000000000000000000000000000000000000019A0A2A5A8AAADAFB2B5B8BBBDC0C2C5C8CACDCFD2D4D7D9DBDDE0E2E4E5E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF99F00000000000000000000000000000000000000000000000000000023FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1F0EFEDE7B7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AA7C7B7E80828386878B8B8F919395989CA0A2A4A8ABAFB1B5B7BABEC1C4C7CBCCD0D4D6D9DCDDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E6E4E6E7E7E9E6E7E7E7EBF3E4DEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADAD9DADADADADADBDBDBDBDADADBDADADADADADADADAD9BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC5C4C5C5C5C5C5C5C4C3C3C5C5C5C5C5C8C8C9C9CACBCECFCFD0D0D0D0D1D0D1D1D5D5D7D9D7D9DADADADADADBDBDCDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDEDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1B34D4D4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949494948484848484848484747474748484848484849494A4A4C4C4D4F51525457585C5E5F6265686A6E7177797D8186898D9194999EA4A5ACB0B3B8BABEC1C5C9CBCFD0D5D6D9D8DCDCDDDEDEDFDFE1DEDCDCDCDAD8D7D6D5D1CFCDCAC5C4C1BEBAB7B2B0ACA6A5A09B97948F8D8883807C7975726F6C6864625F5D5957545250504C4A4847464342413F3E3E3D3C3A39393837363535353333333131303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929292828282828282827272727272727262525252525252525252525252524242323232323232323232323232222222220202020AEBDBDBDBDBDBDBDBDBDBDBDBDA94C1F1D1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B3294BDBDBDBDBDBDBDBDBDBDBDBDBD361919191919191919191919171717171717171717161616161515151514141414141515151414141414141413131313131313131312121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3500000000000000000000000000000000000000000000000000000066A2A4A7A9ACAEB1B4B7B9BCBFC1C4C7C9CCCED1D3D6D8DBDCDEE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF928000000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1F0EFEDC8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3947B7E8082838587898B8F919395989CA0A2A4A8ABAFB1B5B7BABEC1C4C7CACCD0D3D6D9DCDDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBECEBEBECEBEAEBECECEFF9E7E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1DFDEDEDEDEDEDEDFDFDFDFDEDEE1DEDEDEDEDFDEDEDEDCBBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCC5C6C5C4C5C4C4C4C4C4C3C4C4C5C4C4C4C5C5C6C5C6C8C9C9C9C9CBCFD0D0CFD0D0D5D6D6D7D9D9DADADCDCDEDEE1E1E1E3E1E1E1E1E1DEDEDEDEDCDBDEDEDEDEDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEE7D4D4D4D4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A49494949494949484848484848484847474747484848484849494A4A4C4C4D4D4F51525657585C5E616366696D6E71767A7D8186898D91949A9EA2A5ABAEB0B7BABDBEC4C6C9CECFD1D2D5D6D7D8D8DCDADCDADADAD8D7D7D7D6D2D0D0CECBC5C5C1BEBCB8B4B1ADA9A6A1A09A95938F8D8886807C7975726F6C6A64635F5C5A57545250504E4A494746434341403E3E3D3C3B3939383737353535353333323131303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828282827272727272726262525252525252524252525252424242323232323232323232323222222222220202079BDBDBDBDBDBDBDBDBDBDBDBDBDBD8E341D1D1D1D1D1D1D1D1D1D1D1D1B1B1B2071BDBDBDBDBDBDBDBDBDBDBDBDBDBDA71A191919191919191919191919171717171717171716161616151515151614141414141515141414141414141313131313131313131112121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0000000000000000000000000000000000000000000000000000000CA1A3A6A8ABAEB0B3B6B8BBBDC0C3C6C8CBCDD0D2D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF99F0000000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1F0EFE0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B17F7D8082838587898B8F919395989C9EA2A4A8ABAFB1B4B7BABDC1C4C7CACCD0D3D6D9DCDDE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7E9E9E9E9E9E7E6E7E7EEF8E7DFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E6E4E4E3E3E2E3E3E2E1E1E1E1E1E1E1DFDFDFE1E1E1DDB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCC6C5C5C5C4C4C4C4C4C5C5C5C5C8C6C6C5C6C6C6C8C8C9C9C9CACACBCED0CFD0CFD1D3D5D6D6D7D9DADCDADBDBDCDEDEDCDEDEE1E1E1E2E2E3E3E2E2E2E2E2E3E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBD2584D4D4D4D4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A49494949494949494848484848484847474747484848494849494A4A4C4D4D4E5152535657585C5F616366696A6F71767A7B8186898D9194989DA1A5AAACB0B5B8BBBEC1C4C8C9CDCFD1D1D2D5D6D6D7D8D7D8D7D8D6D5D5D2D0CFCDCAC8C6C2BEBCB8B7B4B0ADA8A5A29F9A96918F8B8783817C7975726F6B6A66635F5D5A57565350504E4C494747444341403E3E3D3C3B3A3938383736353535353332323130303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292828282828282828272727272727262525252525252525252525252524242423232323232323232323232222222222202046BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB56C231D1D1D1D1D1D1D1D1D1D1D1B50AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1A1A1919191919191919191919191717171717171717161616161515151516141414141515151414141414141413131313131313131312121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F34F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF230000000000000000000000000000000000000000000000000000005AA2A5A8AAADAFB2B4B7BABCBFC2C5C7CACDCFD1D4D6D8DBDDDFE1E3E5E7E9EAECEDEFF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9280000000000000000000000000000000000000000000000000000008DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1F0EFC4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39A7E8082838587898B8F919395989CA0A2A4A8ABAFB1B5B7BABEC1C4C7CACCD0D3D6D9DCDDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E3E4E3E3E1E2E3E3E3E7EFE1DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADADADAD9D9D7D7D9D9D7D7D6D6D7D7D7D6D5D5D3CDB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDCBCACACACACACACACAC9CAC9C9C9C9CACACACBCBCBCBCBCACACBCBCECECFD0D0D1D1D3D3D3D5D7D7D6D7D5D6D5D5D6D7D7D7D9DADBDADBDEDEDEDEDEDEDEDEDEDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEB14D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A49494949494949494848484848484848474748484848494849494A4A4C4D4D4E51525356575A5B5F616467696D6F73777A7D8186898B9094999D9FA4A8ACAFB3B7BABCBEC1C4C8C9CBCFD0D1D1D2D1D2D2D2D5D5D2D1CFD0CECACAC7C5C4BEBDBCB7B5B2AEABA8A2A09D9A96918F8A8583817C7875736F6B6966635F5D5A57565352504E4C4A4747444341403F3E3D3B3B3A393838373636353535353232323030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292928282828282828282727272727272625252525252525252525252525242424232323232323232323232322222222222020AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA94B1D1D1D1D1D1D1D1D1D3294BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD361A1A1919191919191919191919191717171717171717161616161515151516141414141415151414141414141413131313131313131311121212121111111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D0000000000000000000000000000000000000000000000000000000C9BA4A6A9ABAEB0B3B6B9BCBEC1C4C6C9CBCED0D3D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF99F00000000000000000000000000000000000000000000000000000007EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8F6F5F5F3F1F0E4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B28180828386878B8B8F919395999CA0A2A4A8ABAFB1B5B7BABEC1C4C7CBCCD0D4D6D9DCDDE0E3E5E7E8ECECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4F4F4F3F3F2F2F2F2F1F4FBECE6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E2E2E1E1E1E2E2E1DFDEDEDBDBDBDCDBDBDBDBDBDBDBCFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C1CFCFCFCFD0D0D0D0CECFCFD0D0D3D3D5D3D5D5D5D5D5D6D7D7D7D9DADCDCDEE1DEDEE1E1E1E1E1E1E3E3E3E3E4E3E2E2E1E1E1E3E3E3E6E3E3E4E6E6E7E9E9E7E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADA884D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949494848484848484848474748484848494849494A4A4C4D4E4E51525356575A5B5F616466696D6E73777A7B8186888A9093979B9EA3A7ABB0B0B5B8BBBCC0C1C4C8C9CACACDCDCFCFCFD0D0CECECFCBCBC8CAC5C5C2C0BDBCB8B6B4B0ADA9A5A1A09A9893908D8A85827E7C7975716F6B696662615D5A57545352504E4C4A4847444342403F3E3D3D3C3A39383837363635353535323232313030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292928282828282828272727272727272625252525252525252525252525242424232323232323232323232322222222222079BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD8E341D1D1D1D1D2271BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91A1A1A1A1919191919191919191919191717171717171717161616161515151516141414141515151414141414141413131313131313131312121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60F00000000000000000000000000000000000000000000000000000066A3A5A8AAADAFB2B5B8BBBDC0C2C5C8CACDCFD2D4D7D9DBDDDFE1E3E5E7E9EAECEDEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF92800000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F1F0C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39B80828486878B8D8F919395999CA0A2A4A8ABAFB2B5B7BBBEC1C5C7CBCCD0D4D7D9DCDDE0E3E5E7E8ECECEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E6E6E9E9E9EAE9E9E9E9EEF6E6DEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDCDCDCDCDEDEDCDBDBDBDADADADAD7D9D9D9D9DADAC6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C2D1D1D0D0CFD0CFCFCECBCBCBCFCED0CFD0D1D1D3D3D3D5D5D5D6D6D7D9D9DADADADCDCDCDBDCDEDEDEDEDEDEE1DFE1E1DEDEDEDFDFDFE1DFDFDFE1E1DEDEDEDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E2674D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A49494949494949494848484848484847474848484849494A494A4C4C4D4E4E51525456585A5B5F636466696D6E73777A7B8184868B8E9395999EA1A4A8ACB0B2B5B8BBBCBEC1C3C5C6C9CAC9CACBCACACAC8CAC8C9C6C5C4C1C0BDBBB8B6B5B0AEABA7A5A09D9A9693908C8885817D7C7775716F6C6964635F5C5A59545352504E4C4A4847474342403F3E3D3D3C3A39393837373635353535323232313130303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292929282828282828282727272727272726252525252525252525252525252424232323232323232323232323222222222046BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB56C231D1D51AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1A1A1A1A1A19191919191919191919191717171717171717171616161615151516141414141415151414141414141413131313131313131311121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A0000000000000000000000000000000000000000000000000000001AA2A4A7A9ACAFB1B4B7B9BCBFC1C4C7C9CCCED0D3D6D8DADCDEE1E2E4E6E8EAEBECEEEFF1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9B400000000000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B283828486888B8D8F919395999CA0A2A5A9ABAFB2B5B7BBBEC1C5C7CBCCD0D4D7DADCDEE0E3E5E7E9ECECEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E3E3E4E4E6E6E4E6E6E7EAF4E6DEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDCDBDBDEDEDCDCDCDCDBDADADBDCDCDBDBDADBDBDCDEC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C2D0D0D0CED0D1D1D3D1D3D3D3D5D3D3D3D3D3D3D3D6D6D7D7D7D9D9DADBDCDEDFE1E2E3E4E6E9EAEAEAEBEAECEEEEEEEFEEECEFECECEEECECECEEEEECEEEFEFEFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7D1544D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949494848484848484847474848484849494A4A4A4C4C4D4E4F51525456585A5B5F636466696D6E7177797C8084858A8D9394989D9FA3A5AAAEAFB2B4B7BABBBBC0C0C3C4C5C5C6C5C6C6C6C5C5C5C2C1C0BDBCBAB7B8B4B0AFADA8A6A2A09B9995918F8B8885827D797773716E6C6764635F5C5956555352504E4C4A4847454342413F3E3D3D3C3A3A39383737363535353532323231313130303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292828282828282827272727272726262525252525252524252525252424242323232323232323232323222222222220AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA95894BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD361A1A1A1A1A19191919191919191919191917171717171717171616161615151515161414141415151514141414141414131313131313131313121212121211111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD90000000000000000000000000000000000000000000000000000000067A4A6A9ABAEB0B3B6B8BBBDC0C3C6C9CBCDD0D2D4D7D9DCDDE0E2E4E5E7E9EBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF93C00000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3D0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B392838586888B8D90929397999DA0A2A5A9ACB1B3B5B7BDBEC1C5C7CBCED1D4D7DADCDEE0E3E5E7E9ECECEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBECECEEEFF1EFEFEFEFF6FCECE4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9E9E9E9E9E9E9E9E9E6E6E6E6E6E6E4E4E6E7E6E6E6BDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C0CFCED0D0CFCFCFCFD0CFCFD0D0D0D0D0D0D0D1D1D1D1D1D1D3D5D3D5D5D7D7D7D6D5D5D7D7D7D9D9DADADBDCDBDEDEDEDBDCDEDCDBDEDBDEDEDCDCDBDBDBDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBB04D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949494848484848484847474848494849494A4A4A4C4C4D4E4F51525456585C5D5F636466696D6E7077777B7F8286898B909397999EA2A4A7AAAEB0B2B4B7B9BBBBBBBEC0C1C1C1C1C1C1C1C0BEC0BDBCBAB7B7B7B4B1AFADA8A6A3A19D9897928F8D8A85827E7D797573716D6B6764635F5D5B57555352504E4C4A484745444241413E3D3D3C3B3A3A3837373635353535353232313131312F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929292828282828282827272727272726252525252525252525252525252424242323232323232323232323222222222279BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91B1B1A1A1A1A1A19191919191919191919191917171717171717171616161615151515141414141415151414141414141413131313131313131311121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000000000000000000000000000000000000000000000000000001AA2A5A8AAADAFB2B4B7BABDBFC2C5C7CACDCFD1D4D6D8DBDDDFE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9BD00000000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5F5F3F3BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A7838587898B8D909295979A9EA0A3A5A9ACB1B3B6B9BDC0C3C5C7CBCED1D4D7DADCDEE0E4E5E7E9ECEDEFF0F0F3F3F5F6F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFEEEEEBECECEBEAEAEAEEF7E6DEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E1E1E1E1E1DFDEDEDEDEDBDADADBDBDBDADAD9D9DADAD8B8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C0CBCBCECECFCECBCECECECECECFCECECECBCECFD0D0D0CFD0CFD0CFCECFCECFCFCFCFD0CFCED0D0D1D3D5D6D6D6D7D6D7D7D9D9D7D7D7D9D7D7D7D7D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E17F4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949494848484848484848484848494949494A4A4A4C4C4D4E4F51525457585B5B5F636466696D6D7074777B7F8285888B8E9294989B9FA4A4A7AAAEAFB0B3B5B7B9BABABBBBBBBBBDBDBCBCBBBABAB8B8B7B4B3B1ADADAAA5A3A19F9A9995908F8C8885827E7C787573716D6A6764625E5B5A57565352504F4C4B49474544424141403D3D3C3B3A3A393737363535353535323231313131302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272727262525252525252525252525252524242423232323232323232323232222222249BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1B1B1B1A1A1A1A19191919191919191919191917171717171717171616161615151515161414141414151514141414141414131313131313131313121212121211111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB90000000000000000000000000000000000000000000000000000000068A4A6A9ABAEB1B4B6B9BCBFC1C4C6C9CBCED0D3D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF93C00000000000000000000000000000000000000000000000000000019F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F6F5F3DFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3878687898B8F919395979A9EA0A3A7AAADB1B4B7B9BDC1C3C5C9CCD0D1D4D8DADCDEE0E4E5E7E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E6E6E6E6E7E7EAE9E9EEF8E7E1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1DFE1E2E2E3E3E3E3E2E2E3E2E1E2E2E2E1E1E1E1E1E1DAB5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C6DADADADAD9DAD9D7D9D9D9D9D7D7D7D7D7D9DAD9D7D9DADADADAD9DADBDBDADCDBDEE1DFDFDEDFDFE1E1E2E2E3E4E4E4E4E3E6E4E4E3E3E3E2E2E2E3E2E2E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D3604D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949494848484848484848484848494949494A4A4A4C4C4D4E4F51525456585B5B5F616466696C6E7073767B7B8181858A8D9093979A9D9FA3A4A8AAACADB0B2B3B5B7B7B8B9B9B9B8B8B8B8B8B5B5B4B3B1AFADA9A9A6A5A19D9B9995918F8C8A8684827E7A7773716F6C6A6662615D5B5958565352504F4B4A48484544424141403F3D3C3B3A3A393837363535353535323231313131303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292928282828282828272727272727272625252525252525252525252525242424232323232323232323232322222222AEBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD361B1B1B1A1A1A1A1A191919191919191919191919171717171717171716161616151515151414141414151514141414141414131313131313131313121212121211111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F3DF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62300000000000000000000000000000000000000000000000000000020A3A6A8ABAEB0B3B6B8BBBDC0C2C5C8CACDCFD2D4D7D9DBDDDFE1E3E5E7E9EAECEDEFF0F1F2F3F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFBFAC70000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5CBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39D86888B8D8F919395999CA0A2A4A8AAADB1B4B7BABDC1C4C7C9CCD0D3D6D9DADCE0E1E4E7E7E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF7F7F8F8FBFBF8F9F8F8FBFFF2EEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D7D7D9DADADADADBDADADADADBDCDBDBD9D9D9D9D9D9CCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBC8C8C8C8C8C8C8C6C6C5C6C6C6C9C9C9CAC9CBCBCBCACAC9C8C9CACBCACACACBCBCBCECBCACBCECECECFCFCFD0D0D0D0D1D3D1D3D5D5D5D5D5D5D5D6D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDAC1544D4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A494949494949494948484848484848484848494949494A4A4A4C4D4D4E4F51525456585B5D5F616365686B6E6F74767A7B808285898A8E9394989A9D9FA2A4A7AAAAACADAFB0B0B2B3B3B4B4B4B2B3B3B3B2AFAFADABAAA6A5A2A09F9A999591908F8B8786827E7D797573716E6A696463615D5B5957555351504E4B4A48484544424140403F3D3C3B3A3A39383836353535353533323131313130302F30303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292828282828282827272727272727262525252525252524252525252424242323232323232323232323222222227ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91B1B1B1B1B1A1A1A1A1A191919191919191919191917171717171717171616161615151515161414141414151514141414141414131313131313131311121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1FE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82000000000000000000000000000000000000000000000000000000007BA5A8AAADAFB2B4B7BABCBFC2C4C7CACCCED1D3D6D8DADCDEE1E2E4E6E8EAEBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF95A00000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5F5B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A887888B8D90929397999CA0A2A5A8ABAFB2B5B7BABDC1C4C7CACCD0D3D6D9DADDE0E1E4E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDCDEDEDEDEDEDEDEE1E1E6EEE1D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1DFDFE1DFDEDEDCDCDBDADBDBDBDADADAD9DAD7D9D9D7C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BDCBCACBCECBCBCECECACACBCECFD0D0D0D0D0D0D0D1D0D0D0D0D0D0CFD0D1D1D1D1D1D1D5D5D5D3D3D5D3D3D5D5D6D6D6D7D7D9DADAD7D7D9DADBDADBDCDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3AA4D4D4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A494949494949494948484848484848484849494949494A4A4A4C4C4D4E4F51525456585B5D5F616365676A6D6F7374777B7F818186898B8E9394989A9D9FA1A4A5A7A9AAACAEADADAEAFAFAFAFADADADADABAAA9A7A6A3A2A09D9C999593908F8B888684827D797876726F6D6A676562615D5A5956555352504C4C4A4848464342413F403F3D3D3B3A3A3938383735353535353333313131313030302F30303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292929282828282828282727272727272626252525252525252525252525242424232323232323232323232322222249BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1B1B1B1B1B1B1A1A1A1A191919191919191919191919171717171717171716161616151515151414141414151514141414141414131313131313131313121212121211111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3070000000000000000000000000000000000000000000000000000002DA4A6A9ABAEB1B3B6B9BCBEC1C4C6C9CBCED0D2D5D7D9DCDDE0E2E4E5E7E9EAECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAD10A00000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFAF9F9F9F8F7F6F5E8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3898B8B8F919395979A9EA0A3A5A9ACB1B3B5B7BDBEC1C5C7CBCCD0D4D7D9DCDDE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EBEAEAE9E9E9E9E9E9EAEEF6E4DCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D7D7D7D7D7D9D7D7D9D7D7D7D7DAD9D9D9DADADABFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4D5D5D5D5D5D3D3D1D1D1D1D1D3D5D5D3D3D1D1D1D3D5D6D7D7D7D7D7D9DADAD9DADADADADADADADBDCDADCDEDEDEDEDEE1E1E1E1E1E1E2E3E4E3E3E3E3E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E78A4E4E4D4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4949494949494948484848484848484849494949494A4A4A4C4C4D4E4F51525456575B5C5E5F6365676A6D6D7073777A7B7F8185888A8D909394979A9B9D9FA0A3A5A5A7A9A9AAAAACACACAAAAA9A9A7A6A5A4A1A09F9C9A999695908F8C888683827F7C79757272706B6A666461605C5B59565353514E4C4A494847464442403F3F3F3D3D3B3A39393838373635353535333332313131303030302F30303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2929292929292929282828282828282827272727272726252525252525252525252525252424242323232323232323232323222222B0BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD371B1B1B1B1B1B1A1A1A1A1A1919191919191919191919171717171717171716161616151515151614141414151515141414141414141313131313131313111212121211111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C0000000000000000000000000000000000000000000000000000000089A6A8ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD2D4D6D8DBDDDFE1E3E5E6E8EAEBEDEEF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF96D00000000000000000000000000000000000000000000000000000000A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFAF9F9F9F8F7F6F5D6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3948B8D8F919395999C9EA2A4A8AAADB1B3B7B9BDC0C3C5C7CBCED1D4D7DADCDEE0E3E5E7E8EBECEFF0F0F1F3F5F5F6F8F8F9F9F9FBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F8F8F6F8F8F8F8F9FBFDFFF3EFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDADADBDEDBDBDADADADADADAD9D9D9D9D7D7D7D7D7D6BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BECACAC9C9C9C9CACACACBCBCBCBCBCACACAC9C9CACBCAC9C9CACACACBCBCACBCBCBCBCBCBCECECFCFCFD1D3D1D1D3D3D5D3D3D5D5D6D7D7D6D7D7D6D6D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD4674E4E4D4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494948484848484848494849494949494A4A4A4C4C4D4E4F5152545657595C5D5F636467696C6E717377777B7F808186888A8D9093949598999B9E9FA0A3A3A3A4A4A5A4A6A5A5A4A4A3A3A09F9F9C9B98979593908F8B88868682807D79777572706D6B676563615D5B595855535351504D4A494847454443403F3F3E3D3D3C3B3A39383837363635353533333232313130303030302F303030302F2F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282828272727272727272625252525252525252525252525242424232323232323232323232222227ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191919191717171717171717161616161515151514141414141515141414141414141313131313131313131212121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9000000000000000000000000000000000000000000000000000000003AA5A8AAADAFB2B4B7B9BCBFC1C4C7C9CCCED0D3D6D8DADCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAE5140000000000000000000000000000000000000000000000000000000FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF9F9F9F8F8F6F5C7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A08B8F90929597999DA0A2A4A8ABAFB1B4B7BABDC1C3C5C9CCD0D1D4D8DADCDEE0E4E5E7E9ECECEFF0F0F1F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E9EAEAEAEAE9EAEAEAEAEEF8E7E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E4E6E4E4E4E4E6E6E6E4E4E3E2E3E4E3E3E2E3E1E1E1DEB8B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C5D7D6D7D7D7D7D9D9D9D9D7D7D7D7D9D9D9D7D7D7D7D7D7D7D9D9DAD9DADADADADEDEDEE1E1E1E1E1E1E1E1E1E2E2E2E2E2E2E2E3E3E3E3E2E3E3E4E4E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DACA544E4E4E4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494949484848484848494849494949494A4A4A4C4C4D4E4F5151535657595C5D5F616365686B6D6E707376797B7F808185898A8C8E919294959899999C9E9F9F9F9FA0A0A0A0A0A09D9D9C9B9A97969593908F8E8B8A868682807D7C7A7572716E6C6A676462605D5B5958555352514E4C4B494846454442413F3F3E3D3D3C3B3A3A38383735363635353333323232313030303030302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272727262525252525252524252525252424242323232323232323232323222249BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919191717171717171716161616151515151614141414151515141414141414131313131313131313121212121211111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6190000000000000000000000000000000000000000000000000000000697A6A9ACAEB1B4B6B9BCBEC1C3C6C9CBCDD0D2D4D7D9DBDDE0E1E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF98C000000000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F6F5BBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AB8D8F919395989A9EA0A3A5A9ACB1B2B5B7BBBEC1C4C7CACCD0D3D6D9DADDE0E1E4E7E7E9ECEDEFF0F0F3F3F5F6F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEBEBEAECEAEAEAEBEBEFF9E9E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E3E2E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFE1DFDEDEDED6B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C5DADAD7D7D7D7D9D9DADADBDCDCDCDADADADADADBDADAD9D9DADADBDEDCDEDEDEDEDFE1E1E1E1E1E2E2E2E1E2E2E2E2E2E3E3E3E3E4E3E3E4E4E4E4E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEB94E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494949484848484848494849494949494A4A4A4C4C4D4E4F5151535657595C5B5F616365676A6A6E707377777A7B80808185888A8B8D9091919495979999999A9D9A9A9B9A9B9B9A999996969595918F8E8C8B87868482817D7C7A7574726F6D6B676564615F5B5B5957555351504E4C4B49484645434241403E3E3D3C3C3B3A383837373535363535343332323232303030303030302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282828272727272727272625252525252525242525252524242423232323232323232323232222B0BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD381B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191717171717171717161616161515151514141414141515141414141414141313131313131313111212121211111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000000000004EA6A9ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD1D4D6D8DBDDDEE1E2E5E6E8EAEBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAEF2800000000000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7F3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B28F90929597999CA0A2A4A8AAADB1B3B6B9BDBEC1C5C7CBCCD0D4D6D9DCDDE0E3E5E7E8E9ECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E6E4E6E6E4E3E3E3E3E9F3E3DBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1DFDFDFDFDFE1DFDFDEDFDFDFDEE1E1E1E3E2E1E1E1E1D3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C9DFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDFDEDFDFE1E1E2E1E2E1E1E2E2E1E2E2E2E2E2E2E3E3E2E2E2E3E3E2E3E1E2E3E3E2E3E3E4E6E4E3E3E3E3E3E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7974E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494949484848484848494849494949494A4A4A4C4C4D4E4F5151535657585A5C5E5F636466686B6D6E717477797B7D7E81818687898A8C8E909191929495959596969696969595959591919090908C8B88868682827F7D7C79777572706D6A68676462605D5B595857535351504E4C4A494946444442413F3F3D3C3C3C3B3A39383737353536363434343232323231303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292828282828282827272727272726252525252525252525252525252424242323232323232323232323227ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191917171717171717161616161515151516141414141515151414141414141313131313131313131212121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9070000000000000000000000000000000000000000000000000000000D9FA8AAADAFB2B4B7BABCBFC1C4C6C9CBCED0D3D5D7D9DCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFAA90000000000000000000000000000000000000000000000000000000023F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7E7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B390929395989A9EA0A3A5A9ABAFB1B4B7BABDC1C3C5C9CCD0D1D4D7DADCDEE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFDFE1DFDFE1E1E1DFE3ECDED7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD7D7D9D9D9D9D7D9D9D7D9D7D6D6D6D6D6D6D6D6D6D5C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4D6D6D5D5D3D3D3D3D1D1D1D1D1D1D1D1D1D1D3D1D1D0D1D0D0D0D0D1D3D3D3D5D5D7D7D7D6D7D7D7DAD7DADBDEDEDEDEDEDEDEDFE1DFDFE1DFDFE1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDC7E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484848494849494949494A4A4A4C4C4D4E4F515152545657595C5E5F61636567696A6E6F717476797B7B7F80818585868A8A8C8D8D8E9090919291919291919090908E8E8C8C8B8A88868482817F7D7C78767472716E6C6A676462615F5C5B5857545352514F4C4B4A484947444442403F3F3E3C3C3C3C3A39393637353536363534343332323231303030303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292928282828282828282727272727272625252525252525252525252525242423232323232323232323232249BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191917171717171717171616161615151515141414141415151414141414141413131313131313131112121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C0000000000000000000000000000000000000000000000000000000069A7A9ACAFB1B4B6B9BCBEC1C3C6C8CBCDD0D2D4D7D9DBDDDFE1E3E5E7E9EAEBEDEEF0F1F2F3F4F5F6F7F8F8F9FAFBFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF93C0000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8F7DCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B395939597999CA0A2A4A8AAADB1B3B5B7BBBEC1C4C7CACCD0D3D6D8DADCDEE0E4E5E7E9ECECEFF0F0F1F3F5F5F6F8F8F9F9F9FBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7ECEBEBEAEBEBEBEBECECEFF9E9E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E4E4E4E4E3E2E3E3E3E2E2E1DFDEDEDEDFDFDEDCDBDBC0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4D7D5D5D5D1D1D3D1D1D3D1D1D0D1D0D0CFCECECECECED0D0D0D0D0D0D0D0D1D3D3D5D5D5D6D6D6D6D5D5D5D5D5D5D7D6D6D5D5D5D6D5D5D5D5D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D1674E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484848494849494949494A4A4A4C4C4D4D4F4F5152545657595B5B5F5F62646666696C6D71737476797A7B7D7E808383858689898A8A8C8D8D8C8D8D8D8C8C8C8C8A8A88888685848282817F7D7979767471706E6C6A67666362605D5B595856545351514F4C4B49484747454342403F3F3E3E3C3C3B3B393938363536363635353433333232313130303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828282727272727272726252525252525252525252525242424232323232323232323232322B0BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD381B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919191917171717171717161616161515151516141414141515151414141414141313131313131313131212121211111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D0000000000000000000000000000000000000000000000000000000021A6A9ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD1D4D6D8DBDCDEE1E2E4E6E7E9EBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAD10000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8F8D2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39C9395999C9EA0A3A5A9ABAFB1B4B7BABDC0C3C5C7CBCED0D4D6D9DADDE0E1E4E7E7E9ECEDEFF0F0F3F3F5F5F6F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F1F1F1F2F3F3F4F6F4F8FFEEE9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D7D7D9D7D6D7D7D7D7D6D6D7D7D5D5D5D3D5D6D6D6D6BAB3B3B3B3B3B3B3B3B3B3B3B3B3B3C4D5D5D3D5D6D5D5D5D5D5D3D1D1D3D3D5D6D6D7D7D7D7D9D7D7D9DADBDBDCDADCDCDBDAD9D9DADADCDBDADBDCDCDCDCDCDCDBDBDBDBDBDBDBDCDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7D75B4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484848494949494949494A4C4A4C4C4D4D4F4F515153565758595C5E5F62636566686A6C6E7173747679797A7D7E8080828386878686868989888A898A88898987868684838181807F7D7A7977757472706D6C6A67666462605F5B5B5958545353514E4D4C4948494745454342403F3E3E3E3D3C3B3B3A3938363636363635353533333332313131303030303030302F30303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282828272727272727262625252525252525242525252524242423232323232323232323237ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191917171717171717171616161615151516141414141415151414141414141413131313131313131212121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE307000000000000000000000000000000000000000000000000000000007EA8AAADAFB2B5B7BABCBFC2C4C6C9CBCED0D3D5D7D9DCDEE0E2E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9640000000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B39F95989A9DA0A2A4A8AAADB1B3B5B7BBBEC1C4C7C9CCD0D1D4D7DADCDEE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F1F1EFEFEEF1F1F2F2F1F6FCEBE4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1DFE1E1E1DFDFDEDEDEDEDEDEDEDEDEDEDEDEE1DEDCBBBCBBBCBCBCBCBBBCBBBBBBBBBBCDDBDBDBDADADAD9D7D7D9D9D7D9D9D9D9DADADADBDBDBDADADBDAD9DBDADBDBDADADADADADBDADBDBDBDADBDADADADBDADADADBDEDEDCDBDBDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEECD544E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484848494949494949494A4C4A4A4C4D4D4E4F515152545657585B5D5F6062646467686A6D6D7170727476797B7B7B7F7E808083828382848484868683838382828180807F7D7C7D7A7776767472706F6C6A67666464615F5B5B595856555351514F4C4C494847474545434240403E3E3D3D3C3B3B3A383836363636363535353533333231313131303030303030302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929292828282828282827272727272726252525252525252525252525252424242323232323232323232349BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD6B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191919171717171717171616161615151515161414141415151414141414141413131313131313131112121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000000000003CA8AAADAFB2B4B7B9BCBFC1C4C6C9CBCDD0D2D4D7D9DBDDDFE1E3E5E6E8EAEBEDEEEFF1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAE5140000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A697999CA0A2A3A5A9ABAFB1B4B7BABDC0C3C5C7CBCCD0D3D6D9DADCDEE0E4E5E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEEEF1EEEFEFEFF1F1F1F7FDEEE9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E2E3E4E3E3E2E1E1DFDEDEDEDCDBDCDEDEDEDCDCDBDBDBDBDEDEDEDEDFDEDEDFDCDCDCDBDADBDCDCDCDBDBDADADADBDBDBDBDBDBDADBDBDBDEDEDFE1DFE1E1E1E1E1E1E1E1E1E1E1E2E1E1E1E1E1E2E3E3E2E2E2E3E3E3E3E3E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9B54E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949494848484848494948494949494A4A4A4A4C4C4D4E4E51515253565758595C5D5F6162626567686A6D6D6D7073737677787A7A7D7B7B7E807E7F808080808080807F7F7D7D7D7B7A797976767472716F6D6A6B68666462625F5D5B595858555553514F4E4C4B494847454543434241403F3E3D3C3C3C3A3A38383636373635353534353533333131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292928282828282828272727272727262525252525252525252525252424242323232323232323232323B0BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD381B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919171717171717171716161616151515161414141414151514141414141413131313131313131312121212111111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000000000000692A9ABAEB0B3B6B8BBBDC0C2C5C7CACDCFD1D4D6D8DBDCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFA8C0000000000000000000000000000000000000000000000000000000007E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9F8CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6999C9EA0A3A5A8ABADB1B3B6B7BBBEC1C4C7C9CCD0D1D4D7D9DCDDE0E3E4E7E8E9ECEDEFF0F0F3F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEEEFEEEEEFEFECEEEEF3FBEBE6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E3E6E3E3E3E2E2E2E2E2E2E1DFE1DFDEDFE1E2E2E3E1E2E2E3E3E3E3E2E3E2E2E2E2E3E3E3E2E2E1DFE1E2E1E1DFE1DFDFDFE1DFE1DEDEDFDEDEDEDEDCDBDBDBDBDADADBDCDEDEDEDCDEDFDFDFE1E1E1E1DFDFDFDFE1E1E1E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDE954E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494949484848484849494849494949494A4A4A4C4C4D4D4F4F515253565657585B5B5E5F6161646567686A6D6D6C707073737677777A79797B7B7B7B7B7B7E7E7B7B7B7B7B7B79787676767472726F6D6C6A6B67676462605F5E5B5B585755555353504E4C4C4A494847454543424141403D3D3D3C3C3C3A3A3838363737373535353434353531313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2929292929292929282828282828282727272727272726252525252525252425252525242424232323232323232323237ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA91D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191919191717171717171716161616151515151414141414151514141414141414131313131313131312121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3070000000000000000000000000000000000000000000000000000000057A9ABAEB0B3B5B8BABDBFC2C4C7C9CCCED0D3D5D7D9DCDEE0E2E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9FAFBFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9280000000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F8C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A89C9EA0A2A4A8AAACB1B2B5B7BABDC0C3C5C7CBCCD0D3D6D8DADCDEE0E3E5E7E8EBECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E6E6E4E4E3E3E2E3E3E9F2E3DBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D6D6D6D5D5D5D7D7D7D9DADBDBDBDBDCDEDCDBDBDADAD9DADADAD9D9D7D7D7D7D7D9D9DAD9D9DADADADADBDADBDBDCDBDCDCDEDFDFDFDFDFE1E1E1E1DFDFE1E1E1E1E1E1E1E1E1E1E1E2E3E3E3E3E4E4E4E4E6E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2884E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484849494849494949494A4A4A4C4C4D4D4E4F51515254565658595C5D5F606162646567676A696C6D6E706F727373747677787978797979797978787876767675727271716E6D6D6A6A6867666363605F5D5C5B5A595655535351514C4C4C49494747454443424141403D3C3D3C3C3B3B38383636373737353535343434353131313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272726262525252525252525252525252424242323232323232323235ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD7D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919171717171717171716161615151515161414141415151514141414141413131313131313131112121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000000000001BA1AAADAFB2B4B7B9BCBFC1C4C6C9CBCED0D2D4D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAC7000000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A89EA0A2A4A7A9ABAFB1B4B7B9BDBEC1C4C7C9CCD0D1D4D7D9DADDE0E1E4E5E7E9ECECEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F1F1F1EFEFEFEFEFEFEFF4FCECE6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDEDEDEDFE1E1DFDEDEDEDEDEDEDEDEDEDEDBDEDEDEDEDEDEDFDFDEDEDFDFE1E2E2E1E1E1E1E1E1DFDEDEDCDBDBDBDADADADAD9D9D7D7D7D9D9D9D7DAD7D7D7D7D7D9D7D7D7D7D6D7D9DADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E4754E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484849494849494949494A4A4A4A4C4C4D4E4E4F51525354565758595C5D5F5E616263646666676A6A6C6C6E6F70707072737373747574747475747372727272716E6D6C6C6A6B69676563646260605E5C5A59585855555351514D4D4C4949484745444342414140403F3C3D3B3C3B3B39383636363737363535343434343231313131313131303030303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272726252525252525252525252525252424242323232323232349B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD711D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919191717171717171716161616151515151414141414151514141414141413131313131313131112121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000000000000079AAACAFB1B4B6B9BBBEC0C3C5C8CACDCFD2D4D6D8DBDCDEE0E2E4E6E7E9EBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFBFBFAF9640000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9F9C6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A9A0A2A3A5A9ABADB1B3B5B7BABDC1C3C5C7CBCCD0D3D6D8DADCDEE0E3E5E7E8E9ECEDEFF0F0F3F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E7E9EAEAE9E9E9E9E9ECF6E4DBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D6D5D5D5D5D6D7D7D9DADAD9D7D9DAD9D7D7D6D7D9D9DADAD7D7D7D7D9D9D7D9DAD9D9DADADADADBDCDCDBDBDBDBDADADADADADADADADADADADADADADADADBDBDBDBDBDBDBDEDEDEDEDEDEDEDEDCDEDEDEDBDBDBDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFD5624E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484849494849494949494A4A4A4A4C4C4D4D4D4F4F515253555557585B5C5D5E5E5F606364666666676A6C6C6D6D6C6D6F6F6F6E6F70707070706F6F6D6D6D6C6D6A6A69676768656462605F5F5D5C5A5A585756555351514F4D4C4C49484747454444424141403F3D3E3D3B3B3B3B3939363636363636363434343433333231313131313131303030303030302F30303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282828272727272727262525252525252525252525252424242323232323235BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD94211B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919191717171717171717161616151515151614141414151514141414141414131313131313131312121212111111111111111110101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F47F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3070000000000000000000000000000000000000000000000000000000035A9ABAEB0B3B6B8BBBDC0C2C5C7CACCCED0D3D6D8DADCDEE0E2E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAE514000000000000000000000000000000000000000000000000000000002CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFBFBFBFAF9F9CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AAA2A3A5A9AAADB1B3B5B7BABDBEC1C4C7C9CCD0D1D4D7D9DADDE0E1E4E5E7E9ECECEDEFF0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E2E3E3E1E1E1E3E4E6EBF4E4DCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E4E4E6E6E6E6E6E7E7E7E6E6E6E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E3E3E3E3E3E2E2E1E1E1E1DFE1E1E1DFE1E1E1E1E1E1E1E1E2E2E1E1E1E1E1DFDFE1E1E2E1E1E1DFDEDEDBDBDBDCDEDFDEDEDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9C85F4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494948484848484849484949494949494A4A4A4A4C4D4D4D4E4F51525254555657585B5C5B5D5D5F6162646465666667696A6868696C6D6C6B6B6B6B6B6B6B6B6B6B6B696968676565656462625F605E5C5B5A59575756555352514E4F4C4C4A494747454544434241403F3F3D3E3D3B3B3B39393737363636363636353434343333323231313131313131303030303030302F303030302F2F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929282828282828282727272727272726252525252525252425252525242424232323237ABDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA9321B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191917171717171717161616161515151514141414141515141414141414131313131313131311121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000000000000794ABADB0B2B5B7BABCBFC1C4C6C9CBCED0D2D4D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFA95000000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A8A3A5A8AAADB1B2B4B7B9BDBEC1C4C5C7CBCCD0D3D6D8DADCDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E3E3E3E2E1E1E1E1E1E3E6F1E1DADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D7D7D7D7D6D6D6D7D6D6D6D6D6D6D6D5D3D5D5D6D7D7D7D9DADADADADBDCDBDADADAD9D9DADADAD9D9D7D7D7D7D7D9DADADADADADBDBDCDEDCDEDEDFDEDFDFE1E1E1E1E1E1E2E2E2E2E1E1E2E3E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2BF544E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494948484848484849484849494949494A4A4A4A4C4C4D4D4D4E4F51525454555657585B5B5B5C5D5E61616063646566666666676969696969676868696868676768686665646262626061605F5C5C5C5A5A595756555353524F4F4C4B4A4B494745454442424242403F3D3E3E3D3D3B3B3939373738363636363635353434333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828282727272727272626252525252525252525252525242424232788BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB54B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191917171717171717171616161515151516141414141515141414141414131313131313131311121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2BE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D00000000000000000000000000000000000000000000000000000000005EAAADAFB2B4B7B9BCBEC1C4C6C8CBCDCFD2D4D6D8DBDDDEE1E2E4E6E7E9EBECEEEFF0F2F3F4F4F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAF9320000000000000000000000000000000000000000000000000000000000CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9F9CEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A6A5A8AAADAFB1B4B6B9BBBDC1C3C5C7CACCD0D1D4D7D9DADDE0E1E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E6E7E6E7E6E4E6E7E7ECF6E6DCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDBDADAD9D9DADBDCDCDCDCDEDEDCDBDBDBDBDADCDBDBDCDEDCDCDCDBDBDCDEDEDCDCDCDEDEDEDEDEDCDBDBDEDEDEDEDEDFDFDFDFE1E1E2E2E1E1E1E1E1DFDFDFDEDFDFE1E1DFE1E1E1DFDFDFDFE1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECCA4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494948484848484849484849494949494A494A4A4C4C4C4C4D4E4F4F5152525455565758585B5C5C5D5D5F5F616163646365656565656566646666666665656464646464636161605F5E5C5D5D5A5A59575756545353514F4F4D4B4A4948474647454242424241403D3D3E3C3C3C3C39393737383838363636353535353433333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282828272727272727262525252525252525252525252424243294BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD641B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191919171717171717171616161615151516141414141515151414141414141313131313131313121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F17CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD907000000000000000000000000000000000000000000000000000000001BA9ACAEB1B3B6B8BBBDC0C2C5C7CACDCFD1D3D6D8DADCDEE0E2E4E5E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAD10A0000000000000000000000000000000000000000000000000000000023F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAF9D9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A8A8AAACAFB1B4B6B7BABDC0C1C5C7C9CCCED0D4D6D9DADCDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E2E4E4E4E6E6E6E7E7E6EAF6E6DFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDCDBDBDADADADBDADADADBDCDCDEDCDCDEDEDEDCDEDEDEDEDEE1DEE1E1E2E2E2E3E4E4E6E4E6E6E6E7E6E6E6E4E4E6E7E9E7E7E6E6E6E6E9E9E9EAE9E9E9EAE9E9EAEAEAEAE9E9E9E6E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCA64E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848494848494949494949494A4A4A4C4C4C4D4D4E4F4F515252545656575858595B5B5C5E5D5E5F616161616063636363636362626262626261616160605F5F5E5E5D5C5C5A5B57575756535352514F4F4D4D4A494848464745444242424140403F3E3E3C3B3B3C3B39383738383837363635353535343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282828272727272727262525252525252524252525252434A8BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD86201B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191919171717171717171616161615151515141414141415151414141414141313131313131313121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F17CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62C000000000000000000000000000000000000000000000000000000000087ABAEB0B3B6B8BBBDC0C2C5C7C9CCCED0D3D5D7D9DCDDE0E1E3E5E6E8EAEBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFA77000000000000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9E2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A8AAADAFB1B4B6B7BABDBEC1C4C7C9CBCCD0D3D4D7DADCDDE0E1E4E5E7E8EBECEDEFF0F1F3F3F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF1F2F2F2F3F2F3F3F3F4F9FFEFE9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDEDEE1E1E1DFDFDEDEDEDFDFDFDEDEDEDEDFDFDFE1E1E1E2E1E2E1E1E3E2E1E1E2E2E2E2E2E1E1E1E1E1E2E2E2E1E1E1E2E2E3E3E3E3E3E3E2E2E3E3E3E3E3E3E2E3E3E3E4E4E6E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFA84E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494948484848484848484848494849494949494A4A4A4C4C4C4C4D4E4F50505252535456565758585B5C5C5B5C5D5D5E5F5F5F616060606160606060605F5F5F5F5F5F5E5E5D5A5A5A5A58575655545453524F4F4F4D4B4A4B4A48464645444443424141403F3E3E3C3C3B3B3B3B38383738383636373535353535343433333333333231313131313131313030303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A29292929292929282828282828282727272727272726252525252525252525252544B5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA22C1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919171717171717171716161615151515161414141415151414141414141313131313131313111212121211111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7500000000000000000000000000000000000000000000000000000000004AABADAFB2B4B7B9BCBFC1C4C6C9CBCED0D2D4D7D9DBDDDFE1E2E5E6E8E9EBECEEEFF0F2F3F4F4F5F6F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAEF280000000000000000000000000000000000000000000000000000000000ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9EDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3ABADAFB1B4B5B7BABDBEC1C4C5C7CBCCD0D1D4D7D9DADCDEE0E3E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0DEDFE1E1E2E2E3E6E4E4E9F3E4DCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E1DFDFE1E1E1DEDEDEDEDEDEDEDEDEDEDEDBDBDEDEDEDEDEDEDEDCDBDCDCDCDCDCDEDBDADBDBDEDEDCDADADADBDCDEDCDCDBDBDBDBDBDCDCDEDBDBDBDBDBDBDBDBDEDEDEDCDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3944E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494948484848484848484848494849494949494A4A4A4C4A4C4B4C4D4E504E505251535456565657585A5A595A5A5C5C5D5D5D5C5C5F5F5F5E5E5E5E5E5E5E5C5C5C5C5C5A5B58575757565552535251504F4E4C4D4A4B4948484645454443434241403E3E3E3E3E3B3B3B3B393937373738363636353535353434343333333333333231313131313131303030303030302F303030302F2F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B29292929292929292828282828282827272727272726252525252525252525255DB5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDAE3E1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191919171717171717171616161615151516141414141515151414141414141313131313131311121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F0FA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9000000000000000000000000000000000000000000000000000000000014A3ADAFB2B4B7B9BCBEC1C3C6C8CACDCFD2D4D6D8DADCDEE0E2E4E6E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFABD00000000000000000000000000000000000000000000000000000000000FE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B1ADB1B2B4B6B7BABDBEC1C3C5C7CACCD0D1D4D6D9DADCDEE0E3E4E5E7E9ECECEDEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDEE1E1DFE1DFDEDEDEE1E3EEDFD9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D5D5D3D1D1D0D1D0D3D3D6D3D3D3D3D1D1D1D0D0D0D1D0D1D0D0D1D3D5D5D5D5D5D6D5D5D6D6D7D7D7D7D7D5D5D7D7D7D9DADBDADADADADBDBDBDCDBDBDADADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDB884E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494948484848484848484848484849484949494A4A4A4A4C4B4B4C4D4E4E4E50505151525356565656575758595B5B5A5C5A5B5B5C5C5C5B5C5A5A5A5B5B5959585859595856555554545251504F4F4E4C4C4A494948484847444444434242413E3E3D3D3E3C3B3B3B3B39393937373636363535353535343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272726252525252525252568BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD5D1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A19191919191919191919171717171717171716161615151515141414141415151414141414141313131313131313121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F0F98FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED1900000000000000000000000000000000000000000000000000000000007BACAFB1B3B6B8BBBDC0C2C5C7CACDCFD1D3D6D8D9DCDEE0E2E4E5E7E9EAEBEDEEEFF1F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFA64000000000000000000000000000000000000000000000000000000000035FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAF9BEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B1B2B4B6B7BABDBEC1C3C5C7CACCCED0D3D6D8DADCDDE0E1E4E5E7E8E9ECEDEFF0F0F1F3F5F5F6F7F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F2F2EFEEECEBECECECF2F9E9E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E2E2E2E2E3E3E3E2E2E2E3E3E3E3E3E3E3E3E2E2E3E3E3E3E3E3E2E3E3E3E4E4E6E6E6E7E9E9E9E9EAEAE9E9E9E9EAE9E9E9E9E9E9E9E9E7E9E9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDC8B4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A494949494949494848484848484748484848484948484949494A4A4A4A4C4B4B4C4D4D4E4E4F50515151535656555656575757585857575959595B5B59595959595858575756565656555554525250504E4E4C4C4C4B4B48484848464643444342414140403D3D3D3C3C3C3B3B393939393936363636353535353434343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828272727272727272625252525252A7CBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD77201B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919191717171717171716161616151515161414141415151414141414141313131313131313121212121111111111111111101010101010100F0F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40000000000000000000000000000000000000000000000000000000000036ABAEB0B3B6B8BBBDC0C2C5C7C9CBCED0D3D5D7D9DBDDDFE1E3E5E6E8EAEBECEEEFF0F2F3F4F4F5F7F7F8F8F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAEF1E000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBFAD0B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3AFB3B5B7B7BABDBEC1C3C5C7C9CCCED0D3D4D7DADADDDEE0E3E5E7E7E9ECECEFEFF0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E6E4E4E6E6E4E4E4E4E9F2E1D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D7D7D7D7D6D6D6D7D6D6D6D6D6D6D6D6D5D5D5D7D7D7D9DADBDBDBDBDEDEDEDCDCDBDBDADBDBDBDBDBDADADADADADBDBDBDADADBDCDCDEDEDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3DD734E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A49494949494949484848484848474848484848484848494949484A4A4A4A4C4B4B4A4C4D4E4E4E4F5051505153535453545556575756575757565656565656565656565455555554525151504F4F4E4E4C4C4A4A4948484846464644434343404140403F3D3D3C3C3C3B3B3939393939393836363535353535343434343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A292929292929292828282828282827272727272726252525252A96BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD942B1B1B1B1B1B1B1B1B1A1A1A1A1A191919191919191919191717171717171716161616151515151414141415151514141414141413131313131313111212121111111111111111101010101010100F0F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D00000000000000000000000000000000000000000000000000000000000D9EAEB0B3B5B7BABCBFC1C4C6C9CBCED0D2D4D7D9DBDDDEE1E2E4E6E7E9EBECEEEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAB4000000000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFAE2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B0B5B7B9BABDBEC1C3C5C7C9CCCCD0D3D4D7D9DADCDEE0E3E4E5E7E8EBECEDEFF0F0F1F3F5F5F6F7F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E9EAE9EAEAEAEAEAEAEAEFF8E7DEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E3E2E2E1E1E1E1E2E1E2E1E1E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E4E4E3E3E3E3E3E3E1E1E1E2E1E2E2E1DFDFE1E1E1E1DFDFDFE1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDED9724E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474748484848484848484949484A484A494A4C4B4B4A4C4C4D4F4E4F4E4F515051515252535354555454555555555555555555545252525251515150504F4F4D4C4C4C4A494848494848454444434343424040403F3F3F3C3C3C3B3B3B3B39393939373838353535353535353434343434343433333333333232313131313131313030303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272726252534A2BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA93D1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191917171717171717161616151515151614141414151514141414141413131313131313111212121211111111111111101010101010100F0F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE07000000000000000000000000000000000000000000000000000000000074ADAFB2B4B7B9BCBFC1C4C6C8CACDCFD2D4D6D8DADCDEE0E2E4E5E7E9EAECEDEEF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFA64000000000000000000000000000000000000000000000000000000000019EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBF4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B6B7B9BBBDC0C1C3C5C7C9CCCCD0D1D4D7D9DADCDDE0E1E4E5E7E8E9ECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDEDFDFE1DFDFDFDFDFDEE2ECDED9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDBDBDBDBDBDADADADAD9D9D7D7D9D9D7D9D7D7D9D9D9D7D7D6D5D6D6D6D7D7D7D7D7DADADAD7D7D9DADBDADBDCDEDEDEDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBD6714E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A494949494949494848484848484847484848484848484848494848484849494A4C4B4C4A4A4B4D4D4D4C4E4E4F515150505050515153535353535353515151515151515150504D4D4F4C4C4C4C4A4A4948484848464646444343434340403E3E3F3F3D3D3C3B3B3A3B3B3B39393737373836353535353535353434343434343333333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828272727272727272645A8BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5501B1B1B1B1B1B1B1A1A1A1A191919191919191919191917171717171717161616161515151614141414151514141414141413131313131313131212121211111111111111101010101010100F0F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF619000000000000000000000000000000000000000000000000000000000037ADAFB2B4B7B9BBBEC0C3C5C7CACDCFD1D3D6D8DADCDDE0E1E4E5E7E8EAEBECEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAEF1E000000000000000000000000000000000000000000000000000000000040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFABEB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9BABDBEC1C1C4C5C7CACCCCD0D1D4D6D9DADCDDE0E0E4E5E7E8E9ECECEDEFF0F1F3F3F5F5F6F7F8F8F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7E9E9E7E9E9EAEAEBEBF1F9E9E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1EFEFEFEFEFEEEEEEEEEEEFEFF1F1EFEEECECEBEAEAEAEBECEAEAEBEBEBEBEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADAD5714E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474747484848484847484849474849484949494A4A4A4C4C4B4B4B4B4D4D4C4C4F4F4E5050504E4E50505050505151505050504F4F4F4D4D4D4D4C4C4A4A4A48484848474747454444444443434242403E3F3F3D3D3D3C3B3A3A3A3B3B3B38373737363636353535353535343434343434343333333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727274BB5BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD711B1B1B1B1B1B1A1A1A1A1A1919191919191919191917171717171717171616161515151514141414151514141414141413131313131313131212121211111111111111101010101010100F0F0F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C00000000000000000000000000000000000000000000000000000000000D9FAFB1B3B6B8BBBDC0C2C5C7CACCCED0D3D5D7D9DBDDDFE1E3E5E6E8E9EBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAB400000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBFBD7B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5BBBDBEC1C3C4C5C7CACCCED0D1D4D6D9DADCDDE0E0E3E5E7E7E9EBECEDEFF0F0F1F3F5F5F5F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF4F3F3F2F2F1F1EFEFEFF3FCEAE4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBD9D9D9D9D9D9DADBDBDBDAD9D9D7D6D5D5D5D5D6D7D7D9DADAD9D7D9DAD9D9D9D7D9DADADADADADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCD6724E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494948484848484847474747484848484747484847474949494949494A484A4A4B4B4B4A4A4C4C4D4E4D4C4D4D4F4F4F4F4F4F4F4F4F4F4D4F4F4D4D4D4C4C4A4A4A4A4A48484848474747454444444443434142404040403F3D3D3C3C3C3B3A3A3B3B3B3A3A38373636363636353535353535343434343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292928282828282828272727275DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD941F1B1B1B1B1B1A1A1A1A1919191919191919191919171717171717171616161515151514141414141515141414141414131313131313131212121211111111111111101010101010100F0F0F0F0F52FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D00000000000000000000000000000000000000000000000000000000000075AEB0B3B6B8BBBDBFC2C4C7C9CBCED0D2D4D7D9DBDDDEE1E2E4E6E7E9EAECEDEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA64000000000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBF1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BBBEC0C1C3C5C7C9CBCCCED0D3D4D6D9DADCDDDEE0E3E5E7E7E8EBECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E2E3E3E3E2E1E1E3E1E6EFE1D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2DFE1E1E1DFDFDFDFDFDFE1DFDFE1DFDEDEDEDEDEDEDEDEDEDEDEDFDEDEDEDEDEDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1DA734E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474748484847474747484747464947494949474748484A4A4B4A4A4A4A4B4C4C4C4C4C4C4C4C4C4C4C4C4C4D4D4A4A4C4A4A4A4A4A4A4A4A4A484747474745454644444343434340404040403E3F3D3C3C3C3B3B3B3B3B3B393A3A3A37363636363635353535353535343434343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827277CBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDA9311B1B1B1B1A1A1A1A1A19191919191919191919171717171717171616161615151516141414141515141414141414131313131313131212121211111111111111101010101010100F0F0F0F65F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC400000000000000000000000000000000000000000000000000000000000037AEB0B3B5B7BABCBFC1C4C6C9CBCDCFD2D4D6D8DBDCDEE0E2E4E5E7E9EAEBEDEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBF01E000000000000000000000000000000000000000000000000000000000007E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBFBC3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4BEC1C3C4C5C7C9CBCCD0D0D3D4D7D9DADCDDDEE0E3E4E5E7E8E9ECECEFEFF0F1F3F3F5F5F6F6F8F8F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E9E9E7E7E7E7E7E7E7EAECF8E9DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E2E1E2E1E1E2E2E3E3E3E3E3E3E3E3E3E3E3E3E3E3E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDED6724E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494948484848484847474747464848474647474747474746464747494747474749494A494A4A4A4A4B4B4A4B4B4B4C4C4B4B4B4A4C4C4A4A4A4A4A4A4A48484848484847464646464644444342424140404040403E3E3D3D3C3C3B3B3B3B3B3B3939393A3737373636353536353535353535353434343434343433333333333232313131313131313030303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282B88BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB54A1B1B1B1B1A1A1A1A191919191919191919191917171717171717161616151515161414141415151414141414141313131313131311121212111111111111111010101010100F0F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000DA0B0B2B4B7B9BCBFC1C3C6C8CACDCFD1D3D6D8DADCDEE0E1E4E5E7E8EAEBECEEEFF0F2F3F4F4F5F6F7F8F8F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFABD0000000000000000000000000000000000000000000000000000000000002CF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBDBB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BAC1C4C5C7C7CACCCCD0D1D3D4D7D9DADCDDDEE0E3E4E5E7E8E9ECECEDEFF0F0F1F3F5F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E7E6E6E7E9E9E9E9EAEAECF6E6DEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDCDBDBDBDBDBDADBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2DD734E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848484747474646484746464747464747474646474747474747484849474848484A4A4848494A4A4A4A48484A4A4A4A4A484848484848474747474747474644444443434241414140404040403E3D3D3D3C3B3B3B3B3B3B3939393938373737363535353636353535353535353434343434343433333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2A2929292929292928282828283696BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD631B1B1B1A1A1A1A1A1919191919191919191917171717171717161616151515151414141415151514141414141313131313131311121212111111111111111010101010100F0F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF350000000000000000000000000000000000000000000000000000000000007DAFB2B4B7B9BCBEC0C3C5C7CACCCED0D3D5D7D9DCDDDFE1E3E5E6E8E9EBECEEEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFCFCFCFCFBFBFA7700000000000000000000000000000000000000000000000000000000000055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBF9B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5C3C5C5C7C9CBCCCED0D1D4D6D7D9DADCDDDEE0E3E4E5E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAECECEAEAECEBECEEEEF2FBE9E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D3714E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474747474646464746464647464647474646464646464747474848464747474849474848484848494949494949494948484848484847474646464646434343424242414040404040403D3D3D3C3C3C3C3B3B3B3B3B3B3939383837373735353535353636353535353535353434343434343333333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828282727272727272625252525252525252525252524242323232327BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD861F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191917171717171717161616161515151614141414151514141414141313131313131311121212111111111111111010101010100F0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000000000000045AFB2B4B6B9BBBDC0C2C5C7CACCCED0D3D4D7D9DBDDDFE1E2E4E6E7E9EAECEDEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBF03200000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFBFBD4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBC5C7C9CACCCCD0D0D3D4D6D7D9DADCDDE0E0E3E4E5E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F6F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEFEFEEEEEFEFF1F1F2F8FDECE7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D17C4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474747474646464546464646464646474646464646464646474747474747474747464647474747484747474848484747474747464644444444444342424243434343404040403E3E3E3C3C3C3C3C3C3C3B3A3B3B3B393838383837373735353535353636353535353535343434343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282827272727272726252525252525252525252525242424232323238FBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4D1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191919171717171717171616161515151614141414151514141414141413131313131313121212111111111111111010101010100F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA20000000000000000000000000000000000000000000000000000000000001CA8B1B3B6B8BBBDC0C2C4C7C9CBCED0D2D4D7D8DBDCDEE0E2E4E6E7E9EAEBEDEEEFF0F2F3F4F5F5F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAD10A000000000000000000000000000000000000000000000000000000000000C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBF5B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5C7C7CACBCCCED0D1D3D4D7D8DADADCDDE0E0E3E4E5E7E8E9ECECEDEFF0F0F1F3F3F5F5F6F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAE9E9EAE9E7E4E6E7E9EBF6E3DCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9884E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444646464646464646464646444646474747474747474747474545464747474746464647464744444444444444434343434242424242414141413E3E3E3E3D3D3D3C3C3C3C3C3C3A3A3A3B39393938383837373737353535353536353535353535353434343434343433333333333232313131313131313030303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727272625252525252525242525252524242323232360BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB5241F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919171717171717171616161515151514141414151514141414141413131313131313121212121111111111111010101010107AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE070000000000000000000000000000000000000000000000000000000000078BB1B3B6B8BABDBFC1C4C6C9CBCDCFD2D4D6D8DADCDEE0E2E4E5E7E9EAEBECEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFA950000000000000000000000000000000000000000000000000000000000000FE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBD1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCCACBCCCED0D1D3D4D6D7D9DADCDCDEE0E0E3E4E5E7E8E9ECECEDEFF0F0F1F3F3F5F5F5F6F7F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F9F9F8F9FBFBFBF9F9FDFFF3F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9884E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444446464646444646464646444446454545474545454747474545464646464646464646464644444444444444434242424242414141404040403E3D3D3D3D3D3D3C3C3C3B3B3B3A3A393939393938373737373737353535353536353535353535353434343434343433333333333232313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929292828282828282827272727272726252525252525252525252524242423232332BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD791F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919171717171717171616161515151514141414151514141414141413131313131313121212121111111111111010101010A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000005BB0B3B5B8BABCBFC1C4C6C8CACDCFD1D3D6D8DADCDDE0E1E3E5E6E8EAEBECEEEFF0F1F2F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA4500000000000000000000000000000000000000000000000000000000000023F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBF5B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B7CBCCCED0D0D3D4D4D7D8DADADCDDDEE0E1E3E5E5E7E8E9ECECEDEFEFF0F0F1F3F5F5F5F6F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAE9E9E7E9E9E6E9E7E7ECF7E6DFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEA14E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444464646444446464646444444444445454444454545454445454545454644444444444443434343434343424242424141404040403F3F3F3D3D3D3D3D3D3C3A3B3B3B3B3A3939393939393737373737373735353535353536353535353535353434343434343433333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828272727272727262525252525252524252525252424242323239BBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD461F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191917171717171716161616151515161414141415151414141414131313131313131212121211111111111110101010A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6350000000000000000000000000000000000000000000000000000000000002AB0B3B5B7B9BCBFC1C3C6C8CACDCFD1D3D5D7D9DCDDDFE1E3E5E6E7E9EBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBE61E0000000000000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4CED0D0D3D4D4D6D7D9DADADCDDE0E0E3E4E5E7E7E8E9ECECEDEFEFF0F0F1F3F5F5F5F6F7F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9E7E6E6E6E7E7E7E9E9ECF7E6DEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADAA64E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494948484848484847474747464646454444444446444444444446464444444444444444444444444444444444444444434343434343424242424242414141414140403F3F3F3F3E3E3E3D3D3D3D3C3C3A3A3B3A3A3A3A3939393737373737373737373735353535353636353535353535353434343434343333333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727272625252525252525252525252524242323236EBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDAE201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919171717171717171616161515151614141414151514141414141313131313131312121212111111111111101018B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000000000000000000000000000000000000000000000000000000000000E9BB2B4B7B9BCBEC1C3C5C7CACCCED0D3D5D7D9DBDDDFE1E2E4E6E7E9EAECEDEEF0F1F2F3F4F5F5F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFABD0000000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBC1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBD0D1D3D4D4D6D7D9DADADCDDDEE0E0E3E4E5E7E7E8E9ECECEDEFEFF0F0F1F3F3F5F5F6F7F8F8F9F9F9F9FAFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEECEBECEEEFEEEEECF3FBEBE6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1B9544E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474747474646464544444444444344444444444544444444444444444444444344434343434343434343434343434242414141413F3F40404040403F3F3F3E3E3E3E3C3C3C3C3C3C39393A3A3A3A3A3838373737373737373737373735353535353636353535353535343434343434343333333333323231313131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B29292929292929292828282828282727272727272626252525252525252525252524242423233DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD79201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191717171717171716161615151516141414141515141414141413131313131313121212121111111111111018C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D000000000000000000000000000000000000000000000000000000000000007FB2B4B7B9BBBEC0C2C5C7CACCCED0D2D4D7D9DBDDDEE0E2E4E5E7E9EAEBEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA820000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBECB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6CCD3D4D4D6D7D9DADADCDCDEE0E0E1E4E5E5E7E7E8EBECECEDEFF0F0F0F1F3F3F5F5F6F7F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E9E9E7E6E6E6E4E6E4E4E9F3E3DBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6C3544E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474747474646464544444444444343444444444544444444444444434444444343424242424243434343424242424141414141413F3F40404040403F3F3F3D3D3D3C3C3C3C3A3A3A393A3A3A3A393938383737373737373737373737353535353536363535353535353434343434343433333333333232313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282828272727272727262525252525252524252525252424232323B0BDBDBDBDBDBDBDBDBDBDBDBDBDBDBD4120201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1919191919191919191917171717171716161615151515141414141515141414141413131313131313121212121111111111112BDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD000000000000000000000000000000000000000000000000000000000000004DB2B4B7B9BBBDC0C2C5C7C9CBCED0D2D4D6D8DBDCDEE0E2E4E5E7E9EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA4500000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFBD6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C4D4D6D7D8D9DADADCDCDDDEE0E1E3E4E5E7E7E8E9EBECECEDEFF0F0F0F1F3F3F5F5F6F6F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E4E6E6E6E6E6E6E7E7ECF4E4DCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1CB624E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848474747474646464544444444444343444444444544444444444444434343434343424242424243434343424242424141414141413F3F40403F3F3E3D3D3D3D3D3D3A3A3A3A3A3A3A393A393939393838383737373737373737373735353535353536353535353535353434343434343433333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292828282828282827272727272726252525252525252525252524242423237ABDBDBDBDBDBDBDBDBDBDBDBDBDBDA92020201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191717171717171616161615151514141414151514141414141313131313131312121211111111111136E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC40700000000000000000000000000000000000000000000000000000000000023ABB4B6B8BBBDC0C2C4C6C9CBCDCFD2D4D6D8DADCDEE0E1E3E5E6E8EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBDC1400000000000000000000000000000000000000000000000000000000000007E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBC6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BED6D7D8D9DADADCDCDDDEE0E0E3E4E5E5E7E7E8E9ECECEDEFEFF0F0F1F1F3F3F5F5F6F6F8F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF2F2F2F1F2F2F3F4F3F4F8FDEEE9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCCD6D4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494948484848484848474747474646464444444444444343444444444444444444444442424243434343424343434342424242414141413F3F3F3F40403F3F3F3F3F3E3E3D3C3C3C3C3C3A3A3A3A3A3A3A3939393939393838383737373737373737373735353535353536353535353535353434343434343333333333323231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2B2929292929292929282828282828272727272727262525252525252525252525252424242349BDBDBDBDBDBDBDBDBDBDBDBDBDBD6D202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191717171717171716161615151516141414151514141414141413131313131312121211111111114AF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000079BB4B6B8BBBDBFC2C4C6C9CBCDCFD2D3D6D8D9DCDDE0E1E3E5E6E8E9EBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFAB40000000000000000000000000000000000000000000000000000000000000019EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCF5BCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B8D6D9DADADADCDDDDDEE0E0E3E4E5E5E7E7E8E9EBECECEDEFEFF0F0F1F3F3F5F5F5F6F6F7F8F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E3E2E3E3E4E6E4E4E6E9F4E3DCDCDEDFDFE1E1E1E2E1DFDEE1E1E2E3E3E4E6E4E3E2E2E3E3E3E4E4E4E6E4E3E3E3E3E3E3E3E2E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDEDEDFDEDEDEDEDEDEDEDFDEDEDEDEDEDFE1E1E2E2E3E3E3E3E3E3E3E2E2E2E1E1E1E1E1E2E1E1DFDFE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4DE754E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494948484848484848474747474646464444444444444343444444444442424444444442424242424242414343434342424242414141403F3F3F3F40403F3E3E3E3E3D3C3C3C3C3C3C3C3A3A39393A3A3A393939393939383838373737373737373737373535353535363635353535353534343434343434333333333332323131313131313130303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727272625252525252525252525252424242328B5BDBDBDBDBDBDBDBDBDBDBDBDBD3B202020201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919171717171717171616161515151614141415151414141414141313131313131212121111111166F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6230000000000000000000000000000000000000000000000000000000000000078B3B6B8BBBDBFC1C4C6C8CACDCFD1D3D6D7D9DBDDDFE1E2E4E6E7E9EAECEDEEF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA770000000000000000000000000000000000000000000000000000000000000035F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCE9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6D1DADADCDCDDDEE0E0E0E3E4E4E5E7E7E7E8E9ECECEDEDEFEFF0F0F1F3F3F5F5F5F6F6F8F8F9F9F9F9FAFAFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E1E1E3E3E4E3E3E2E3E6F2E1DADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E18C4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A49494949494949484848484848484747474646464544444444444443434444444444424242424244424242424242414142424242424040404040403E3F3F3F3F3F3F3E3E3E3E3E3D3C3C3C3C3A3A3A393939393A3A3939393939393938383737373737373737373737353535353536363535353535353434343434343433333333333232313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727272625252525252525252525252424242388BDBDBDBDBDBDBDBDBDBDBDBDA92020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919191717171717171616161515151614141414151414141414141313131313131212121111118EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35000000000000000000000000000000000000000000000000000000000000004EB3B6B8BABCBFC1C4C6C8CACDCFD1D3D5D7D9DBDDDFE1E2E4E6E7E9EAEBEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA45000000000000000000000000000000000000000000000000000000000000004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCE1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6CFDCDCDDDEDEE0E0E1E3E4E4E5E7E7E7E8E9EBECECEDEFEFF0F0F0F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFAFBFBFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E2E3E3E3E2E1E1E3E1E6EFE1D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2AA4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949484848484848484747474646464544444444444443434444444442424242424242414141414242414142424242404040404040403F3F3F3F3F3F3E3E3E3E3E3E3C3B3B3B3A3A3A3A393939393A3A3939393939393938383737373737373737373737353535353536353535353535353434343434343433333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292929282828282828272727272727262525252525252525252525252424235BBDBDBDBDBDBDBDBDBDBDBDBD662020202020201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919171717171717161616151515151414141415151414141414131313131313121212111AADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60000000000000000000000000000000000000000000000000000000000000002AB3B6B8BABCBFC1C4C6C8CACDCFD0D3D5D7D9DBDDDEE0E2E4E5E7E9EAEBECEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBE61E0000000000000000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3CFDDDEE0E0E0E0E3E3E4E5E5E7E7E7E8E9EBECECEDEDEFEFF0F0F1F1F3F3F5F5F5F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDEDEDEDBDBDADADADBDBDFE6D7D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2BB544E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A49494949494949484848484848484747474646464544444444444443434444444442424242424242414141414242404040404042424040404040403F3F3F3F3E3E3D3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3A3939393939393838383737373737373737373735353535353536353535353535353434343434343333333333323231313131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727272625252525252525252525252424242CBDBDBDBDBDBDBDBDBDBDBDBD32202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A191919191919191919191717171717171616161615151514141414151514141414141313131313131212122DCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000000000000000159DB6B8BABCBFC1C3C5C7CACCCED0D3D4D7D9DBDCDEE0E2E4E5E7E8EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFBFBFBC80A0000000000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBD6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3CBE0E0E0E1E3E3E4E4E5E5E7E7E7E8E9EBECECECEDEFEFF0F0F0F1F3F3F5F5F5F5F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEAEAEAEBEAEAE9EBEAEFF8E9E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCC6614E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484847474746464645444444444444434344444444424242424242424141414142424040404040403E3E3E3F3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3A39393939393938383837373737373737373737353535353536363535353535353534343434343433333333333232313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828272727272727262525252525252524252525252424239BBDBDBDBDBDBDBDBDBDBD9B22202020202020201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919171717171717171616161515151414141415151414141414131313131311121236E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97000000000000000000000000000000000000000000000000000000000000000088B5B7B9BCBFC1C3C5C7CACCCED0D2D4D7D8DBDCDEE0E2E4E5E6E8EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFA9F000000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFBDDB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5CDE1E3E3E3E4E5E5E5E7E7E7E8E8E9EBECECECEDEFEFF0F0F0F1F1F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFCFCFDFCFCFBFBFCFBFDFFF3EFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFD6734E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444444444434444444444424242424242414141414142424040404040403E3E3E3F3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A3A393939393A3A3939393939393938383837373737373737373737353535353536363535353535353434343434343433333333333232313131313131303030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292928282828282827272727272726252525252525252525252524242467BDBDBDBDBDBDBDBDBDBD672222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919171717171717171616161515151414141415151414141414131313131311125DF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2000000000000000000000000000000000000000000000000000000000000000064B5B7B9BCBEC1C3C5C7CACCCED0D2D4D6D8DADCDEE0E1E3E5E6E8E9EBECEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA640000000000000000000000000000000000000000000000000000000000000000B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBDDB6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5D5E4E4E5E5E5E5E7E7E7E8E8E9E9EBECECECEDEFEFEFF0F0F1F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDADADADADADADADCDEDCE1ECDCD6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1914E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444444443434444444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A3A393939393A3A3939393939393938383737373737373737373737353535353536353535353535353434343434343433333333333231313131313131303030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282828272727272726252525252525252425252525242438BDBDBDBDBDBDBDBDBDBD322222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191919171717171717161616151515141414141515141414141313131313131290FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC407000000000000000000000000000000000000000000000000000000000000003AB5B7B9BCBEC0C2C5C7C9CBCED0D2D4D6D8DADCDEE0E1E3E5E6E7E9EBECEDEEEFF0F2F3F4F4F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBF03C0000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFBE9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B9D6E5E5E7E7E7E7E7E8E8E9E9EBECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E1E1E1E1E1E1E1E1E3E6F1E1DAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7A6544E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444444443434444444444424242424242414141414242404040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3B3A3A3A3A393939393A3A39393939393939383837373737373737373737373535353535363535353535353534343434343433333333333232313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2929292929292929282828282828272727272727262525252525252525252525242424A8BDBDBDBDBDBDBDBD8F222222222020202020201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191717171717171616161515151614141415151414141413131313131BC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4070000000000000000000000000000000000000000000000000000000000000024AEB7B9BCBEC0C2C5C7C9CBCED0D2D4D6D8DADCDDDFE1E3E5E6E7E9EAECEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBDC1E0000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCF1C1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C1E1E7E7E7E7E8E8E9E9E9EBECECECECEDEDEFEFF0F0F0F0F1F3F3F3F5F5F5F5F6F6F7F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF3F4F4F3F3F3F3F4F4F3F9FDEEE7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCC3614E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444444443434444444444424242424242414141414142404040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3A39393939393938383837373737373737373737353535353536363535353535353534343434343433333333333232313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282828272727272726262525252525252425252525242474BDBDBDBDBDBDBDBD5A22222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919171717171717161616151515161414141515141414141313131338E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD907000000000000000000000000000000000000000000000000000000000000000E9FB7B9BCBEC0C2C5C7C9CBCECFD2D4D6D8D9DCDDDFE1E2E4E6E7E9EAEBEDEEEFF0F2F3F3F4F5F6F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBC80A0000000000000000000000000000000000000000000000000000000000000007D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCF9D1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3CCE8E8E8E9E9E9E9EBECECECECECEDEDEFEFEFF0F0F0F0F1F3F3F3F5F5F5F5F6F6F7F8F8F8F9F9F9F9F9FAFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7E7E7E9E7E6E6E7E9E9ECF4E3DBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFD6794E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949484848484848484747474746464544444444444443434444444442424242424242414141414242404040404040403E3E3F3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3A39393939393938383837373737373737373737353535353536363535353535353434343434343433333333333232313131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282827272727272726252525252525252525252524244ABDBDBDBDBDBDBDBD2C22222222202020202020201F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191717171717171616161515151614141415151414141413131368F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000078AB7B9BCBEC0C2C5C7C9CBCECFD2D3D6D8D9DBDDDFE1E2E4E6E7E9EAEBECEEEFF0F2F3F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBA0000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBE6BFB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BCDDEBEBEBECECECECECECECEDEDEDEFEFEFF0F0F0F0F1F1F3F3F3F5F5F5F5F6F6F6F7F8F8F9F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8ECEEEFEEECECEBEAEBE9EFF9E9E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDC934E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4949494949494848484848484847474746464645444444444444434344444444424242424242424141414142424040404040403E3E3E3F3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A3A393939393A3A39393939393939383837373737373737373737373535353535363535353535353534343434343434333333333232313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828282727272727272625252525252524252525252424B0BDBDBDBDBDBD8F232322222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919191917171717171716161615151516141414151514141414131B9AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000006DB7B9BCBEC0C2C5C7C9CBCDCFD2D3D6D7D9DBDDDFE1E2E4E6E7E9EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F8F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA77000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBF9D4B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6D1ECECECECECECECEDEDEDEDEFEFEFEFF0F0F0F0F1F1F1F3F3F3F5F5F5F5F6F6F6F7F8F8F8F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF2F2F2F2F3F3F1F2F2F3F7FDECE6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6B0594E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4949494949494848484848484847474746464645444444444444434344444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A3A393939393A3A39393939393939383837373737373737373737353535353535363535353535353534343434343433333333333232313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828272727272727262525252525252525252525242488BDBDBDBDBDBD54232322222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A191919191919191919171717171717161616151515161414141514141414142ED3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000048B7B9BCBEC0C2C5C7C9CBCDCFD1D3D6D7D9DBDDDEE0E2E4E5E7E9EAEBECEEEFF0F1F2F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA45000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBEFCCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C5E7EDEDEDEDEDEFEFEFEFEFEFEFF0F0F0F0F0F1F1F1F3F3F3F3F5F5F5F5F6F6F6F7F8F8F8F9F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D7D7D7D7DADADADADBDBE1EADAD5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCCE724E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484847474746464645444444444443434344444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3A39393939393938383837373737373737373737353535353536363535353535353434343434343433333333333231313131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B29292929292929292828282828282727272727272625252525252525252525252450BDBDBDBDBDB52823232322222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919171717171716161615151516141414151414141456F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000002BB7B9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E7E8EAEBECEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBF032000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBEFCCB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6CBE6EFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F3F3F3F3F5F5F5F5F5F6F6F6F7F8F8F8F9F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEEFEEECECECECECECEAEEF8E7E1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDE954E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444444443434444444444424242424242414141414142404040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3A393939393939383838373737373737373737373535353535363535353535353534343434343434333333333332313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828272727272727262525252525252525252525242DBDBDBDBDBD882323232322222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191717171717161616151515141414141514141C9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000016B0B9BCBEC0C2C5C6C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8EAEBECEEEFF0F1F2F3F4F4F5F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBDC1E000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFBFBFBEFD1B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BBD0EBF0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F3F3F3F3F3F5F5F5F5F5F5F6F6F6F7F8F8F8F9F9F9F9F9F9FAFAFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E6E6E4E6E6E6E6E6E7ECF6E6DCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEC6644E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4B4B4B4B4B4B4B4A4A4A4A4A4A4A494949494949494848484848484747474746464645444444444443434444444444424242424242414141414242404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A39393939393939383838373737373737373737373535353535363535353535353534343434343433333333333232313131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2929292929292929282828282828272727272727262525252525252425252525248FBDBDBDBD4F2323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191919171717171716161615151514141415151439D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61900000000000000000000000000000000000000000000000000000000000000000EA1B9BCBEC0C2C5C6C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8E9EBECEDEFF0F1F2F3F4F4F5F6F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBC80A000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBE3C9B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B6C9DFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F3F3F3F3F3F3F3F5F5F5F5F5F5F5F6F6F6F7F7F8F8F8F9F9F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEECECEBEAEAE9EBEBF1F8E7DEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3793131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292828282828282727272727272625252525252525252525252460BDBDBDB527232323232322222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919191717171717161616151515141414151569F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6350000000000000000000000000000000000000000000000000000000000000000078BB9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8E9EBECEDEEEFF0F2F3F4F4F5F6F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBB400000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFAF7E4D3C4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3D1E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F5F5F5F5F5F5F5F5F5F6F6F6F7F7F8F8F8F8F9F9F9F9F9F9F9FAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDEDFE1E1E1E2E1E1E1E1E3EEDED9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADA743131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282827272727272726252525252525242525252534BDBDBD8123232323232323222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A19191919191919191917171717171616161515151414141CB7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63500000000000000000000000000000000000000000000000000000000000000000075B9BCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDDDEE0E2E4E5E6E8E9EBECEDEEEFF0F2F3F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFB9600000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAF9F3EADBD0C8C1BCB3B3B3B3B3B3BBC1C9D2D8E7F2F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F7F7F8F8F8F8F9F9F9F9F9F9F9FAFAFAFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAECECEAEBEAEAEBECECF1F9E9E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E17A313131313131303030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A2929292929292928282828282827272727272726252525252525252525252524A2BDBD4923232323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1919191919191919191717171717161616151516141456E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE32C00000000000000000000000000000000000000000000000000000000000000000060BABCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDCDEE0E2E4E5E6E7E9EBECEDEEEFF0F2F3F3F4F5F6F7F7F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFB6400000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F7F7F7F8F8F8F8F9F9F9F9F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEAE9E9E9E9E9E9E9E9ECF7E6DEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EA7E3131313131313130303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292828282828282727272727272625252525252524252525246EBDB0232323232323232322222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A19191919191919191917171717171616161515161D91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000000000004ABABCBEC0C2C5C7C9CBCDCFD1D3D5D7D9DBDCDEE0E2E4E5E6E7E9EAECEDEEEFF0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFA6400000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E6E6E3E4E2E2E3E2E2E9F1DFD7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E77D32313131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A292929292929292828282828282727272727272625252525252525252525253FBD7A232323232323232323222222202020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A191919191919191919171717171716161615153BDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE31900000000000000000000000000000000000000000000000000000000000000000033BABCBFC1C2C5C7C9CBCDCFD1D3D5D7D9DBDCDEE0E1E3E5E6E7E9EAECEDEEEFF0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBF03C00000000000000000000000000000000000000000000000000000000000000000019CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E4E6E6E4E6E4E4E4E3E2E6F2E1DADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9803232313131313131303030303030302F3030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292929282828282828272727272727262525252525252525252524B04A232323232323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191917171717171616151586F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3190000000000000000000000000000000000000000000000000000000000000000002CB3BCBFC1C3C5C7C9CBCDCFD1D3D5D7D9DBDCDEE0E1E3E5E6E7E9EAECEDEEEFF0F2F2F3F4F5F6F7F7F8F8F9F9FAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBF03C00000000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAECEBEBECECECEBEBECEFF8E6DEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E77D3332313131313131313030303030302F303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A29292929292929282828282828272727272727262525252525252525252525682423232323232323232322222222202020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1919191919191919171717171716163BD4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD91900000000000000000000000000000000000000000000000000000000000000000016B4BDBFC1C3C5C7C9CBCECFD2D3D5D7D9DBDCDEE0E1E3E5E6E7E9EAECEDEEEFF0F2F2F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBDC1E00000000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBECEBEBEBEAE9E7E7E6EAF6E6E1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E77D333232313131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929292828282828282727272727262525252525252525252525242424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A191919191919191917171717171F91F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC40700000000000000000000000000000000000000000000000000000000000000000016A4BDBFC1C3C5C7C9CBCECFD2D3D6D7D9DBDDDEE0E1E3E5E6E7E9EAEBEDEEEFF0F2F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBDC1E00000000000000000000000000000000000000000000000000000000000000000007A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E3E2E3E4E4E3E3E3E3E7EFDFD9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E27A3333323231313131313130303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A292929292929292828282828282727272727272625252525252524252525242424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A19191919191919171717171744DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC407000000000000000000000000000000000000000000000000000000000000000000079DBDBFC1C4C5C7CACBCED0D2D3D6D7D9DBDDDEE0E2E3E5E6E7E9EAEBEDEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFBFBFBC80A0000000000000000000000000000000000000000000000000000000000000000000097FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E4E3E3E3E3E3E2E3E3E7EFE1DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADA7533333332313131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282827272727272625252525252525252525252424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A1919191919191919171717209CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000000000000000000000078EBDC0C1C4C6C7CACCCED0D2D4D6D7D9DBDDDEE0E2E4E5E6E7E9EAEBEDEEEFF0F1F2F3F4F5F5F7F7F8F8F9F9FAFBFBFBFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFBBE0A0000000000000000000000000000000000000000000000000000000000000000000075FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E6E3E3E3E3E4E3E6E7EBF4E4DBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADA75333333323231313131313130303030303030303030302F2F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A292929292929292828282828282727272727272625252525252525252525242424232323232323232323222222202020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A1919191919191919171762E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9700000000000000000000000000000000000000000000000000000000000000000000078FBDC0C2C4C6C8CACCCED0D2D4D6D8D9DBDDDEE0E2E4E5E6E7E9EAEBEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFCFCFCFCFBFBFBBE0A0000000000000000000000000000000000000000000000000000000000000000000060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E6E7E7E9E9E9EAEBEBF1F9EAE3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDE783333333332313131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2929292929292928282828282827272727272625252525252525252525252424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A191919191919191933B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A00000000000000000000000000000000000000000000000000000000000000000000008FBEC0C2C4C6C8CACCCED0D2D4D6D8D9DBDDDEE0E2E4E5E6E7E9EAEBEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBBE0A0000000000000000000000000000000000000000000000000000000000000000000040F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E3E3E4E6E6E4E6E6E6ECF4E4DEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D3D3D3D1D1D1D0D1D1D1D0D1D1D1D3D1D3D3D5D775333333333232313131313131303030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A2929292929292928282828282827272727272726252525252525252525252424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A1919191919191980F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF655000000000000000000000000000000000000000000000000000000000000000000000071BEC0C2C5C6C9CACDCED0D2D4D6D8D9DBDDDEE0E2E4E5E6E7E9EAECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFB96000000000000000000000000000000000000000000000000000000000000000000000035E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEFEEEFEFEFEFF2F3F3F7FDEEE7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDC7A333333333332323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A29292929292928282828282827272727272726252525252525252525252424242323232323232323232222222020202020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A19191919194FDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF635000000000000000000000000000000000000000000000000000000000000000000000071BFC1C2C5C7C9CBCDCFD0D2D4D6D8D9DBDDDEE0E2E4E5E6E8E9EAECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFB96000000000000000000000000000000000000000000000000000000000000000000000019D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFEFEEEEEFF1EFEFEEEEF3FBEAE2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D67534333333333332313131313131313030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A2929292929292928282828282827272727272625252525252525252525252424232323232323232323222222202020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A19191934AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE319000000000000000000000000000000000000000000000000000000000000000000000071BFC1C3C5C7C9CBCDCFD0D3D4D6D8DADCDDDFE1E2E4E5E6E8E9EBECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFB96000000000000000000000000000000000000000000000000000000000000000000000007C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E7E7E6E7E7E7E7E6E4E9F2E2DADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E97E34333333333332323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2929292929292928282828282827272727272726252525252525252525252424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1A1A1A192188F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC40F000000000000000000000000000000000000000000000000000000000000000000000071BFC1C4C5C7C9CBCDCFD1D3D4D7D8DADCDDDFE1E2E4E5E6E8E9EBECEDEEEFF0F1F2F3F4F5F5F6F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFA9600000000000000000000000000000000000000000000000000000000000000000000000797FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFF1F1EFF2F3F2F4F3F3F7FDECE7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9753434333333333332313131313131313030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A29292929292929282828282828272727272726252525252525252525252424232323232323232323222222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1A1A1A196DDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA207000000000000000000000000000000000000000000000000000000000000000000000071C0C2C4C6C7CACBCECFD1D3D5D7D8DADCDDDFE1E2E4E5E7E8E9EBECEDEEEFF0F2F2F3F4F5F5F6F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFA960000000000000000000000000000000000000000000000000000000000000000000000006AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEEEEEEFEEEEEEECEEEFF3FBEAE3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDC783434343333333332323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B29292929292929282828282828272727272726252525252525252525252424242323232323232323222222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1A1A51CDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7500000000000000000000000000000000000000000000000000000000000000000000000072C0C2C4C6C8CACCCED0D2D3D5D7D9DBDCDEE0E1E2E4E5E7E8EAEBECEDEEEFF0F2F2F3F4F5F5F6F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFA9600000000000000000000000000000000000000000000000000000000000000000000000035F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEBEBEBEBEAE9E9E9ECF4E4DCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E97E343434333333333332313131313131313030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A292929292929282828282828272727272727262525252525252525252524242323232323232323232222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B35AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64C00000000000000000000000000000000000000000000000000000000000000000000000073C1C2C5C6C9CACCCED0D2D4D6D7D9DBDCDEE0E1E2E4E6E7E8EAEBECEDEEEFF0F2F2F3F4F5F5F6F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFA9600000000000000000000000000000000000000000000000000000000000000000000000019E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEEECECECECECEEEFEFF2FBEAE4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E17A343434343333333332323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A292929292929292828282828282727272727262525252525252525252524242323232323232323232222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B2C9EF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE32C00000000000000000000000000000000000000000000000000000000000000000000000073C1C3C5C7C9CBCDCED0D2D4D6D8D9DBDDDEE0E1E3E4E6E7E9EAEBECEDEEEFF0F2F2F3F4F5F5F7F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFB9600000000000000000000000000000000000000000000000000000000000000000000000007B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7ECECECECEBEAE9E9EAEBF1F9E9E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E17A34343434333333333332313131313131313030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B292929292929292828282828282727272727262525252525252425252524242323232323232323232222222020202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B2394F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC40F00000000000000000000000000000000000000000000000000000000000000000000000073C1C4C5C7C9CBCDCFD0D3D4D6D8D9DBDDDEE0E1E3E5E6E7E9EAEBECEDEEEFF0F2F3F3F4F5F5F7F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFB960000000000000000000000000000000000000000000000000000000000000000000000000082FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F3F2F2F3F4F4F4F6F4F9FDEFEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D67534343434343333333332323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A2929292929292828282828282727272727262525252525252525252524242423232323232323232222222220202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B2480F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D0700000000000000000000000000000000000000000000000000000000000000000000000073C2C4C6C8CACBCDCFD1D3D4D7D8DADCDDDEE0E2E3E5E6E7E9EAEBECEEEFEFF0F2F3F3F4F5F5F7F7F8F8F9F9FAFAFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBAA0A0000000000000000000000000000000000000000000000000000000000000000000000004CF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E4E4E6E7E6E6E4E4E4E4EAF3E2DADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDE7A3434343434333333333332313131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A2929292929292928282828282827272727272625252525252525252525242423232323232323232222222220202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B2482F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6550000000000000000000000000000000000000000000000000000000000000000000000000074C2C5C6C8CACCCECFD2D3D5D7D8DADCDDDFE1E2E4E5E6E7E9EAEBECEEEFF0F0F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBBE0A00000000000000000000000000000000000000000000000000000000000000000000000023D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E3E2E1E3E4E6E4E6E7EEF8E7DEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDE793434343434343333333332323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2929292929292928282828282827272727272625252525252525252525242423232323232323232222222220202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1B2482F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE32C0000000000000000000000000000000000000000000000000000000000000000000000000774C3C5C7C9CACDCED0D2D4D6D7D9DBDCDDDFE1E2E4E5E6E7E9EAEBECEEEFF0F1F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBBE0A00000000000000000000000000000000000000000000000000000000000000000000000007ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4F3F4F4F4F6F6F6F8F8FCFFF2EEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADA7A343434343434333333333332313131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A29292929292928282828282827272727272625252525252525252525242423232323232323232222222220202020201F1F1F1F1F1F1F1F1D1D1D1D1D1D1D2582F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9070000000000000000000000000000000000000000000000000000000000000000000000000893C4C5C7C9CBCDCFD0D2D4D6D7D9DBDCDEE0E1E2E4E5E7E8E9EAEBECEEEFF0F1F2F3F3F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBBE0A000000000000000000000000000000000000000000000000000000000000000000000000006AF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAE9E7E6E7E6E4E6E7E7EAF4E4DBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7C385504A4A4A49494949494949484848484848484747474746464645444444444443434444444444424242424242414141414142404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A3A393939393939383837373737373737373737353535353536353535353535343434343434343333333332323131313131313030303030302F303030302F2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A29292929292929282828282827272727272625252525252525252525242423232323232323232222222220202020201F1F1F1F1F1F1F1F1D1D1D1D1D2582F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000000000000000000000000000000894C4C6C8CACBCDCFD1D3D4D6D8D9DBDDDEE0E1E3E4E6E7E8EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBDC1E000000000000000000000000000000000000000000000000000000000000000000000000002CE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBECECEAEBEBEAEAEBEAF1F9E9E1DFDEDEDFDEDEDEDEDEDEDEDFDEDEDEDEDEDFE1E1E2E2E3E3E3E3E3E3E3E2E2E2E1E1E1E1E1E2E1E1DFDFE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1D68E514A49494949494949494848484848484847474746464645444444444444434344444444424242424242424141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A3939393939393838383737373737373737373535353535363635353535353534343434343433333333333231313131313130303030303030303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B29292929292929282828282828272727272726252525252525252525242423232323232323232222222220202020201F1F1F1F1F1F1F1D1D1D1D2E9FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE335000000000000000000000000000000000000000000000000000000000000000000000000001794C5C6C8CACCCECFD2D3D5D7D8DADCDDDEE0E2E3E5E6E7E9EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBDC1E0000000000000000000000000000000000000000000000000000000000000000000000000007ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEEEEEEEEECECECEEEEF3FBEBE3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBD69D5549494949494949484848484848484747474746464645444444444443434344444444424242424242414141414142404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A3A393939393939383837373737373737373737353535353536353535353535343434343434343333333332323131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2B2B2B2B2B2A292929292929282828282828272727272726252525252525252525242423232323232323232222222220202020201F1F1F1F1F1F1F1D1D439FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB90F0000000000000000000000000000000000000000000000000000000000000000000000000017ACC5C7C9CBCDCED0D2D3D6D7D9DBDCDDDFE0E2E4E5E6E7E9EAEBECEDEEEFF0F2F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBF03C00000000000000000000000000000000000000000000000000000000000000000000000000006AF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F3F3F4F4F4F3F4F3F3F9FFEEEAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDED7AA624949494949484848484848484847474746464645444444444444434344444444424242424242424141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A393939393939383838373737373737373737353535353536363535353535353434343434343333333333323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A292929292929282828282828272727272726252525252525252525242424232323232323232222222220202020201F1F1F1F1F1F1F54B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7500000000000000000000000000000000000000000000000000000000000000000000000000001FACC6C7CACBCDCFD0D2D4D6D7D9DBDCDEDFE1E2E4E5E6E7E9EAEBECEEEFEFF0F2F2F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBF03C00000000000000000000000000000000000000000000000000000000000000000000000000002CE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF2F3F2F2F3F4F3F3F4F4F8FDECE7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1B37749494948484848484848484747474746464645444444444443434344444444424242424242414141414142424040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A3A393939393939383837373737373737373737353535353536353535353535343434343434333333333332313131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A292929292929292828282828272727272726252525252525252525242424232323232323232222222220202020201F1F1F1F1F70D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE33500000000000000000000000000000000000000000000000000000000000000000000000000002FBDC6C8CACCCECFD1D3D4D6D8D9DBDDDEE0E1E2E4E5E6E8E9EAEBECEEEFF0F0F2F3F3F4F5F5F6F7F8F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBF06400000000000000000000000000000000000000000000000000000000000000000000000000000797FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E6E6E6E7E7E7E7E7E9EEF8E9DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFC88D5049484848484848484747474746464645444444444444434344444444424242424242424141414142424040404040403E3E3E3F3F3F3F3E3E3E3E3E3E3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A393939393939383838373737373737373737373535353536353535353535353434343434343333333332323131313131313030303030302F303030302F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B292929292929292828282828272727272726252525252525252525242423232323232323232222222020202020201F1F318DF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD0700000000000000000000000000000000000000000000000000000000000000000000000000003FBDC7C9CBCDCED0D2D3D5D7D8DADCDDDEE0E1E3E4E6E7E8E9EAEBECEEEFF0F1F2F3F3F4F5F5F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFA780000000000000000000000000000000000000000000000000000000000000000000000000000004CEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFF1EFEEECECECECEEEFF4FBECE4E3E3E3E3E3E3E3E2E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDEDEDFDEDEDEDEDEDEDEDFDEDEDEDEDEDFE1E1E2E2E3E3E3E3E3E3E3E2E2E2E1E1E1E1E1E2E1E1DFDFE1E1DFE1E1E2E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1DAA669484848484848484747474646464545444444444443434444444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A3A3939393939393838373737373737373737373535353535363535353535353434343434343333333333323131313131313030303030302F303030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A29292929292928282828282727272727262525252525252525252424242323232323232322222220202020201F55B1F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6550000000000000000000000000000000000000000000000000000000000000000000000000000004EC6C8CACBCDCFD0D2D4D6D7D9DBDCDDDFE0E2E3E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFB960A000000000000000000000000000000000000000000000000000000000000000000000000000019B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E9E7E9E7E9E9E7E9E9EAEEF8E6DFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D3D3D3D1D1D1D0D1D1D1D0D1D1D1D3D1D3D3D5D7D7D7D7D7D7D9D7D7D7D7D5D6D6D7D7D5D5BA814E484848484747474746464645444444444444434344444444424242424242424141414142424040404040403E3E3E3F3F3F3F3E3E3E3E3E3E3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A393939393939383838373737373737373737353535353536353535353535353434343434333333333332323131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A2929292929292828282828282727272726252525252525252525242423232323232323232222222020203285DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE1900000000000000000000000000000000000000000000000000000000000000000000000000000076C7C9CACCCECFD1D3D4D6D8D9DBDCDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBBE0A00000000000000000000000000000000000000000000000000000000000000000000000000000075F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E9EAEBEAECECEBEEECECF3FCEBE4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1D5A6694848474747474646464544444444444443434444444444424242424242414141414142404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A393939393939383838373737373737373737373535353536363535353535353434343434343333333332323131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A2929292929292828282828282727272726252525252525252525242423232323232323232222222055B3F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75000000000000000000000000000000000000000000000000000000000000000000000000000000088FC7C9CBCDCED0D2D3D5D7D8DADCDDDEE0E1E2E4E5E6E8E9EAEBECEEEFEFF0F2F2F3F4F4F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBD21E00000000000000000000000000000000000000000000000000000000000000000000000000000023CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAEAEBEAEAEBEAEAEBE9EEF8E9E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCC38C534747474646464544444444444443434444444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A3939393939393838373737373737373737373535353535363535353535353434343434343333333333323131313131313030303030302F303030302F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A292929292929282828282828272727272625252525252525252524242323232323232323223C8DE7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD92C0000000000000000000000000000000000000000000000000000000000000000000000000000001897C8CACBCDCFD0D2D4D6D7D9DBDCDDDFE0E2E3E4E6E7E8E9EAEBECEEEFF0F0F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBDC3C0000000000000000000000000000000000000000000000000000000000000000000000000000000075F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFDFE1DFDFE1E1E1DFE3ECDED7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEAE7A474646464545444444444444434344444444424242424242424141414142424040404040403E3E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A39393939393938383837373737373737373735353535353636353535353535343434343434333333333232313131313131303030303030303030302F2F2E2E2E2E2E2E2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2A292929292929282828282828272727272625252525252525252524242323232323232A6BC7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF820700000000000000000000000000000000000000000000000000000000000000000000000000000020AFC9CACCCECFD1D3D4D6D8D9DBDCDEDFE1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBF05A0000000000000000000000000000000000000000000000000000000000000000000000000000000023CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEEEEFEEEFEFF1F1F1F6FDEEE9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6CBA07046464544444444444443434444444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A3A3939393A3A3A3939393939393838373737373737373737373535353535363535353535353434343434343333333332323131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2B2B2B2B2B2B292929292929282828282828272727272625252525252525252524242323232361BBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD92C0000000000000000000000000000000000000000000000000000000000000000000000000000000040C0CACBCDCFD0D2D3D5D7D8DADCDDDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFA82000000000000000000000000000000000000000000000000000000000000000000000000000000000075F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEEEEEEEEEEEEEEEECECF1F8E7DFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBD9A26944444444444443434444444444424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A3939393939393838383737373737373737373535353535363535353535353434343434343333333333323131313131313030303030302F3030302F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B292929292929282828282828272727272625252525252425252524242361ABF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8207000000000000000000000000000000000000000000000000000000000000000000000000000000005FC9CACCCECFD1D3D4D6D7D9DBDCDDDFE0E2E3E4E6E7E8E9EAEBECEEEFEFF0F1F2F3F4F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFAAA0A0000000000000000000000000000000000000000000000000000000000000000000000000000000023CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEBECEBECECEBEAEBF1F9E9E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCCC97664444444343444444444442424242424242414141414242404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A3939393939393838383737373737373737373735353535363635353535353534343434343433333333323131313131313030303030302F303030302F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B292929292929282828282828272727272625252525252525252461ABF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE2C00000000000000000000000000000000000000000000000000000000000000000000000000000000087FC9CBCDCED0D2D3D5D7D8D9DBDCDEDFE1E2E4E5E6E7E9EAEBECECEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBD21E000000000000000000000000000000000000000000000000000000000000000000000000000000000060F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEECECEBECECEBEBECECF1F8E7DFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1D0A0724343444444444442424242424242414141414142404040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3C3B3B3A3A3A3A3939393A3A3A39393939393938383737373737373737373735353535353635353535353534343434343433333333323231313131313130303030302F303030302F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B292929292929282828282827272727272625252525252562ACF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67500000000000000000000000000000000000000000000000000000000000000000000000000000000001899CACCCECFD1D2D4D6D7D9DADCDDDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBE63C000000000000000000000000000000000000000000000000000000000000000000000000000000000019ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E3E4E6E4E6E6E6E6E7E9ECF6E4DCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9CDA6765044444442424242424242414141414142424040404040403E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A393939393939383837373737373737373737353535353536353535353535343434343434333333333232313131313131303030303030303030302F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B292929292929282828282827272727272525253675BDF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB919000000000000000000000000000000000000000000000000000000000000000000000000000000000030B1CBCDCED0D2D3D5D6D8D9DBDCDDDFE0E2E3E4E6E7E8E9EAEBECEEEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFA770000000000000000000000000000000000000000000000000000000000000000000000000000000000004CEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE1E2E2E2E3E6E6E6E7E7EEF7E6DEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADAB28E5F42424242424242414141414142424040404040403E3E3E3F3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A393939393939383838373737373737373737353535353536353535353535343434343434333333333332313131313131303030303030303030302F2F2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B29292929292928282828282727272726518FD0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED5500000000000000000000000000000000000000000000000000000000000000000000000000000000000058C2CCCECFD0D2D4D6D7D8DADCDDDEE0E1E2E4E5E6E7E9EAEBECECEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFBFBFBFAAA0A0000000000000000000000000000000000000000000000000000000000000000000000000000000000078DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFEEEEECEEEEECECEEEFF4FCEBE6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBD9B47D5042424241414141414242404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3B3B3B3A3A3A393939393A3A3A39393939393938383737373737373737373735353535363635353535353434343434343333333333323131313131313030303030302F3030302F2F2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2A2929292929292828282828273775B4F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970F00000000000000000000000000000000000000000000000000000000000000000000000000000000000881CBCDCED0D2D3D4D6D8D9DBDCDDDFE0E1E3E4E5E6E7E9EAEBECEDEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBD22800000000000000000000000000000000000000000000000000000000000000000000000000000000000023C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEBECECECECECECECF3FBEAE3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBBF966F47414141414242404040404040403E3E3E3F3F3F3E3E3E3E3E3E3D3D3C3C3C3C3C3B3B3A3A3A3A3939393A3A3A39393939393938383737373737373737373735353535363635353535353534343434343433333333323131313131313030303030302F3030302F2F2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2A29292929292928283A63A3E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE2C00000000000000000000000000000000000000000000000000000000000000000000000000000000000018A2CCCECFD0D2D4D6D7D8DADBDDDEE0E1E2E4E5E6E7E8E9EAEBECEEEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBF0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000055EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4F7F7F6F7F6F3F4F4F4F9FFEFE9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7C39A71504242404040404040403E3E3E3F3F3F3D3E3E3E3E3E3D3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A39393939393938383737373737373737373735353535353635353535353534343434343433333333323131313131313030303030302F3030302F2F2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2B2B2B2B2B2A292929293A6EA3E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED600000000000000000000000000000000000000000000000000000000000000000000000000000000000000038BBCDCED0D2D3D4D6D8D9DBDCDDDEE0E1E2E4E5E6E7E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F8F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFA8C0A000000000000000000000000000000000000000000000000000000000000000000000000000000000000078DF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD7D7D7D9DADADADADBDCE1EADBD6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9C19F785B40404040403E3E3E3F3F3F3E3E3E3E3E3E3E3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A39393939393938383837373737373737373735353535353635353535353534343434343433333333323131313131313030303030302F3030302F2F2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2B2B2B2B2B294B81B5E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF970F000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ACDCECFD1D2D4D6D7D8DADBDDDEDFE1E2E3E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F3F4F4F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAC81E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000023ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEEEEEFF1F2F2F2F3F4F9FFEFEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDED5B68F6D4D3E3E3E3F3F3F3D3E3E3E3E3E3E3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A39393939393938383837373737373737373735353535353635353535353534343434343433333333323131313131313030303030302F3030302F2F2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2B446F9BC9F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC42300000000000000000000000000000000000000000000000000000000000000000000000000000000000000199BCDCFD0D2D3D5D6D8D9DBDCDDDEE0E1E2E4E5E6E7E9EAEBECECEEEFEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBF050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E6E7E7E6E6E6E6E6E4E4E7F2E2DBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DACFB29272543F3E3E3E3E3E3E3D3D3C3C3C3C3C3B3B3B3A3A3A393939393A3A3939393939393838383737373737373737373535353535363535353535353434343434343333333332313131313131303030303030303030302F2E2E2E2E2E2E2D2D2D2D2D2C2C4E79A6C9F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD94C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039BDCED0D1D3D4D6D7D8DADBDDDEDFE1E2E3E5E6E7E8E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F6F7F7F8F8F8F9F9FAFAFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFA8C0A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7ECEEEEEFEFEFEFEEEFEFF4FCECE9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFD9C2A2876C523E3D3D3C3C3C3C3C3B3B3A3A3A3A393939393A3A3939393939393838383737373737373737373535353535363535353535353434343434343333333332313131313131303030303030303030302F2E2E2E2E2E2E2D507193B8D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66A0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ACECFD0D2D4D5D7D8D9DBDCDDDEE0E1E2E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAC71E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078DF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEEEEEEEEEEFEFEEEEEFF6FCEBE3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADABCAB977E63513C3B3B3A3A3A3A393939393A3A393939393939383838373737373737373737353535353536353535353535343434343434333333333231313131313130303030302F3030302F2F516982A6C0D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68D0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000199CCFD0D2D3D4D6D7D9DADCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFAF05A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F97FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E3E3E3E4E6E4E6E3E3E7EFDED6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBC3BC9C907D6A5B4839393A3A3939393939393838373737373737373737373535353535363535353535353434343434333333333332313131313131303041586B84A8AFD9E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA21900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042C6CFD1D3D4D6D7D8D9DBDCDDDFE0E1E3E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F3F3F4F4F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAA90A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAE9E7E6E6E6E7E7E7E9ECF7E6DEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFD3C0BAA0A18B7D7D715B5B533737373737373737373535353536363535353535343434343434335D5D5D7587859FB0B0DADAF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000884CFD0D2D3D5D6D8D9DBDCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F1F2F3F3F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFADC450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E3E4E2E3E3E2E1E3E3E9F3E2DADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADABCBCBCBBBABBBBBCBC877373737373737582828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029B6D0D2D3D4D6D7D8DADBDDDEDFE0E2E3E4E5E6E7E9EAEAEBECEDEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFA820A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEEFECEFEFEFF1F1F1F1F6FCECE6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2A58383838383828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC435000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063D0D1D3D4D6D7D8D9DBDCDDDEE0E1E2E4E5E6E7E8E9EAEBECEDEEEFEFF0F1F2F3F3F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAC728000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFBFBFCFBF9FBF9FDFFF3F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD935000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021A6D1D2D4D5D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E9EAEBEBECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFAF07700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAEAEBEAEBE9E9EBEBEAF1F9E9E1E2E1DFDEDEDEDBDBDBDEDEDEDEDEDCDBDBDADADADCDCDBDCDCDCDCDCDCDEDEDEDCDCDCDEDEDFDFDEDEDEDCDBDADADADADADAD9D9DADADADADAD9DAD9D9D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD95500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063C8D2D3D5D6D7D9DADBDDDEDFE0E1E2E4E5E6E7E8E9EAEBECEDEEEFF0F0F1F2F3F3F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAC72800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EEF1F1F1F2F2F1F2F1F2F7FCEBE4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAA28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC44C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019A6D2D3D4D6D7D8D9DBDCDDDEE0E1E2E4E5E6E7E7E9EAEBECECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAF0770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAE9E9E7E9E9E6E9E7E7ECF7E6DFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDE9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053CAD3D4D6D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E9E9EAEBECEDEEEFF0F0F1F2F3F3F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFBFBFBFBFAC7280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E7E9E7E7E6E7E6E4E6E7ECF7E6DCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEA48282828383838383838283D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA235000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001997D3D4D6D7D8D9DBDCDDDEDFE0E1E2E4E5E6E7E8E9EAEBECECEEEFEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F9F9F9FAFBFBFBFBFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAF0770A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002397F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EFEFEFEEEFEEEEEEECEFF3FBEAE2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDB9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A223000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064CBD4D5D6D8D9DADBDDDEDFE0E1E2E4E5E6E7E7E9EAEBEBECEDEEEFF0F0F2F2F3F3F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAD13200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F75EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4F3F4F4F4F6F6F6F8F8FCFFF2EEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADC9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED820F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002AA8D4D5D6D7D9DADBDCDDDEE0E1E2E3E4E5E6E7E9E9EAEBECEDEEEFEFF0F1F2F3F3F4F4F5F5F6F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAF9950A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000755D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E4E3E3E3E2DFE1E1E1E6F1E1D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDC9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD960070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086ED4D5D6D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E8E9EAEBECECEEEEEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFAFADB500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFE1E1E1E3E2E1E3E3E1E6F1E1DBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB94C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003AB9D5D6D7D8D9DBDCDDDEE0E1E2E3E4E5E6E7E8E9EAEBECECEDEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAA91E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198DEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E7E7E9E9E9E9E9E7E7EBF6E6DCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3E2E2E3E2E1E1E1DFDEDEDEDEDEDEDEDFE1DFDFDEE1E1E1E1E2E2E2E2E1E1E1E1E2E2E2E1E1E1E1E1E1E1E1E1E1DFE1E1E1E1E2E3E3E4E3E3E3E3E3E3E4E3E3E3E3E3E3E3E3E4E4E4E4E3E4E4E6E6E7E7E6E7E7E7E7E7E6E7E6E6E6E6E6E7E6E7E7E7E7E9E7E9E7E6E7E7E7E7E6E6E6E6E6E6E6E6E4E4E6E6E4E4E3E4E6E4E3E4E4E6E6E6E4E3E3E3E4E4E6E6E7E7E7E7E7E6E7E7E6E4E4E4E3E3E3E3E3E3E2E2E2E2E2E2E2E2E1DFDFDFDEDCDCDCDEDEDEDEDCDBDBDCDCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDF9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED8D23000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001A8FD5D6D7D8D9DBDCDDDEDFE0E1E2E4E5E6E7E7E9EAEAEBECEDEEEFEFF0F1F2F2F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAEF770A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000755CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E7E9E6E6E6E6E6E7E9EEF9E9E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DF9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9600700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005DCDD6D7D8D9DBDCDDDEDFE0E1E2E4E5E5E6E7E9E9EAEBECEDEEEFEFF0F1F2F2F3F3F4F5F5F6F7F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAD1450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C97F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E9E7E6E6E6E7E6E7E7E7EAF4E4DCDCDCDCDCDEDEDCDEDEDCDEDEDEDEDCDADADADADADADBDBDADBDBDBDCDEDCDEDCDBDCDEDEDEDEDEDCDEDCDBDCDEDEDEDEDCDCDBDBDAD9D9D9D9D9D7D7D7D6D5D6D6D7D9D9D9D9D9D9D9D9DADADAD9D9D9D9D9D9D9D9D9DADADBDBDBDBDBDAD9D9DADADAD9D7D7D7D7D7D6D7D9D7D9D9D9D9DADADADAD9D9DADAD9D9D9DADADADBDAD9D9D9D9D9D9D9D7D7D9D9D9D9DADAD9D9D9D9D9D9DADBDCDCDCDCDEDCDADCDCDADADCDAD9D9D9DAD9D9DADAD9DAD9D9D9DADBDBDADBDBDBDBDBDADADADADBDADADBDBDBDBDBDBDBDEDBDCDEDEDEDEDCDCDCDCDADADADADADBDEDEDEDEDEDFDEDCDCDCDBDCDEDEDEDEDFDEDEDEDCDCDEDFDFDEDEDFE1E1E1E1E1DFDEDEDFE1E1DFE1E1E1E1E1E2E2E3E3E3E3E2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A23500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033B3D6D7D8D9DBDCDDDEDFE0E1E2E4E4E5E6E7E8E9EAEBECECEEEEEFF0F0F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9A91E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000760CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E3E3E3E3E2E3E4E4E4E3E7F2E1D9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E39F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE600F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001188D6D7D8D9DBDCDDDEDFE0E1E2E4E4E5E6E7E8E9EAEBECECEDEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAEF820A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000238DEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDEDEDFDEDEDEDEDFE1E1E4F1E1D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D99C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6972C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000866CED7D8D9DBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBEBECEDEEEFEFF0F1F2F2F3F4F4F5F5F6F7F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAF9E55A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074CADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAE9EAEAEBEBEAECECEEF3FBEAE2E1E1E1E1E1DFE1E1E2E2E1E2E2E2E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDFDFDFDEDFDFDFE1DFDEDFDFDFDEDFDEDFDFDEDEDEDFDFDFDEDFE1E2E2E1E2E3E2E3E2E1DFE1DFDFE1DEDEDBDBDEDEDCDCDBDCDBDBDCDCDEDEDCDCDEDEDEDEDEDEDCDCDCDEDEDEDEDEDEDEDEDFE1DFDEDEDEDFDFE1E1E2E2E2E2E3E1E1E3E3E3E3E3E3E3E1E1E1E2E2E2E2E1E1E2E3E3E6E3E6E6E6E6E6E6E6E6E6E4E4E6E6E6E6E6E6E6E6E7E7E9E9EAEBEBECEEEFF1F1F1F1EFF1F1F1F1F2F1EFF1EFEFEFEEEEEEEEEEECEEF1F1EFEEEEEEF1F1F1EFF1F1EFEFF1EEEEEEEEEEEEECEEECECECECECEBEBEBEAEAEBEBEBEEEEEEEEEEEEEEEEECEBEAE9E9E9E9E9E9E9E9E7E6E6E7E7E7E7E7E6E6E4E4E4E4E4E4E4E3E3E3E3E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E2E2E3E3E3E2E2E3E3E3E2E2E3E3E2E2E2E3E4E4E6E3E3E3E3E2E2E2E1E1E1E1E1E2E2E2E3E3E3E3E3E3E3E3E3E2E2E3E4E6E7E7E7E6E6E6E7E7E9E9EAEAEAE9E9E9E7E9E9E9E7E7E7E7E7E7E9E7E7E7E7E7E9E9E9EAEAEAE9EAE9E9E7E7E9E9E9E9E9EAE9E9E9E7E7E9E9E9E9E9E9E9E9E9EBEBEBECECEBEEEEEFEEEFEFF1EFF1F2F1F2F2F1EFEEEEEEEEEFEEEEEEEEEEEEEFEFEFEFEFEFEEEFF1EFEFEFEFEFEFEFEFEFF1F1F1F2F2F2F2F3F4F3F3F2F2F2F3F3F2F2F2F2F2F2F2F1F1F2F1F2F2F2F2F1F1EFEEECECECECECEEEEEEEEEEECECECECEBEBEBE9E9E7E7E6E4E4E4E3E3E3E3E2E2E2E2E1E1E3E3E3E2E2E1DFDFDFDEDEDCDCDBDAD9D9D9D9D9D9D9DADADADAD9D7D6D5D5D5D3D3D1D3D3D1D1D3D3D3D3D3D3D3D1D1D1D0D1D1D1D0D1D1D1D3D1D3D3D5D7D7D7D7D7D7D9D7D7D7D7D5D6D6D7D7D5D5D5D5D5D6D6D6D6D7D7D7D7D7D7D7D7D7D9D9DADAD9D9D9D9DADADADBDCDCDEDEDEDCDEDFE1DFE1E1E1DFDEDEDEDEDEDFE19F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9550700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004DBCD7D8D9DBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBEBECEDEEEFEFF0F1F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9C73C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F60CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EEEFF1F1EFEFEEEEECECF3FBEBE4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE750F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002BA4D8D9D9DBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEAEBECEDEEEFEFF0F0F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF99F1E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001982E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EFF1EFEFF1F1EEEFF1EFF4FBEAE2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3822C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001189D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEAEBECEDEEEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F7F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9EF8C1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C82E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F1EFEFEEEEECECEEEFEFF4FBEBE4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED974000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000870D0D9DADBDCDDDEDFE0E1E2E4E4E5E6E7E8E9EAEAEBECEDEEEEEFF0F0F1F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFAFAF9E56D0A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C82E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEBEBECECEEEEEEEFF4FCECE4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7A28282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED9740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085EC7D9DBDBDCDDDEE0E0E1E2E4E4E5E6E7E8E9EAEAEBECECEEEEEFF0F0F1F2F2F3F4F4F5F5F6F6F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9E55A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003582E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EAE9E9E7E9E9E7EAEBEBEFF8E7E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDC9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3974000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004EB5D9DBDCDDDDDEE0E1E1E2E4E4E5E6E7E8E9EAEAEBECECEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9D15A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C75CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E6E4E6E6E6E6E4E6E7E6EBF4E4DCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDF9F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE822C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034B6DADBDCDDDEDFE0E1E2E2E4E5E5E6E7E8E9EAEAEBECECEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAF9F9D13C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001960B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EFF1F1EFEEEEEEEEEEEEF3FBE9E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBEAEBEBECECECECEEEEEEECECECEEEEEFEFEEEEECECEBEEEEEEEEEEF1F1EFEFEFEFF1F1EFEFEEEEEEEEEFF1EFEEEEEFEFF1F1F1F1F1F2F1F1F1F2F2F2F1F1F2F1F1F1F1F1F1EFEFEFEFEFF1F1F2F2F1EFEEECEBEBEBEBEBECEBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADA9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB975190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034A5DADBDCDDDEDFE0E1E2E3E4E5E6E6E7E8E9EAEAEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F9F9F9F9FAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9BD3B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074C97E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFE1E1DFE1DEDEDFE1E2E6F1E2DBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADC9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3974C07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034A5DBDCDDDDDEE0E0E1E2E3E4E5E6E6E7E8E9EAEBEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFAFAF9F9BD3B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002375B9F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E7E7E9E9E9EAEAEBEBEBF2FBEAE3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDE9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB975230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034A6DBDCDDDEDFE0E1E2E2E4E4E5E6E7E7E9E9EAEBEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9F9BD3B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074082C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1E3E1DFE1E1E1E1E1E1E6EFDED6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDE9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD98D4007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034A7DCDCDDDEDFE0E1E2E3E4E5E5E6E7E8E9E9EAEBEBECEDEEEEEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFBFBFBFBFAFAF9F9C759000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F4C8DD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E6E6E6E6E6E6E7E7E7E7EBF7E7DFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDBDCDBDBDBDADADBDBDCDCDCDCDEDEDEDCDCDCDCDCDCDEDEDEDEDFDFDFE1E1DFE1E1E1E1E1DFE1E1E1E2E3E2E3E4E3E3E4E4E4E4E3E4E4E3E3E3E4E4E4E6E7E7E7E7E6E4E4E4E6E6E6E4E3E2E1DFDFDFDFDEE1DFDFE1E1E1E1DFE1E1DFDFDFE1E1E1E1DEDEDEDCDEDEDCDEDEDEDEDEDCDCDCDCDEDEDEDFDFDFDFDFDEDEDCDEDEDCDCDCDCDBDBDCDEDEDFDFDFDEDCDBDCDCDCDBDCDBDADADADADADADADBDBDADBDCDCDCDCDCDCDCDEDEE1DFDFDFDFDFE1E2E3E4E3E3E3E4E4E4E4E4E6E4E4E6E4E3E3E3E3E3E2E1DFDFDFE1E1E1E2E2E2E3E3E3E3E6E4E4E4E3E3E4E3E4E4E4E3E4E4E6E4E3E4E3E3E3E3E3E3E2E1E1E1E1E1E3E3E3E4E3E4E4E6E6E6E6E6E6E6E6E6E6E6E6E7E6E6E4E4E4E6E4E6E4E6E3E3E3E4E3E3A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE38D4C0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034A7DCDDDEDEE0E1E1E2E3E4E5E6E6E7E8E9EAEAEBECECEDEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9D1590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F4C8DCEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E6E6E6E6E7E7E6E9E7E7EBF4E4DEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDEDEDEDEDEDEDCDCDBDBDBDBDBDBDBDADADADAD9D9D9D9DADCDEDEDEDEDBDBDCDCDCDBDBDCDBDBDADADADADAD9D9D9D9D9D7D9D9D9DADADADADADBDBDBDBDCDCDCDBDBDADAD9DADADADADBDBDBDBDBDCDEDEDEDEDEDFDFDFDFDFDFE1DEDEDEDEDEDEDEDEDFDFDEDEDCDCDCDCDEDFDFDFDFDFE1E1E1E1DFDFDFDFDEDEDEDEDEDFDEDFE1E1E1DFE1E2E2E1E1E2E2E3E4E6E4E3E4E4E3E3E2E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1A18282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD98D4C190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004FB9DDDDDEDFE0E1E2E2E4E4E5E6E7E7E9E9EAEAEBECECEDEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9D16D0A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074082B9F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF6F6F4F3F4F4F3F4F4F4F9FFEEE9E9E9EAE9EAE9E7E7E7E7E7E9E9EAE9E9E7E7E6E6E4E4E4E3E6E3E4E4E3E4E4E3E3E2E2E1E1E1E2E2E3E1E1E1E1DFDFDFE1DFDFDFDEDEE1E1DFDFDEDFDFDEDCDCDBDBDADADAD9D9D9DADADADADBDCDBDBDBDBDCDEDCDCDBDBDBDBDBDBDADADADADAD9D9D9D9D9D9D9D9D7D7D7D6D6D6D6D5D3D1D3D3D5D5D5D5D6D6D5D5D3D5D5D5D6D6D6D7D7D7D7D7D6D6D5D3D3D5D6D5D3D3D3D3D3D3D1D0D1D1D1D1D1D1D1D1D1D1D1D3D5D3D5D6D6D6D6D6D6D6D7D7D7D7D9D9D7D7D7D7D7D7D9D7D7D7D7D7D6D6D6D6D7D9D7D7D7D6D6D5D5D6D7D9D9D9D9D9DADBDBDBDBDADADADADADADADBDBDBDAD9D9D7D7D6D6D6D6D7D7D9DADADADAD9D9DAD9D9D9D9D9DADADBDBDADADADADBDBDADBDCDBDBDCDEDEDEDEDFDFDEDEDEDEDCDEDCDCDEDCDCDCDEDEDCDCDCDBDBDBDEDEDCDCDCDCDCDEDEDFDEDFDFDEDEDEDEDEDEDCDCDCDEDEDEDFDFDFDFDFDFDFDEDEDCDEDFDFE1E1E1E1E1E1DEDEDEDEDCDBDCDCDCDBDCDCDBDCDADBDBDAD9D9DADADADAD9D9D9D9D9D9D9D9D9D9D7D7D7D7D7D7D7D9D7D9DAD9D9DADAD9D9D9DADBDCDCDCDCDCDCDBDBDADBDADADADAD9D9DAD9D9D9D9D9DAD9D9D7D7D7D6D7D7D7D7D7D7D9D9DADADAD9D9DADADCDADCDEDFDFDFDEDFDFDFE1E1E1E1E1E1E1E1E1E1E2E1E1DFE1DFDFDFDFE1E1E1E1E1E1DFDEDCDBDCDCDBDBDBDCDCDBDCDCDCDCDEDEDEDCDCDADAD9D9D9DADADADBDCDCDBDCDEDEDFDFDFDFDEDFDFDFDFDEDFDFE1E3E3E3E3E3E3E2E1E2E1E1DFDFDFDFDFDFE1DFDEDCDCDCDEDEDEDEDCDCDCDCDCDEDFDFE1E2E2E3E2E3E3E3E6E6E6E6E6E6E6E6E6E7E9E9E9E7E6E7E6E6E6E7E6E6E6E6E6E6E4E4E6E4E4E4E6E6E6E6E6E4E4E3E3E3E3E2E3E3E3E2E3E3E3E3E3E3E4E4E3E3E3E2E2E2E2E1E1E3E2E3E2E2E2E1DFDEDCDBDBDEDEE1DFDFDEDEDFE1E1E1E1DEDE9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C482400700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004FB9DDDEDFE0E1E1E2E3E4E5E5E6E7E8E9E9EAEBEBECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9E57713000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C6097D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBEBEBEBECECECECECECF2FBEBE3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D79C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9A26A2C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001161CCDEDEE0E0E1E2E2E4E4E5E6E6E7E8E9EAEAEBECECEDEEEEEFF0F0F1F2F2F3F3F3F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9EF952800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007356AADE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F2F3F4F2F2F2F1EFEFEFF3FBEBE6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D7D7D7D6D6D7D6D7D7D7D7D7D7D9DADADADADAD9DAD9DADADADADADADADAD9DADBDADADADADADAD9D9D9D9DADBDBDCDCDEDEDEDBDBDEDEDFDFDFDEDFDFDEDCDBDBDCDCDEDCDBDCDEDEDEDEDEDEDCDCDBDBDBDBDBDEDEDEDFDFDFDEDEDBDCDCDCDCDADCDADBDAD9DADBDADADADADBDADBDCDCDCDCDBDADADADBDADBDCDCDBDBDADADBDBDCDCDADBDBDBDADADADADBDBDAD9D9D9D7D6D6D6D7D7D7D6D6D5D5D3D3D1D1D1D3D3D5D3D3D3D3D6D6D3D3D3D1D3D1D3D5D7D5D3D5D3D3D3D3D1D0D0D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E19F8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3AD754007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000237CD4DEDFE0E1E2E2E3E4E5E5E6E7E7E9E9EAEBEBECECEDEEEFEFF0F0F1F2F2F3F3F4F4F4F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9B33B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007356A97CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDCDBDBDBDADAD9DBDADBDFE9DAD5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADADADADCDCDCDB9E8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEA26A350F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000358DDEDFE0E1E1E2E3E4E5E5E6E7E7E8E9EAEAEBEBECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9C6590A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C5582ADD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBECEFEFEEEEEEEEECECF1F9E9DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D9D7D79C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9B98D552C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000950A9DFE0E0E1E2E2E4E4E5E6E6E7E8E9E9EAEBEBECECEDEEEEEFF0F0F1F2F2F2F3F3F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9E58B1E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C5582ADCEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDCDEDFDEDCDEDCDBDBDBDEE7D7D3D0D3D1D1D3D5D6D6D6D7D7D9D7D7D9D7D9D9D9D9D7D6D6D7D7D9D9DADBDADBDADADCDCDBDEDCDCDBDADADCDBDBDBDCDEDEDFDEDEDFDFDFDEDFE1E1E1E1E2E1E2E2E3E3E3E6E6E6E7E6E7E7E9E9E7E7E7E7E7E7E9EAE9E9E9E9E9E9EAEAE9EAEAE9EAEBEAEAEBEBEBEBEAE9E9E7E9E9EAE9EAEAEAEBEBEBEBEAEAEBEBEAEAEAEAE9E7E7E9E9E9E9E9EAE9EAEAEBEAE9E9EAE9EAE9E7E7E7E9E9E7E7E7E7E7E7E6E6E3E3E3E3E1E1E1E2E1E1E1DEE1DEDEDEDCDEDCDBDCDCDCDCDCDEDEDFDEDEDFDFDFE1E1E1E1DFDFDFDFDFDEDEDFE1E1E1E2E2E1E1E2E2E1DFDEDEDEDEDFDFDFDFDFDEDCDCDEDFDFDFDFDFDFDEDCDEDEDEDEDEDFDEDCDEDEDFDFDEDCDBDBDCDEDFDEDEDCDCDBDCDCDEDEDEDCDCDCDCDCDCDCDCDEDEDEDEDCDEDFDFE1DFDFDEDFDFDEDEDEDEDEDEDEDFDEDFE1DFE1E1E1E1E1E1E1E1DFDFDEDFDEDCDCDCDEDFDEDEDEDFE1E1E1DEE1E1E2E2E2E2E1E1E1E1E3E3E3E1E1E1E3E1E3E3E3E3E2E3E4E6E7E7E6E4E4E6E6E6E6E7E7E7E6E6E6E6E6E4E6E4E6E7E6E6E6E6E7E6E6E4E4E3E3E4E3E2E2E3E3E3E3E2E2E2E2E3E3E3E3E3E1E2E2E1E1E1E1E1E1E2E1E2E3E3E3E1E1E2E1DFDEDEDEDCDEDEDEDEDEDEDBDEDCDBDBDBDBDBDEDEDEDEDFDEDEDCDCDCDBDBDBDBDADBDBDBDBDCDEDCDEDBDBDEDEDEDEDFE1E1E2E1E1DFE1E1E1DFE1E1E2E2E3E4E3E4E4E3E3E3E3E3E4E3E3E2E1E1E1E3E2E3E2E2E3E3E4E4E4E4E4E4E3E3E3E4E4E4E3E4E6E6E4E3E3E3E3E3E2E2E2E3E2E3E3E1E1E1E1E1E1E1E1E1E1E1E1DFDFDFDFDEDEDEDEDEDEDCDCDBDCDCDCDCDCDBDADADADAD9D9DADADADAD9D9D9DADAD9D7D7D7D7D7D9D9D7D7D7D6D6D6D6D7D7D6D6D5D5D5D5D5D5D5D3D3D1D1D1D1D3D1D0D0D0CFCFCFCECFD0D0D1D1D1D1D3D3D3D5D6D6D6D7D9D7D7D7D6D5D6D6D6D5D6D7D9DADA9C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEAD82552C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B74CEE0E0E1E2E2E4E4E5E5E6E7E7E8E9EAEAEBEBECEDEEEEEFEFF0F0F1F2F2F3F3F3F4F4F5F5F6F6F7F7F7F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F8B34500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001935608DADCEF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EAECECECEFEFEEEEEFEFF2FBE9E1E1DFDEDEDEDEDCDCDCDBDBDADADADBDBDBDADCDADADADADADAD9DADAD9D7D9DADADADADADAD9D9D9D9DADBDADADADADBDBDAD9DADBDCDCDCDCDBDADADAD9D7D7D7D7D9D9D9D9D9D9D9D9D9D9D9D9D9D7D7D7D9D7D7D7D7D7D7D7D7D6D6D6D7D9D9D9DADBDCDCDCDEDFDEDEDEDCDBDBDCDCDCDBDBDADADADADADBDBDCDBDBDCDEDEDEDFDEDFDFE1DFE1E1E2E2E2E2E2E2E3E3E3E3E2E2E3E4E4E3E3E3E3E2E3E3E3E3E4E4E3E4E6E6E6E6E7E9E9E7E7E7E7E7E9E9EAEAEAE9E9E9E9E9E9E9EAE9E9E9EAE9E9E7E7E7E6E6E7E7E9E7E7E9E9EBEAEBEAEAE9EAEAEAEBEBEBECECECECEEEEEEEEEEECECEEECEBEAEBEAE9E9E9E9E7E7E7E7E6E4E4E6E6E6E6E6E6E6E4E4E6E4E4E3E3E2E3E3E2E2E2E1E1E1E1E1DFDFDEDFDFDFDFDFDEDEDEDEDFDEDEDEDEDEDFDFDFDEDFDFE1E2E2E2E1E1E1E1E1E2E2E2E2E2E2E3E3E3E3E3E4E6E6E6E4E3E3E2E1E1DFDEDEDFDFDEDFDFDFDFDFE1DFDFDFE1DFDFE1E1E3E3E1E2E1E1E1E2E2E2E2E1E1E1E1E1E2E1E2E2E2E2E3E2E2E2E2E2E1E2E1E1E1E1DFE1E1E2E2E2E2E1E2E2E1E1E2E2E3E3E3E3E2E1E1E3E3E2E1DFDEDCDCDCDEDEDEDEDEDEDEDEDEDCDCDCDEDEDFDFDFE1E1E1E1E1E3E3E3E3E3E4E6E6E6E6E4E4E3E3E3E3E3E4E4E6E6E6E6E3E4E4E4E6E7E9E9E7E7E7E7E6E6E6E7E6E6E6E7E9E9EAEBE9E9E9E9E9E7E7E7E9E9E7E7E7E7E6E6E4E4E4E4E6E6E6E4E4E6E7E7E9E9E9E9E9E9E9E7E6E6E6E4E3E6E6E6E6E4E3E4E4E4E3E3E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDEDEDEDEDCDCDCDCDBDADBDCDBDCDBDADAD9D9DAD9D9DAD9D9D7D9D7D7D6D5D5D3D3D5D6D6D7D5D5D5D5D5D6D6D6D7D9D9D9D9D7D7D7D7D7D7D7D7D9D7D7D6D6D6D7D6D6D6D6D7D7D6D7D7D7D7D6D5D6D6D6D5D6D6D5D6D7D7D7D7D6D6D6D6D7D7D7D9D9DAD9D7D7D7D7D99C8282828282828282828282D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEAD8D60351900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003597E0E0E1E2E2E3E4E5E5E6E7E7E8E9E9EAEBEBECECEDEEEEEFEFF0F0F1F2F2F3F3F4F4F4F5F5F6F7F7F7F8F8F8F8F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9DA6D130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F2C4C6097A2CEEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E3E3E2E2E3E4E3E4E4E3E9F1E1D9D9D7D9DADAD9D7D7D7D6D6D5D3D3D5D5D7D5D6D7D6D5D6D6D7D9D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADBDCDCDCDEDEDFDFDEDEDFDFDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E2E3E3E3E3E3E3E4E4E4E3E4E6E6E7E7E9E7E9E7E9E7E7E6E6E6E7E7E6E7E7E6E6E7E6E4E4E4E6E6E6E6E4E6E6E6E6E6E4E4E3E3E3E4E4E4E4E4E4E4E4E3E4E4E4E6E7E7E7E7E7E7E7E7E6E7E7E6E6E6E6E6E3E3E3E4E4E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1E1DFDFE1E1E1E2E2E2E2E2E2E3E4E6E6E6E6E4E6E6E6E6E4E3E2E3E3E6E3E3E3E3E3E4E6E6E6E6E6E4E6E7E7E7E6E6E6E4E4E4E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E1E2E2E1E1E1E1E2E2E3E3E4E6E6E6E3E3E3E3E3E3E2E2E1E1E1E1E2E3E2E3E3E3E3E4E4E4E4E3E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E4E4E6E6E6E6E6E7E9E9E9E9E9E7E7E7E7E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E7E7E9EAE9E9EAEAE9E7E7E7E7E6E4E3E2E2E2E2E2E2E1E1E1E2E2E1E1DFDEDEDEDEDEE1E1E1E1E1E1E2E1E1E1E1E2E1E1E1E1E2E1E1E1E1DFE1E1E1E1DFE1E1E1DEDEDCDEDEDEDEDEDEDEDFDFDEE1E1E1DEDEDFDEDCDEDCDEDEDEDEDCDCDCDEDEDCDCDCDBDCDBDBDBDCDBDBDBDCDEDEDEDCDCDEDEDFDFE1E1E1E1E1E2E2E2E3E4E3E4E6E3E3E3E2E2E1DFDFDEDEDCDEDFDFDFDEDEDEDEDEDEE1E1E1E1E2E1E1E2E1E1E1DFDFDFE1E1E1E1E1DFDFDFE1E1E1DFDFDFDFE1E1E1E2E3E3E4E3E4E3E3E4E4E3E3E3E3E3E4E3E3E3E3E3E3E4E4E4E3E3E3E4E4E4E4E4E3E3E3E3E3E4E4E4E3E3E4E3E3E3E4E6E6E7E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEBEBEBEBEBEEEEEBEBEBEBEAEBEBEAEBEBEBEBEBEBEBA28282828282828282828282D0FFFFFFFFFFFFFFEDCEAD9760552C0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162BCE0E1E2E2E3E4E5E5E6E7E7E8E9E9EAEAEBECECEDEEEEEFEFF0F0F1F2F2F3F3F3F4F4F5F5F5F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAF9F9F9F9F8A845000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003E8FD7E1E2E2E3E4E5E5E6E7E7E8E9E9EAEAEBEBECECEEEEEFEFF0F0F1F1F2F2F3F3F4F4F4F5F5F6F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F8DA811E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000116BC6E1E2E2E3E4E5E5E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F1F2F2F3F3F3F4F4F5F5F5F6F7F7F7F7F8F8F8F9F9F9FAFAFAFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8B3500A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004899E1E2E3E4E4E5E5E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F1F2F2F2F3F3F4F4F4F5F5F5F6F7F7F7F8F8F8F8F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8E595450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002D87D0E2E3E4E4E5E6E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFAFAFAF9F9F9F8F8DA81280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B6CC7E2E3E4E5E5E6E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F0F1F2F2F3F3F3F4F4F4F5F5F6F6F7F7F7F8F8F8F8F9F9F9FAFAFAFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8C67613000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125AACE3E4E4E5E5E6E6E7E7E8E9E9EAEAEBEBECECEDEEEEEFEFF0F0F0F1F2F2F2F3F3F4F4F4F5F5F5F6F7F7F7F7F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F8F8F8B36313000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125AA4E4E4E5E5E6E6E7E7E8E9E9EAEAEAEBEBECECEDEEEEEFEFF0F0F0F1F2F2F2F3F3F4F4F4F5F5F5F6F6F7F7F7F8F8F8F8F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8B36313000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125BA5E4E4E5E5E6E6E7E7E8E9E9EAEAEBEBECECECEDEEEEEFEFF0F0F0F1F2F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8B26C1E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5BA5E4E5E5E6E6E7E7E8E9E9EAEAEAEBEBECECEDEEEEEEEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F5F5F6F6F7F7F7F7F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAF9F9F9F9F8F8F8F8C681310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002E6DB7E5E5E6E6E7E7E8E9E9E9EAEAEBEBECECECEDEEEEEFEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F5F5F5F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8D994450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003F77C9E6E6E6E7E7E8E9E9E9EAEAEBEBEBECECEDEEEEEEEFEFF0F0F0F1F1F2F2F2F3F3F4F4F4F4F5F5F5F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8EDA8631E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5C9BDDE6E7E7E7E8E9E9E9EAEAEBEBEBECECECEDEEEEEFEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F5F5F5F5F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F7CF81450A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004077C1E6E7E7E7E8E9E9E9EAEAEBEBEBECECECEDEEEEEEEFEFF0F0F0F1F1F2F2F2F3F3F3F4F4F4F5F5F5F6F6F7F7F7F7F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAF9F9F9F9F9F8F8F8F8F7EDB27628000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025659CDEE7E7E8E8E9E9EAEAEAEBEBEBECECECEDEEEEEEEFEFEFF0F0F0F1F2F2F2F3F3F3F4F4F4F4F5F5F5F6F6F7F7F7F7F8F8F8F8F9F9F9F9F9FAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAF9F9F9F9F9F8F8F8F8F7F7E4A86C280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C5C9DD5E7E8E8E9E9E9EAEAEAEBEBECECECEDEDEEEEEEEFEFEFF0F0F0F1F2F2F2F2F3F3F3F4F4F4F5F5F5F5F6F6F7F7F7F7F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFAFAFAFAF9F9F9F9F8F8F8F8F7F7F7D99E622800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000255394CBE8E8E9E9E9EAEAEAEBEBEBECECECEDEEEEEEEFEFEFEFF0F0F0F1F1F2F2F2F3F3F3F4F4F4F4F5F5F5F6F6F7F7F7F7F7F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F8F7F7F7E4A7763B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037659DD6E9E9E9EAEAEAEAEBEBEBECECECEDEDEEEEEEEFEFEFF0F0F0F0F1F2F2F2F2F3F3F3F4F4F4F4F5F5F5F5F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9FAFAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F8F8F8F8F8F7F7F7F7EDBB804F1E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124179A8E0E9EAEAEAEAEBEBEBEBECECECEDEDEEEEEEEFEFEFEFF0F0F0F1F1F2F2F2F2F3F3F3F4F4F4F4F5F5F5F5F6F6F7F7F7F7F7F8F8F8F8F8F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F8F8F8F8F8F7F7F7F7F7D8A775440A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000938669ECDEAEAEAEAEBEBEBEBECECECECEDEDEEEEEEEFEFEFEFF0F0F0F0F1F1F2F2F2F3F3F3F3F4F4F4F4F5F5F5F5F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F8F8F7F7F7F7F6F6CE9D6C3B1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000938678CC4EAEAEBEBEBEBECECECECECEDEDEEEEEEEEEFEFEFEFF0F0F0F0F1F1F2F2F2F2F3F3F3F3F4F4F4F4F5F5F5F5F6F6F6F7F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F8F8F8F8F8F7F7F7F7F7F6F6F6D7A6804F27000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C4B7A9FCEEBEBEBEBECECECECECEDEDEEEEEEEEEEEFEFEFEFF0F0F0F0F0F1F1F2F2F2F2F3F3F3F3F4F4F4F4F4F5F5F5F5F6F6F6F7F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F8F8F8F8F8F7F7F7F7F7F7F6F6F5EBC4936C4E27000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D41678DBCE3ECECECECECECEDEDEDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F2F2F2F2F2F3F3F3F3F4F4F4F4F4F5F5F5F5F5F6F6F7F7F7F7F7F7F8F8F8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F6F6F6F5F5F5C49D7558310A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092F557197BDE3ECEDEDEDEDEEEEEEEEEEEEEEEFEFEFEFEFEFF0F0F0F0F0F0F1F1F2F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5F6F6F6F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F5F5F5F5E2C3927F623113000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132F56728FBEDBEEEEEEEEEEEEEEEEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F1F1F1F2F2F2F2F2F2F3F3F3F3F3F4F4F4F4F4F4F5F5F5F5F5F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F5F5F5F5F5F5F4CDBA927F623A310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000263960728FB6BFEFEFEFEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F0F1F1F1F1F2F2F2F2F2F2F2F3F3F3F3F3F3F4F4F4F4F4F4F5F5F5F5F5F5F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2F2F2F1F1F1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0C8A4A8A4A7A7A7AAACB0B0B9D0AEA09C9CA09CA0A0A0A09F9C9C9F9FA1A3A5A8A7A7A7A7AAAAA8ACABABA7A7A7AAA7A7A7AAACACB0ACACB0B0B0ACB0B2B2B2B2B5B2B6B6BBBBBBBDBFBFC3BFC3C3C4C5C3C3C3C0C0C3C5C8C5C5C4C4C4C4C6C6C5C8C6C5C6C9C6C6C9C9C9C9C6C5C5C1C5C5C6C5C6C6C6C9C9C9C9C8C6C9C9C8C8C8C6C5C1C3C5C5C5C5C5C8C5C6C6C9C8C5C5C8C5C6C4C1C1C1C4C4C0C1C0C3C0C0BDBDBBB9B8B8B5B5B5B6B5B2B2AEB2AEAEACABACABA7ABABABABABACACB1AEAEB1B1B1B5B2B2B2B0B0B0B0B0ACAEB0B2B2B2B6B6B2B2B6B6B5B1AEAEAEAEB0B0B0B0B1AEABABACB1B1B1B0B1B1AEABACACACACACB0ACAAACACB0B0ACAAA8A8ABACB0ACACAAABA8ABAAACACACABABAAABABAAABABACACACACABAEB1B1B2B1B0AEB0B0ACAEACACACACACB1ACB1B2B1B2B2B2B2B2B2B2B2B1B1ACB1ACABABABACB1AEAEAEB1B2B2B2AEB2B5B6B6B6B6B2B5B5B5B8BBB8B5B5B5B8B5B8BBB9B9B5B8BBBDC0C0BDBBBBBDBDBDBDC0C1C1BFBDBDBFBDBDBDBDBDC0BFBFBDBDC0BDBDBDBDB9BBBBB9B6B6B9B9B8B8B5B5B5B5B8B8B8B8B8B5B5B5B2B5B2B2B5B5B6B5B6B8B8B8B5B5B5B2B0ACACACABACACACACACACA8ACAAA8A8A8A8A8ACACACACB0AEACAAAAAAA8A8A7A7A5A7A8A8A8AAACABACA8A8ACAEACACB0B2B2B5B2B2B1B2B2B2B1B2B2B5B5B9BBB9BBBBB9B9B8B9B9BDB9B8B5B5B5B5B8B5B8B5B6B9B9BDBDBDBBBBBBBBBBBBBDBDBBBBBDBDBDBDBBBBBBBBBBB6B5B5B9B5B8B8B5B2B2B5B5B5B5B2B2B2B5B5B1B1B0B0ACACACACACACAAAAA7AAAAAAAAAAA7A7A7A7A5A1A1A5A5A5A5A1A3A3A5A5A09E9E9E9E9EA1A09E9F9E9B9B9B9C9E9E9B9B9898989A9A9A989797949494949694908F8F8D8E8E8C8E929294949494979797989B9B9C9EA19E9E9E9C989B9B9C9A9C9FA1A5A5A7A7AAAAAAA7AAA8A8A8A7A72A010101010101020101010190F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F5F5F5F5F5F5F6F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9FAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F7F6F6F6F6F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F3F3F3F3F3F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2D3B5B8B6B6B8B6B5B6BBBCC5D7B2A2A3A2A2A2A3A3A7A7AAAAA8A8A8A7A3A3A5A7A7A3A2A2A29F9F9EA2A2A1A2A3A3A3A5A7A7A7A3A3A5A7A3A3A3A7A7A7A8A7A3A2A2A3A3A3A3A1A1A3A2A2A3A5A5A3A2A2A2A2A3A7A8ACACABABAEABA7ABABA7A7ABA7A3A3A3A5A3A3A7A5A3A5A3A3A3A7AAAAA7A8A8A8AAAAA7A7A5A7A8A7A7A8AAAAAAAAAAAAAEAAABAEAEAEAEABABABABA7A7A5A5A7AAAEAEAEAEB0B2AEABACACAAABB0AEAEB1B2B0B0B0ACACB0B2B2B0B0B2B5B5B3B3B3B2B1B0B2B3B3B2B3B5B5B5B5B8B8BBBBB9B9B6B5B5B5B3B5B2B5B5B6B6B3B6B6B8B5B3B3B3B3B3B5B3B3B5B3B2B2B2B2B2B2B2B0B2B2B2B5B2B0B2B2B2AEB2B1B2B2B0B1B1B2B2B2B1B2B3B6B6B5B8B9B8B9B6B3B2B3B2B2B3B1AEAAAAAEB1ACACAAABAAAAABABAEAEACACB1B1AEAEAEAEABABABAEB1B1B1B1AEB0B1B2B3B2AEAEAEB2B2B3B5B6B6B6B6B9B5B5B9B9B9BBBBB9B9B5B3B3B6B6B6B6B5B5B8BBBBBFBBBFBFBFC0BFBFBFBFBFBDBDBFBFBFBFC0C0C0C0C3C3C5C8C9CACBCFD0D3D5D5D5D5D4D7D7D7D7D9D7D3D7D3D3D4D1D0D0D1D1CFD1D5D5D4D1D1D1D5D7D7D3D5D5D3D3D5D1D0D0D0D0D0CFD0CECECECFCFCAC9C9C9C9CAC9CBD0D0D0D1D1D1D1D0CECAC8C6C8C8C8C8C5C6C6C4C1C1C3C3C4C3C3C0C0BCBCBCBCBCBCBDBBBBB9B9B8B8B5B5B5B3B3B3B3B3B3B3B5B5B3B5B5B5B8B6B6B6B6BBBBB9B8B8BBBBBBB8B8B9B9B6B6B8BBBCBCBFBBBBB9B9B6B8B8B5B3B3B3B5B6B6B8BBBBB9B9B9B9B9B9B9B8B8BBBCBFC3C4C3C0C0C0C3C3C5C6C8C8C8C6C6C6C4C5C5C6C4C3C3C3C3C3C5C3C4C4C4C4C6C8C8C8C8C8C6C8C8C5C3C3C6C6C6C8C8C9C8C8C8C4C4C5C6C6C6C6C6C6C6C8C9CBCBCECECBD0D0D3D1D3D3D7D4D7D9D7DAD9D7D4D1D1D1D1D4D1D0D0D0D0D1D3D3D3D3D3D3D1D3D5D3D3D3D3D3D4D4D4D4D5D5D7DAD9D9DADBDE3A020202020202020202020292F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F6F6F6F6F7F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F6F6F6F6F5F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E6CED3D5D3D6D9D9DBDADAE6F2D0C1C3C4C3C3C3C0C0BCBCBBBDBDBBBBBBBFBFC1BFC1C1BFBCBCBCBCBCBCBCBCB9B9B6B3B2B2B5B5B5B9B9B9B9B9B9BBBDC0C1C1C0BDC0C1C0C0BDBBB9BBBCC0BCBCBBBCBCBFC1C3C3C0C1BDC1C3C3C3C3C1C0BFBDBDBBB9B9B9B9B9B9B9B9B9B6B9B9B6B6B6B9B9B5B6B3B3B5B5B5B3B6B6B6B5B5B5B3B3B3B6B6B6B9B8B5B8B8B3B3B3B3B8B8BBBBBDC0C0C0BCBCBCBBBBBCB9B9B5B5B5B6B9BBB8BBBCBBBBBDBFBFBFBCBFBFBFBFBDBDBDBDBDBDBFBFBDBDC1BDBFC0C1C1C1C1C4C5C5C8C5C5C5C3C3C3C4C3C3C5C3C4C4C5C6C5C6C6C6C9C9C8C8C6C6C6C6C4C5C5C5C5C5C3C4C6C9C6C6C9C9C6C4C4C3C3C0BDBBB9B9B9B9B9B8B6B3B6B8B8B5B3B2B1B1B1B1B1B3B5B5B3B3B3B8B5B5B6B6B8B5B5B5B5B8B5B6B5B5B2B6B6B3B3B2B3B3B3B1B0ACB1B1B0B1B1B1B1B2B2B1B3B3B3B1B1B2B1ACB1ACB1B1B0B0ACACACB1B0ACACACAAACAAAAAAACAAAAAAACB1B1B0ACACB0B1B2B2B6B5B5B5B6B8B8B8BBBDBBBDC0BCBCBBB8B8B5B2B2B1B0ACB1B2B2B2B1B1B1B1B1B1B3B3B5B5B8B5B5B8B5B5B5B2B2B2B6B6B6B5B5B2B2B2B5B5B5B2B2B2B2B3B3B5B9BBBBBDBBBDBBBBBFBDBBBBBCBCBCBDBCBBBBBBBBBBBDBDBDBBBBBBBDBDBDBDBFBCBCBCBBBBBDBDBFBCBCBDBBBCBCBDC1C1C3C4C4C5C8C9C8C9C9C9C8C9C9C8C9C6C6C6C6C6C6C6C6C5C9C8C8C8C9C8C9C9CACACBCBCED1D1CECACACAC9CACAC9CACACACACACBCBC9CBCBD0D0D0D0D1D1D1CFCFCFD1D3D5D5D3D3D0D0CED1D1D1D1D3D7D7D5D4D4D4D7D7D5D5D3D3D3D3D5D7D5D3D3D5D5D7D7D7D7D7DAD9D9D9DADBDAD9D9DBD9D7D7D7D7D7D4D5D4D5D4D7D7DADAD7D5D1D0CECACACACED0CBCACECECECECAC8C8C8C8C8C8C8C8C8C8C5C5C8C8C9C6C9C6C5C5C5C5C5C6C6C9C6C6C5C5C3C3BFBFBFBCC0BCBDBDBBBDBDBCBCB9B9B6B62E020202020202020202020292F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F6F6F6F6F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F1EAECECECECECECEFF2F1F3F6E1DBDAD9D9DBD9D7D7D7D7D7D4D7D4D7D4D7D7DADAD7D7D3D0CFCBCBCBCFD0CECBCFCFCFCFCBC9C9C9C9C9C9C9C9C9C9C6C6C9C9C9C8C9C8C5C5C5C5C5C8C8CAC8C8C5C5C3C3C0C0C0BDC1BDBFBFBBBFBFBDBDB9B9B8B8B8B9B9BBB8B5B5B5B3B3B3B8B3B3B2B0B1B5B5B2B2B1B2B2B1ACACABABAAA7A7A5A3A3A7A8A8A8AAACAAAAAAAAACB1ACACAAAAAAAAAAAAAAAAAAAAA8A5A5A5A5A5A5A5A5A2A2A29F9F9F9F9C99979B9B9C9C9C9C9E9E9B9B999B9C9C9F9F9FA2A2A2A2A29F9E9B97979B9E9B979797979799969396979796969697979797979B9C9B9B9E9E9F9E9E9E9EA1A2A2A2A5A5A2A2A1A1A1A1A3A1A1A2A2A19F9F9E9FA1A3A1A1A19F9F9C9C9FA2A5A5A5A5A5A7AAAAAAAAA7A7A7A7A7A7AAABABABA8A5A5A2A29F9F9E9EA2A2A3A7AAAAA7A3A5A8A5A5A5A3A5A8A8AAAAAAA8AAAAAAABAAAAACAAAAACB0B0B0B1B3B3B1B1B1B1ACB0ACACB0ACACACB0B0ACACACAAAAABB0B0ACACACACACB1B1B2B1B2B2B1B1B0B1B1B1ACACACB1B1B1B3B2B2B2B2B2B2B0B0ACB0B2B2B5B5B5B5B8B5B1B1B0B0ACAAACACACAAACACABACAAAAAAA7A5A5A7A7A7A7A5A5A5A3A5A3A3A3A3A3A2A2A2A2A2A2A2A3A2A3A7A5A5A7A7A3A3A5A7AAACACACACACACABABAAAAAAAAA7A7A3A3A7A5A5A5A3A3A7A5A5A2A2A29FA1A1A1A2A2A2A5A5A8A8A8A5A5A7AAACAAACB0B2B2B2B1B3B3B3B5B8B6B6B8B6B6B6B6B6B9B8B8B3B8B3B3B2B2B5B5B5B5B5B5B2B1ACAAACACABABABACACABACACACACB0B1B0ACACAAA8A5A5A5A8AAA8ABACACAAACB1B1B3B3B3B3B1B3B3B3B3B1B3B3B8BBBBBDBDBDBCB9B6B9B6B6B3B3B3B3B3B2B5B2B0ACACACB0B0B0B1ACACACACACB1B2B2B6B9B9BBB9BBBBBDC1C3C3C1C1C3C3C3C3C4C6C6C6C4C3C4C3C3C3C3C3C3C3C3C3C1C0C0C1C0C0BFC1C1C1C1C1C0C0BDBBBDBB2F020202020202020202020292F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E5CFCECECBD0D0D0CECBCBD5EAC5B5B9B5B5B3B1B2B6B6B3B3B2B3B3B1AEAEACACAAA7A7A5A3A3A7A8A8A8ABAEABABABABAEB1AEAEABABABABABABAAAAAAAAA8A5A5A5A5A5A5A5A5A2A2A2A1A1A1A19D9B979B9B9D9D9D9D9F9F9C9C9B9C9D9DA1A1A1A2A2A2A2A2A19F9C99999C9F9C99999999999B979497979797979797979797979B9D9B9C9F9FA19F9F9F9FA2A2A2A2A5A5A2A2A2A2A2A2A3A2A2A2A2A2A1A19FA1A2A3A2A2A2A1A19D9DA1A2A5A5A5A5A5A7ABABABABA7A7A7A7A7A7AAACACACA8A5A5A2A2A1A19F9FA2A2A3A7AAAAA7A3A5A8A5A5A5A3A5A8A8ABABAAA8AAAAABACAAABACABABAEB1B1B1B1B5B5B1B2B1B2AEB1ACACB1ACACACB1B1ACACACABABACB1B1AEAEAEAEAEB1B1B3B1B3B3B1B1B1B1B1B1ACACACB1B1B2B5B3B3B3B3B3B3B1B1ACB1B3B3B6B6B6B6B9B6B2B1B1B1AEABAEAEAEABACACACACAAABABA7A5A5A7A7A7A7A5A5A5A3A5A3A3A3A3A3A2A2A2A2A2A2A2A3A2A3A7A5A5A7A7A3A3A5A7ABACACACACACACACACAAABAAAAA7A7A3A3A7A5A5A5A3A3A7A5A5A2A2A2A1A2A2A2A2A2A2A5A5A8A8A8A5A5A7AAACAAACB1B3B3B3B1B5B5B5B6B9B6B6B9B6B6B6B6B6BBB9B9B5B9B5B5B3B3B6B6B6B6B6B6B3B1ACABACACACACACAEAEACACACACACB1B1B1ACACAAA8A5A5A5A8AAA8ACACAEABAEB2B2B5B5B5B5B2B5B5B5B5B2B5B5B9BCBCBDBDBDBDBBB6BBB6B6B5B5B5B5B5B3B6B3B1ACACACB1B1B1B2AEAEACACACB1B3B3B6B9B9BCB9BCBCBDC1C3C3C1C1C3C3C3C3C5C8C8C8C5C3C5C3C3C3C4C3C3C3C3C3C1C0C0C1C0C0BFC1C1C1C1C1C0C0BDBCBDBCBBBDBDBDB9BCBDBDBCBDBDBFBFBDBDBDBBBBBBB9B9B9BCB9BCB9B9B9B6B3B1AEACACB1B2B6B5B5B2B2B3B6B6B6B6B2B2B2B2B1B1B1AEAEACACACACACABABA8A8A8A8A5A5A5A5AAACB1B1B2B1ACACACACAEABABAEACACAAAAAAA8A8A5A3A3A3A328010101010101010101010193F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6E4D0CECBCACBC9CACBD0D1DBEEC8BBBBB6B6BBBBBDBDBDBCBBB9B9BCBCB9B6B5B2B0B0B0B2B2B2B3B3B3B3B3B2B0B0B0B2B2B6B6B5B6B9B9B9B9BCBCBCBDBFBFC1C1C1C1C1C1BFBFBFBCBDBFBFC1C1C1C1BFC1C1C1C3C6C9C9C5C6C6C6C3C4C4C6C4C4C4C6C9C9CBCECAC9CAC9C9C6C6C6C9CAC6C6C6C5C1C1BFBFBFC1C1C1C4C1C1C3C5C5C9CACAC9C9C9C9C6C4C4C3C1BFC1C1C3C3BFBDBFC1BFBDBDB9B6B6B5B6B9B9B6B5B3B3B3B1B2B2B2B2B1B1B0B0B0B0ACAAACAEACB0ACABABA7A7AAA5A5AAA5A5A2A5A2A29F9C9C9B9B9C9F9FA29D9D9D9D9D9F9F9FA2A5A5A5A5A4A4A2A2A2A2A2A2A5A2A29F9F9FA29F9F9FA1A4A2A1A2A2A2A29F9C9F9FA19D9FA19DA1A2A2A2A2A1A19F9FA2A2A2A5A5A8A5A2A4A4A4A5A2A2A4A4A1A1A29FA2A4A4A4A4A4A5A8A8ABA8A8A5A8A5A8A8A8AAABA8A8A8A5AAACABABA8A8A8A8A5A5A7A7ABACACAEAEB1B1B1ACACB1B3B6B6B5B1B5B5B2B0ACACAEB0B2B0ACB0B2B2B2B1B1B1B0B0ACACACACACB1B1B3B6B5B5B1B1ACB0B0B0AEABAEABACA8A7AAACAAAAAAAAACAAACB0B0AEAEACABABABACABACAEAEACACA8ABACACAEAEABACACACABABABABACACA8A5A5A5A29FA1A1A2A2A29F9F9C9C9B9B99999999999C9B99999B9F9F9B99999999999B9DA29D9B9D9B99999997969699969999999B9DA1A1A1A2A2A5A2A2A5A2A5A5A5A5A4A1A1A4A4A5A7AAACABACABABAEAEACB1B0B0ACABABAEACACACAEB1B1B5B1B1B5B5B5B1B5B6B6B6B6B9B6BBBBBFBFBFC1C4C4C6C4C6C6C9CAC6C6C6C5C5C6C9CEC9CAC9C9C9C9CBCBCACECBC9CBCFCBCBCFCFCFCECBC9C9C6C9C9CBC9CBCBCBCECECECECECBCECECECECECBC9C6C6C9CAC9C9C9CECACBCBCFCECACACEC9CBC9C6C6C6C9C9C5C6C5C6C5C5C1C1BFBDBCBCB9B9B9BBB9B6B6B3B6B3B3B1B0B2B0ACB0B0B0B0B0B2B2B6B3B3B6B6B6B9B6B6B62E020202020102020202020295F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7EFDCDEDEDCDFDFE2E3E3E1ECF6D5CBCBCACECACBCBCECACAC8C6C6C5C5C6C8C9C8C6C9CBCECECECECEC9CECECECECFCFD3D3D3D3D4D4D4D4D4D1D1D4D1CFCECFCECBCBCBCAC8C8C8C6C4C1C0C3C3C4C3C3C4C4C0C1C4C1C1BFBFBCBFBFBBBBBBB8B8B8B8B8B6B6B3B5B5B5B5B5B2B2B2B1B5B1B1B1B3B3B6B5B5B2B6B6B8BBBCBBB8B9B6B6B9BCBBBBBBBBBCBFBDBFBFBFC0C3C3C3C0BFBFBBB8B8B5B2B2B6B6B3B6B6B6B5B6B6B5B5B6B8B6B6B6B9BDBDB9BBB8B9B9BBBBBBBBB8B8B8B8B8BBB6BBBCBCBBBFBBBBBBBBBCB8BCB9B6B6B6B5B6B6BBBCBCBCB8BCBCB8B8BCBCBFBFBFBDBCB9B9BDBDBBB8B5B2B0B0B0B2B2B2B3B3B3B3B3B2B0B0B0B2B2B6B6B5B6B9B9B9B9BDBDBDBFBFC0C3C3C3C3C1C1BFBFBFBDBFC0C0C3C3C3C3BFC1C1C1C4C6C9C9C6C8C8C6C4C5C5C8C5C5C5C8CACACECECBC9CBCACAC6C6C6CACBC8C8C8C6C3C3C0C0C0C1C3C3C5C1C1C4C6C6C9CBCBC9CACACAC8C5C5C4C1BFC3C3C4C4C0BFC0C1C0BFBFBBB8B8B5B8B9B9B6B5B3B3B3B1B2B2B2B2B1B1B0B0B0B0AEABAEAEAEB0AEACACA8A8ABA7A7ABA7A5A4A5A4A4A19D9D9B9B9DA1A1A29D9D9D9D9DA1A1A1A4A5A5A5A5A5A5A2A2A2A2A4A4A5A2A2A1A1A1A2A1A1A1A2A5A2A2A2A2A2A2A19DA1A1A29DA1A29DA2A4A4A4A4A2A2A1A1A2A2A4A5A7AAA5A2A5A5A5A5A2A2A5A5A2A2A2A1A2A5A5A5A5A5A5AAAAACAAAAA7AAA7AAAAAAABACAAAAAAA7ABACACACAAAAAAAAA5A5A8A8ACACACAEAEB1B1B1AEAEB1B3B6B6B5B1B5B5B2B0ACACAEB0B2B0ACB0B2B2B2B1B1B1B0B0AEAEAEAEAEB1B1B3B6B5B5B1B1AEB0B0B0AEACAEACACAAA8ABAEABABABABACABAEB0B0AEAEACACACACAEACAEAEAEAEACAAACACACAEAEACACACAEACACACACACACAAA7A5A5A2A1A2A2A2A2A2A1A19D9D9B9B9999999B9B9D9C9B9B9CA1A19C9B9B999B999C9DA29D9C9D9C9B9B26010101010101010101010194F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E6CECFD1CED1D3D1D3D0D0DBEEC6B3B3B2B1B2B2B2B2B2B2AEB2B0AEAEAEAEAEB2B2B2B2B6B5B2B0B0B0AEAEACACABACAEAEAEB0B2B1B2AEAEB2B5B3B3B6B9B9BCB8B8B6B8B8B9B6B9B9BCBCBFC1BFC1C1BFBFBFBFBFC3BFBFBCBBBBBBBFBCBFBCBDBFBFC3C3C3C1C1C1C0C0C0C3C3C1C0C3C5C5C3C0C0C0C0C0BDBCBCBFBCBFBFBBB8B9BBBBBBBBB8B8B8BBBBB6B6B6B6B3B3B3B3B2B2B0B0ACB0B0B0B0B0ACACACACABA7A7ABAAAAAAA7A8A8AAAAA5A4A4A4A4A4A7A5A4A5A4A2A2A2A2A4A4A2A29D9D9D9F9F9F9D9C9C9B9B9B9B9B9B969494929393909397979B9B9B9B9C9C9C9DA2A2A2A4A7A4A4A4A29DA2A2A29FA2A5A7ABAAACACB0B0B0ACB0AEAEAEACACAEAEB0B1B0B0B2B5B3B1B0B0B0B0B0B3B3B3B3B6B6B6B8B8B6BBBBB8B8B8B6B9B9BBBCBFBCBFC1BFBFC1C1C3C1C0C3C3BFBFBFC1C1C3C5C8C8C6C6C4C1C1C1C4C4C4C1BFBDB9B6B6B6B6B5B8B6B6B9B9B9B9B6B9B9B6B6B6B8B8B8B8B5B5B5B1B5B3B0B3B3B5B5B3B0B1B1B1B2B2B3B6B6B6B6B6B3B3B0B2B2B0B0B0B0ACACB0B2B3B6B6B6B5B1AEB0B0B0ACB0AEACAAAAAAABABACACACACACB0B1B1B1B1B1B1B3B5B8B6B6B6B6B6B8BCBFC1BFBFBFC1C1C3C3C3C4C3C1C4C1BFBFBFBFBFBCB8B6B6B6B9BBBBBDBDBDC0BFBFC0C4C3C3C1C0C0C1BFC1C1C3C0C3C3C6C3C0C3BFBFBFBFBFBFBCB9BBB8B8BBBFC0C0C3BFC3C3C4C6C6C6C5C6C4C4C5C5C6C6C6C4C4C1C1C3C6C3C5C1C4C0C0C0C3C0C0BDBDBFBCB8B8B8B6B5B5B5B3B2B2B5B6B9B6B6B5B8BBBBBBBCBCBCBCB8B9B9B9BCBCBCBBBBB8B9B8B8B8BBB9B9B6B9B8B8B8BCBFBFC3C0C0C0BFBFC0C1BFC0C0C0C0C0BFBFC1C1C1C1BFC1C1C5C5C6C6C5C6C6C6C6C6C5C6C6C5C4C6C5C8C5C8C8C8C8C9C8C9C8C6C8C8C6C6C6C6C4C4C4C6C6C5C3C3C4C4C3C3BFC1C4C3BFC3C1C5C6C4C3C0C0C0C1C1C5C5C633020202020202020202020296F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9E3C6C9C8C4C1C1BFC0C0C1CEE2BDAEAEAEB1B3B2B5B2AEB2B5B5B5B3B5B2B3B2AEB1B3B3B5B5B1B1AEAEABA8A8A7A7A7A4A4A4A29FA2A2A5A7A8A8A8A8A8A7A8ABACACA8A7A7A8A7A7A7A8A8ACACB0B0AEAEAEACA8A8ABACACA8A5A5A5A4A4A2A5A7A5A7A8A8A8ABACACACA8A8ABACA8A8A8ACACACAEACA8A7A7A8A8A8A8A5A5A8A7A7A8ABABA8A7A7A7A7A8ACAEB2B2B1B1B3B1ACB1B1ACACB1ACA8A8A8ABA8A8ACABA8ABA8A8A8ACB0B0ACAEAEAEB0B0ACACABACAEACACAEB0B0B0B0B0B0B3B0B1B3B3B3B3B1B1B1B1ACACABABACB0B3B3B3B3B5B6B3B1B2B2B0B1B5B3B3B5B8B5B5B5B2B2B5B8B6B5B5B8BBBBB9B9B9B6B5B5B6B9B9B6B9BCBCBCBCBDBDC0C0BFBFBDBCBCBBB9BBB6BBBBBDBDB9BDBDBDBBB9B9B9B9B9BCB9B9BCB9B6B8B8B8B8B8B8B5B8B8B8BBB8B5B6B6B6B3B6B5B8B8B5B5B5B8B8B8B5B6B9BDBDBCBDBFBDBFBDB9B8B9B8B8B9B5B3B0B0B3B5B2B2B0B1B0B0B1B1B3B3B2B2B5B5B3B3B3B3B1B1B1B3B5B5B5B5B3B5B5B6B9B6B3B3B3B6B6B9BBBDBDBDBDBFBCBCBFBFBFC0C0BFBFBCB9B9BDBDBDBDBCBBBDC0C0C4C0C4C4C4C5C4C4C4C4C4C3C3C4C4C4C4C5C5C5C5C6C8CACBCFD1D3D5D6D9DBDBDBDBDADEDEDEDEDEDCD9DCD9D9DAD7D6D6D7D7D5D7DBDBDAD7D7D7DBDCDCD9DBDBD9D9DBD7D6D6D6D6D6D5D6D3D3D3D5D5D1D0D0CFCFD1D0D3D6D6D6D7D7D7D7D6D3D1CECBCBCBCBCBCACBCBC9C6C6C6C6C9C6C6C5C5C1C1C1C1C1C1C3C0C0BFBFBDBDBCBCBCB9B9B9B9B9B9B9BCBCB9BCBCBBBDBDBDBDBDC0C0BFBDBDC0C0C0BDBDBFBFBDBDBDC0C1C1C4C0C0BFBFBDBDBDBCB9B9B9BCBDBDBDC0C0BFBFBFBFBFBFBFBDBDC0C1C4C6C9C8C5C5C5C6C6CACBCECECECBCBCBC9CACACBC9C6C6C6C6C6CAC6C9C9C9C9CBCBCBCECECECBCECBCAC8C8CBCBCBCBCBCFCBCBCBC9C9CACBCBCBCBCBCBCBCBD0D3D3D337020202020202020202020296F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAE6CFD0CFCECFD3CFD0D1D1DEEFCABBBBBDBBBCBBBBB8BCBCB9B9B8B9B9B9B5B3B2B5B5B3B5B5B5B5B6B6B5B9B9B9B5B5B8B5B2B5B2B5B5B3B3B2B2B2B5B3B2B2B2B0B2B0B0B0B2B0B0B0B2B5B5B3B2B2B3B5B6B8BCBBBBBBBCBDBDBDBFC3C0C3C5C1C1BFBDBDBBB8B6B5B3B2B5B8B6B6B5B5B5B5B5B5B9B9BBBBBDBBBBBDBBBBBBB6B6B8BCBCBCBBBBB6B6B6BBBBBBB8B8B8B6B9B9BBBDBFBFC3BFC3C0C0C4C3C0C0C1C1C1C3C1BFC0C0C0C0C3C3C3BFBFBFC3C3C3C3C4C1C1C1C0C0C3C3C4C1C1C3C0C1C1C3C5C5C8C9C9C9CECFCECFD0D0CECFCFCED0CBCBCBCBCBCBCBCBCBCFCECECED0CED0CFD1D1D1D1D3D7D7D3D1D1D1CFD1D1D0D1D1D1D1D1D1D1D0D1D1D6D6D6D6D7D7D7D4D4D4D7D9DBDBD9D9D6D6D3D7D7D7D7D9DCDCDBDADADADCDCDBDBD9D9D9D9DBDCDBD9D9DBDBDCDCDCDCDEE1DEDEDEE1E1DFDEDEE1DEDEDCDCDEDCDADBDADBDADCDCDFDFDEDBD7D6D3D1D1D1D3D6D1D1D3D3D3D3D1CECECECECECECECECECECBCBCECECFCBCFCBC9C9C9C9C9CBCBD0CBCBC9C9C6C6C4C4C4C1C5C1C3C3BFC3C3C1C1BDBDBCBCBCBDBDBFBCB9B9B9B8B8B8BCB8B8B6B3B5B9B9B6B6B5B6B6B5B2B2B1B1AEACACA8A8A8ACACACACB0B2B0B0B0B0B2B5B2B2B0B0B0B0B0B0AEAEAEAEACAAAAAAAAAAAAA8A8A7A7A7A4A4A4A4A09C9B9E9EA0A0A0A0A2A29F9F9C9FA0A0A4A4A4A7A5A7A7A7A4A29F9C9C9FA29F9C9C9C9C9C9C9B989B9B9B9B9B9B9B9B9B9B9B9EA09E9FA2A2A4A2A2A2A2A5A7A7A5A8A8A5A5A5A5A5A5A8A5A5A7A7A5A4A4A2A4A5A8A5A5A5A4A4A0A0A4A5A8A8A8A8A8ACB0B0B0B0ACACACACACACAEB1B1B1ACAAAAA7A5A4A4A2A2A5A7A8ACAEAEACA8AAACAAAAAAA8AAACACB0B0AEACAEAEB0B1AEB0B2B0B0B2B3B3B3B5B8B8B5B5B5B5B2B3B2B2B3B2B2B2B3B3B2B2B2B0B0B1B3B3B2B2B2B2B2B5B5B6B5B6B6B5B52D010101010101010102020297FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBDCB8B9B6B5B6B9B5B6B6B8C5D7B3A5A5A5A5A2A1A2A2A4A1A2A4A1A4A5A5A5A5A4A4A2A2A5A5A5A8A8ACA8A5A7A7A7A8A5A5A7A7A4A4A5A2A5A7A7A7A7A7A8ACACAEACACA8ACA8ACACACACAEACACACA8ACB0AEAEACACACACA8A8AAAAAEB0B0B2B2B5B5B5B1B1B5B6B9B9B8B5B8B8B5B2B0B0B2B2B5B2B0B2B5B5B5B5B5B5B2B2B1B1B1B1B1B5B5B6B9B8B8B5B5B1B2B2B2B2AEB2AEB0ACAAACB1ACACACACB0ACB1B2B2B2B2B0AEAEAEB1AEB1B2B2B1B0ACAEB0B0B2B2AEB0B0B1AEAEAEAEB0B0ACA8A8A8A5A2A4A4A5A5A5A2A2A1A19E9E9C9C9C9C9CA19F9C9C9FA2A29F9C9C9C9C9C9FA1A5A19FA19F9C9C9C9B98989C989C9C9C9FA1A4A4A4A5A5A8A5A5A8A5A8A8A8A8A7A4A4A7A7A8AAACB1AEB0AEAEB2B2B1B5B2B2B0AEAEB2B0B0B0B2B5B5B8B5B5B8B8B8B5B8BBBBBBBBBDBBBFBFC3C3C3C5C8C8CAC8CACACBCFCACACAC9C9CACED1CECFCBCBCBCBD0D0CFD1D0CED0D3D0D0D3D3D3D1D0CECEC9CECED0CED0D0D0D1D1D1D1D1D0D1D1D1D1D1D0CEC9CACECFCECECED1CFD0D0D3D1CFCFD1CED0CBC9C9C9CBCBC9C9C9CAC9C9C5C5C3C1C0C0BDBDBDBFBDBBBBB6BBB6B6B5B2B5B2B0B2B2B2B2B2B5B5B9B6B6B9B9B9BDBBBBBBB8B8B8B8B8B5B6B8BBBBBBBFBFBBBBBFBFBDB9B6B6B6B6B8B8B8B8B9B6B2B2B5B9B9B9B8B9B9B6B2B5B5B5B5B5B8B5B2B5B5B8B8B5B2B1B1B2B5B8B5B5B2B2B1B2B2B5B5B5B2B2B2B2B2B2B2B2B5B5B5B5B2B6B9B9BBB9B8B6B8B8B5B6B5B5B5B5B5B9B5B9BBB9BBBBBBBBBBBBBBBBB9B9B5B9B5B2B2B2B5B9B6B6B6B9BBBBBBB6BBBDBFBFBFBFBBBDBDBDC0C3C0BDBDBDC0BDC0C3C1C1BDC0C3C5C9C9C5C3C3C6C6C6C6C9C9C9C8C5C6C8C5C5C5C5C6C9C8C8C6C5C9C6C6C5C5C1C3C3C1BFBFC1C1C0C0BDBDBDBDC0C0C0C0C0BDBDBDBBBDBBBBBDBDBFBDBFC0C0C0BDBDBDBBB8B5B5B5B2B5B52D010101010101010101010197FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBD6B1B0B0B1B6B6B1B0B1AEB9CBAEA1A5A19FA19F9C9C9C9B98989C989C9C9C9FA1A4A4A4A5A5A8A5A5A8A5A8A8A8A8A7A4A4A7A7A8AAACB1AEB0AEAEB2B2B1B5B2B2B0AEAEB2B0B0B0B2B5B5B8B5B5B8B8B8B5B8BBBBBBBBBDBBBFBFC3C3C3C5C8C8CAC8CACACBCFCACACAC9C9CACED1CECFCBCBCBCBD0D0CFD1D0CED0D3D0D0D3D3D3D1D0CECEC9CECED0CED0D0D0D1D1D1D1D1D0D1D1D1D1D1D0CEC9CACECFCECECED1CFD0D0D3D1CFCFD1CED0CBC9C9C9CBCBC9C9C9CAC9C9C5C5C3C1C0C0BDBDBDBFBDBBBBB6BBB6B6B5B2B5B2B0B2B2B2B2B2B5B5B9B6B6B9B9B9BDBBBBBBB8B8B8B8B8B5B6B8BBBBBBBFBFBBBBBFBFBDB9B6B6B6B6B8B8B8B8B9B6B2B2B5B9B9B9B8B9B9B6B2B5B5B5B5B5B8B5B2B5B5B8B8B5B2B1B1B2B5B8B5B5B2B2B1B2B2B5B5B5B2B2B2B2B2B2B2B2B5B5B5B5B2B6B9B9BBB9B8B6B8B8B5B6B5B5B5B5B5B9B5B9BBB9BBBBBBBBBBBBBBBBB9B9B5B9B5B2B2B2B5B9B6B6B6B9BBBBBBB6BBBDBFBFBFBFBBBDBDBDC0C3C0BDBDBDC0BDC0C3C1C1BDC0C3C5C9C9C5C3C3C6C6C6C6C9C9C9C8C5C6C8C5C5C5C5C6C9C8C8C6C5C9C6C6C5C5C1C3C3C1BFBFC1C1C0C0BDBDBDBDC0C0C0C0C0BDBDBDBBBDBBBBBDBDBFBDBFC0C0C0BDBDBDBBB8B5B5B5B2B5B5B5B5B5B5B1B5B2B1B1B1B1B1B5B5B5B5B8B6B5B2B2B2B1B1B0B0ACB0B1B1B1B2B5B2B5B1B1B5B6B5B5B8BBBBBDBBBBB9BBBBBBB9BBBBBDBDC1C3C1C3C3C1C1C0C1C1C5C1C0BDBDBDBDC0BDC0BDBFC1C1C5C5C5C3C3C3C3C3C3C5C5C3C3C5C6C6C5C3C3C3C3C3BFBDBDC1BDC0C0BDBBBBBDBDBDBDBBBBBBBDBDB9B9B8B8B5B5B5B5B5B5B2B2B0B2B2B2B2B2B0AEAEAEACA8A8ACACACACA8AAAAACACA8A5A5A5A5A5A8A8A5A7A5A2A2A2A4A5A5A2A2A1A1A1A1A1A1A19E9E9C9C9C9C9C9C989797949696939698989C9C9C9C9E9F9FA1A2A2A4A5A8A5A529010101010101010101010197FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCEFDAD9DBDADEDBD7DBD9D7E1F3D1C1BFBCBDBBBBBDC1C3C3C5C3C5C5C6C9C9C9C8C9C6C6C8C8C9C9C9C6C6C4C4C5C9C5C8C4C6C3C3C3C5C3C3C0C0C1BFBBBBBBBBB8B8B8B6B5B5B8BBBCBBBBB8BBBDBDBDBFBFBFBFBBBCBCBCBFBFBFBDBDBBBCBBBBBBBDBCBCBBBCBBBBBBBFC1C3C5C3C3C3C3C3C3C4C1C3C3C3C3C3C1C1C4C4C4C4C3C4C4C8C8C9C9C8C9C9C9C9C9C8C9C9C8C6C9C8CAC8CACACACACECACECBC9CBCBC9C9C9C9C6C6C6C9C9C8C5C5C6C6C5C5C3C4C6C5C3C5C4C8C9C6C5C3C3C3C4C4C8C8C9C9C9C9C9C8CAC9C8C4C4C4C3C3C3C3C1C1C0C0C0BFBFBFBFBFBBBBB9B9B6B2B2B2B5B5B5B5B3B2B2B3B3B3B3B3B3B8B5B3B6B6B3B5B5B6B5B2B0B0ACAEACB0B1B1B0B1B1B1B2B5B3B6B3B1B3B6B6B8B5B6B3B5B3B1B2B5B5B6B6B2B2B1B1ACABABA8A8A8A5A5A5A4A1A5A5A7A8ABAAAAABAAA8AAACAEAEABA8A8ABA8A8A8AAABB0B0B2B2B1B1B1AEAAAAACB0B0ABA7A7A7A5A5A5A7A8A7A8ABABABACAEAEAEABABACAEABAAABAEAEAEB1AEAAA8A8AAAAAAAAA7A7AAA8A8AAACACABA8A8A8A8ABB0B1B3B3B2B2B5B2B0B2B2B0B0B2B0ABABABACABABAEACABACAAABABAEB2B2AEB1B1B1B2B2B0B0ACB0B1AEAEB1B2B2B2B2B2B2B5B2B2B5B5B5B5B2B2B2B2B0B0ACACB0B2B5B5B5B5B6B9B5B2B3B3B2B2B6B5B5B8BBB6B6B6B3B3B6BBB9B6B6BBBCBCBBBBBBB9B8B6B9BBBBB9BBBDBDBDBDC0C0C3C3C1C1BFBDBDBCBBBCB9BCBCBFBFBBBFBFC0BCBBBBBBBBBBBDBBBBBDBBB9BBBBBBBBBBBBB6BBBBBBBCBBB6B9B9B9B5B9B8BBBBB6B8B8BBBBBBB8B9BBBFBFBDC0C1C0C1BFBBBBBBBBBBBBB8B5B2B2B5B8B3B3B2B2B2B2B2B2B5B5B3B3B8B8B5B5B5B5B2B2B2B5B8B8B8B8B5B6B8B9BBB9B5B5B5B9B9BBBCBFBFBFBFC1BDBDC1C1C1C3C3C1C1BDBBBBBFBFBFBFBDBCC0C3C3C6C3C6C6C6C8C6C6C6C6C6C5C5C6C6C6C6C8C833020202020202020202020298FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF1DBDCDEDCDEDEDEDCDCDAE4F6D7C5C8C4C6C3C3C3C5C3C3C0C0C1BFBBBBBBBBB8B8B8B6B5B5B8BBBCBBBBB8BBBDBDBDBFBFBFBFBBBCBCBCBFBFBFBDBDBBBCBBBBBBBDBCBCBBBCBBBBBBBFC1C3C5C3C3C3C3C3C3C4C1C3C3C3C3C3C1C1C4C4C4C4C3C4C4C8C8C9C9C8C9C9C9C9C9C8C9C9C8C6C9C8CAC8CACACACACECACECBC9CBCBC9C9C9C9C6C6C6C9C9C8C5C5C6C6C5C5C3C4C6C5C3C5C4C8C9C6C5C3C3C3C4C4C8C8C9C9C9C9C9C8CAC9C8C4C4C4C3C3C3C3C1C1C0C0C0BFBFBFBFBFBBBBB9B9B6B2B2B2B5B5B5B5B3B2B2B3B3B3B3B3B3B8B5B3B6B6B3B5B5B6B5B2B0B0ACAEACB0B1B1B0B1B1B1B2B5B3B6B3B1B3B6B6B8B5B6B3B5B3B1B2B5B5B6B6B2B2B1B1ACABABA8A8A8A5A5A5A4A1A5A5A7A8ABAAAAABAAA8AAACAEAEABA8A8ABA8A8A8AAABB0B0B2B2B1B1B1AEAAAAACB0B0ABA7A7A7A5A5A5A7A8A7A8ABABABACAEAEAEABABACAEABAAABAEAEAEB1AEAAA8A8AAAAAAAAA7A7AAA8A8AAACACABA8A8A8A8ABB0B1B3B3B2B2B5B2B0B2B2B0B0B2B0ABABABACABABAEACABACAAABABAEB2B2AEB1B1B1B2B2B0B0ACB0B1AEAEB1B2B2B2B2B2B2B5B2B2B5B5B5B5B2B2B2B2B0B0ACACB0B2B5B5B5B5B6B9B5B2B3B3B2B2B6B5B5B8BBB6B6B6B3B3B6BBB9B6B6BBBCBCBBBBBBB9B8B6B9BBBBB9BBBDBDBDBDC0C0C3C3C1C1BFBDBDBCBBBCB9BCBCBFBFBBBFBFC0BCBBBBBBBBBBBDBBBBBDBBB9BBBBBBBBBBBBB6BBBBBBBCBBB6B9B9B9B5B9B8BBBBB6B8B8BBBBBBB8B9BBBFBFBDC0C1C0C1BFBBBBBBBBBBBBB8B5B2B2B5B8B3B3B2B2B2B2B2B2B5B5B3B3B8B8B5B5B5B5B2B2B2B5B8B8B8B8B5B6B8B9BBB9B5B5B5B9B9BBBCBFBFBFBFC1BDBDC1C1C1C3C3C1C1BDBBBBBFBFBFBFBDBCC0C3C3C6C3C6C6C6C8C6C6C6C6C6C5C5C6C6C6C6C8C8C8C8C9CACED0D1D4D5D7D7DBDCDCDCDCDCDFDFDFDFE1DEDBDEDBDBDCD9D7D7DADA38020202020202020202020298FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCECD1D1D1D0CED1D0D5D7D7E1F1D0C0BCBCC0C0C3C3C3C1C0BDBDC1C1BFBCB9B6B3B3B3B6B6B6B8B8B8B8B8B6B3B3B3B6B6BBBBB9BBBDBDBDBDC1C1C1C3C3C4C6C6C6C6C5C5C3C3C3C1C3C4C4C6C6C6C6C3C5C5C5C8CACECEC9CBCBCAC8C9C9CBC9C9C9CBCFCFD1D3D0CED0CFCFCACACACFD0CBCBCBC9C6C6C4C4C4C5C6C6C9C5C5C8C9C9CED0D0CECFCFCFCBC9C9C8C5C3C6C6C8C8C4C3C4C5C4C3C3BFBCBCB9BCBDBDBBB9B8B8B8B5B6B6B6B6B5B5B3B3B3B3B2AEB2B2B2B3B2B0B0ABABAEAAAAAEAAA8A7A8A7A7A4A0A09E9EA0A4A4A5A1A1A1A1A1A4A4A4A7A8A8A8A8A7A7A5A5A5A5A7A7A8A5A5A4A4A4A5A4A4A4A5A7A5A5A5A5A5A5A4A0A4A4A5A1A4A5A1A5A7A7A7A7A5A5A4A4A5A5A7A8AAACA8A5A7A7A7A8A5A5A7A7A5A5A5A4A5A7A7A7A7A7A8ACACB0ACACAAACAAACACACAEB0ACACACAAAEB1B0B0ACACACACA8A8ABABB0B1B1B2B2B5B5B5B2B2B5B8BBBBB9B5B9B9B6B3B1B1B2B3B6B3B1B3B6B6B6B5B5B5B3B3B2B2B2B2B2B5B5B8BBB9B9B5B5B2B3B3B3B2B0B2B0B1ACABAEB2AEAEAEAEB1AEB2B3B3B2B2B1B0B0B0B2B0B2B2B2B2B1ACB0B1B1B2B2B0B1B1B2B0B0B0B0B1B1ACAAA8A8A5A4A5A5A5A5A5A4A4A0A09E9E9C9C9C9C9CA09F9C9C9FA4A49F9C9C9C9C9C9FA1A5A19FA19F9C9C9C9B98989C989C9C9C9FA1A5A5A5A7A7A8A5A5A8A5A8A8A8A8A7A5A5A7A7AAABAEB2B0B1B0B0B2B2B2B5B3B3B1B0B0B2B1B1B1B2B5B5B9B5B5B9B9B9B5B9BBBBBBBBBFBCC0C0C3C3C3C6C9C9CBC9CBCBCED0CBCBCBC9C9CBCFD1CFD0CECECECED1D1D0D1D1CFD1D4D1D1D4D4D4D3D1CFCFCACFCFD1CFD1D1D1D3D3D3D3D1D1D3D3D1D1D1D1CFCACBCFD0CFCFCFD1D0D1D1D4D1D0D0D1CFD1CECACACACECEC9CAC9CBC9C9C6C6C3C3C1C1BDBDBDC0BDBCBBB8BBB8B8B5B3B6B3B1B3B3B3B3B3B6B6BBB8B8BBBBBBBDBBBCBCB92E020202010202020202020298FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDDFC0C4C5C4C8C8C9CACAC6D1EBC9BBBBBBB6BBBBB8B5B1B1B3B5B8B5B1B5B8B8B8B6B6B6B5B5B2B2B2B2B2B6B6B9BBBBBBB6B6B2B5B5B5B3B1B3B1B1AEACB0B2B0B0B0B0B1B0B2B5B5B3B3B1B1B1B1B2B1B2B3B3B2B1AEB1B1B1B3B3B1B1B1B2B1B1B1B1B1B1AEABAAAAA7A5A5A5A7A7A7A5A5A1A19F9F9C9C9C9E9EA1A19E9EA1A5A5A19E9E9C9E9CA1A3A7A3A1A3A19E9E9E9C9A9A9E9A9E9C9CA1A3A5A5A5A7A7AAA7A7AAA7AAAAAAAAA8A5A5A8A8ABACB0B2B1B1B1B1B3B3B2B6B5B5B1B1B1B3B1B1B1B3B6B6BBB6B6BBBBBBB6BBBCBCBCBCC0BDC1C1C3C3C3C6C9C9CBC9CBCBCED0CBCBCBC9C9CBCFD1CFD0CECECECED1D1D0D1D1CFD1D4D1D1D4D4D4D3D1CFCFCACFCFD1CFD1D1D1D3D3D3D3D1D1D3D3D1D1D1D1CFCACBCFD0CFCFCFD1D0D1D1D4D1D0D0D1CFD1CECACACACECEC9CAC9CBC9C9C6C6C3C3C3C3BFBFBFC1BFBDBCB9BCB9B9B6B5B8B5B1B5B5B5B5B5B8B8BBB9B9BBBBBBBFBCBDBDBBBBBBBBBBB8B9BBBDBDBDC1C1BDBDC1C1BFBBB9B9B9B9BBBBBBBBBBB9B5B5B8BBBBBBBBBBBBB9B5B8B8B8B8B8BBB6B3B6B6BBBBB8B3B2B2B5B6BBB6B6B3B5B2B5B3B6B6B8B5B5B3B5B5B3B5B5B8B8B8B6B5B9BBBBBDBBBBB9BBBBB6B9B8B8B8B8B8BBB8BBBDBBBDBDBDBDBDBCBCBDBBBBB8BBB8B5B5B5B8BBB9B9B9BBBDBDBCB9BCBFC1C1C1C1BDBFBFBFC3C3C3BFBFBFC3BFC3C3C3C3C0C3C4C6C9C9C6C4C4C8C8C8C8C9CACAC9C6C8C9C6C5C6C5C8C9C9C9C8C6C9C8C8C5C5C3C3C4C3C1C1C3C3C3C3C0C0C0C0C3C3C3C3C3BFC0C0BCBFBCBCBFBFC1BFC1C3C3C3BFBFC0BDBBB8B8B6B5B6B6B6B6B6B6B2B6B3B2B2B2B2B2B6B6B6B6BBB9B6B3B3B3B2B2B1B1B0B1B2B2B2B3B6B5B6B2B2B6B9B8B8BBBDBDC0BCBCBBBCBCBDBBBDBDC0C0C3C4C3C4C4C3C3C3C3C3C5C3C3C0BFBFBFC3C0C3C0C1C3C3C5C5C5C4C4C4C3C3C3C533020202020202020202020299FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF1D9DBDBDBDEE2E3E4E1E3EEF9D6C9C9CBC9C9C9CBCFCFD1D3D0CED0CFCFCACACACFD0CBCBCBC9C6C6C4C4C4C5C6C6C9C5C5C8C9C9CED0D0CECFCFCFCBC9C9C8C5C3C6C6C8C8C4C3C4C5C4C3C3C0BDBDBBBDBFBFBCBBB9B9B9B6B8B8B8B8B6B6B5B5B5B5B2B0B2B3B2B5B2B1B1ACACB0ABABB0ABAAA7AAA7A7A5A1A19F9FA1A5A5A7A3A3A3A3A3A5A5A5A7AAAAAAAAA8A8A7A7A7A7A7A7AAA7A7A5A5A5A7A5A5A5A5A8A7A5A7A7A7A7A5A1A5A5A5A3A5A5A3A5A7A7A7A7A5A5A5A5A7A7A7AAABAEAAA7A8A8A8AAA7A7A8A8A5A5A7A5A7A8A8A8A8A8AAAEAEB1AEAEABAEABAEAEAEB0B1AEAEAEABB0B1B1B1AEAEAEAEAAAAACACB1B1B1B3B3B6B6B6B2B2B6B9BBBBBBB6BBBBB8B5B1B1B3B5B8B5B1B5B8B8B8B6B6B6B5B5B2B2B2B2B2B6B6B9BBBBBBB6B6B2B5B5B5B3B1B3B1B1AEACB0B2B0B0B0B0B1B0B2B5B5B3B3B1B1B1B1B2B1B2B3B3B2B1AEB1B1B1B3B3B1B1B1B2B1B1B1B1B1B1AEABAAAAA7A5A5A5A7A7A7A5A5A1A19F9F9C9C9C9E9EA1A19E9EA1A5A5A19E9E9C9E9CA1A3A7A3A1A3A19E9E9E9C9A9A9E9A9E9C9CA1A3A5A5A5A7A7AAA7A7AAA7AAAAAAAAA8A5A5A8A8ABACB0B2B1B1B1B1B3B3B2B6B5B5B1B1B1B3B1B1B1B3B6B6BBB6B6BBBBBBB6BBBCBCBCBCC0BDC1C1C3C3C3C6C9C9CBC9CBCBCED0CBCBCBC9C9CBCFD1CFD0CECECECED1D1D0D1D1CFD1D4D1D1D4D4D4D3D1CFCFCACFCFD1CFD1D1D1D3D3D3D3D1D1D3D3D1D1D1D1CFCACBCFD0CFCFCFD1D0D1D1D4D1D0D0D1CFD1CECACACACECEC9CAC9CBC9C9C6C6C3C3C3C3BFBFBFC1BFBDBCB9BCB9B9B6B5B8B5B1B5B5B5B5B5B8B8BBB9B9BBBBBBBFBCBDBDBBBBBBBBBBB8B9BBBDBDBDC1C1BDBDC1C1BFBBB9B9B9B9BBBBBBBBBBB9B5B5B8BBBBBBBBBBBBB9B5B8B8B8B8B8BBB6B3B6B6BBBBB8B3B2B2B5B6BBB6B6B3B5B2B5B3B6B6B8B5B5B3B5B5B3B5B5B8B8B82E010202020202020202020199FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDEED7D5D7DADEE1DFDEDBDBE9F8D6C8C9CACAC9C6C8C9C6C5C6C5C8C9C9C9C8C6C9C8C8C5C5C3C3C4C3C1C1C3C3C3C3C0C0C0C0C3C3C3C3C3BFC0C0BCBFBCBCBFBFC1BFC1C3C3C3BFBFC0BDBBB8B8B6B5B6B6B6B6B6B6B2B6B3B2B2B2B2B2B6B6B6B6BBB9B6B3B3B3B2B2B1B1B0B1B2B2B2B3B6B5B6B2B2B6B9B8B8BBBDBDC0BCBCBBBCBCBDBBBDBDC0C0C3C4C3C4C4C3C3C3C3C3C5C3C3C0BFBFBFC3C0C3C0C1C3C3C5C5C5C4C4C4C3C3C3C5C5C4C3C5C8C8C5C3C3C3C3C3C1C0C0C3C0C3C3BFBCBDBFBFBFBFBCBCBCBFBFBBBBBBBBB8B8B8B8B6B6B3B3B1B3B3B3B3B3B1B1B1B1B0ABABB0AEAEAEABACACAEAEAAA7A7A7A7A7ABAAA7A8A7A5A5A5A5A7A7A5A5A1A1A1A3A3A3A19F9F9C9C9C9C9E9C98979796979794979A9A9C9C9C9C9FA1A1A1A5A5A5A7ABA7A7A7A5A1A5A5A5A3A5A8ABB0AEB1B1B3B3B3B1B3B2B2B2B1B1B2B2B3B5B3B3B6B9B8B5B3B3B3B3B3B8B8B8B8BBBBBBBCBCBBBFBFBCBCBCBBBDBDBFC0C3C0C3C4C3C3C4C4C5C4C3C5C5C3C3C3C4C4C5C8CACBC9C9C6C4C4C4C6C6C6C4C3C1BDBBBBBBBBB9BCBBBBBDBDBDBDBBBDBDBBBBBBBCBCBCBCB9B9B9B5B9B8B3B8B8B9B9B8B3B5B5B5B6B6B8BBBBBBBBBBB8B8B3B6B6B3B3B3B3B1B1B3B6B8BBBBBBB9B5B2B3B3B3B1B3B2B1AEAEAEB0B0B1B1B1B1B1B3B5B5B5B5B5B5B8B9BCBBBBBBBBBBBCC0C3C4C3C3C3C4C4C5C5C5C6C5C4C6C4C3C3C3C3C3C0BCBBBBBBBDBFBFC1C1C1C3C3C3C3C6C5C5C4C3C3C4C3C4C4C5C3C5C5C9C5C3C5C3C3C3C3C3C3C0BDBFBCBCBFC3C3C3C5C3C5C5C6C9C9C9C8C9C6C6C8C8C9C9C9C6C6C4C4C5C9C5C8C4C6C3C3C3C5C3C3C1C1C3C0BCBCBCBBB9B9B9B8B6B6B9BBBDBBBBB9BCBFBFBFC0C0C0C0BCBDBDBDC0C0C0BFBFBCBDBCBCBCBFBDBDBBBDBCBCBCC0C3C3C5C3C3C3C3C3C3C4C3C3C3C3C3C3C3C3C4C4C4C4C3C4C4C8C8C935020202020202020202020299FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF3DFDFDCDADEDEDEDFDCDAE7F7D4C3C3C0BDBDBBBDBFBFBCBBB9B9B9B6B8B8B8B8B6B6B5B5B5B5B2B0B2B3B2B5B2B1B1ACACB0ABABB0ABAAA7AAA7A7A5A1A19F9FA1A5A5A7A3A3A3A3A3A5A5A5A7AAAAAAAAA8A8A7A7A7A7A7A7AAA7A7A5A5A5A7A5A5A5A5A8A7A5A7A7A7A7A5A1A5A5A5A3A5A5A3A5A7A7A7A7A5A5A5A5A7A7A7AAABAEAAA7A8A8A8AAA7A7A8A8A5A5A7A5A7A8A8A8A8A8AAAEAEB1AEAEABAEABAEAEAEB0B1AEAEAEABB0B1B1B1AEAEAEAEAAAAACACB1B1B1B3B3B6B6B6B2B2B6B9BBBBBBB6BBBBB8B5B1B1B3B5B8B5B1B5B8B8B8B6B6B6B5B5B2B2B2B2B2B6B6B9BBBBBBB6B6B2B5B5B5B3B1B3B1B1AEACB0B2B0B0B0B0B1B0B2B5B5B3B3B1B1B1B1B2B1B2B3B3B2B1AEB1B1B1B3B3B1B1B1B2B1B1B1B1B1B1AEABAAAAA7A5A5A5A7A7A7A5A5A1A19F9F9C9C9C9E9EA1A19E9EA1A5A5A19E9E9C9E9CA1A3A7A3A1A3A19E9E9E9C9A9A9E9A9E9C9CA1A3A5A5A5A7A7AAA7A7AAA7AAAAAAAAA8A5A5A8A8ABACB0B2B1B1B1B1B3B3B2B6B5B5B1B1B1B3B1B1B1B3B6B6BBB6B6BBBBBBB6BBBCBCBCBCC0BDC1C1C4C4C4C8C9C9CEC9CECECFD0CECECECACACED0D3D0D0CFCFCFCFD1D1D0D3D1D0D1D4D1D1D4D4D4D4D1D0D0CBD0D0D1D0D1D1D1D4D4D4D4D3D1D4D4D3D3D3D1D0CBCED0D0D0D0D0D3D0D1D1D4D3D0D0D3D0D1CFCBCBCBCFCFCACBCACECACAC8C8C4C3C3C3BFBFBFC1BFBDBCB9BCB9B9B6B5B8B5B1B5B5B5B5B5B8B8BBB9B9BBBBBBBFBCBDBDBBBBBBBBBBB8B9BBBDBDBDC1C1BDBDC1C1BFBBB9B9B9B9BBBBBBBBBBB9B5B5B8BBBBBBBBBBBBB9B5B8B8B8B8B8BBB6B3B6B6BBBBB8B3B2B2B5B6BBB6B6B3B5B2B5B3B6B6B8B5B5B3B5B5B3B5B5B8B8B8B6B5B9BBBBBDBBBBB9BBBBB6B9B8B8B8B8B8BBB8BBBDBBBDBDBDBDBDBCBCBDBBBBB8BBB8B5B5B5B8BBB9B9B9BBBDBDBCB9BCBFC1C1C1C1BDBFBFBFC3C432020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE5CACECFD0D5D3D1D3D4D6E1F4D1C5C3C5C8C4C4C3C0C0BDBBBBB9B6B5B8BBBBBBB9B9B9B9B9B9BCBCBDBDC0BDBDC0BDBDBDBBBBBBBFBFBFBDBDBBBBBBBDBDBDBBBBBBBBBCBCBDC1C3C3C5C3C5C3C3C6C5C3C3C4C4C4C5C4C3C3C3C3C3C5C5C5C3C3C3C5C5C5C5C6C4C4C4C3C3C5C5C6C4C4C5C3C4C4C5C9C9CACBCBCED0D1D0D1D3D3D0D1D1D0D3D0D0D0D0D0D0D0D0CFD1D0D0D0D3D0D3D1D4D4D4D4D7DADAD7D4D4D4D1D4D4D3D4D4D4D4D4D4D4D3D4D4D9D9D9D9DBDADAD7D7D7DADBDEDEDBDBD9D9D7DADADADADBDFDFDEDCDCDCDFDFDEDEDBDBDBDBDEDFDEDBDBDEDEDFDFDFDFE1E3E1E1E1E3E4E2E1E1E4E1E1DFDFE1DFDCDEDCDEDCDFDFE2E2E1DEDBD9D7D4D4D4D7D9D4D4D7D7D7D7D4D0D0D0D0D0D0D0D0D0D0CFCFD0D0D1D0D1D0CECECECECED0D0D3D0D0CECEC9C9C6C6C6C4C8C4C5C5C3C5C5C4C4C1C1BFBFBFC1C1C3BFBCBCBCBBBBBBBFBBBBBBB6B9BCBCBBBBB9BBBBB8B5B5B2B2B1AEAEABAAAAAEB0B0B0B1B5B1B1B1B1B5B8B5B5B1B1B1B1B1B1B1B1B1B1B0ACACACACACACABABA8A8A8A5A5A5A5A39F9CA1A1A3A3A3A3A5A5A1A19FA1A3A3A5A5A5A8A7A8A8A8A5A5A19E9EA1A5A19E9E9E9E9E9F9C9A9C9C9C9C9C9C9C9C9C9C9CA1A3A1A1A5A5A5A5A5A5A5A7A8A8A7ABABA7A7A7A7A7A7AAA7A7A8A8A7A5A5A5A5A7AAA7A7A7A5A5A3A3A5A7ABABABABABAEB1B1B1B1AEAEAEAEAEAEB1B2B2B2B0ACACA8A7A5A5A5A5A7A8AAAEB1B1AEAAACB0ACACACAAACB0B0B1B1B1B0B1B1B1B2B1B1B3B1B1B5B6B6B6B8BBBBB8B9B8B9B5B6B3B3B6B3B3B3B6B6B3B3B3B1B1B2B6B6B5B5B5B5B5B8B8BBB8BBBBB8B8B6B8B8B8B3B3B3B8B8B9BBBBBBBBBBBBBBB6B6B3B6BBBBBCBCBCBCBFBCB9B8B6B6B5B1B5B5B5B1B3B3B2B3B1B1B1AEABABAEAEAEAEABACACAAACAAAAAAAAAAA8A8A8A8A8A7A7AAA7AAAEABABAEAEAA2B010101010101010101010198FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE0C4C5C1BDBDBDBBBBBBBFC9DBBBACACACAEB0B0B0ACACAEB0ACABACB0B0B0B1B0ABAAAAABABABABA7A7ABAAAAABAEAEACAAAAAAAAACB1B1B5B5B3B3B6B3B1B3B3B1B1B3B1ACACACAEACACB0AEACAEABACACB0B2B2B0B1B1B1B2B2B1B1AEB1B1B0B0B1B2B2B2B2B2B2B6B2B3B6B6B6B6B3B3B3B3B1B1AEAEB1B2B6B6B6B6B8BBB6B3B5B5B2B3B8B6B6B9BBB8B8B8B5B5B8BBBBB8B8BBBDBDBCBCBCBBB9B8BBBCBCBBBCBFBFBFBFC1C1C4C4C3C3C0BFBFBDBCBDBBBDBDC0C0BCC0C0C1BDBCBCBCBCBCBFBCBCBFBCBBBBBBBBBBBBBBB8BBBBBBBDBBB8BBBBBBB6BBB9BBBBB8B9B9BBBBBBB9BBBCC0C0BFC1C3C1C3C0BCBBBCBBBBBCB9B6B2B2B6B9B5B5B2B3B2B2B3B3B6B6B5B5B9B9B6B6B6B6B3B3B3B6B9B9B9B9B6B8B9BBBCBBB6B6B6BBBBBCBDC0C0C0C0C3BFBFC3C3C3C4C4C3C3BFBCBCC0C0C0C0BFBDC1C3C4C8C4C8C8C8C9C8C8C8C8C8C6C6C8C8C8C8C9C9C9C9CACBCFD0D3D4D7D9DADCDFDFDFDFDEE1E1E1E1E2E1DCE1DCDCDEDBDADADBDBD9DBDFDFDEDBDBDBDFE1E1DCDFDFDCDCDFDBDADADADADAD9DAD7D7D7D9D9D4D4D4D3D3D4D4D7DADADADBDBDBDBDAD7D4D1D0D0D0D0D0CFD0D0CEC9C9CACACECACAC9C9C5C5C5C5C5C5C6C4C4C3C3C1C1BFBFBFBCBCBCBCBCBCBCBFBFBCBFBFBDC1C0C0C0C0C3C3C3C1C1C3C3C3C1C1C3C3C0C0C1C4C5C5C8C4C4C3C3C0C1C1BFBCBCBCBFC0C0C1C4C4C3C3C3C3C3C3C3C1C1C3C5C8CACECBC9C9C9CACACFD0D1D1D1D0D0D0CECFCFD0CECACACACACACFCACECECECED0D0D0D1D1D1D0D1D0CFCBCBD0D0D0D0D0D3D0D0D0CECECFD0D0D0D0D0D0D0D0D4D7D7D7D7D7DADADCDBDCDCE1DEE1E2E1E3E2E1DEDBDBDBDBDEDBDADADADADBDCDCDCDCDCDCDBDCDFDCDCDCDCDCDEDEDEDEDFDFE1E4E2E2E4E6E9E6E6E2E2E2E6E6E3E4E4E3E2E2E3E1E1E4E1E3E3E4E4E1E1DEDBD9D9D9D9D93A020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF5E3E4E4E4E6EAE4E6E4E4EBF9D5C6C6C4C8C4C5C5C3C5C5C4C4C1C1BFBFBFC1C1C3BFBCBCBCBBBBBBBFBBBBBBB6B9BCBCBBBBB9BBBBB8B5B5B2B2B1AEAEABAAAAAEB0B0B0B1B5B1B1B1B1B5B8B5B5B1B1B1B1B1B1B1B1B1B1B0ACACACACACACABABA8A8A8A5A5A5A5A39F9CA1A1A3A3A3A3A5A5A1A19FA1A3A3A5A5A5A8A7A8A8A8A5A5A19E9EA1A5A19E9E9E9E9E9F9C9A9C9C9C9C9C9C9C9C9C9C9CA1A3A1A1A5A5A5A5A5A5A5A7A8A8A7ABABA7A7A7A7A7A7AAA7A7A8A8A7A5A5A5A5A7AAA7A7A7A5A5A3A3A5A7ABABABABABAEB1B1B1B1AEAEAEAEAEAEB1B2B2B2B0ACACA8A7A5A5A5A5A7A8AAAEB1B1AEAAACB0ACACACAAACB0B0B1B1B1B0B1B1B1B2B1B1B3B1B1B5B6B6B6B8BBBBB8B9B8B9B5B6B3B3B6B3B3B3B6B6B3B3B3B1B1B2B6B6B5B5B5B5B5B8B8BBB8BBBBB8B8B6B8B8B8B3B3B3B8B8B9BBBBBBBBBBBBBBB6B6B3B6BBBBBCBCBCBCBFBCB9B8B6B6B5B1B5B5B5B1B3B3B2B3B1B1B1AEABABAEAEAEAEABACACAAACAAAAAAAAAAA8A8A8A8A8A7A7AAA7AAAEABABAEAEAAAAABAEB1B3B3B3B3B3B3B2B2B1B1B1B1AEAEAAAAAEACABACAAAAAEACACA8A8A7A5A7A7A7A8A8A8ABABB0B0B0ABABAEB1B3B1B3B6BBBBBBB8BBBBBBBCBFBDBDBFBDBDBDBDBDC1BFBFBBBFBBBBBBBBBCBCBCBCBCBCBBB8B3B1B3B3B2B2B2B5B5B2B3B3B3B3B6B8B6B3B3B1B0ACACACB0B1B0B2B3B5B1B5B9B9BBBBBBBBB9BBBBBBBBB9BBBBBFC3C3C4C4C4C3C1BDC1BDBDBBBBBBBBBBBBBCBBB6B3B3B3B6B6B6B9B5B5B3B3B3B8BBBBBDC0C0C3C0C3C3C4C8C9C9C8C8C9C9C9C9CBCFCFCFCBC9CBC9C9C9CAC9C9C9C9C9C8C6C6C9C6C6C5C8C9C9C9C9C6C6C4C3C4C3C1C3C3C3C0C3C4C4C3C3C3C5C5C4C4C3C1C1C1C0BFBFC3C0C3C0C0C0BCBBB8B5B2B2B6B9BCBBBBB9B9BBBCBCBCBCB9B9B9B9B8B8B8B5B5B2B2B2B2B2B1B1B0B0B0B0ABABABAC2C010101020101010101010198FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDEBFC3C6C5C6C6C1C3C3C3CEE2C1B2B2B2B0ACACA8A7A5A5A5A5A7A8AAAEB1B1AEAAACB0ACACACAAACB0B0B1B1B1B0B1B1B1B2B1B1B3B1B1B5B6B6B6B8BBBBB8B9B8B9B5B6B3B3B6B3B3B3B6B6B3B3B3B1B1B2B6B6B5B5B5B5B5B8B8BBB8BBBBB8B8B6B8B8B8B3B3B3B8B8B9BBBBBBBBBBBBBBB6B6B3B6BBBBBCBCBCBCBFBCB9B8B6B6B5B1B5B5B5B1B3B3B2B3B1B1B1AEABABAEAEAEAEABACACAAACAAAAAAAAAAA8A8A8A8A8A7A7AAA7AAAEABABAEAEAAAAABAEB1B3B3B3B3B3B3B2B2B1B1B1B1AEAEAAAAAEACABACAAAAAEACACA8A8A7A5A7A7A7A8A8A8ABABB0B0B0ABABAEB1B3B1B3B6BBBBBBB8BBBBBBBCBFBDBDBFBDBDBDBDBDC1BFBFBBBFBBBBBBBBBCBCBCBCBCBCBBB8B3B1B3B3B2B2B2B5B5B2B3B3B3B3B6B8B6B3B3B1B0ACACACB0B1B0B2B3B5B1B5B9B9BBBBBBBBB9BBBBBBBBB9BBBBBFC3C3C4C4C4C3C1BDC1BDBDBBBBBBBBBBBBBCBBB6B3B3B3B6B6B6B9B5B5B3B3B3B8BBBBBDC0C0C3C0C3C3C4C8C9C9C8C8C9C9C9C9CBCFCFCFCBC9CBC9C9C9CAC9C9C9C9C9C8C6C6C9C6C6C5C8C9C9C9C9C6C6C4C3C4C3C1C3C3C3C0C3C4C4C3C3C3C5C5C4C4C3C1C1C1C0BFBFC3C0C3C0C0C0BCBBB8B5B2B2B6B9BCBBBBB9B9BBBCBCBCBCB9B9B9B9B8B8B8B5B5B2B2B2B2B2B1B1B0B0B0B0ABABABACB1B3B6B6B9B6B2B2B3B3B5B1B1B5B2B2B1B1B1B0B0ACAAAAAAAAA8ACABABAEAEAEAEAEB1B2B2B1B3B3B3B1B1B0AEABB0B0B0B0B2B1B1B1B1B5B8B8B8B8B6BBBBBBBBBBBBBCB9B9B9B9B8B8B8B8BBBBB8B6B5B3B3B5B9BBBBBBBBBBBCBFBFBCBBBBBBBBB8B9B9B9B9BBB6BBBCBCBDBBBDC0C0BFBFC1C1C3C6C8C5C4C5C5C3C3C0BDBDBBB9B8B8B6B3B3B3B1B1B1B1B1B2B2B2B1B3B1AEAEAEAEB1ACAEAEACA8ACAEB1B1B1B0B0ACACACACB1B2B1B0B1B1B2B2B1ACB1B1B3B5B5B3B1AEAEAEABA7A7A7A7AAACACACAAACACACAC2B010101010101010101010198FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE2C4C5C4C0C1C1C0C1C3C1CADCB9A8A5A5A5A5A39F9CA1A1A3A3A3A3A5A5A1A19FA1A3A3A5A5A5A8A7A8A8A8A5A5A19E9EA1A5A19E9E9E9E9E9F9C9A9C9C9C9C9C9C9C9C9C9C9CA1A3A1A1A5A5A5A5A5A5A5A7A8A8A7ABABA7A7A7A7A7A7AAA7A7A8A8A7A5A5A5A5A7AAA7A7A7A5A5A3A3A5A7ABABABABABAEB1B1B1B1AEAEAEAEAEAEB1B2B2B2B0ACACA8A7A5A5A5A5A7A8AAAEB1B1AEAAACB0ACACACAAACB0B0B1B1B1B0B1B1B1B2B1B1B3B1B1B5B6B6B6B8BBBBB8B9B8B9B5B6B3B3B6B3B3B3B6B6B3B3B3B1B1B2B6B6B5B5B5B5B5B8B8BBB8BBBBB8B8B6B8B8B8B3B3B3B8B8B9BBBBBBBBBBBBBBB6B6B3B6BBBBBCBCBCBCBFBCB9B8B6B6B5B1B5B5B5B1B3B3B2B3B1B1B1AEABABAEAEAEAEABACACAAACAAAAAAAAAAA8A8A8A8A8A7A7AAA7AAAEABABAEAEAAAAABAEB1B3B3B3B3B3B3B2B2B1B1B1B1AEAEAAAAAEACABACAAAAAEACACA8A8A7A5A7A7A7A8A8A8ABABB0B0B0ABABAEB1B3B1B3B6BBBBBBB8BBBBBBBCBFBDBDBFBDBDBDBDBDC1BFBFBBBFBBBBBBBBBCBCBCBCBCBCBBB8B3B1B3B3B2B2B2B5B5B2B3B3B3B3B6B8B6B3B3B1B0ACACACB0B1B0B2B3B5B1B5B9B9BBBBBBBBB9BBBBBBBBB9BBBBBFC3C3C4C4C4C3C1BDC1BDBDBBBBBBBBBBBBBCBBB6B3B3B3B6B6B6B9B5B5B3B3B3B8BBBBBDC0C0C3C0C3C3C4C8C9C9C8C8C9C9C9C9CBCFCFCFCBC9CBC9C9C9CAC9C9C9C9C9C8C6C6C9C6C6C5C8C9C9C9C9C6C6C4C3C4C3C1C3C3C3C0C3C4C4C3C3C3C5C5C4C4C3C1C1C1C0BFBFC3C0C3C0C0C0BCBBB8B5B2B2B6B9BCBBBBB9B9BBBCBCBCBCB9B9B9B9B8B8B8B5B5B2B2B2B2B2B1B1B0B0B0B0ABABABACB1B3B6B6B9B6B2B2B3B3B5B1B1B5B2B2B1B1B1B0B0ACAAAAAAAAA8ACABABAEAEAEAEAEB1B2B2B1B3B3B3B1B1B0AEABB0B0B0B0B2B1B1B1B1B5B8B8B8B8B6BBBBBBBBBBBBBCB9B9B9B9B8B8B8B8BBBBB8B6B5B3B3B5B930020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEECD5D6D6D5D7D9D7DADBDBE7F8D6C8C5C3C3C0BDBDBBB8B8BBBBB9BBBBBBBBBBBCBBBBBBBDBBBBBCBFC3C3BFC0BDBFBFC0C0C0C0BDBDBDBDBDC0BCC0C1C1C0C3C0C0C0C0C1BDC1BFBCBCBCBBBCBCC0C1C1C1BDC1C1BDBDC1C1C3C3C3C3C1BFBFC3C3C0BDBBB8B5B5B5B8B8B8B9B9B9B9B9B8B5B5B5B8B8BBBBBBBCBFBFBFBFC3C3C3C3C4C5C8C8C8C8C6C6C4C4C4C3C3C5C5C8C8C8C8C4C6C6C6C9CBCFCFCACECECBC9C9C9CEC9C9C9CED0D0D1D4D0CFD0D0D0CBCBCBD0D0CECECECAC8C8C5C5C5C6C8C8C9C6C6C9CACACFD0D0CFD0D0D0CEC9C9C9C6C4C8C8C9C9C5C3C5C6C5C3C3C0BDBDBBBDBFBFBCBBB9B9B9B6B8B8B8B8B6B6B5B5B5B5B2B0B2B3B2B5B2B1B1ACACB0ABABB0ABAAA7AAA7A7A5A1A19F9FA1A5A5A7A3A3A3A3A3A5A5A5A7AAAAAAAAA8A8A7A7A7A7A7A7AAA7A7A5A5A5A7A5A5A5A5A8A7A5A7A7A7A7A5A1A5A5A5A3A5A5A3A5A7A7A7A7A5A5A5A5A7A7A7AAABAEAAA7A8A8A8AAA7A7A8A8A5A5A7A5A7A8A8A8A8A8AAAEAEB1AEAEABAEABAEAEAEB0B1AEAEAEABB0B1B1B1AEAEAEAEAAAAACACB1B1B1B3B3B6B6B6B2B2B6B9BBBBBBB6BBBBB8B5B1B1B3B5B8B5B1B5B8B8B8B6B6B6B5B5B2B2B2B2B2B6B6B9BBBBBBB6B6B2B5B5B5B3B1B3B1B1AEACB0B2B0B0B0B0B1B0B2B5B5B3B3B1B1B1B1B2B1B2B3B3B2B1AEB1B1B1B3B3B1B1B1B2B1B1B1B1B1B1AEABAAAAA7A5A5A5A7A7A7A5A5A1A19F9F9C9C9C9E9EA1A19E9EA1A5A5A19E9E9C9E9CA1A3A7A3A1A3A19E9E9E9C9A9A9E9A9E9C9CA1A3A5A5A5A7A7AAA7A7AAA7AAAAAAAAA8A5A5A8A8ABACB0B2B1B1B1B1B3B3B2B6B5B5B1B1B1B3B1B1B1B3B6B6BBB6B6BBBBBBB6BBBCBCBCBCC0BDC1C1C4C4C4C8C9C9CEC9CECECFD0CECECECACACED0D3D0D0CFCFCFCFD1D1D0D3D1D0D1D4D1D1D4D4D4D4D1D0D0CBD0D0D1D0D1D1D1D4D4D4D4D3D1D4D4D3D3D3D1D035020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF4DEDEDBDBDCE1DBDFDCDEE6F6D3C6C4C4C1C1C3C0BCBCBCBBB9B9B9B8B6B6B9BBBDBBBBB9BCBFBFBFC0C0C0C0BCBDBDBDC0C0C0BFBFBCBDBCBCBCBFBDBDBBBDBCBCBCC0C3C3C6C4C4C4C3C3C4C5C3C4C4C4C4C4C3C3C5C5C5C5C3C5C5C9C9CACAC9CACACACACAC9CAC9C9C8C9C9CBC9CBCBCBCBCFCBCFCEC9CECECACAC9C9C8C8C8C9C9C9C6C6C8C8C6C6C3C5C8C6C3C6C5C9C9C8C6C4C4C4C5C5C9C9CACACACACAC9CBCAC9C5C5C5C3C3C3C4C3C3C1C1C1C0C0C0C0C0BCBBBBBBB8B3B3B3B6B6B6B6B5B2B2B5B5B5B5B5B5B9B6B5B8B8B5B6B6B8B6B3B1B1AEB0AEB1B1B1B1B1B1B1B3B6B5B8B5B1B5B8B8B9B6B8B5B6B5B1B3B6B6B8B8B3B3B1B1AEACACAAAAAAA7A7A7A5A3A5A5A7AAACABABACABAAABAEB0B0ACAAAAACAAAAAAABACB1B1B2B2B1B1B1B0ABABAEB1B1ACA8A8A8A7A7A5A8AAA7AAACACACAEB0B0B0ACACAEB0ACABACB0B0B0B1B0ABAAAAABABABABA7A7ABAAAAABAEAEACAAAAAAAAACB1B1B5B5B3B3B6B3B1B3B3B1B1B3B1ACACACAEACACB0AEACAEABACACB0B2B2B0B1B1B1B2B2B1B1AEB1B1B0B0B1B2B2B2B2B2B2B6B2B3B6B6B6B6B3B3B3B3B1B1AEAEB1B2B6B6B6B6B8BBB6B3B5B5B2B3B8B6B6B9BBB8B8B8B5B5B8BBBBB8B8BBBDBDBCBCBCBBB9B8BBBCBCBBBCBFBFBFBFC1C1C4C4C3C3C0BFBFBDBCBDBBBDBDC0C0BCC0C0C1BDBCBCBCBCBCBFBCBCBFBCBBBBBBBBBBBBBBB8BBBBBBBDBBB8BBBBBBB6BBB9BBBBB8B9B9BBBBBBB9BBBCC0C0BFC1C3C1C3C0BCBBBCBBBBBCB9B6B2B2B6B9B5B5B2B3B2B2B3B3B6B6B5B5B9B9B6B6B6B6B3B3B3B6B9B9B9B9B6B8B9BBBCBBB6B6B6BBBBBCBDC0C0C0C0C3BFBFC3C3C3C4C4C3C3BFBCBCC0C0C0C0BFBDC1C3C4C8C4C8C8C8C9C8C8C8C8C8C6C6C8C8C8C8C9C9C9C9CACBCFD0D3D4D7D9DADCDFDFDFDFDEE1E1E1E1E2E1DCE1DCDCDEDBDADADBDBD9DBDFDFDEDBDB3A020202020202020202020299FEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CACBCBCBCBC9C5C6C4C5CEE6C3B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D73902020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0D1D1CED1D1D0D1D0D1DCF4D3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8C9CBCBC9C9C9C9C6C8CAD7EECBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C33002020202020202010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECD5D5D9D5D9DBD9DAD7DAE7F8DACBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C63302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED9DCDAD9DADCDBDEDEDEEAF8D4C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBF3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBCFCFCECFD3D3CFD3D6D6E1F4D1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B92F01010202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DCDEE1E3E6E6E1E4E6E4EBF9D9CECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B62F020202020202020201020199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D1D7D7D5D7D9D7D9D7D3DCF3CEBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C93402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9DADBDBDFDFDEDFDEDEE6F7D5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BB2E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB9B9BCBDBFBDC0C1BDBDC5DBB8A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B12C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7EAEAEAE9EAE9E9EBE7F2FDDCD0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BC3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBD1D4D4D3D3D5D5D5D4D4DFF3CEBDC0C0C0C1C1BFC1C1BDBDBDBDC1C1C3C4C6C9C9C9C5C5C5C3C3C5C1C1BFBFBFC0C1C4C1C3C5C3C4C6C8C8C8C5C8C8C8C8C6C6C6C6C6C6C8C8C6C6C9C6C8C9C9C9C9C9CED0D0D1D0D0CECBCBCBCECACACECACECECED0CED0D0D0D3D3D1D1D0D0D0D0CED0D0D0D0D0CBCED0D3D0D0D3D3D0CECECBCBC9C6C4C1C1C1C1C1C1C0BDC0C1C1BFBDBBB9B9B9B9B9BDBFBFBDBDBDC1BFBFC0C0C1BFBFBFBFC1BFC0BFBFBCC0C0BDBDBCBDBDBDB9B8B6B9B9B8B9B9B9B9BBBBB9BDBDBDB9B9BCB9B6B9B5B9B9B8B8B5B6B6B9B8B6B6B6B2B6B2B2B2B6B2B2B2B6B9B9B8B5B5B8B9BBBCC0BFBFBFC0C1C1C1C3C6C4C6C9C5C5C3C1C1BFBCBBB9B8B6B9BCBBBBB9B9B9B9B9B9BDBDBFBFC1BFBFC1BFBFBFBBBBBCC0C0C0BFBFBBBBBBBFBFBFBCBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E26010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E4EAEAEAEBECEBF1F1F1F8FFE4DBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B52D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C9C6C4C3C4C4C5C3C4C4CBDEBFB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0AC2C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CFD0D0CFD0CECBCECED1D7ECC9B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D33802020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9ECEBE9E7E9E9E7E9E9E9F3FDDCD0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B92F020101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD9D9D7D1D1D1D0D4D6D6E3F6D1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C9C9CBCBCBC9C8CBD0D1DCF1C9BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C83402020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C9C6C5C6C6C4C1C1C5CEE3C0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB02C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8ECEEEEECEBE9E7E9E9E9F3FDDED1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBD30020202020101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E7EAE7E6E4E3E1E1E2E3EFFCDBCED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A3A5A5A7A3A5A7A3A7A8A8A8A8A7A7A5A5A7A7A8ABACB0ABA7AAAAAAABA7A7AAAAA7A7A7A5A7AAAAAAAAAAABB0B0B1B0B0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A72B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3C1C3C3BFC3C5C4C6C8C6D0E6C1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B32D010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EAEBEBEAEAEAEAEBEBEBF6FFDCCECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B92D01010101010101010101019AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C6C6C3C3C3BFC0C0BDC5DBB5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DE3B02020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D9DADADBDCDEDCDEDFDEE7F8D4C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C13002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CBCBCBCBC9CBC9C9C9C9D3E9C9B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBFC1C1C4C6C4C6C6C4C4C3C4C4C8C4C3C1C0C0C0C3C1C3C1C1C4C4C8C8C8C6C6C6C5C5C5C8C8C6C5C8C9C9C8C5C5C5C5C5C1C1C1C4C1C3C3C0BDBFC0C0C0C0BDBDBDC0C0BCBCBBBBB9B9B9B9B8B8B5B5B2B5B5B5B5B5B2B1B1B1B1ACACB1B0B0B0ACACACB0B0ABA8A8A8A8A8ACABA8AAA8A5A5A5A7A8A8A5A5A3A3A3A3A3A3A3A1A19E9E9E9E9F9E9A999997979796979B9B9E9E9E9EA1A2A2A3A5A5A7A8ACA8A8A8A7A3A5A5A7A3A7AAACB1B0B1B1B5B5B5B2B5B3B3B3B1B1B3B3B5B6B5B5B8B9B9B6B5B5B5B5B5B9B9B9B9BCBCBCBDBDBCC0C0BDBDBDBCBFBFC0C1C3C1C3C6C3C4C6C6C8C6C5C8C8C4C4C4C6C6C8C9CECECBCBC9C6C6C6C9C9C9C6C4C1BFBCBCBCBCB9BDBBBBBFBFBFBFBCBFBFBCBCBCBDBDBDBDB9B9B9B6B9B9B5B9B9B9B9B9B5B6B6B6B8B8B9BBBBBBBCBCB9B9B5B8B8B5B5B5B5B2B2B5B8B9BBBCBCB9B6B3B5B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C132020202020202020202010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD1CFCFCECFCECBCECED1DCEEC9B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8AB2A010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDB9BCBFBDBFBFBDC0C4C4D0E3C0ACB0ACB0B0B0B1B1B0B0B0ACB1B2B1B1B0B0B0B0ABABACACB1B2B2B5B5B8B8B8B3B3B8B9BCBCBBB8BBBBB9B6B2B2B5B6B9B6B2B6B9B9B9B8B8B8B6B6B3B3B3B3B3B8B8B9BCBBBBB8B8B3B6B6B6B5B1B5B1B2B0ACB1B3B1B1B1B1B2B1B3B6B6B5B5B2B1B1B1B3B1B3B5B5B3B2B0B1B2B2B5B5B1B2B2B3B1B1B1B1B2B2B0ACABABA7A5A7A7A7A7A7A5A5A3A3A1A19E9E9E9F9FA3A29F9FA2A5A5A29F9F9E9F9EA2A3A7A3A2A3A29F9F9F9C9B9B9F9B9F9E9EA2A3A7A7A7A8A8ABA7A7ABA7ABABABABAAA7A7AAAAACACB1B3B1B2B1B1B5B5B3B8B6B6B2B1B1B5B2B2B2B5B8B8BBB8B8BBBBBBB8BBBDBDBDBDC1BFC1C1C5C5C5C9CACACECACECED0D1CECECECBCBCED0D4D0D1D0D0D0D0D3D3D1D4D3D0D3D6D3D3D6D6D6D4D3D0D0CED0D0D3D0D3D3D3D4D4D4D4D4D3D4D4D4D4D4D3D0CECED0D1D0D0D0D4D1D3D3D6D4D1D1D4D0D3D0CECECED0D0CBCECBCECBCBC9C9C5C4C3C3C0C0C0C1C0BFBDB9BDB9B9B8B6B9B6B2B6B6B6B6B6B9B9BCB9B9BCBCBCC0BDBFBFBBBBBBBBBBB9B9BBBFBFBFC1C1BFBFC1C1C0BCB9B9B9B9BBBBBBBBBCB9B6B6B9BCBCBCBBBCBCB9B6B9B9B9B9B9BBB8B5B8B8BBBBB9B5B3B3B6B8BBB8B8B5B6B3B6B5B8B8B9B6B6B5B6B6B5B6B6B9B9B9B8B6B9BCBCBFBCBBB9BBBBB8B9B9B9B9B9B9BCB9BCBFBCBFBFBFBFBFBDBDBFBCBCB9BCB9B6B6B6B9BCB9B9B9BCBFBFBDB9BDC0C1C1C1C1BFC0C0C0C3C5C3C0C0C0C3C0C3C5C4C4C1C3C6C9CBCBC9C6C6C9C9C9C9CBCECECAC9C9CAC9C8C9C8C9CBCACAC9C9CBC9C9C8C8C4C5C6C4C1C1C4C4C3C3C1C1C1C1C3C3C3C3C3C0C1C1BDC0BDBDC0C0C1C0C1C3C3C3C0C0C1BFBBB9B9B8B6B8B8B8B8B8B8B3B8B5B3B3B3B3B3B8B8B8B8BBB9B8B5B5B5B3B3B2B2B1B2B3B3B3B5B8B6B8B3B3B8B9B9B9BBBFBFC1BDBDBCBDBDBFBCBFBF3002020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9CBCFD3D1D0D0CED0D1CED6EBC5B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B22C010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3C4C3C3C3C5C3C0C3C5C5D0E7C1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C83302020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7B6B9B6B2B2B2B2B2B5B1B9CEAC9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B92E010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAECEBEBEAEAEBEAEAECECF6FFDFD6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B82F01010101010102020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D1D0CBC9C9C9CBCBCED0D6EBC6B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C130020202020202010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5C9C6C6C9CBCECFD1D1D0D6E9C6B5B5B2B5B3B1B0B0B0B1B1B1B2B2B1B2B5B6B6B6B6B6B6B9B9BDBBBBBBBBBCBDC1C3C6C4C4C4C6C6C8C8C8C9C8C6C9C6C3C3C3C3C3C1BDBCBCBCBFC0C0C1C1C1C5C3C3C5C9C8C8C6C5C5C6C4C6C6C8C5C8C8CAC8C5C8C4C3C3C3C3C3C1BFC0BDBDC0C3C5C5C8C4C8C8C9CACACAC9CAC9C9C9C9CACACBC9C9C6C6C8CAC8C9C6C9C5C5C5C8C5C5C1C1C3C1BDBDBDBCB9B9B9B9B8B8B9BCBFBCBCB9BDC0C0C0C1C1C1C1BDBFBFBFC1C1C1C0C0BDBFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBC30020101010102010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBCECBC9C8CBCFCACAC9CAD3E9C6B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D3D0D1D1D1D1D0D0D0CECACACBCBCECBCBC9C9C6C6C6C6C6C6C8C5C5C3C3C1C1C0C0C0BDBDBDBDBDBDBDC0C0BDC0C0BFC1C1C1C1C1C4C4C3C1C1C4C4C4C1C1C3C3C1C1C1C5C6C6C9C5C5C3C3C1C1C1C0BDBDBDC0C1C1C1C5C5C3C3C3C3C3C3C3C1C1C4C6C9CBCECEC9C9C9CBCBD0D0D3D3D3D0D0D0CED0D0D0CECBCBCBCBCBD0CBCECECECED0D1D1D3D3D3D0D3D1D0CECED0D0D0D1D1D4D1D1D1CECED0D0D0D0D0D0D0D0D1D4D7D7D9D9D7DBDBDEDBDEDEE1DFE1E3E2E4E3E1DFDCDCDCDCDFDCDBDBDBDBDCDEDEDEDEDEDEDBDEE1DEDEDEDEDEDFDFDFDFE1E1E2E4E3E3E4E6EAE6E6E3E3E3E6E6E4E4E4E4E3E3E4E2E2E4E2E4E4E4E4E2E2DFDCDADADADADADCDCDCDBDBDADADADAD7D7D4D1D0CBCBC9C8C8C6C5C5C5C3C1C1C1C1BFC0C3C4C4C1C1BFBCBCBCB9B9B6B5B2B1ACACABABABACACB0B0B0B0ACA8A7A3A3A3A1A19EA1A19E9E9FA2A2A2A29F9F9E9E9E9B9E9E9E9B9C9C9CA19E9FA2A3A7A7A7A7AAAAABA8A7A7A7A3A5A5A7A7A3A3A3A3A3A7A7A7A7A8A8A8A7AAAAAAAAAAABABB0B1ACACACACB1B0B0B2B5B5B9B9B9B6B9BBBDBCBDBDBDBBB9B9B9B9B9BBBDC1C4C1C1C3C3C6C4C1C4C4C3C3C0C3C1C1C0C1C1C1C1C1C4C1C5C5C5C4C1C4C4C4C4C1BFC1C5C1C1C3C3C4C4C4C5C3C1C1C1C1C3C3C3C5C4C8C9C8C8C8C6C9C9C9C6C6C9C9C9C6C6C6C8C8CACAC9CBCBCBCECECA3502020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D0D5D5D5D4D4CFD0D1D4DFF3CEBCBCBBBDBDBFC1C3C3C6C3C6C4C4C8C6C4C4C5C5C5C6C5C3C4C4C4C4C6C6C6C3C3C3C6C6C6C6C8C5C5C5C4C4C6C6C8C5C5C6C4C5C5C6C9C9CBCECECED1D3D1D3D4D4D1D3D3D1D4D0D0D0D0D0D0D0D0D0D3D1D1D1D4D1D4D3D4D4D6D6D7DBDBD7D4D4D4D3D4D4D4D4D4D4D4D4D6D6D4D6D6DADADADADBDBDBD9D9D9DBDCDFDFDCDCDADAD7DBDBDBDBDCE1E1DFDEDEDEE1E1DFDFDCDCDCDCDFE1DFDCDCDFDFE1E1E1E1E1E4E2E2E2E4E4E3E2E2E4E2E1E1E1E1E1DEDFDEDFDEE1E1E3E3E1DFDBDAD7D4D4D4D7DAD6D4D7D7D7D7D4D1D1D1D1D1D1D1D1D1D1D0D0D1D1D3D0D3D0CECECECECED0D0D4D0D0CECECACAC8C8C8C5C9C5C6C6C3C6C6C5C5C1C1C0C0C0C1C1C3C0BDBDBDBCBCBCC0BCBCBBB8B9BDBDBBBBB9BBBBB9B6B6B3B3B1B0B0ACABABB0B1B1B1B2B6B2B2B2B2B6B9B6B6B2B2B2B2B2B2B1B1B1B1B1ACACACACACACACACAAAAAAA7A7A7A7A3A19EA2A2A3A3A3A3A5A5A3A3A1A3A3A3A7A7A7AAA8AAAAAAA7A5A39F9FA3A5A39F9F9F9F9FA19C9B9C9E9E9C9C9C9E9E9E9E9EA2A3A2A3A5A5A7A5A5A5A5A7AAAAA8ACACA8A8A7A7A7A7ABA7A7AAAAA7A7A7A5A7A7ABA7A7A7A7A7A3A3A7A8ACACACACACB0B2B2B2B2B0B0B0B0B0B0B1B3B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B52E02020201020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0C3C6C6C6C6C4C3C4C4C4CEE6C5B3B3B1ACACAAA8A7A7A5A5A8AAABB0B1B1B0ABACB1ACACACABACB1B1B2B2B1B1B1B1B2B3B1B2B5B2B2B6B8B8B8B9BCBCB9B9B9B9B6B8B5B5B8B5B5B5B8B8B5B5B5B2B2B3B8B8B6B6B6B6B6B9B9BBB9BBBBB9B9B8B9B9B9B5B5B5B9B9B9BCBBBBBBBBBBBBB8B8B5B8BBBBBDBDBDBDC0BDB9B9B8B8B6B2B6B6B6B2B5B5B3B5B1B2B2B0ACACB0B0B0B0ACACACABACABABABABABAAAAAAAAAAA8A8ABA8ABB0ACACB0B0ABABACB0B2B5B5B5B5B5B5B3B3B1B2B1B1B0B0ABABB0ACACACABABB0ACACAAAAA8A7A7A7A7AAAAAAACACB1B1B1ACACB0B1B5B1B5B8BBBBBBB9BCBCBCBDC0BFBFC0BFBFBFBFBFC1C0C0BCC0BCBCBBBBBDBDBDBDBDBDBBB9B5B2B5B5B3B3B3B6B6B3B5B5B5B5B8B9B8B5B5B1B1ACACACB1B1B1B3B5B6B2B6B9B9BCBCBCBCB9BCBCBCBCB9BCBCC0C3C3C5C5C5C4C1BFC1BFBFBCBCBCBCBCBBBDBBB8B5B5B5B8B8B8B9B6B6B5B5B5B9BBBBBFC1C1C3C1C3C3C5C9CACAC9C9CACACACACED0D0D0CECACECACACACBCACACACACAC9C8C8C9C8C8C6C9C9C9C9C9C8C8C5C3C5C3C1C4C4C4C1C3C5C5C3C4C4C6C6C5C5C4C1C1C1C1C0C0C3C1C3C1C1C1BDBBB9B6B3B3B8B9BDBCBCB9B9BBBDBDBDBDB9B9B9B9B9B9B9B6B6B3B3B3B3B3B2B2B1B1B1B1ACACACACB1B5B8B8B9B8B3B3B5B5B6B2B2B6B3B3B1B1B1B1B1ACABABABABAAACACACB0B0B0B0B0B2B3B3B2B5B5B5B2B2B1B0ACB1B1B1B1B3B2B2B2B2B6B9B9B9B9B8BBBCBCBCBCBCBDB9B9B9B9B9B9B9B9BCBCB9B8B6B5B5B6B9BCBCBCBCBCBDC0C0BDBBBBBBBBB9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACAB2B010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAD0D1D1D0D3D5D5D3D1D1DBF1C9B9B9B9B9BBB8BBBDBDBFBCBFC1C1C0C0C1C1C4C8C9C6C5C6C6C3C3C1BFBFBCB9B9B9B8B5B5B5B2B2B1B1B1B3B3B3B1B5B1B0B0B0B0B1ACB0B0ACAAACB0B1B1B1B1B1ACACACACB1B3B1B1B1B1B3B3B1ACB1B2B5B6B6B5B2B0B0B0ACA8A8A8A8ABACACACABACACACACABABABABA8A8A8ABA8A8A8A8A8A8A8A8A5A7A7AAACACACB1B3B5B5B6B9BCB9B8B8B5B3B2B5B6B6B3B3B1B1B1B1B1B3B3B5B2B2B5B8B8B9BCB9BBBBBDBBBDBFC1C1C1C1C1C1C3C4C4C4C1C1C3C6C6C3C3C3C3C1C4C4C4C5C8C8C5C6C9C9C9C9CED0D0CECECECECED0D0D3D3D3D0D1D0D0D1D1D0D3D0D1D1D3D0D0CECECBCACACBCED0CECED0D1D4D3D4D3D3D0D3D3D4D4D6D6DADADADADBDBDBDBDBD9D9DBD9D6D3D6D3D1D1D1D0CECECECEC9C8C6C9C9C9C9C9C9C9C6C8C9C8C8C4C4C1C4C4C1C1C1BFBFBFBFBFBCBCB9BBBBBBBBBBB9B9B9B8BBB8B8B8B9B9BCBBBBB9BCBCBFC1C1C1BFC0BDBDC0C1C1C1C1C1C1C4C3C5C5C5C6C9C9C9C6C4C4C1BFBFBBB9B9BCBCB9BCBCBCBBBCBDBBBBBCBFBCBCBDC0C3C3C0C1BFC0C0C1C1C1C1BFBFBFBFBFC1BDC1C1C1C1C4C1C1C1C1C1BFC1C0BDBDBDBBBDBDC1C1C1C1BFC1C1BFBFC1C1C4C4C4C3C1C0C0C3C3C1BFBBB9B6B6B6B9B9B9B9B9B9B9B9B9B6B6B6B9B9BCBCBBBDC0C0C0C0C3C3C3C4C5C6C9C9C9C9C8C8C5C5C5C3C4C6C6C9C9C9C9C5C8C8C8C9CED0D0CBCECECEC9CACACECACACACED0D0D3D4D1D0D1D0D0CECECED0D1CECECECBC9C9C6C6C6C8C9C9CAC8C8C9CBCBD0D1D1D0D0D0D0CECACAC9C8C5C9C9C9C9C6C4C6C8C6C4C4C1BFBFBBBFC0C0BDBBB9B9B9B8B9B9B9B9B8B8B6B6B6B6B3B1B3B5B3B6B3B1B1ACACB1ACACB1ACABA8ABA8A8A5A3A3A1A1A3A5A5A7A3A3A3A3A3A5A5A5A8ABABABABAAAAA7A7A7A7A8A8ABA7A7A5A5A5A7A5A5A5A7AAA7A7A7A7A7A7A5A329010101010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED6D7D3D3D4D4D6D7D7D6E1F3CFBDBDBDC0BFBFBCBFBDBDBDC1C3C4C8C5C5C5C4C4C5C6C3C5C5C5C5C5C3C3C6C6C6C6C4C6C6C9C9CBCBC9CBCBCBCBCBC9CBCAC9C9CAC9CEC9CECECECED0CED0CECACECECBCBCACAC9C9C9CACAC9C8C8C9C9C8C8C4C6C9C8C4C8C6C9CAC9C8C5C5C5C6C6C9C9CBCBCBCBCBC9CECBC9C6C6C6C4C4C4C5C3C3C1C1C1C1C1C1C1C1BDBCBBBBB9B5B5B5B8B8B8B8B6B3B3B6B6B6B6B6B6B9B8B6B9B9B6B8B8B9B8B5B1B1B0B1B0B1B2B2B1B2B2B2B5B8B6B9B6B2B6B9B9B9B8B9B6B8B6B2B5B8B8B9B9B5B5B2B2B0ACACABABABA7A7A7A5A3A7A7A8ABACACACACACABACB0B1B1ACABABACABABABACACB1B1B3B3B2B2B2B1ACACB0B1B1ACAAAAAAA7A7A7AAABA8ABACACACB0B1B1B1ACACB0B1ACACACB1B1B1B2B1ACABABACACACACA8A8ACABABACB0B0ACABABABABACB1B2B6B6B5B5B8B5B1B5B5B1B1B5B1ACACACB0ACACB1B0ACB0ACACACB1B3B3B1B2B2B2B3B3B1B1B0B1B2B1B1B2B3B3B3B3B3B3B8B3B5B8B8B8B8B5B5B5B5B1B1B0B0B1B3B8B8B8B8B9BBB8B5B6B6B3B5B9B8B8B9BCB9B9B9B6B6B9BCBBB9B9BCBFBFBDBDBDBBB9B9BBBDBDBBBDC0C0C0C0C1C1C5C5C3C3C1C0C0BFBDBFBBBFBFC1C1BDC1C1C1BFBDBDBDBDBDC0BDBDC0BDBBBCBCBCBCBCBCB9BCBCBCBFBCB9BBBBBBB8BBB9BCBCB9B9B9BCBCBCB9BBBDC1C1C0C1C3C1C3C1BDBCBDBCBCBDB9B8B3B3B8B9B6B6B3B5B3B3B5B5B8B8B6B6B9B9B8B8B8B8B5B5B5B8B9B9B9B9B8B9B9BBBDBBB8B8B8BBBBBDBFC1C1C1C1C3C0C0C3C3C3C5C5C3C3C0BDBDC1C1C1C1C0BFC1C4C5C9C5C9C9C9C9C9C9C9C9C9C8C8C9C9C9C9C9C9C9C9CBCED0D1D4D6D7DADBDEE1E1E1E1DFE2E2E2E2E3E1DEE1DEDEDFDBDBDBDCDCDADCE1E1DFDCDCDCE1E1E1DEE1E1DEDEE1DCDBDBDBDBDBDADBD9D9D9DADAD6D4D4D4D4D6D4D7DBDBDBDCDBDBDCDBD9D6D33602020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCB6B5B5B6B8BCB6BBBDBBC9E7D3D7D7D9D9D9D9D9D9D9D9D9D9D9D9DAD9DADADBDBDBDEDEDEDEDEDEDEDEDEDFDFE1E1E1E1E1E2E1E1E1E1E1E1E1E1E2E3E3E3E3E3E4E4E4E3E4E6E6E6E6E9E6E9E7E9E7E6E6E6E6E6E6E6E7E7E6E6E7E6E4E4E4E6E6E6E6E3E4E6E6E4E4E3E3E2E2E3E4E4E4E4E4E4E3E3E2E3E4E4E4E6E6E7E6E6E7E7E6E6E6E7E6E6E6E4E4E3E3E3E3E3E3E3E3E4E4E6E4E6E6E4E3E3E3E3E3E3E3E3E2E2E1DFDFDFE1E1E1E2E2E2E2E2E2E3E3E4E6E6E4E3E4E6E4E4E3E3E2E2E3E4E3E3E2E3E3E4E6E6E6E4E6E3E6E6E6E6E6E6E4E4E3E3E3E2E2E2E2E2E2E2E2E2E1E2E2E1E1E1E2E2E1E1DFDFE1E1E1DFE1E1E1E1E1E1DFDFDFE1E1E1E2E1E1E1E1DFDFDFDFE1E1E2E3E3E4E4E4E3E3E3E2E2E3E2E2E1E1E1E1E2E3E1E2E3E2E3E3E4E4E4E3E4E4E4E4E3E3E3E3E3E3E4E4E3E3E6E3E4E4E6E6E6E6E7E9E9E9E9E9E7E6E6E6E7E6E6E7E6E7E7E7E9E7E9E9E9EAEAE9E9E9E9E9E9E7E9E9E9E9E9E6E7E9EAE9E9EAEAE9E7E7E6E6E4E3E3E2E2E2E2E2E1E1DFE1E1E1E1DFDEDEDEDEDEDEDFE1E1DFDFDFE1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DFE1E1DFDFDFDFDFDFDEDEDCDEDEDEDEDEDEDEDEDEDEDFDFDFDEDEDFDEDCDEDBDEDEDEDEDBDCDCDEDEDCDCDCDADCDADADADCDADADADCDEDEDEDBDBDEDEDEDFE1E1E1E1E1E1E1E1E2E3E3E3E4E3E3E2E1E1E1DFDEDEDEDCDEDFDEDEDEDEDEDEDEDEDFDFE1E1E1E1E1E1E1E1E1DEDEDFE1E1E1E1E1DEDEDEE1E1E1DFDFDFDEDFDFE1E2E2E2E3E2E3E3E3E4E3E3E3E3E3E3E3E3E2E3E3E3E3E3E3E3E2E2E2E3E3E3E3E4E3E3E3E3E3E3E3E4E3E3E3E3E3E3E3E6E6E6E7E7E7E9EAE9EAEAEAE9EAEAE9EAE9E9E9E9E9E9E9E9E9EAE9E9E9EAE9EAEAEAEAEBEBEBECECEBEAEAEAEAEAEAEAEAEAEAEAEAEBEBEAEBEBECECECECEEECECEBEBEBECEEEFEFEEEEECECEBECECCF5503020202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB6B3B3B1B1B1B1B2B2BDDBF7F6EFEFEBEFF3F3F7F7F7F7F9FBFBFCFDFDFDFFFFFFFFFFFDFCFDFDFDFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE8D1A0201010101010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6C6C6C9C9C9CBCBDBF1FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFFDFDFDFCFCFCFDFDFBF9F9F9F9F9FCFBF9FBF9F8F8F8F8F9F9F8F8F7F7F7F7F7F7F7F4F4F2F2F2F2F3F2ECEBEBE7EAEAE6EAEEEEF2F2F2F2F4F6F6F7F8F8F8F9FCF9F9F9F8F7F8F8F8F7F8FBFCFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE17E1D0202020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0BFC1C4C4C5C3C0CFECFBFDFBF9F9FDFDFFFFFFFFFFFCF8F8FCFDFDF9F6F6F6F3F3F2F6F7F4F7F9F9F9FCFCFCFCF9F9FCFCF9F8F9FCFCFCFFFCF8F7F7F8F8F8F8F4F4F8F7F7F8FCFCF9F7F7F7F7F9FDFFFFFFFFFFFFFFFDFFFFFDFDFFFDF9F9F9FCF9F9FCFCF9FCF8F9F9FCFFFFFCFFFFFFFFFFFDFDFCFDFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE68D2504020202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBB9BDBFBFC4C6D5ECFCFFFFFBF9F9F7F9FCFCFFFFFDFCFDFDFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFCF8F8FCFCFCFCF8F9F9F7F9F7F7F7F7F7F6F6F6F6F6F4F4F7F4F7FCF8F8FCFCF7F7F8FCFFFFFFFFFFFFFFFFFFFDFFFDFDFCFCF7F7FCF9F8F9F7F7FCF9F9F6F6F4F2F3F3F3F6F6F6F8F8FCFCFCF8F8FCFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF9F9F9FCFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCF8F8F8F9FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFCFCF9F7F7F7F7F6F9F8F8FCFCFCFCFCFFFFFFFFFFFFFFFFFFFCFCF8FCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFDFFFDFCFCFCFCFDF9FCFCF9F6F9FCFDFDFDFCFCF9F9F9F9FDFFFDFCFDFDFFFFFDF9FDFFFFFFFFFFFFFCFCFCF8F4F4F4F4F7F9F9F9F7F9F9F9F9F7F7F7F7F4F4F4F7F4F4F4F4F4F4F4F4EFF2F2F6F8F8F9FCFFFBD9781C0201010101010199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDBDBFBFBFBDCAE9FBFBF6F3EFF2F4F4F4F4F4F7FBFBFDFBFBF8FBF8FBFBFBFCFDFBFBFBF8FCFDFDFDFBFBFBFBF7F7F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDFDFBF9FCFFFCFCFCFCFDFCFFFFFFFFFFFDFDFDFDFFFDFFFFFFFFFDFBFDFDFDFFFFFDFDFDFFFDFDFDFDFDFDFBF8F7F7F2EFF1F1F2F2F2EFEFECECEAEAE6E6E6E7E7ECEBE7E7EBEFEFEBE7E7E6E7E6EBEEF2EEEBEEEBE7E7E7E4E3E3E7E3E7E6E6EBEEF1F1F1F3F3F7F2F2F7F2F7F7F7F7F4F1F1F4F4F8F9FCFFFDFDFDFDFFFFFFFFFFFFFDFDFDFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7A1B0202020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8CECFD1D4E1F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFCFCFCFCFBF7F7FBF9F9F9F7F8F8F9F9F6F2F2F2F2F2F7F6F2F4F2EEEEEEEFF2F2EEEEEBEBEBECECECEBE9E9E4E4E4E4E7E4E1DFDFDBDEDEDADEE2E2E4E4E4E4E9EAEAEBEEEEEFF2F7F2F2F2EFEBEEEEEFECEFF4F7FBF9FCFCFFFFFFFCFFFFFFFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFCF9F9F9FBFBFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE17F1D03020202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEED3D4D7E1F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFBF8F7F7FBFCFCFCFDFFFDFDFDFDFFFFFFFFFDFDFDFDFDFDFDFDFDFDFCF9F9F9F9F9F9F8F8F4F4F4F1F1F1F1EEEAE6EBEBEEEEEEEEEFEFECECEAECEEEEF1F1F1F4F3F4F4F4F1EFECE7E7ECEFECE7E7E7E7E7EAE4E3E4E6E6E4E4E4E6E6E6E6E6EBEEEBECEFEFF1EFEFEFEFF2F4F4F3F8F8F3F3F2F2F2F2F7F2F2F4F4F2F1F1EFF1F2F7F2F2F2F1F1EEEEF1F3F8F8F8F8F8FBFDFDFDFDFBFBFBFBFBFBFDFFFFFFFCF9F9F4F3F1F1EFEFF3F4F7FBFDFDFBF7F9FCF9F9F9F7F9FCFCFDFDFDFCFDFDFDFFFDFDFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFDFFFFFFFFFDFDFDFBF8F8FBFBFBFBF8F9F9F7F9F7F7F7F7F7F4F4F4F4F4F3F3F7F3F7FBF8F8FBFBF7F7F8FBFDFFFFFFFFFFFFFFFFFDFDFDFDFBFBF7F7FBF9F8F9F7F7FBF9F9F4F4F3F1F2F2F2F4F4F4F8F8FCFCFCF8F8FBF9D9751A0202020299FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7CFD1DEF2FDFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDFDFBF9FCFFFCFCFCFCFDFCFFFFFFFFFFFDFDFDFDFFFDFFFFFFFFFDFBFDFDFDFFFFFDFDFDFFFDFDFDFDFDFDFBF8F7F7F2EFF1F1F2F2F2EFEFECECEAEAE6E6E6E7E7ECEBE7E7EBEFEFEBE7E7E6E7E6EBEEF2EEEBEEEBE7E7E7E4E3E3E7E3E7E6E6EBEEF1F1F1F3F3F7F2F2F7F2F7F7F7F7F4F1F1F4F4F8F9FCFFFDFDFDFDFFFFFFFFFFFFFDFDFDFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE17C1C0202029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4C6D6F1FDFFFBF9F8F8F8F8F7F7F4F4F4EFEFEFEFECE9E4EAEAECECECECEEEEEBEBE9EBECECEFEFEFF4F2F4F4F4EFEEEBE7E7EBEEEBE7E7E7E7E7E9E3E2E3E4E4E3E3E3E4E4E4E4E4EAECEAEBEEEEEFEEEEEEEEF1F4F4F2F7F7F2F2F1F1F1F1F6F1F1F4F4F1EFEFEEEFF1F6F1F1F1EFEFECECEFF2F7F7F7F7F7F9FCFCFCFCF9F9F9F9F9F9FCFFFFFFFBF8F8F4F2EFEFEEEEF2F4F6F9FCFCF9F6F8FBF8F8F8F6F8FBFBFCFCFCFBFCFCFCFFFCFCFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFCFFFFFFFFFCFCFCF9F7F7F9F9F9F9F7F8F8F6F8F6F6F6F6F6F4F4F4F4F4F2F2F6F2F6F9F7F7F9F9F6F6F7F9FCFFFFFFFFFFFFFFFFFCFCFCFCF9F9F6F6F9F8F7F8F6F6F9F8F8F4F4F2EFF1F1F1F4F4F4F7F7FBFBFBF7F7F9FCFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBF8F8F8FBFCFBFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFBFBFBFBF7F7F7F8FCFFFFFFFFFFFFFFFFFFFFFCFCFFFFFFFCFCFCFBFBF8F6F6F6F6F4F8F7F7F9F9F9F9F9FCFFFFFCFFFFFFFCFCFBF9F7FBFBFBFBFFFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDE7C1D03029AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE1F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFBF8F7F7FBFCFCFCFDFFFDFDFDFDFFFFFFFFFDFDFDFDFDFDFDFDFDFDFCF9F9F9F9F9F9F8F8F4F4F4F1F1F1F1EEEAE6EBEBEEEEEEEEEFEFECECEAECEEEEF1F1F1F4F3F4F4F4F1EFECE7E7ECEFECE7E7E7E7E7EAE4E3E4E6E6E4E4E4E6E6E6E6E6EBEEEBECEFEFF1EFEFEFEFF2F4F4F3F8F8F3F3F2F2F2F2F7F2F2F4F4F2F1F1EFF1F2F7F2F2F2F1F1EEEEF1F3F8F8F8F8F8FBFDFDFDFDFBFBFBFBFBFBFDFFFFFFFCF9F9F4F3F1F1EFEFF3F4F7FBFDFDFBF7F9FCF9F9F9F7F9FCFCFDFDFDFCFDFDFDFFFDFDFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFDFFFFFFFFFDFDFDFBF8F8FBFBFBFBF8F9F9F7F9F7F7F7F7F7F4F4F4F4F4F3F3F7F3F7FBF8F8FBFBF7F7F8FBFDFFFFFFFFFFFFFFFFFDFDFDFDFBFBF7F7FBF9F8F9F7F7FBF9F9F4F4F3F1F2F2F2F4F4F4F8F8FCFCFCF8F8FBFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF9F9F9FCFDFCFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFCFCF8F8F8F9FDFFFFFFFFFFFFFFFFFFFFFDFDFFFFFFFDFDFDFCFCF9F7F7F7F7F4F9F8F8FBFBFBFBF7D7751B0299FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBFCFBFDFDFDFDFDFDFDFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFDFDFBF9F9F7F7F7F2F2F2EFEEF1F1F3F7F9F8F8F9F8F7F8FBFCFCF9F7F7F9F7F7F7F8F9FDFDFFFFFDFDFDFCF8F8FBFDFDF9F4F4F4F2F2F1F4F7F3F7F9F9F9FBFCFCFCF9F9FBFCF9F8F9FCFCFCFDFCF8F7F7F8F8F8F8F3F3F8F7F7F8FBFBF9F7F7F7F7F9FDFDFFFFFFFFFFFFFDFFFFFDFDFFFDF9F9F9FBF9F9FCFBF9FBF8F9F9FCFFFFFCFDFDFDFFFFFDFDFBFDFDFCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBFBFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE689209AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBF7F7F6F6F6F7F7F9F9F9F9F7F2EFECECECE9E9E4E9E9E4E4E7EAEAEAEAE7E7E4E4E4E2E4E4E4E2E3E3E3E9E4E7EAECF1F1F1F1F4F4F6F2F1F1F1ECEEEEF1F1ECECEBEBEBEFEFEFEFF2F2F2F1F4F4F4F4F4F6F6F9FCF8F8F7F7FBF9F9FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE17EA7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFAFCFCFCFAFAF9F8F9F9F9FAFAFAFCFCFCFCFCFCFCFCFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFCFCFCFCFDFCFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFCFCFCFCFCFCFDFFFFFFFFFFFFFFFFFFFFFDFDFFFFFFFDFDFDFCFCFCFAFAFAFAFAFCFCFCFCFCFCFCFCFDFFFFFDFFFFFFFDFDFCFCFCFCFCFCFCFFFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFFFFFFFDFFFDFCFCFCFCFDFCFCFCFCFAFCFCFDFDFDFCFCFCFCFCFCFDFFFDFCFDFDFFFFFDFCFDFDFFFFFFFFFDFCFCFCFCF9F9F9F9FAFCFCFCFAFCFCFCFCFAFAFAFAF9F9F9FAF9F9F9F9F9F9F9F9F7F8F8FAFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFCFCFDFDFDFFFFFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE3D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -%%Trailer - - -%%EndDocument - @endspecial 94 3203 a Fl(Con)m(tract)32 b(for:)1000 -3416 y Fk(Shared-cost)38 b(R)-10 b(TD)39 b(\(FET)f(Programme\))1095 -3822 y(Annex)g(1)h(-)g(\\Description)e(of)h(W)-10 b(ork")94 -4129 y Fl(Pro)5 b(ject)31 b(Acron)m(ym:)41 b(MO)m(W)m(GLI)94 -4242 y(Pro)5 b(ject)31 b(full)d(title:)41 b(Mathematics)31 -b(On)f(the)g(W)-8 b(eb:)42 b(Get)31 b(it)f(b)m(y)g(Logic)h(and)f(In)m -(terfaces)94 4355 y(Prop)s(osal/Con)m(tract)h(no.:)41 -b(IST-2001-33562)34 b(MO)m(W)m(GLI)94 4468 y(Related)d(to)g(other)f -(Con)m(tract)i(no.:)94 4694 y(Date)g(of)e(Preparation)g(of)h(Annex)f -(1:)41 b(17)31 b(o)s(ctob)s(er)g(2001)94 4920 y(Op)s(erativ)m(e)f -(commencemen)m(t)i(date)f(of)f(con)m(tract:)p eop -%%Page: 2 2 -2 1 bop 94 171 a Fj(Con)l(ten)l(ts)94 375 y Fi(1)84 b(Pro)6 -b(ject)36 b(summary)2710 b(4)230 488 y Fl(1.1)94 b(Ob)5 -b(jectiv)m(es)38 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h -(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) -g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)140 b(4)230 601 y(1.2)94 -b(Description)30 b(of)g(w)m(ork)f(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) -f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f -(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)140 b(4)230 714 y(1.3)94 -b(Milestones)30 b(and)g(exp)s(ected)h(results)40 b(.)46 -b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g -(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)140 b(4)94 918 y Fi(2)84 -b(Pro)6 b(ject)36 b(ob)6 b(jectiv)m(es)2681 b(5)94 1121 -y(3)84 b(P)m(articipan)m(t)36 b(list)2821 b(7)94 1325 -y(4)84 b(Con)m(tribution)35 b(to)g(programme/k)m(ey)f(action)h(ob)6 -b(jectiv)m(es)1225 b(7)94 1529 y(5)84 b(Inno)m(v)-6 b(ation)3024 -b(8)94 1733 y(6)84 b(Comm)m(unit)m(y)33 b(added)i(v)-6 -b(alue)35 b(and)g(con)m(tribution)h(to)f(EC)f(p)s(olicies)865 -b(10)94 1937 y(7)84 b(Con)m(tribution)35 b(to)g(Comm)m(unit)m(y)e(So)s -(cial)i(Ob)6 b(jectiv)m(es)1347 b(11)94 2141 y(8)84 b(Economic)36 -b(dev)m(elopmen)m(t)e(and)h(Scien)m(ti\014c)g(and)230 -2253 y(T)-9 b(ec)m(hnological)37 b(Prosp)s(ects)2365 -b(12)230 2366 y Fl(8.1)94 b(Iden)m(ti\014cation)30 b(of)h(exploitable)e -(results)63 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) -f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(12)230 -2479 y(8.2)f(T)-8 b(arget)32 b(Mark)m(et)93 b(.)45 b(.)h(.)g(.)f(.)h(.) -g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g -(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 -b(13)230 2592 y(8.3)f(Consortium's)29 b(Dissemination)g(and)h -(Exploitation)f(Strategy)39 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) -h(.)g(.)g(.)f(.)95 b(13)94 2796 y Fi(9)84 b(W)-9 b(orkplan)3012 -b(14)230 2909 y Fl(9.1)94 b(W)-8 b(orkpac)m(k)j(age)34 -b(list)61 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h -(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) -g(.)g(.)f(.)95 b(14)230 3022 y(9.2)f(General)31 b(description)h(.)46 -b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g -(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 -b(15)230 3135 y(9.3)f(W)-8 b(ork)32 b(P)m(ac)m(k)-5 b(age)33 -b(descriptions)26 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f -(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) -95 b(17)439 3248 y(9.3.1)106 b(Pro)5 b(ject)32 b(Managemen)m(t)41 -b(.)k(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g -(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(17)439 -3361 y(9.3.2)106 b(Requiremen)m(t)30 b(Analysis)69 b(.)46 -b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h -(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(18)439 3473 -y(9.3.3)106 b(T)-8 b(ransformation)46 b(.)g(.)g(.)g(.)f(.)h(.)g(.)f(.)h -(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) -g(.)f(.)h(.)g(.)g(.)f(.)95 b(20)439 3586 y(9.3.4)106 -b(Metadata)68 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f -(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) -h(.)g(.)g(.)f(.)95 b(22)439 3699 y(9.3.5)106 b(In)m(terfaces)66 -b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) -f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f -(.)95 b(23)439 3812 y(9.3.6)106 b(Distribution)31 b(.)46 -b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g -(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 -b(24)439 3925 y(9.3.7)106 b(T)-8 b(esting)31 b(and)e(V)-8 -b(alidation)34 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f -(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 -b(25)439 4038 y(9.3.8)106 b(Information)30 b(Dissemination)e(and)i -(Exploitation)e(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g -(.)g(.)f(.)95 b(26)230 4151 y(9.4)f(Deliv)m(erable)30 -b(list)f(b)m(y)h(W)-8 b(orkP)m(ac)m(k)j(age)95 b(.)45 -b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f -(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(27)230 4264 y(9.5)f(Pro)5 -b(ject)32 b(Planning)c(and)i(timetable)45 b(.)h(.)f(.)h(.)g(.)f(.)h(.)g -(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) -g(.)f(.)95 b(29)230 4377 y(9.6)f(Graphical)30 b(presen)m(tation)g(of)g -(pro)5 b(ject)31 b(comp)s(onen)m(ts)47 b(.)e(.)h(.)g(.)f(.)h(.)g(.)g(.) -f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(30)230 -4490 y(9.7)f(Pro)5 b(ject)32 b(Managemen)m(t)49 b(.)c(.)h(.)g(.)g(.)f -(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) -h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(31)439 4603 -y(9.7.1)106 b(Decision)30 b(Pro)s(cess)69 b(.)46 b(.)g(.)f(.)h(.)g(.)f -(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) -h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(31)439 4715 y(9.7.2)106 -b(Information)30 b(Flo)m(w)36 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f -(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) -h(.)g(.)g(.)f(.)95 b(32)439 4828 y(9.7.3)106 b(Qualit)m(y)30 -b(Pro)s(cedures)i(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) -h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 -b(32)439 4941 y(9.7.4)106 b(Con\014den)m(tialit)m(y)29 -b(and)h(IPR)g(handling)i(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f -(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(32)94 -5145 y Fi(10)32 b(Clustering)2982 b(32)1920 5627 y Fl(2)p -eop -%%Page: 3 3 -3 2 bop 94 171 a Fi(11)32 b(Other)i(con)m(tractual)i(conditions)2141 -b(33)230 284 y Fl(11.1)49 b(Other)30 b(signi\014can)m(t)g(pro)5 -b(ject)31 b(costs)j(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g -(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 -b(33)230 397 y(11.2)49 b(T)-8 b(ra)m(v)m(el)31 b(costs)h(outside)d -(MS/AS)50 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f -(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 -b(33)94 601 y Fi(A)57 b(Consortium)35 b(Description)2359 -b(35)230 714 y Fl(A.1)71 b(Univ)m(ersit)m(y)30 b(of)h(Bologna,)g -(Departmen)m(t)h(of)e(Computer)g(Science)47 b(.)f(.)f(.)h(.)g(.)f(.)h -(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(37)230 827 y(A.2)71 b(INRIA)45 -b(.)h(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h -(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) -g(.)f(.)h(.)g(.)g(.)f(.)95 b(39)439 940 y(A.2.1)83 b(The)30 -b(Lemme)h(pro)5 b(ject)85 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g -(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) -f(.)95 b(40)439 1053 y(A.2.2)83 b(The)30 b(LogiCal)g(pro)5 -b(ject)65 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f -(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 -b(41)230 1165 y(A.3)71 b(German)31 b(Researc)m(h)g(Cen)m(ter)g(for)f -(Arti\014cial)f(In)m(telligence)g(Gm)m(bH,)i(DFKI)67 -b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(41)230 1278 y(A.4)71 -b(Nijmegen)30 b(\(&)h(Eindho)m(v)m(en\))26 b(.)46 b(.)g(.)f(.)h(.)g(.)f -(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) -h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(43)230 1391 y(A.5)71 -b(MPG)31 b(&)f(TU)g(Berlin)54 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f -(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) -h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 b(45)439 1504 y(A.5.1)83 -b(Max)31 b(Planc)m(k)g(Institute)e(for)i(Gra)m(vitational)f(Ph)m(ysics) -57 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)95 -b(45)439 1617 y(A.5.2)83 b(Cen)m(ter)31 b(for)f(Information)f -(Managemen)m(t)k(in)c(the)h(Max)i(Planc)m(k)e(So)s(ciet)m(y)38 -b(.)46 b(.)g(.)g(.)f(.)95 b(46)439 1730 y(A.5.3)83 b(TU)30 -b(Berlin)40 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) -h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h -(.)g(.)g(.)f(.)95 b(47)230 1843 y(A.6)71 b(T)-8 b(rusted)30 -b(Logic)47 b(.)f(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) -f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f -(.)h(.)g(.)g(.)f(.)95 b(48)1920 5627 y(3)p eop -%%Page: 4 4 -4 3 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2578 -b Fl(4)94 171 y Fj(1)135 b(Pro)7 b(ject)46 b(summary)94 -354 y Fg(1.1)112 b(Ob)6 b(jectiv)m(es)94 526 y Fl(The)42 -b(W)-8 b(orld)42 b(Wide)g(W)-8 b(eb)44 b(is)d(already)h(the)h(largest)g -(resource)g(of)f(mathematical)h(kno)m(wledge,)j(and)c(its)94 -638 y(imp)s(ortance)36 b(will)e(b)s(e)j(exp)s(onen)m(tiated)g(b)m(y)f -(emerging)h(displa)m(y)e(tec)m(hnologies)j(lik)m(e)e(MathML.)i(Ho)m(w)m -(ev)m(er,)94 751 y(almost)25 b(all)f(mathematical)h(do)s(cumen)m(ts)g -(a)m(v)-5 b(ailable)24 b(on)h(the)g(W)-8 b(eb)26 b(are)f(mark)m(ed)g -(up)f(only)g(for)h(presen)m(tation,)94 864 y(sev)m(erely)37 -b(crippling)c(the)k(p)s(oten)m(tialities)e(for)h(automation,)j(in)m -(terop)s(erabilit)m(y)-8 b(,)36 b(sophisticated)g(searc)m(hing)94 -977 y(mec)m(hanisms,)24 b(in)m(telligen)m(t)f(applications,)g -(transformation)g(and)g(pro)s(cessing.)37 b(The)24 b(goal)g(of)f(the)h -(pro)5 b(ject)24 b(is)94 1090 y(to)31 b(o)m(v)m(ercome)h(these)f -(limitations,)d(passing)h(form)g(a)i(mac)m(hine-readable)e(to)i(a)g -(mac)m(hine-understandable)94 1203 y(represen)m(tation)j(of)g(the)g -(information,)g(and)f(dev)m(eloping)g(the)h(tec)m(hnological)h -(infrastructure)d(for)h(its)h(ex-)94 1316 y(ploitation.)47 -b(MO)m(W)m(GLI)34 b(builds)c(on)j(previous)e(\\standards")i(for)g(the)g -(managemen)m(t)h(and)f(publishing)28 b(of)94 1429 y(mathematical)41 -b(do)s(cumen)m(ts)f(\(MA)m(thML,)j(Op)s(enMath,)f(OMDo)s(c\),)j(in)m -(tegrating)c(them)f(with)g(di\013eren)m(t)94 1542 y(XML)31 -b(tec)m(hnology)g(\(XSL)-8 b(T,)31 b(RDF,)g(.)15 b(.)h(.)f(\).)94 -1762 y Fg(1.2)112 b(Description)36 b(of)i(w)m(ork)94 -1933 y Fl(The)30 b(goal)h(of)f(the)h(pro)5 b(ject)31 -b(is)e(to)i(pro)m(vide)f(a)h(comprehensiv)m(e)e(description,)g(from)h -(con)m(ten)m(t)i(to)f(metadata,)94 2046 y(of)h(a)h(giv)m(en)g(\014eld)e -(of)h(kno)m(wledge)g(\(in)g(our)g(case)h(mathematics\),)h(in)d(order)h -(to)h(enhance)f(its)g(accessibilit)m(y)-8 b(,)94 2159 -y(exc)m(hange)34 b(and)e(elab)s(oration)f(via)h(the)h(W)-8 -b(orld)32 b(Wide)g(W)-8 b(eb.)47 b(MO)m(W)m(GLI)34 b(will)29 -b(mak)m(e)34 b(an)e(essen)m(tial)g(use)g(of)94 2272 y(standard)25 -b(XML)h(tec)m(hnology)i(and)d(aspires)g(to)h(b)s(ecome)h(an)f(example)f -(of)h(\\b)s(est)g(practice")h(in)e(its)g(use,)i(and)94 -2385 y(a)k(leading)e(pro)5 b(ject)31 b(in)e(the)h(new)g(area)h(of)g -(the)g(Seman)m(tic)f(W)-8 b(eb.)94 2498 y(In)30 b(particular,)f(w)m(e)h -(shall)f(deeply)g(explore)h(the)h(p)s(oten)m(tialities)e(of)h(XML)h(in) -e(the)i(follo)m(wing)d(directions:)94 2611 y Fi(Publishing)p -Fl(.)49 b(XML)33 b(o\013ers)g(sophisticated)f(publishing)c(tec)m -(hnologies)34 b(\(St)m(ylesheets,)g(MathML,)g(SV)m(G,)94 -2724 y(.)15 b(.)h(.)f(\))43 b(whic)m(h)30 b(can)h(b)s(e)f(pro\014tably) -g(used)g(to)i(solv)m(e,)f(in)f(a)h(standard)g(w)m(a)m(y)-8 -b(,)32 b(the)g(anno)m(ying)e(notational)h(prob-)94 2836 -y(lems)42 b(that)h(traditionally)e(a\017ict)i(con)m(ten)m(t)h(based)f -(and)f(mac)m(hine-understandable)f(enco)s(dings)g(of)i(the)94 -2949 y(information.)94 3062 y Fi(Searc)m(hing)37 b(and)f(Retrieving)p -Fl(.)45 b(Metadata)34 b(will)29 b(pla)m(y)i(a)h(ma)5 -b(jor)32 b(role)f(in)f(MO)m(W)m(GLI.)j(New)f(W3C)g(lan-)94 -3175 y(guages)43 b(suc)m(h)e(as)h(the)f(Resource)h(Description)f(F)-8 -b(ramew)m(ork)42 b(or)g(XML)g(Query)e(are)i(lik)m(ely)e(to)j(pro)s -(duce)94 3288 y(ma)5 b(jor)30 b(inno)m(v)-5 b(ativ)m(e)31 -b(solutions)e(in)g(this)g(\014eld.)94 3401 y Fi(In)m(terop)s(erabilit)m -(y)p Fl(.)71 b(Disp)s(osing)39 b(of)h(a)h(common,)j(mac)m(hine)c -(understandable)f(la)m(y)m(er)i(is)e(a)i(ma)5 b(jor)41 -b(and)94 3514 y(essen)m(tial)30 b(step)h(in)e(this)g(direction.)94 -3627 y Fi(Distribution)p Fl(.)69 b(All)38 b(XML)i(tec)m(hnology)h(is)d -(\014nally)g(aimed)h(to)h(the)g(access)h(of)f(the)f(W)-8 -b(eb)41 b(as)e(a)h(single,)94 3740 y(distributed)27 b(resource,)k(with) -e(no)i(cen)m(tral)f(authorit)m(y)h(and)e(few,)i(simple)d(rules.)235 -3853 y(MO)m(W)m(GLI)22 b(builds)c(on)i(the)h(solid)e(ground)g(already)h -(pro)m(vided)g(b)m(y)g(previous)f(Europ)s(ean)h(pro)5 -b(jects)21 b(\(Suc)m(h)94 3966 y(as)42 b(Op)s(enMA)m(th)f(and)g -(Euler\))f(and)h(sev)m(eral)h(XML)g(dialects)f(for)g(the)h(managemen)m -(t)h(of)f(mathematical)94 4078 y(do)s(cumen)m(ts)h(\(MathML,)i(Op)s -(enMA)m(th,)i(OMDo)s(c,)h(.)15 b(.)g(.)h(\).)81 b(All)42 -b(these)i(languages)g(co)m(v)m(er)h(di\013eren)m(t)e(and)94 -4191 y(orthogonal)g(asp)s(ects)g(of)g(the)g(information;)k(our)42 -b(aim)g(is)g(not)h(to)g(prop)s(ose)f(a)h(new)g(standard,)i(but)d(to)94 -4304 y(study)e(and)g(to)h(dev)m(elop)f(the)h(tec)m(hnological)g -(infrastructure)e(required)f(for)j(taking)f(adv)-5 b(an)m(tage)43 -b(of)d(the)94 4417 y(p)s(oten)m(tialities)29 b(of)h(all)g(of)g(them.)94 -4637 y Fg(1.3)112 b(Milestones)37 b(and)h(exp)s(ected)g(results)94 -4809 y Fi(First)i(MO)m(W)m(GLI)g(protot)m(yp)s(e)35 b -Fl(\(mon)m(th)h(18\),)h(supp)s(orting)c(bro)m(wsing,)i(rendering)f(and) -g(on-line)g(con-)94 4922 y(sultation)k(of)h(large)g(rep)s(ositories)f -(of)h(\(con)m(ten)m(t-based\))j(mathematical)d(kno)m(wledge.)67 -b(The)38 b(translation)94 5034 y(from)30 b(con)m(ten)m(t)i(to)f(presen) -m(tation)g(will)c(b)s(e)j(done)g(via)g(suitable)f(notational)i(st)m -(ylesheets.)94 5147 y Fi(Adv)-6 b(anced)35 b(MO)m(W)m(GLI)f(protot)m -(yp)s(e)c Fl(\(mon)m(th)h(24\),)g(supp)s(orting)d(distribution,)e -(indexing,)j(searc)m(hing)94 5260 y(and)h(retriev)-5 -b(al)29 b(\(based)i(on)f(a)h(sophisticated)e(metadata)j(mo)s(del\).)94 -5373 y Fi(Final)j(MO)m(W)m(GLI)f(protot)m(yp)s(e)d Fl(\(mon)m(th)f -(30\).)42 b(Result)30 b(of)g(v)-5 b(alidation.)p eop -%%Page: 5 5 -5 4 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2578 -b Fl(5)94 171 y Fj(2)135 b(Pro)7 b(ject)46 b(ob)7 b(jectiv)l(es)94 -374 y Fl(The)42 b(new)f(fron)m(tier)h(of)g(Con)m(ten)m(t)h(Based)g -(Information)e(Systems)h(is)f(the)h(so)g(called)g(\\Seman)m(tic)g(W)-8 -b(eb")94 487 y(\(see)29 b([3]\).)41 b(Asso)s(ciating)27 -b(meaning)g(with)f(con)m(ten)m(t)j(or)f(establishing)d(a)j(la)m(y)m(er) -h(of)e(mac)m(hine)h(understandable)94 600 y(data)46 b(will)d(allo)m(w)h -(automated)j(agen)m(ts,)j(sophisticated)45 b(searc)m(h)h(engines)e(and) -h(in)m(terop)s(erable)f(services)94 713 y(and)32 b(will)d(enable)j -(higher)f(degree)i(of)g(automation)f(and)g(more)g(in)m(telligen)m(t)g -(applications.)44 b(The)32 b(ultimate)94 826 y(goal)38 -b(of)f(the)h(Seman)m(tic)g(W)-8 b(eb)38 b(is)e(to)i(allo)m(w)f(mac)m -(hines)g(to)h(share)f(and)g(exploit)g(kno)m(wledge)g(in)f(the)i(W)-8 -b(eb)94 939 y(w)m(a)m(y)g(,)36 b(i.e.)52 b(without)33 -b(cen)m(tral)h(authorit)m(y)-8 b(,)36 b(with)c(few)i(basic)f(rules,)h -(in)f(a)h(scalable,)h(adaptable,)g(extensible)94 1052 -y(manner.)k(Ho)m(w)m(ev)m(er,)31 b(the)d(actual)g(dev)m(elopmen)m(t)g -(of)g(the)g(Seman)m(tic)f(W)-8 b(eb)29 b(and)e(its)g(tec)m(hnologies)i -(has)e(b)s(een)94 1165 y(hindered)19 b(so)i(far)f(b)m(y)h(the)g(lac)m -(k)h(of)f(large)g(scale,)i(distributed)18 b(rep)s(ositories)i(of)h -(structured,)h(con)m(ten)m(t)g(orien)m(ted)94 1277 y(information.)42 -b(The)31 b(case)i(of)e(Mathematical)i(kno)m(wledge,)f(the)f(most)h -(rigorous)f(and)f(condensed)h(form)g(of)94 1390 y(kno)m(wledge,)h(is)f -(paradigmatic.)44 b(The)31 b(W)-8 b(orld)31 b(Wide)g(W)-8 -b(eb)33 b(is)d(already)h(no)m(w)h(the)g(largest)g(single)e(resource)94 -1503 y(of)c(mathematical)g(kno)m(wledge,)g(and)f(its)g(imp)s(ortance)g -(will)e(b)s(e)i(exp)s(onen)m(tiated)h(b)m(y)f(the)h(emerging)f(displa)m -(y)94 1616 y(tec)m(hnologies)h(lik)m(e)e(MathML.)i(Ho)m(w)m(ev)m(er,)i -(almost)d(all)f(mathematical)i(do)s(cumen)m(ts)e(a)m(v)-5 -b(ailable)25 b(on)f(the)i(W)-8 b(eb)94 1729 y(are)25 -b(mark)m(ed)g(up)f(only)g(for)h(presen)m(tation)g(\(in)f(this)f(resp)s -(ect,)k(curren)m(t)d(practice)h(in)f(MathML)i(impro)m(v)m(es)e(on,)94 -1842 y(but)33 b(do)s(es)h(not)g(fundamen)m(tally)e(di\013er)h(from)g -(the)h(older)f(pap)s(er-orien)m(ted)h(markup)e(sc)m(hemes)j(lik)m(e)e -(L)3583 1825 y Ff(A)3622 1842 y Fl(T)3673 1862 y(E)3723 -1842 y(X)94 1955 y(or)c(P)m(ostscript\).)41 b(A)30 b(consequence)g(of)f -(this)g(is)f(that)i(the)g(online)e(material)g(is)h(mac)m -(hine-readable,)g(but)g(not)94 2068 y(mac)m(hine-understandable,)f(sev) -m(erely)j(crippling)c(the)k(p)s(ossibilit)m(y)c(to)k(o\013er)f(added-v) --5 b(alue)30 b(services)g(lik)m(e)230 2255 y Fe(\017)46 -b Fl(Preserv)-5 b(ation)31 b(of)h(the)g(real)f(informativ)m(e)g(con)m -(ten)m(t)i(in)d(a)i(highly)e(structured)g(and)h(mac)m(hine)h(under-)321 -2368 y(standable)e(format,)h(suitable)e(for)h(transformation,)g -(automatic)h(elab)s(oration)f(and)f(pro)s(cessing.)230 -2556 y Fe(\017)46 b Fl(Cut)33 b(and)f(paste)h(on)g(the)g(lev)m(el)f(of) -h(computation)g(\(tak)m(e)i(the)e(output)f(from)h(a)g(W)-8 -b(eb)33 b(searc)m(h)h(engine)321 2669 y(and)c(paste)h(it)f(in)m(to)g(a) -h(computer)f(algebra)h(system\).)230 2857 y Fe(\017)46 -b Fl(Automatic)31 b(pro)s(of)f(c)m(hec)m(king)h(of)g(published)26 -b(pro)s(ofs)230 3044 y Fe(\017)46 b Fl(Seman)m(tical)30 -b(searc)m(h)h(for)g(mathematical)f(concepts)h(\(rather)g(than)f(k)m -(eyw)m(ords\).)230 3232 y Fe(\017)46 b Fl(Classi\014cation:)38 -b(giv)m(en)29 b(a)g(concrete)h(mathematical)f(structure,)f(is)g(there)g -(a)h(general)g(theory)g(for)f(it?)235 3419 y(Due)22 b(to)g(its)f(ric)m -(h)f(notational,)j(logical)e(and)g(seman)m(tical)g(structure,)i -(mathematical)f(kno)m(wledge)f(is)g(th)m(us)94 3532 y(a)32 -b(main)e(case)j(study)e(for)g(the)h(dev)m(elopmen)m(t)g(of)f(the)h(new) -f(generation)h(of)g(seman)m(tic)f(W)-8 b(eb)33 b(systems.)44 -b(The)94 3645 y(aim)33 b(of)g(the)h(prop)s(osed)e(pro)5 -b(ject)34 b(is)f(b)s(oth)f(to)j(help)d(in)g(this)g(pro)s(cess,)i(as)g -(w)m(ell)e(as)i(pa)m(v)m(e)h(the)e(w)m(a)m(y)i(to)m(w)m(ards)94 -3758 y(a)42 b(really)f(useful)g(virtual,)i(distributed,)g(h)m(yp)s -(er-textual)e(resource)i(for)f(the)g(w)m(orking)f(mathematician,)94 -3871 y(scien)m(tist)j(or)g(engineer.)81 b(All)43 b(mo)s(dern)g -(sciences)h(ha)m(v)m(e)h(a)g(strongly)e(mathematicised)h(core,)49 -b(and)43 b(will)94 3984 y(b)s(ene\014t.)59 b(The)36 b(real)g(mark)m(et) -i(and)e(application)f(area)i(for)g(the)g(tec)m(hniques)f(dev)m(elop)s -(ed)g(in)f(this)h(pro)5 b(ject,)94 4097 y(apart)35 b(from)e(the)i(ob)m -(vious)f(realm)f(of)i(education,)g(lies)e(with)g(high-tec)m(h)h(and)g -(engineering)f(corp)s(orations)94 4210 y(that)24 b(rely)f(on)g(h)m(uge) -g(form)m(ula)g(databases.)39 b(Curren)m(tly)-8 b(,)24 -b(b)s(oth)f(the)g(con)m(ten)m(t)i(markup)e(as)g(w)m(ell)g(as)g(the)h -(added-)94 4323 y(v)-5 b(alue)34 b(services)h(alluded)e(to)i(ab)s(o)m -(v)m(e)h(are)g(v)m(ery)f(underdev)m(elop)s(ed,)f(limiting)e(the)j -(usefulness)e(of)i(the)g(vital)94 4436 y(kno)m(wledge.)40 -b(The)28 b(infrastructure)e(and)h(kno)m(who)m(w)i(needed)e(for)h -(mining)e(this)h(information)g(treasure)h(and)94 4549 -y(obtaining)g(a)h(comp)s(etitiv)m(e)g(edge)h(in)e(dev)m(elopmen)m(t)h -(is)g(exactly)g(what)g(w)m(e)h(are)f(attempting)h(to)g(dev)m(elop)f(in) -94 4661 y(our)h(pro)5 b(ject.)235 4774 y(Sev)m(eral)38 -b(languages)h(ha)m(v)m(e)h(b)s(een)d(already)h(prop)s(osed)f(for)h(the) -h(managemen)m(t)g(of)g(mathematical)f(in-)94 4887 y(formation)j(on)g -(the)g(W)-8 b(eb,)45 b(b)s(oth)c(for)g(publishing,)f(comm)m(unication)h -(and)f(arc)m(hiving)g(purp)s(oses:)61 b(most)94 5000 -y(notably)-8 b(,)37 b(MathML)f([11)q(],)h(Op)s(enMath)e([15)q(],)i -(OMDo)s(c)f([14)q(].)56 b(Other)35 b(languages)h(m)m(ust)f(b)s(e)g -(also)g(consid-)94 5113 y(ered)f(for)f(de\014nition)f(and)h(sp)s -(eci\014cation)f(of)i(Metadata,)j(suc)m(h)d(as)g(the)g(Dublin-core)e -(System)i([5],)h(or)f(the)94 5226 y(Resource)d(Description)f(F)-8 -b(ramew)m(ork)32 b([16)r(].)42 b(All)30 b(these)h(languages,)h(whic)m -(h)e(tend)g(to)i(co)m(v)m(er)h(di\013eren)m(t)d(and)94 -5339 y(orthogonal)f(asp)s(ects)f(of)h(the)f(managemen)m(t)i(of)f -(mathematical)f(do)s(cumen)m(ts,)h(m)m(ust)f(b)s(e)g(ev)m(en)m(tually)g -(tak)m(en)p eop -%%Page: 6 6 -6 5 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2578 -b Fl(6)94 171 y(in)m(to)25 b(accoun)m(t)i(for)f(the)f(am)m(bitious)f -(goal)i(of)g(our)f(pro)5 b(ject.)40 b(One)25 b(of)g(our)g(aims)g(is)f -(actually)h(the)h(de\014nition)d(of)94 284 y(a)33 b(mo)s(dular)e(arc)m -(hitecture)i(whic)m(h)f(could)g(exploit)f(the)i(distinctiv)m(e)f(p)s -(oten)m(tialities)f(of)i(eac)m(h)h(one)f(of)g(these)94 -397 y(languages,)40 b(in)m(tegrating)d(them)h(in)m(to)f(a)h(single)e -(application.)61 b(The)37 b(in)m(tegration)g(is)g(in)f(this)g(case)j -(facili-)94 510 y(tated)28 b(b)m(y)g(the)f(fact)i(that)f(all)e(the)i -(languages)f(men)m(tioned)g(are)h(particular)e(instances)h(of)h(XML,)f -(pro)m(viding)94 623 y(the)32 b(opp)s(ortunit)m(y)d(to)j(use)f -(standard)g(XML)g(tec)m(hnology)-8 b(,)34 b(and)d(in)f(particular)f -(XSL)i(T)-8 b(ransformations)30 b(or)94 736 y(st)m(ylesheets)h([18)q -(],)g(to)g(pass)f(from)g(one)h(language)f(to)i(the)e(other.)1018 -2387 y @beginspecial 0 @llx 0 @lly 202 @urx 167 @ury -2218 @rwi @setspecial -%%BeginDocument: arch.eps -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: arch.eps -%%Creator: fig2dev Version 3.2 Patchlevel 3a -%%CreationDate: Tue Jan 30 13:45:06 2001 -%%For: asperti@marcello (Andrea Asperti, docente, 2094505) -%%BoundingBox: 0 0 202 167 -%%Magnification: 0.3000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 167 moveto 0 0 lineto 202 0 lineto 202 167 lineto closepath clip newpath --16.0 175.0 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -%%Page: 1 1 -10 setmiterlimit - 0.01890 0.01890 sc -% Polyline -7.500 slw -n 2025 8325 m 4050 8325 l 4050 9000 l 2025 9000 l - cp gs col0 s gr -/Times-Roman ff 300.00 scf sf -2565 8910 m -gs 1 -1 sc (Interface) col0 sh gr -/Times-Roman ff 300.00 scf sf -2610 8640 m -gs 1 -1 sc (Textual) col0 sh gr -% Polyline -n 900 6750 m 2925 6750 l 2925 7425 l 900 7425 l - cp gs col0 s gr -/Times-Roman ff 300.00 scf sf -1575 7020 m -gs 1 -1 sc (Type) col0 sh gr -/Times-Roman ff 300.00 scf sf -1395 7335 m -gs 1 -1 sc (Checker) col0 sh gr -% Polyline -n 4725 8325 m 6750 8325 l 6750 9000 l 4725 9000 l - cp gs col0 s gr -/Times-Roman ff 300.00 scf sf -5175 8595 m -gs 1 -1 sc (Graphical) col0 sh gr -/Times-Roman ff 300.00 scf sf -5265 8910 m -gs 1 -1 sc (Interface) col0 sh gr -% Polyline -n 3600 6750 m 5625 6750 l 5625 7425 l 3600 7425 l - cp gs col0 s gr -/Times-Roman ff 300.00 scf sf -4050 7335 m -gs 1 -1 sc (Extractor) col0 sh gr -/Times-Roman ff 300.00 scf sf -4095 7020 m -gs 1 -1 sc (Program) col0 sh gr -% Polyline -n 6300 6750 m 8325 6750 l 8325 7425 l 6300 7425 l - cp gs col0 s gr -/Times-Roman ff 300.00 scf sf -6480 7200 m -gs 1 -1 sc (Search Engine) col0 sh gr -% Polyline -n 9225 6750 m 11250 6750 l 11250 7425 l 9225 7425 l - cp gs col0 s gr -/Times-Roman ff 300.00 scf sf -9630 7020 m -gs 1 -1 sc (Stylesheet) col0 sh gr -/Times-Roman ff 300.00 scf sf -9675 7335 m -gs 1 -1 sc (Processor) col0 sh gr -% Polyline -n 7425 8325 m 9450 8325 l 9450 9000 l 7425 9000 l - cp gs col0 s gr -/Times-Roman ff 300.00 scf sf -8010 8910 m -gs 1 -1 sc (Browser) col0 sh gr -/Times-Roman ff 300.00 scf sf -8190 8640 m -gs 1 -1 sc (Web) col0 sh gr -% Polyline -n 1035 495 m 2655 495 l 2655 1440 l 1035 1440 l - cp gs col0 s gr -/Times-Roman ff 300.00 scf sf -1305 1215 m -gs 1 -1 sc (Libraries ) col0 sh gr -/Times-Roman ff 300.00 scf sf -1305 900 m -gs 1 -1 sc (Digital) col0 sh gr -% Arc -n 8677.4 3120.9 345.6 -122.0 -41.0 arc -gs col0 s gr - -% Arc -n 4665.2 3785.1 574.1 -165.3 -45.9 arc -gs col0 s gr - -% Arc -n 5330.3 3706.7 409.3 -130.4 -29.4 arc -gs col0 s gr - -% Arc -n 5805.2 3711.8 237.3 -119.9 3.9 arc -gs col0 s gr - -% Arc -n 6247.4 4020.9 345.6 -122.0 -41.0 arc -gs col0 s gr - -% Arc -n 4795.2 4682.2 292.7 32.2 -166.9 arc -gs col0 s gr - -% Arc -n 4229.1 4400.2 354.2 37.5 -164.4 arc -gs col0 s gr - -% Arc -n 3897.6 4027.5 277.7 92.0 -173.1 arc -gs col0 s gr - -% Arc -n 3867.5 3807.4 308.3 142.8 -38.1 arc -gs col0 s gr - -% Arc -n 8445.2 4145.1 574.1 -165.3 -45.9 arc -gs col0 s gr - -% Arc -n 10027.4 4380.9 345.6 -122.0 -41.0 arc -gs col0 s gr - -% Arc -n 10314.7 4542.9 389.0 -90.7 93.9 arc -gs col0 s gr - -% Arc -n 9725.8 4496.7 727.9 36.6 138.8 arc -gs col0 s gr - -% Arc -n 8923.0 4963.1 255.3 2.9 113.1 arc -gs col0 s gr - -% Arc -n 5287.5 4747.5 256.5 164.7 74.7 arcn -gs col0 s gr - -% Arc -n 6695.0 4199.7 432.0 -119.9 16.2 arc -gs col0 s gr - -% Arc -30.000 slw -n 1944.7 3461.5 615.0 138.4 -30.4 arc -gs col0 s gr - -% Arc -n 5917.5 3105.0 334.5 -137.7 -42.3 arc -gs col0 s gr - -% Arc -n 6390.0 2880.0 225.0 180.0 -53.1 arc -gs col0 s gr - -% Arc -n 7738.5 2887.5 492.2 -123.1 -34.3 arc -gs col0 s gr - -% Arc -n 8280.0 2739.4 187.0 -136.2 15.7 arc -gs col0 s gr - -% Arc -n 8683.4 3159.6 394.1 -124.5 -36.5 arc -gs col0 s gr - -% Arc -n 9625.1 4007.9 189.6 -133.3 12.8 arc -gs col0 s gr - -% Arc -n 10025.0 4475.0 436.6 -119.5 -50.1 arc -gs col0 s gr - -% Arc -n 10299.4 4550.6 410.7 -89.2 76.5 arc -gs col0 s gr - -% Arc -n 9709.6 4274.2 931.1 46.5 124.7 arc -gs col0 s gr - -% Arc -n 8910.0 4905.0 301.9 26.6 116.6 arc -gs col0 s gr - -% Arc -n 8366.4 5253.2 371.9 -12.1 89.5 arc -gs col0 s gr - -% Arc -n 2701.7 4693.8 692.9 39.0 -167.6 arc -gs col0 s gr - -% Arc -n 3609.3 3409.0 1163.5 -167.1 -43.4 arc -gs col0 s gr - -% Arc -n 1915.4 4008.9 495.3 82.5 -163.7 arc -gs col0 s gr - -% Arc -n 3788.2 5271.1 566.1 38.7 -165.6 arc -gs col0 s gr - -% Arc -n 4967.0 3174.5 762.2 -132.2 -22.7 arc -gs col0 s gr - -% Arc -n 7048.8 2803.1 533.9 -168.9 -37.9 arc -gs col0 s gr - -% Arc -n 9208.1 4038.8 354.2 -79.9 -20.4 arc -gs col0 s gr - -% Arc -n 6952.5 5719.5 208.5 -13.7 122.7 arc -gs col0 s gr - -% Arc -7.500 slw -n 6420.2 4820.1 574.1 -165.3 -45.9 arc -gs col0 s gr - -% Arc -n 7085.3 4741.7 409.3 -130.4 -29.4 arc -gs col0 s gr - -% Arc -n 8002.4 5055.9 345.6 -122.0 -41.0 arc -gs col0 s gr - -% Arc -n 5984.1 5435.2 354.2 37.5 -164.4 arc -gs col0 s gr - -% Arc -n 5652.6 5062.5 277.7 92.0 -173.1 arc -gs col0 s gr - -% Arc -n 5622.5 4842.4 308.3 142.8 -38.1 arc -gs col0 s gr - -% Arc -30.000 slw -n 4462.5 5617.5 238.4 24.1 167.3 arc -gs col0 s gr - -% Arc -n 5124.5 5730.9 400.6 24.2 175.8 arc -gs col0 s gr - -% Arc -n 5798.9 5528.9 451.3 24.4 125.8 arc -gs col0 s gr - -% Arc -n 7740.0 5040.0 859.7 42.9 132.9 arc -gs col0 s gr - -% Arc -n 6557.9 5690.3 348.5 36.0 -176.7 arc -gs col0 s gr - -% Arc -n 8962.8 3349.6 426.2 -85.0 43.9 arc -gs col0 s gr - -% Arc -7.500 slw -n 9180.0 4725.0 1038.9 -107.7 -85.0 arc -gs col0 s gr - -% Arc -n 8402.1 5123.6 331.9 -111.6 8.9 arc -gs col0 s gr - -% Arc -n 6086.0 3214.8 344.0 -76.7 133.3 arcn -gs col0 s gr - -% Arc -n 7362.8 4473.7 694.2 -42.5 -119.6 arcn -gs col0 s gr - -% Arc -n 7560.0 4786.9 277.0 -119.2 -12.9 arc -gs col0 s gr - -% Arc -n 3672.8 4538.4 270.6 -76.7 159.1 arcn -gs col0 s gr - -% Arc -n 3763.9 5078.6 526.4 -130.8 174.4 arcn -gs col0 s gr - -% Polyline -n 1125 7425 m 1125 7650 l 3150 7650 l 3150 6975 l - 2925 6975 l gs col0 s gr -% Polyline -n 3825 7425 m 3825 7650 l 5850 7650 l 5850 6975 l - 5625 6975 l gs col0 s gr -% Polyline -n 6525 7425 m 6525 7650 l 8550 7650 l 8550 6975 l - 8325 6975 l gs col0 s gr -% Polyline -n 9450 7425 m 9450 7650 l 11475 7650 l 11475 6975 l - 11250 6975 l gs col0 s gr -% Polyline -n 7650 9000 m 7650 9225 l 9675 9225 l 9675 8550 l - 9450 8550 l gs col0 s gr -% Polyline -n 4950 9000 m 4950 9225 l 6975 9225 l 6975 8550 l - 6750 8550 l gs col0 s gr -% Polyline -n 2250 9000 m 2250 9225 l 4275 9225 l 4275 8550 l - 4050 8550 l gs col0 s gr -% Polyline -gs clippath -3272 5362 m 3226 5324 l 3128 5440 l 3229 5368 l 3174 5479 l cp -eoclip -n 2070 6750 m - 3240 5355 l gs col0 s gr gr - -% arrowhead -n 3174 5479 m 3229 5368 l 3128 5440 l col0 s -% Polyline -gs clippath -2068 7706 m 2043 7761 l 2181 7824 l 2085 7747 l 2206 7769 l cp -eoclip -n 3150 8235 m - 2070 7740 l gs col0 s gr gr - -% arrowhead -n 2206 7769 m 2085 7747 l 2181 7824 l col0 s -% Polyline -gs clippath -4748 7764 m 4730 7706 l 4585 7752 l 4709 7745 l 4603 7809 l cp -eoclip -n 3150 8235 m - 4725 7740 l gs col0 s gr gr - -% arrowhead -n 4603 7809 m 4709 7745 l 4585 7752 l col0 s -% Polyline -gs clippath -2374 7707 m 2365 7767 l 2514 7791 l 2401 7743 l 2524 7732 l cp -eoclip -n 5715 8280 m - 2385 7740 l gs col0 s gr gr - -% arrowhead -n 2524 7732 m 2401 7743 l 2514 7791 l col0 s -% Polyline -gs clippath -4862 7706 m 4831 7758 l 4961 7836 l 4874 7749 l 4992 7785 l cp -eoclip -n 5760 8280 m - 4860 7740 l gs col0 s gr gr - -% arrowhead -n 4992 7785 m 4874 7749 l 4961 7836 l col0 s -% Polyline -gs clippath -7493 7764 m 7475 7706 l 7330 7752 l 7454 7745 l 7348 7809 l cp -eoclip -n 5760 8280 m - 7470 7740 l gs col0 s gr gr - -% arrowhead -n 7348 7809 m 7454 7745 l 7330 7752 l col0 s -% Polyline -gs clippath -10368 7722 m 10361 7663 l 10211 7682 l 10334 7697 l 10218 7741 l cp -eoclip -n 5760 8280 m - 10350 7695 l gs col0 s gr gr - -% arrowhead -n 10218 7741 m 10334 7697 l 10211 7682 l col0 s -% Polyline -gs clippath -7561 7706 m 7532 7759 l 7665 7832 l 7575 7748 l 7694 7779 l cp -eoclip -n 8460 8235 m - 7560 7740 l gs col0 s gr gr - -% arrowhead -n 7694 7779 m 7575 7748 l 7665 7832 l col0 s -% Polyline -gs clippath -10192 7810 m 10176 7752 l 10030 7791 l 10154 7789 l 10045 7849 l cp -eoclip -n 8505 8235 m - 10170 7785 l gs col0 s gr gr - -% arrowhead -n 10045 7849 m 10154 7789 l 10030 7791 l col0 s -% Polyline - [60] 0 sd -gs clippath -2823 2461 m 2867 2420 l 2763 2310 l 2824 2418 l 2719 2351 l cp -eoclip -n 1980 1530 m - 2835 2430 l gs col0 s gr gr - [] 0 sd -% arrowhead -n 2719 2351 m 2824 2418 l 2763 2310 l col0 s -% Polyline -gs clippath -9926 5244 m 9867 5255 l 9894 5404 l 9903 5281 l 9953 5393 l cp -eoclip -n 10170 6750 m - 9900 5265 l gs col0 s gr gr - -% arrowhead -n 9953 5393 m 9903 5281 l 9894 5404 l col0 s -% Polyline -gs clippath -8188 5816 m 8163 5871 l 8301 5933 l 8205 5857 l 8326 5879 l cp -eoclip -n 10170 6750 m - 8190 5850 l gs col0 s gr gr - -% arrowhead -n 8326 5879 m 8205 5857 l 8301 5933 l col0 s -% Polyline -gs clippath -7456 5928 m 7396 5921 l 7379 6071 l 7423 5956 l 7439 6078 l cp -eoclip -n 7335 6750 m - 7425 5940 l gs col0 s gr gr - -% arrowhead -n 7439 6078 m 7423 5956 l 7379 6071 l col0 s -% Polyline -gs clippath -5758 5996 m 5733 6051 l 5871 6114 l 5775 6037 l 5896 6059 l cp -eoclip -n 7335 6750 m - 5760 6030 l gs col0 s gr gr - -% arrowhead -n 5896 6059 m 5775 6037 l 5871 6114 l col0 s -% Polyline -gs clippath -4712 5930 m 4652 5920 l 4627 6069 l 4677 5956 l 4686 6079 l cp -eoclip -n 4545 6750 m - 4680 5940 l gs col0 s gr gr - -% arrowhead -n 4686 6079 m 4677 5956 l 4627 6069 l col0 s -% Polyline - [60] 0 sd -gs clippath -7662 2288 m 7709 2325 l 7801 2204 l 7705 2282 l 7754 2168 l cp -eoclip -n 8280 1530 m - 7695 2295 l gs col0 s gr gr - [] 0 sd -% arrowhead -n 7754 2168 m 7705 2282 l 7801 2204 l col0 s -% Polyline - [60] 0 sd -gs clippath -5235 2356 m 5295 2353 l 5287 2201 l 5264 2323 l 5227 2204 l cp -eoclip -n 5220 1485 m - 5265 2340 l gs col0 s gr gr - [] 0 sd -% arrowhead -n 5227 2204 m 5264 2323 l 5287 2201 l col0 s -% Polyline -n 7515 450 m 9855 450 l 9855 1395 l 7515 1395 l - cp gs col0 s gr -% Polyline -n 4185 450 m 6300 450 l 6300 1395 l 4185 1395 l - cp gs col0 s gr -/Times-Roman ff 270.00 scf sf -3870 3285 m -gs 1 -1 sc ( ) col0 sh gr -/Times-Roman ff 360.00 scf sf -2115 3915 m -gs 1 -1 sc (XML) col0 sh gr -/Times-Roman ff 300.00 scf sf -8460 4500 m -gs 1 -1 sc (Stylesheets) col0 sh gr -/Times-Roman ff 270.00 scf sf -4770 4140 m -gs 1 -1 sc (RDF) col0 sh gr -/Times-Roman ff 270.00 scf sf -6390 5175 m -gs 1 -1 sc (OMDoc) col0 sh gr -/Times-Roman ff 270.00 scf sf -4005 5355 m -gs 1 -1 sc (MathML) col0 sh gr -/Times-Roman ff 270.00 scf sf -6840 3240 m -gs 1 -1 sc (OpenMath) col0 sh gr -/Times-Roman ff 300.00 scf sf -4545 855 m -gs 1 -1 sc (Logical) col0 sh gr -/Times-Roman ff 300.00 scf sf -4545 1185 m -gs 1 -1 sc (Frameworks) col0 sh gr -/Times-Roman ff 300.00 scf sf -7740 900 m -gs 1 -1 sc (Computer) col0 sh gr -/Times-Roman ff 300.00 scf sf -7740 1215 m -gs 1 -1 sc (Algebra Systems) col0 sh gr -$F2psEnd -rs - -%%EndDocument - @endspecial 235 2676 a(The)23 b(fact)h(of)f(enco)s(ding)f(also)h(the)g -(microscopic,)h(logical)f(lev)m(el)g(of)g(mathematics)g(op)s(ens)g(the) -g(p)s(ossibilit)m(y)94 2789 y(to)i(ha)m(v)m(e)h(completely)e -(formalised)f(subsystems)h(of)g(the)h(library)-8 b(,)24 -b(whic)m(h)f(could)h(b)s(e)g(c)m(hec)m(k)m(ed)j(automatically)94 -2902 y(b)m(y)37 b(standard)f(to)s(ols)h(for)g(the)h(automation)f(of)h -(formal)e(reasoning)h(and)f(the)i(mec)m(hanisation)e(of)i(mathe-)94 -3015 y(matics)33 b(\(pro)s(of)f(assistan)m(ts)h(and)f(logical)g(framew) -m(orks)h([8)q(,)g(9]\).)48 b(A)m(t)34 b(the)f(same)g(time,)g(an)m(y)g -(of)g(these)h(to)s(ols)94 3128 y(could)29 b(b)s(e)g(used)f(as)i(an)g -(authoring)e(system)i(for)f(do)s(cumen)m(ts)h(of)f(the)h(library)-8 -b(,)28 b(b)m(y)i(simply)d(exp)s(orting)h(their)94 3241 -y(in)m(ternal)35 b(libraries)f(in)m(to)i(XML,)h(and)f(using)f(st)m -(ylesheets)j(to)f(transform)f(the)g(output)h(in)m(to)f(a)h(standard,)94 -3354 y(mac)m(hine-understandable)28 b(represen)m(tation,)j(suc)m(h)f -(as)h(MathML)g(con)m(ten)m(t)h(markup)d(or)h(Op)s(enMath.)94 -3466 y(The)h(precise)g(formal)g(con)m(ten)m(t)i(can)f(still)e(b)s(e)h -(preserv)m(ed)g(b)m(y)g(the)h(mac)m(hinery)f(of)h(Xlinks)d([17)q(].)45 -b(Moreo)m(v)m(er,)94 3579 y(st)m(ylesheets)c(can)g(b)s(e)f(also)h(used) -e(to)j(solv)m(e)f(the)f(anno)m(ying)g(notational)h(problem)e(that)i -(usually)d(a\017icts)94 3692 y(formal)30 b(mathematics,)h(pro)m(viding) -d(a)j(simple)d(w)m(a)m(y)j(for)g(adding)e(user-de\014ned)f(st)m(yles)j -(and)f(notations.)235 3805 y(So,)35 b(our)f(approac)m(h)g(leads)f(to)i -(a)g(natural)e(in)m(tegration)h(of)g(pro)s(of)f(assistan)m(t)h(to)s -(ols)g(and)g(the)g(W)-8 b(eb.)52 b(In)94 3918 y(this)30 -b(in)m(tegration,)g(the)h(emphasis)e(is)h(just)g(on)h(\\con)m(ten)m -(t":)44 b(w)m(e)31 b(do)f(not)h(try)g(to)g(link)d(directly)i(the)h(sp)s -(eci\014c)94 4031 y(applications)d(to)j(the)f(W)-8 b(eb,)31 -b(that)f(w)m(ould)f(b)s(e)g(a)i(ma)5 b(jor)30 b(mistak)m(e,)h(for)e(ob) -m(vious)h(mo)s(dularit)m(y)e(reasons.)40 b(On)94 4144 -y(the)d(con)m(trary)-8 b(,)41 b(w)m(e)d(adopt)f(XML)h(as)f(a)h(neutral) -e(sp)s(eci\014cation)g(language,)k(and)d(then)g(w)m(e)h(merely)e(w)m -(ork)94 4257 y(on)29 b(XML-do)s(cumen)m(ts,)g(forgetting)g(the)g -(underlying)d(application.)38 b(In)28 b(this)g(w)m(a)m(y)-8 -b(,)30 b(similar)c(soft)m(w)m(are)31 b(to)s(ols)94 4370 -y(can)42 b(b)s(e)f(applied)f(to)j(di\013eren)m(t)e(logical)g(dialects,) -k(regardless)c(of)h(their)f(concrete)i(nature.)75 b(Moreo)m(v)m(er,)94 -4483 y(if)35 b(ha)m(ving)g(a)h(common)g(represen)m(tation)g(la)m(y)m -(er)h(is)e(not)h(the)g(ultimate)f(solution)f(to)j(all)e(in)m(ter-op)s -(erabilit)m(y)94 4596 y(problems)20 b(b)s(et)m(w)m(een)j(di\013eren)m -(t)e(applications,)h(it)g(is)f(ho)m(w)m(ev)m(er)i(a)g(\014rst)e(and)g -(essen)m(tial)h(step)g(in)f(this)f(direction.)94 4708 -y(Finally)-8 b(,)40 b(this)e(\\standardisation")g(pro)s(cess)h(should)e -(naturally)h(lead)g(to)i(a)g(substan)m(tial)e(simpli\014cation)94 -4821 y(and)d(re-organisation)h(of)g(the)g(curren)m(t,)i(\\monolithic")c -(arc)m(hitecture)j(of)f(logical)f(framew)m(orks.)58 b(All)34 -b(the)94 4934 y(man)m(y)g(di\013eren)m(t)f(and)g(often)i(lo)s(osely)e -(connected)h(functionalities)e(of)i(these)g(complex)f(programs)h(\(pro) -s(of)94 5047 y(c)m(hec)m(king,)47 b(editing,)f(searc)m(h)e(and)e -(consulting,)j(program)e(extraction,)48 b(and)42 b(so)i(on\))f(could)g -(b)s(e)f(clearly)94 5160 y(split)29 b(in)h(more)h(or)g(less)g -(autonomous)g(tasks,)h(and)f(could)f(b)s(e)g(dev)m(elop)s(ed)h(b)m(y)g -(di\013eren)m(t)f(teams,)j(in)c(totally)94 5273 y(di\013eren)m(t)g -(languages.)41 b(This)28 b(is)h(the)h(new,)g(\\con)m(ten)m(t-based")j -(arc)m(hitectural)d(design)f(of)h(future)f(systems.)p -eop -%%Page: 7 7 -7 6 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2578 -b Fl(7)94 171 y Fj(3)135 b(P)l(articipan)l(t)46 b(list)p -94 386 3746 4 v 92 499 4 113 v 144 465 a Fl(P)m(art.)p -393 499 V 100 w(P)m(art.)p 694 499 V 101 w(P)m(articipan)m(t)p -1711 499 V 571 w(P)m(articipan)m(t)p 2256 499 V 100 w(Coun)m(try)p -2834 499 V 248 w(Date)32 b(en)m(ter)p 3354 499 V 101 -w(Date)g(exit)p 3838 499 V 92 612 V 144 578 a(Role)p -393 612 V 122 w(no.)p 694 612 V 180 w(name)p 1711 612 -V 805 w(short)e(name)p 2256 612 V 2834 612 V 678 w(Pro)5 -b(ject)p 3354 612 V 230 w(Pro)g(ject)p 3838 612 V 94 -615 3746 4 v 92 728 4 113 v 144 694 a(C)p 393 728 V 234 -w(1)p 694 728 V 256 w(Univ)m(ersit\022)-45 b(a)30 b(degli)p -1711 728 V 391 w(UNIBO)p 2256 728 V 242 w(Italy)p 2834 -728 V 390 w(Start)p 3354 728 V 319 w(End)p 3838 728 V -92 841 V 393 841 V 694 841 V 745 807 a(Studi)e(di)i(Bologna)p -1711 841 V 2256 841 V 2834 841 V 1470 w(of)h(pro)5 b(ject)p -3354 841 V 137 w(of)30 b(pro)5 b(ject)p 3838 841 V 94 -844 3746 4 v 92 957 4 113 v 144 923 a(P)p 393 957 V 238 -w(2)p 694 957 V 256 w(Institut)29 b(National)i(de)p 1711 -957 V 223 w(INRIA)p 2256 957 V 277 w(F)-8 b(rance)p 2834 -957 V 314 w(Start)p 3354 957 V 319 w(End)p 3838 957 V -92 1070 V 393 1070 V 694 1070 V 745 1036 a(Rec)m(herc)m(he)32 -b(en)e(Informa-)p 1711 1070 V 2256 1070 V 2834 1070 V -1244 w(of)h(pro)5 b(ject)p 3354 1070 V 137 w(of)30 b(pro)5 -b(ject)p 3838 1070 V 92 1183 V 393 1183 V 694 1183 V -745 1149 a(tique)30 b(et)h(Automatique)p 1711 1183 V -2256 1183 V 2834 1183 V 3354 1183 V 3838 1183 V 94 1186 -3746 4 v 92 1299 4 113 v 144 1265 a(P)p 393 1299 V 238 -w(3)p 694 1299 V 256 w(German)f(Cen)m(ter)h(for)p 1711 -1299 V 263 w(DFKI)p 2256 1299 V 314 w(German)m(y)p 2834 -1299 V 213 w(Start)p 3354 1299 V 319 w(End)p 3838 1299 -V 92 1412 V 393 1412 V 694 1412 V 745 1378 a(Arti\014cial)e(In)m -(telligence)p 1711 1412 V 2256 1412 V 2834 1412 V 1308 -w(of)i(pro)5 b(ject)p 3354 1412 V 137 w(of)30 b(pro)5 -b(ject)p 3838 1412 V 94 1415 3746 4 v 92 1528 4 113 v -144 1494 a(P)p 393 1528 V 238 w(4)p 694 1528 V 256 w(Katholiek)m(e)31 -b(Univ)m(ersiteit)p 1711 1528 V 98 w(KUN)p 2256 1528 -V 339 w(Netherlands)p 2834 1528 V 98 w(Start)p 3354 1528 -V 319 w(End)p 3838 1528 V 92 1641 V 393 1641 V 694 1641 -V 745 1607 a(Nijmegen)p 1711 1641 V 2256 1641 V 2834 -1641 V 1766 w(of)g(pro)5 b(ject)p 3354 1641 V 137 w(of)30 -b(pro)5 b(ject)p 3838 1641 V 94 1644 3746 4 v 92 1757 -4 113 v 144 1723 a(P)p 393 1757 V 238 w(5)p 694 1757 -V 256 w(Max-Plank-Gesellshaft)p 1711 1757 V 115 w(MPG)p -2256 1757 V 330 w(German)m(y)p 2834 1757 V 213 w(Start)p -3354 1757 V 319 w(End)p 3838 1757 V 92 1870 V 393 1870 -V 694 1870 V 745 1836 a(zur)30 b(F)-8 b(o)s(erderung)30 -b(der)p 1711 1870 V 2256 1870 V 2834 1870 V 1377 w(of)h(pro)5 -b(ject)p 3354 1870 V 137 w(of)30 b(pro)5 b(ject)p 3838 -1870 V 92 1983 V 393 1983 V 694 1983 V 745 1949 a(Wissenshaften)30 -b(e.V.)p 1711 1983 V 2256 1983 V 2834 1983 V 3354 1983 -V 3838 1983 V 94 1986 3746 4 v 92 2099 4 113 v 144 2066 -a(P)p 393 2099 V 238 w(6)p 694 2099 V 256 w(T)-8 b(rusted)30 -b(Logic)g(S.A.)p 1711 2099 V 268 w(T)-8 b(rusted)p 2256 -2099 V 239 w(F)g(rance)p 2834 2099 V 314 w(Start)p 3354 -2099 V 319 w(End)p 3838 2099 V 92 2212 V 393 2212 V 694 -2212 V 1711 2212 V 1762 2178 a(Logic)p 2256 2212 V 2834 -2212 V 910 w(of)31 b(pro)5 b(ject)p 3354 2212 V 137 w(of)30 -b(pro)5 b(ject)p 3838 2212 V 94 2216 3746 4 v 94 2451 -a Fj(4)135 b(Con)l(tribution)46 b(to)f(programme/k)l(ey)i(action)e(ob)7 -b(jectiv)l(es)94 2654 y Fl(The)25 b(Pro)5 b(ject)27 b(con)m(tributes)e -(to)i(build)c(a)j(user)f(friendly)e(information)h(so)s(ciet)m(y)-8 -b(,)28 b(and)e(in)e(particular)g(it)i(meets)94 2766 y(the)31 -b(follo)m(wing)d(general)j(ob)5 b(jectiv)m(es)31 b(of)g(this)e -(program:)205 2954 y(1.)46 b(\(m)m(ultimedia)38 b(con)m(ten)m(t\))k -(con\014rming)d(Europ)s(e)f(as)i(a)h(leading)d(force)j(in)d(this)h -(\014eld,)i(realizing)d(the)321 3067 y(p)s(oten)m(tial)30 -b(of)h(its)e(creativit)m(y)i(and)f(culture;)205 3255 -y(2.)46 b(\(essen)m(tial)35 b(tec)m(hnologies)g(and)f(infrastructure\)) -f(enabling)g(tec)m(hnologies)i(whic)m(h)e(are)i(the)g(founda-)321 -3368 y(tions)24 b(of)g(the)g(information)f(so)s(ciet)m(y)-8 -b(,)27 b(driving)21 b(their)j(dev)m(elopmen)m(t,)i(enhancing)d(their)g -(applicabilit)m(y)-8 b(,)321 3480 y(and)30 b(accelerating)h(their)f -(tak)m(e)i(up)d(in)g(Europ)s(e.)94 3668 y(As)35 b(a)h(matter)g(of)f -(fact,)j(the)d(pro)5 b(ject)36 b(is)e(based)h(in)f(an)h(essen)m(tial)g -(w)m(a)m(y)h(on)f(the)g(use)g(of)g(most)h(part)f(of)g(the)94 -3781 y(recen)m(t)24 b(recommendations)f(of)h(the)f(W)-8 -b(orld)23 b(Wide)g(W)-8 b(eb)24 b(Organization)e(for)h(W)-8 -b(eb)24 b(publishing)19 b(and)k(h)m(uman-)94 3894 y(computer)39 -b(in)m(teraction)f(\(XML,)i(XSL,)e(XLL,)h(Namespaces,)j(MathML,)e(RDF,) -f(etc.\).)68 b(In)38 b(particular,)94 4007 y(w)m(e)i(aim)f(to)h(pro)m -(v)m(e)g(ho)m(w)g(all)e(these)i(sp)s(eci\014cations)f(naturally)e -(\014t)j(together,)j(when)c(trying)f(to)j(build)36 b(a)94 -4120 y(full,)42 b(in)m(tegrated)g(description)d(\(comprising)h(con)m -(ten)m(t,)46 b(notation,)f(metadata,)g(etc.\))75 b(of)42 -b(a)f(giv)m(en)h(\014eld)94 4233 y(of)e(kno)m(wledge.)70 -b(A)m(t)41 b(our)e(kno)m(wledge,)k(the)d(pro)5 b(ject)41 -b(is)e(the)h(\014rst)f(of)h(the)g(kind,)h(and)f(could)f(b)s(ecome)h(a) -94 4346 y(paradigmatic)30 b(example)g(in)f(the)h(in)m(tegrated)i(use)e -(of)g(these)h(tec)m(hnologies.)235 4458 y(The)23 b(pro)5 -b(ject)24 b(also)g(addresses)e(most)i(of)g(the)g(issues)e(of)i(the)f(m) -m(ultimedia)f(con)m(ten)m(t)j(k)m(ey)f(action,)i(namely:)94 -4571 y(electronic)44 b(publishing,)f(digital)f(heritage)i(and)g -(cultural)e(con)m(ten)m(t,)49 b(education,)f(information)42 -b(access,)94 4684 y(\014ltering)30 b(and)i(handling.)42 -b(Actually)-8 b(,)33 b(all)e(these)h(asp)s(ects)g(are)g(and)g(m)m(ust)g -(b)s(e)f(co)m(v)m(ered)j(in)c(our)i(pro)5 b(ject,)33 -b(in)94 4797 y(order)i(to)h(reac)m(h)h(our)e(ob)5 b(jectiv)m(es.)57 -b(In)35 b(particular,)h(the)g(educational)f(p)s(oten)m(tial)g(of)g(our) -h(system)f(should)94 4910 y(not)44 b(b)s(e)g(neglected)g(either:)68 -b(it)43 b(could)g(b)s(ecome)i(an)e(essen)m(tial)h(to)s(ol)g(for)g(a)g -(wider)f(and)g(more)h(friendly)94 5023 y(dissemination)22 -b(of)j(mathematical)f(kno)m(wledge.)39 b(F)-8 b(or)25 -b(instance,)h(if)e(supp)s(orted)e(b)m(y)j(a)f(suitable)g(tec)m(hnology) --8 b(,)94 5136 y(pro)m(ving)21 b(theorems)h(in)f(a)h(pro)s(of)f -(assistan)m(t)h(could)f(b)s(e)h(as)g(am)m(using)f(as)h(pla)m(ying)f(a)h -(video)f(game.)39 b(W)-8 b(e)23 b(imagine)94 5249 y(bunc)m(hes)28 -b(of)i(y)m(oung)f(researc)m(hers)h(con)m(tributing)e(to)i(the)f(free)h -(dev)m(elopmen)m(t)f(of)h(the)f(library)e(for)i(the)g(mere)p -eop -%%Page: 8 8 -8 7 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2578 -b Fl(8)94 171 y(grati\014cation)33 b(of)f(seeing)h(their)f(name)g(as)h -(actual)g(editor)f(\(or,)i(wh)m(y)e(not,)i(original)d(author\))i(of)g -(a)g(sp)s(eci\014c)94 284 y(fragmen)m(t.)235 397 y(Finally)-8 -b(,)32 b(the)h(pro)5 b(ject)33 b(is)f(particularly)e(related)j(to)g -(the)g(sp)s(eci\014c)f(k)m(ey-action)i(I)s(I)s(I.2.3)f(\(access)h(to)g -(sci-)94 510 y(en)m(ti\014c)f(and)f(cultural)f(heritage\).)50 -b(In)32 b(fact,)j(the)e(aim)f(of)h(our)g(system)g(is)f(exactly)i(to)f -(impro)m(v)m(e)g(access)h(b)m(y)94 623 y(studen)m(ts)d(and)h -(professionals)e(to)i(the)g(fast-gro)m(wing)g(mathematical)g(kno)m -(wledge)g(base,)h(allo)m(wing)d(math-)94 736 y(ematical)38 -b(do)s(cumen)m(ts)f(to)h(b)s(e)e(retriev)m(ed,)j(serv)m(ed,)h(and)c -(pro)s(cessed)h(directly)f(on)h(the)h(W)-8 b(eb.)62 b(Moreo)m(v)m(er,) -94 849 y(our)34 b(system)h(is)e(mean)m(t)j(to)f(b)s(e)f(compatible)g -(with)f(most)i(of)f(the)h(existing)e(to)s(ols)i(for)f(the)h(mec)m -(hanisation)94 962 y(of)g(mathematics)g(and)f(the)g(automation)h(of)g -(formal)f(reasoning)f(\(pro)s(of)i(assistan)m(ts)f(and)g(logical)g -(frame-)94 1075 y(w)m(orks\).)48 b(The)33 b(p)s(ossibilit)m(y)c(to)k -(build)d(coheren)m(t)k(sub-libraries)29 b(of)k(formal)f(mathematical)h -(dev)m(elopmen)m(ts)94 1187 y(w)m(ould)28 b(pro)m(vide)g(an)h(essen)m -(tial)f(\(and)h(unique\))e(added)i(v)-5 b(alue)28 b(to)i(the)f(library) -e(itself,)h(making)g(of)h(Europ)s(e)f(a)94 1300 y(leader)i(in)f(this)g -(area.)235 1413 y(Ma)m(yb)s(e,)36 b(ha)m(ving)d(the)h(p)s(ossibilit)m -(y)d(to)j(pro)s(cess,)h(analyse)e(and)h(elab)s(orate)g(mathematical)g -(structures)94 1526 y(as)24 b(data,)h(the)f(time)f(will)e(come)j(when)e -(w)m(e)i(shall)e(\014nally)f(b)s(e)i(able)f(to)j(start)e(a)h -(completely)f(new)g(and)g(exciting)94 1639 y(\014eld)29 -b(of)h(researc)m(h)h(on)f(mathematics:)41 b(namely)30 -b(a)g(scien)m(ti\014c,)g(empirical)e(study)h(on)h(the)h -Fd(r)-5 b(e)g(al)31 b Fl(structure)f(of)94 1752 y(mathematical)h(en)m -(tities,)f(and)g(the)g(`w)m(a)m(y)i(of)f(thinking')d(of)i -(mathematicians.)94 2038 y Fj(5)135 b(Inno)l(v)-7 b(ation)94 -2241 y Fl(The)32 b(main)f(tec)m(hnical)h(no)m(v)m(elt)m(y)h(of)g(the)f -(pro)5 b(ject)33 b(is)e(in)g(its)g(synergy)h(of)g(di\013eren)m(t)g -(scien)m(ti\014c)f(comm)m(unities)94 2354 y(and)f(researc)m(h)h -(topics:)40 b(digital)29 b(libraries,)f(W)-8 b(eb)31 -b(publishing,)26 b(logical)k(en)m(vironmen)m(ts.)1018 -3661 y @beginspecial 0 @llx 0 @lly 227 @urx 146 @ury -2218 @rwi @setspecial -%%BeginDocument: logo.eps -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: logo.eps -%%Creator: fig2dev Version 3.2 Patchlevel 3a -%%CreationDate: Tue Nov 7 12:09:01 2000 -%%For: asperti@marcello (Andrea Asperti, docente, 2094505) -%%BoundingBox: 0 0 227 146 -%%Magnification: 0.5000 -%%EndComments -/MyAppDict 100 dict dup begin def -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 146 moveto 0 0 lineto 227 0 lineto 227 146 lineto closepath clip newpath --17.0 235.0 translate -1 -1 scale - -% This junk string is used by the show operators -/PATsstr 1 string def -/PATawidthshow { % cx cy cchar rx ry string - % Loop over each character in the string - { % cx cy cchar rx ry char - % Show the character - dup % cx cy cchar rx ry char char - PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) - false charpath % cx cy cchar rx ry char - /clip load PATdraw - % Move past the character (charpath modified the - % current point) - currentpoint % cx cy cchar rx ry char x y - newpath - moveto % cx cy cchar rx ry char - % Reposition by cx,cy if the character in the string is cchar - 3 index eq { % cx cy cchar rx ry - 4 index 4 index rmoveto - } if - % Reposition all characters by rx ry - 2 copy rmoveto % cx cy cchar rx ry - } forall - pop pop pop pop pop % - - currentpoint - newpath - moveto -} bind def -/PATcg { - 7 dict dup begin - /lw currentlinewidth def - /lc currentlinecap def - /lj currentlinejoin def - /ml currentmiterlimit def - /ds [ currentdash ] def - /cc [ currentrgbcolor ] def - /cm matrix currentmatrix def - end -} bind def -% PATdraw - calculates the boundaries of the object and -% fills it with the current pattern -/PATdraw { % proc - save exch - PATpcalc % proc nw nh px py - 5 -1 roll exec % nw nh px py - newpath - PATfill % - - restore -} bind def -% PATfill - performs the tiling for the shape -/PATfill { % nw nh px py PATfill - - PATDict /CurrentPattern get dup begin - setfont - % Set the coordinate system to Pattern Space - PatternGState PATsg - % Set the color for uncolored pattezns - PaintType 2 eq { PATDict /PColor get PATsc } if - % Create the string for showing - 3 index string % nw nh px py str - % Loop for each of the pattern sources - 0 1 Multi 1 sub { % nw nh px py str source - % Move to the starting location - 3 index 3 index % nw nh px py str source px py - moveto % nw nh px py str source - % For multiple sources, set the appropriate color - Multi 1 ne { dup PC exch get PATsc } if - % Set the appropriate string for the source - 0 1 7 index 1 sub { 2 index exch 2 index put } for pop - % Loop over the number of vertical cells - 3 index % nw nh px py str nh - { % nw nh px py str - currentpoint % nw nh px py str cx cy - 2 index show % nw nh px py str cx cy - YStep add moveto % nw nh px py str - } repeat % nw nh px py str - } for - 5 { pop } repeat - end -} bind def - -% PATkshow - kshow with the current pattezn -/PATkshow { % proc string - exch bind % string proc - 1 index 0 get % string proc char - % Loop over all but the last character in the string - 0 1 4 index length 2 sub { - % string proc char idx - % Find the n+1th character in the string - 3 index exch 1 add get % string proe char char+1 - exch 2 copy % strinq proc char+1 char char+1 char - % Now show the nth character - PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) - false charpath % string proc char+1 char char+1 - /clip load PATdraw - % Move past the character (charpath modified the current point) - currentpoint newpath moveto - % Execute the user proc (should consume char and char+1) - mark 3 1 roll % string proc char+1 mark char char+1 - 4 index exec % string proc char+1 mark... - cleartomark % string proc char+1 - } for - % Now display the last character - PATsstr dup 0 4 -1 roll put % string proc (char+1) - false charpath % string proc - /clip load PATdraw - neewath - pop pop % - -} bind def -% PATmp - the makepattern equivalent -/PATmp { % patdict patmtx PATmp patinstance - exch dup length 7 add % We will add 6 new entries plus 1 FID - dict copy % Create a new dictionary - begin - % Matrix to install when painting the pattern - TilingType PATtcalc - /PatternGState PATcg def - PatternGState /cm 3 -1 roll put - % Check for multi pattern sources (Level 1 fast color patterns) - currentdict /Multi known not { /Multi 1 def } if - % Font dictionary definitions - /FontType 3 def - % Create a dummy encoding vector - /Encoding 256 array def - 3 string 0 1 255 { - Encoding exch dup 3 index cvs cvn put } for pop - /FontMatrix matrix def - /FontBBox BBox def - /BuildChar { - mark 3 1 roll % mark dict char - exch begin - Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] - PaintType 2 eq Multi 1 ne or - { XStep 0 FontBBox aload pop setcachedevice } - { XStep 0 setcharwidth } ifelse - currentdict % mark [paintdata] dict - /PaintProc load % mark [paintdata] dict paintproc - end - gsave - false PATredef exec true PATredef - grestore - cleartomark % - - } bind def - currentdict - end % newdict - /foo exch % /foo newlict - definefont % newfont -} bind def -% PATpcalc - calculates the starting point and width/height -% of the tile fill for the shape -/PATpcalc { % - PATpcalc nw nh px py - PATDict /CurrentPattern get begin - gsave - % Set up the coordinate system to Pattern Space - % and lock down pattern - PatternGState /cm get setmatrix - BBox aload pop pop pop translate - % Determine the bounding box of the shape - pathbbox % llx lly urx ury - grestore - % Determine (nw, nh) the # of cells to paint width and height - PatHeight div ceiling % llx lly urx qh - 4 1 roll % qh llx lly urx - PatWidth div ceiling % qh llx lly qw - 4 1 roll % qw qh llx lly - PatHeight div floor % qw qh llx ph - 4 1 roll % ph qw qh llx - PatWidth div floor % ph qw qh pw - 4 1 roll % pw ph qw qh - 2 index sub cvi abs % pw ph qs qh-ph - exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph - % Determine the starting point of the pattern fill - %(px, py) - 4 2 roll % nw nh pw ph - PatHeight mul % nw nh pw py - exch % nw nh py pw - PatWidth mul exch % nw nh px py - end -} bind def - -% Save the original routines so that we can use them later on -/oldfill /fill load def -/oldeofill /eofill load def -/oldstroke /stroke load def -/oldshow /show load def -/oldashow /ashow load def -/oldwidthshow /widthshow load def -/oldawidthshow /awidthshow load def -/oldkshow /kshow load def - -% These defs are necessary so that subsequent procs don't bind in -% the originals -/fill { oldfill } bind def -/eofill { oldeofill } bind def -/stroke { oldstroke } bind def -/show { oldshow } bind def -/ashow { oldashow } bind def -/widthshow { oldwidthshow } bind def -/awidthshow { oldawidthshow } bind def -/kshow { oldkshow } bind def -/PATredef { - MyAppDict begin - { - /fill { /clip load PATdraw newpath } bind def - /eofill { /eoclip load PATdraw newpath } bind def - /stroke { PATstroke } bind def - /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def - /ashow { 0 0 null 6 3 roll PATawidthshow } - bind def - /widthshow { 0 0 3 -1 roll PATawidthshow } - bind def - /awidthshow { PATawidthshow } bind def - /kshow { PATkshow } bind def - } { - /fill { oldfill } bind def - /eofill { oldeofill } bind def - /stroke { oldstroke } bind def - /show { oldshow } bind def - /ashow { oldashow } bind def - /widthshow { oldwidthshow } bind def - /awidthshow { oldawidthshow } bind def - /kshow { oldkshow } bind def - } ifelse - end -} bind def -false PATredef -% Conditionally define setcmykcolor if not available -/setcmykcolor where { pop } { - /setcmykcolor { - 1 sub 4 1 roll - 3 { - 3 index add neg dup 0 lt { pop 0 } if 3 1 roll - } repeat - setrgbcolor - pop - } bind def -} ifelse -/PATsc { % colorarray - aload length % c1 ... cn length - dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor - } ifelse } ifelse -} bind def -/PATsg { % dict - begin - lw setlinewidth - lc setlinecap - lj setlinejoin - ml setmiterlimit - ds aload pop setdash - cc aload pop setrgbcolor - cm setmatrix - end -} bind def - -/PATDict 3 dict def -/PATsp { - true PATredef - PATDict begin - /CurrentPattern exch def - % If it's an uncolored pattern, save the color - CurrentPattern /PaintType get 2 eq { - /PColor exch def - } if - /CColor [ currentrgbcolor ] def - end -} bind def -% PATstroke - stroke with the current pattern -/PATstroke { - countdictstack - save - mark - { - currentpoint strokepath moveto - PATpcalc % proc nw nh px py - clip newpath PATfill - } stopped { - (*** PATstroke Warning: Path is too complex, stroking - with gray) = - cleartomark - restore - countdictstack exch sub dup 0 gt - { { end } repeat } { pop } ifelse - gsave 0.5 setgray oldstroke grestore - } { pop restore pop } ifelse - newpath -} bind def -/PATtcalc { % modmtx tilingtype PATtcalc tilematrix - % Note: tiling types 2 and 3 are not supported - gsave - exch concat % tilingtype - matrix currentmatrix exch % cmtx tilingtype - % Tiling type 1 and 3: constant spacing - 2 ne { - % Distort the pattern so that it occupies - % an integral number of device pixels - dup 4 get exch dup 5 get exch % tx ty cmtx - XStep 0 dtransform - round exch round exch % tx ty cmtx dx.x dx.y - XStep div exch XStep div exch % tx ty cmtx a b - 0 YStep dtransform - round exch round exch % tx ty cmtx a b dy.x dy.y - YStep div exch YStep div exch % tx ty cmtx a b c d - 7 -3 roll astore % { a b c d tx ty } - } if - grestore -} bind def -/PATusp { - false PATredef - PATDict begin - CColor PATsc - end -} bind def - -% this is the pattern fill program from the Second edition Reference Manual -% with changes to call the above pattern fill -% left30 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 32 16 true [ 32 0 0 -16 0 16 ] - {} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P1 exch def - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/reencdict 12 dict def /ReEncode { reencdict begin -/newcodesandnames exch def /newfontname exch def /basefontname exch def -/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def -basefontdict { exch dup /FID ne { dup /Encoding eq -{ exch dup length array copy newfont 3 1 roll put } -{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall -newfont /FontName newfontname put newcodesandnames aload pop -128 1 255 { newfont /Encoding get exch /.notdef put } for -newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat -newfontname newfont definefont pop end } def -/isovec [ -8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde -8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis -8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron -8#220 /dotlessi 8#230 /oe 8#231 /OE -8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling -8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis -8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot -8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus -8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph -8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine -8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf -8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute -8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring -8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute -8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute -8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve -8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply -8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex -8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave -8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring -8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute -8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute -8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve -8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide -8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex -8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def -/Times-Roman /Times-Roman-iso isovec ReEncode - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -%%Page: 1 1 -10 setmiterlimit - 0.03000 0.03000 sc -7.500 slw -% Ellipse -n 5325 5625 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P1 [16 0 0 -8 350.00 370.00] PATmp PATsp ef gr PATusp gs col0 s gr - -% Ellipse -n 3525 4800 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P1 [16 0 0 -8 230.00 315.00] PATmp PATsp ef gr PATusp gs col0 s gr - -% Ellipse -n 4650 4800 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P1 [16 0 0 -8 305.00 315.00] PATmp PATsp ef gr PATusp gs col0 s gr - -% Ellipse -n 3300 5850 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P1 [16 0 0 -8 215.00 385.00] PATmp PATsp ef gr PATusp gs col0 s gr - -% Ellipse -n 4350 4425 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P1 [16 0 0 -8 285.00 290.00] PATmp PATsp ef gr PATusp gs col0 s gr - -% Ellipse -n 3150 6900 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P1 [16 0 0 -8 205.00 455.00] PATmp PATsp ef gr PATusp gs col0 s gr - -% Ellipse -n 2250 6975 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P1 [16 0 0 -8 145.00 460.00] PATmp PATsp ef gr PATusp gs col0 s gr - -% Polyline -n 5400 5550 m 5925 5025 l - 7575 5025 l gs col0 s gr -% Polyline -n 3450 4725 m 2550 4425 l - 1275 4425 l gs col0 s gr -% Polyline -n 4725 4725 m 5625 4425 l - 6900 4425 l gs col0 s gr -% Polyline -n 3300 5850 m 2775 5325 l - 1125 5325 l gs col0 s gr -% Polyline -n 4425 4425 m 6225 3750 l - 8100 3750 l gs col0 s gr -% Polyline -n 3150 6975 m 3675 7800 l - 4575 7800 l gs col0 s gr -% Polyline -n 2250 7050 m 1950 7725 l - 600 7725 l gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf -5850 4950 m -gs 1 -1 sc (MathML Presentation) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -1500 4350 m -gs 1 -1 sc (OpenMath) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -5550 4350 m -gs 1 -1 sc (MathML-Content) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -1275 5250 m -gs 1 -1 sc (OMDoc) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -6225 3675 m -gs 1 -1 sc (Specific XML-Dialects) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -3900 7725 m -gs 1 -1 sc (RDF) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -825 7650 m -gs 1 -1 sc (Dublin-Core) col0 sh gr -% Rotated Ellipse -gs -3225 6000 tr --120.000 rot -n 0 0 1050 1650 0 360 DrawEllipse 120.000 rot -gs col0 s gr -gr - -% Rotated Ellipse -gs -4800 6000 tr --240.001 rot -n 0 0 1050 1650 0 360 DrawEllipse 240.001 rot -gs col0 s gr -gr - -% Ellipse -n 4050 4650 1050 1650 0 360 DrawEllipse gs col0 s gr - -/Times-Roman-iso ff 270.00 scf sf -2175 6150 m -gs 1 -1 sc (Digital) col0 sh gr -/Times-Roman-iso ff 270.00 scf sf -4800 6525 m -gs 1 -1 sc (Publishing) col0 sh gr -/Times-Roman-iso ff 270.00 scf sf -4800 6150 m -gs 1 -1 sc (Electronic) col0 sh gr -/Times-Roman-iso ff 270.00 scf sf -2100 6525 m -gs 1 -1 sc (Libraries) col0 sh gr -/Times-Roman-iso ff 270.00 scf sf -3450 5625 m -gs 1 -1 sc (MOWGLI) col0 sh gr -/Times-Roman-iso ff 270.00 scf sf -3600 3750 m -gs 1 -1 sc (Logical) col0 sh gr -/Times-Roman-iso ff 270.00 scf sf -3225 4125 m -gs 1 -1 sc (Environments) col0 sh gr -$F2psEnd -rs -end - -%%EndDocument - @endspecial 235 3856 a(F)-8 b(rom)37 b(the)g(p)s(oin)m(t)e(of)i(view)e -(of)i(W)-8 b(eb)37 b(publishing,)c(our)j(pro)5 b(ject)37 -b(is)f(the)g(\014rst)g(attempt)h(to)g(pro)m(vide)f(a)94 -3968 y(comprehensiv)m(e)22 b(description,)h(from)g(con)m(ten)m(t)i(to)e -(metadata,)k(of)c(a)g(giv)m(en)g(\014eld)f(of)h(kno)m(wledge)g(\(in)f -(our)g(case)94 4081 y(mathematics\),)38 b(in)33 b(order)i(to)h(enhance) -f(its)g(accessibilit)m(y)-8 b(,)36 b(exc)m(hange)h(and)d(elab)s -(oration)h(via)f(the)i(W)-8 b(orld)94 4194 y(Wide)32 -b(W)-8 b(eb.)47 b(T)-8 b(o)33 b(this)e(aim,)h(w)m(e)h(shall)e(put)g(to) -i(use)f(most)h(of)g(the)f(tec)m(hnologies)h(recen)m(tly)g(in)m(tro)s -(duced)d(b)m(y)94 4307 y(the)h(W3C:)h(XML,)g(DOM,)g(XSL,)f(XLL,)g -(Namespaces,)i(MathML,)f(RDF,)g(etc.)45 b(F)-8 b(rom)31 -b(this)g(resp)s(ect,)g(the)94 4420 y(pro)5 b(ject)28 -b(is)e(\014rst)h(of)h(all)e(a)i(complex)f(test)h(for)g(all)e(these)i -(tec)m(hnologies,)h(and)e(should)e(hop)s(efully)g(b)s(ecome)i(an)94 -4533 y(example)22 b(of)h(`b)s(est)g(practice')g(in)e(their)h(use.)38 -b(Note)24 b(that)f(the)g(\014nal)e(arc)m(hitecture)j(is)d(lik)m(ely)g -(to)j(b)s(e)e(extendible)94 4646 y(to)36 b(other)f(\014elds)e(of)j -(structured)e(information:)48 b(the)35 b(emphasis)f(on)g(mathematics)i -(is)e(motiv)-5 b(ated)35 b(b)m(y)g(the)94 4759 y(fact)c(that,)g(due)f -(to)h(its)e(complex)h(in)m(terpla)m(y)g(b)s(et)m(w)m(een)h(con)m(ten)m -(t,)h(structure)e(and)f(notation,)i(it)f(pro)m(vides)f(a)94 -4872 y(ma)5 b(jor)29 b(case)i(study)d(for)h(W)-8 b(eb-based)30 -b(information)e(systems)h(\(it)g(is)g(not)g(a)h(case)g(that)g(MathML)g -(has)f(b)s(een)94 4985 y(one)35 b(of)g(few)f(instances)h(of)g(XML)g -(completely)f(dev)m(elop)s(ed)g(under)f(the)i(aegis)g(of)g(the)g(W)-8 -b(orld)34 b(Wide)h(W)-8 b(eb)94 5098 y(Consortium\).)235 -5210 y(F)g(rom)27 b(the)g(p)s(oin)m(t)e(of)h(view)g(of)h(digital)d -(libraries,)h(our)h(w)m(ork)g(is)g(aimed)f(at)i(exploiting)e(all)g(the) -i(p)s(oten)m(tial)94 5323 y(functionalities)36 b(o\013ered)k(b)m(y)e -(the)h(W)-8 b(eb,)42 b(and)c(in)g(particular)f(a)i(more)g(in)m -(tegrated)h(use)e(of)h(its)g(bro)m(wsing)p eop -%%Page: 9 9 -9 8 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2578 -b Fl(9)94 171 y(and)29 b(searc)m(hing)h(facilities.)39 -b(The)29 b(library)f(is)h(not)h(merely)g(seen)g(as)g(a)g(more)g(or)g -(less)g(structured)f(collection)94 284 y(of)j(texts,)i(but)e(as)g(a)h -(virtual)e(structure)g(inside)f(whic)m(h)h(w)m(e)i(can)g(freely)e(na)m -(vigate,)k(jumping)30 b(for)i(instance)94 397 y(from)41 -b(an)h(en)m(tit)m(y)h(to)g(its)e(de\014nition,)i(or)e(p)s(eeping)g -(inside)e(some)k(information)d(at)j(deep)s(er)e(and)g(deep)s(er)94 -510 y(lev)m(els)g(of)h(details)f(\(suc)m(h)h(as)g(di\013eren)m(t)g(lev) -m(els)f(of)h(detail)f(of)h(a)g(pro)s(of)7 b(\).)75 b(This)40 -b(is)h(similar)f(to)i(what)g(w)m(e)94 623 y(curren)m(tly)30 -b(do)h(with)f(HTML)g(texts,)j(but)d(in)g(order)g(to)i(enhance)f(the)g -(e\013ectiv)m(eness)h(of)g(the)f(consultation,)94 736 -y(w)m(e)i(clearly)f(need)g(a)h(go)s(o)s(d)g(metadata)h(mo)s(del)e(of)g -(the)h(information.)46 b(Moreo)m(v)m(er,)36 b(in)31 b(suc)m(h)h(an)h -(in)m(tegrated)94 849 y(view,)g(it)g(is)f(hardly)g(conceiv)-5 -b(able)33 b(to)h(just)f(apply)e(some)j(`general)g(purp)s(ose')d -(metadata)k(mo)s(del)d(\(lik)m(e)h(the)94 962 y(Dublin)e(Core)j -(system,)i(sa)m(y\):)49 b(the)34 b(metadata)i(mo)s(del)c(m)m(ust)i(b)s -(e)g(ev)m(en)m(tually)g(sp)s(ecialised)d(to)k(the)f(actual)94 -1075 y(structure)41 b(of)i(the)f(information)e(it)h(is)g(supp)s(osed)f -(to)j(mo)s(del)e(\(and)g(more)h(structure)g(w)m(e)g(ha)m(v)m(e)h(on)f -(the)94 1187 y(information,)c(more)f(relev)-5 b(an)m(t)37 -b(metadata)i(w)m(e)f(can)g(usually)d(infer)g(on)i(the)h(do)s(cumen)m -(t\).)61 b(F)-8 b(or)38 b(instance,)94 1300 y(metadata)g(could)e(con)m -(tain)h(the)g(whole)f(signature)g(of)h(a)g(giv)m(en)f(mo)s(dule)f(of)i -(mathematical)g(kno)m(wledge.)94 1413 y(The)28 b(usual)f(motiv)-5 -b(ation)29 b(for)f(k)m(eeping)h(metadata)h(simple)d(and)h(general)h(is) -e(that)j(it)e(is)g(usually)e(di\016cult)h(to)94 1526 -y(add)j(this)f(information)f(b)m(y)i(hand;)g(but)f(in)g(our)h(case)h(a) -g(large)f(part)g(of)g(the)h(metadata)h(is)d(supp)s(osed)f(to)j(b)s(e)94 -1639 y(extracted)g(automatically)f(b)m(y)g(the)g(\(structured\))g(text) -h(itself,)e(allo)m(wing)g(for)g(prett)m(y)i(complex)f(metadata)94 -1752 y(mo)s(dels.)235 1865 y(Finally)-8 b(,)45 b(a)e(main)f(asp)s(ect)i -(of)f(our)g(pro)5 b(ject)43 b(is)f(the)i(in)m(tegration)f(with)e -(curren)m(t)i(to)s(ols)g(for)g(the)g(au-)94 1978 y(tomation)30 -b(of)g(formal)f(reasoning)h(and)f(mec)m(hanisation)g(of)h(mathematics)g -(\(pro)s(of)g(assistan)m(ts)g(and)f(logical)94 2091 y(framew)m(orks\).) -59 b(This)34 b(in)m(tegration)i(has)g(a)h(m)m(utual)e(b)s(ene\014t.)58 -b(F)-8 b(rom)36 b(the)h(p)s(oin)m(t)e(of)h(view)g(of)g(the)h(mathe-)94 -2204 y(matical)e(library)-8 b(,)34 b(the)h(\014rst)f(and)g(fundamen)m -(tal)g(role)h(of)g(these)g(systems)g(is)f(that)h(of)g(pro)m(viding)e -(friendly)94 2317 y(authoring)e(to)s(ols)g(\(for)h(instance,)g(our)g -(`core')h(library)c(will)g(b)s(e)i(automatically)h(extracted)h(from)e -(existing)94 2429 y(libraries)i(of)k(these)f(systems\).)59 -b(The)35 b(relev)-5 b(ance)37 b(of)f(this)f(p)s(oin)m(t)g(should)g(not) -h(b)s(e)f(underestimated:)52 b(as)36 b(a)94 2542 y(matter)g(of)f(fact,) -i(the)e(main)f(reason)i(for)e(the)i(failure)d(of)i(complex)g(markup)e -(mo)s(dellings)f(is)i(usually)f(the)94 2655 y(lac)m(k)i(of)g(suitable)e -(authoring)g(to)s(ols)h(\(it)h(is)e(often)i(painful)d(to)j(add)f(the)g -(markup)g(b)m(y)g(hand\).)52 b(Of)34 b(course,)94 2768 -y(they)39 b(can)h(also)f(pro)m(vide)f(other)h(functionalities)e(\(lik)m -(e)h(automatic)i(pro)s(of)e(c)m(hec)m(king\))j(on)e(fragmen)m(ts)g(of) -94 2881 y(the)28 b(library)d(\(t)m(ypically)-8 b(,)28 -b(the)g(fragmen)m(ts)g(generated)h(b)m(y)e(the)h(to)s(ol)f(itself,)h -(in)e(its)h(sp)s(eci\014c)f(logical)h(dialect\).)94 2994 -y(These)k(additional)e(functionalities)g(ma)m(y)i(b)s(e)g(esp)s -(ecially)e(relev)-5 b(an)m(t)31 b(for)g(industrial)d(applications,)i -(e.g.)44 b(in)94 3107 y(the)34 b(con)m(text)h(of)f(IT)f(securit)m(y)g -(ev)-5 b(aluation)33 b(standards)g(lik)m(e)g(the)g(Common)g(Criteria)g -(standard)f(\([4)q(]\).)51 b(In)94 3220 y(its)28 b(highest)g(assurance) -h(lev)m(el,)g(this)f(standard)f(requires)h(the)h(dev)m(elopmen)m(t)g -(of)g(formal)f(mo)s(dels)f(of)i(the)g(IT)94 3333 y(pro)s(duct)j(under)g -(ev)-5 b(aluation,)34 b(as)f(w)m(ell)f(as)i(mec)m(hanized)f(pro)s(ofs)g -(that)h(it)e(meets)i(its)f(securit)m(y)g(ob)5 b(jectiv)m(es.)94 -3446 y(Suc)m(h)26 b(mo)s(dels)g(and)h(pro)s(ofs)f(m)m(ust)h(b)s(e)g -(published)c(in)j(a)i(format)f(that)h(can)f(b)s(e)g(easily)f(readable)h -(and)g(under-)94 3559 y(sto)s(o)s(d)j(b)m(y)g(securit)m(y)g(ev)-5 -b(aluators.)41 b(Hence,)32 b(there)e(is)g(a)h(strong)f(need)g(from)g -(soft)m(w)m(are)i(industry)c(to)j(b)s(e)f(able)94 3671 -y(to)38 b(pro)s(duce)e(suc)m(h)h(do)s(cumen)m(tation)g(directly)f(from) -h(the)g(mo)s(dels)f(in)m(tro)s(duced)g(in)g(the)h(pro)s(of)g(assistan)m -(t,)94 3784 y(and)30 b(to)h(link)d(it)i(with)f(do)s(cumen)m(ts)h -(describing)e(the)j(IT)f(pro)s(duct,)f(etc.)235 3897 -y(On)40 b(the)i(other)f(side,)j(there)d(is)f(a)i(comp)s(elling)d(need)i -(of)g(in)m(tegration)g(b)s(et)m(w)m(een)h(the)g(curren)m(t)f(to)s(ols) -94 4010 y(for)36 b(automation)h(of)g(formal)f(reasoning)f(and)h(mec)m -(hanisation)g(of)h(mathematics)g(and)f(the)g(most)h(recen)m(t)94 -4123 y(tec)m(hnologies)23 b(for)e(the)h(dev)m(elopmen)m(t)g(of)g(W)-8 -b(eb)23 b(applications)d(and)h(electronic)h(publishing.)33 -b(XML,)23 b(whic)m(h)d(is)94 4236 y(rapidly)h(imp)s(osing)h(as)i(a)g -(piv)m(otal)f(tec)m(hnology)i(in)e(the)h(future)f(dev)m(elopmen)m(t)h -(of)g(all)f(In)m(ternet)h(applications,)94 4349 y(and)g(the)h(main)f -(to)s(ol)g(for)h(represen)m(tation,)h(manipulation,)e(and)g(exc)m -(hange)i(of)f(structured)f(information)f(in)94 4462 y(the)g(net)m(w)m -(ork)m(ed)i(age,)h(lo)s(oks)d(as)g(a)h(natural,)g(almost)f(mandatory)-8 -b(,)26 b(c)m(hoice)e(for)f(mo)s(delling)d(the)k(information.)235 -4575 y(In)39 b(this)f(w)m(a)m(y)-8 b(,)43 b(w)m(e)d(just)f(ob)s(ey)g -(to)h(the)f(v)m(ery)h(primitiv)m(e)d(commandmen)m(t)j(of)f(the)h(W)-8 -b(eb:)59 b(mak)m(e)40 b(y)m(our)94 4688 y(information)j(a)m(v)-5 -b(ailable.)82 b(Curren)m(tly)-8 b(,)47 b(libraries)41 -b(in)i(logical)h(framew)m(orks)h(are)f(usually)e(sa)m(v)m(ed)k(in)d(t)m -(w)m(o)94 4801 y(formats:)d(a)28 b(textual)h(one,)g(in)e(the)h(sp)s -(eci\014c)f(tactical)j(language)e(of)h(the)f(pro)s(of)f(assistan)m(t,)j -(and)d(a)i(compiled)94 4913 y(\(pro)s(of)h(c)m(hec)m(k)m(ed\))j(one)d -(in)g(some)g(in)m(ternal,)g(concrete)i(represen)m(tation)e(language.)41 -b(Both)31 b(represen)m(tations)94 5026 y(are)45 b(ob)m(viously)e -(unsatisfactory)-8 b(,)48 b(since)c(they)h(are)g(to)s(o)g(orien)m(ted)f -(to)h(the)g(sp)s(eci\014c)e(application:)67 b(they)94 -5139 y(restrict)31 b(the)g(access)h(of)f(the)h(libraries)c(to)j(the)h -(users)e(of)h(the)g(giv)m(en)g(application,)f(and)g(at)i(the)f(same)h -(time)94 5252 y(they)i(are)h(to)s(o)f(sensible)e(to)j(the)f(ev)m -(olution)g(and)f(the)h(main)m(tenance)h(of)f(the)g(application)f -(itself.)50 b(On)33 b(the)94 5365 y(other)i(side,)h(as)g(so)s(on)e(as)i -(the)f(information)f(is)g(put)h(in)f(a)h(standard)g(format)g(on)g(the)h -(W)-8 b(eb,)37 b Fd(any)f Fl(kind)d(of)p eop -%%Page: 10 10 -10 9 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(10)94 171 y(researc)m(h)40 b(b)s(ecomes)g(virtually)d(p)s -(ossible,)i(and)g Fd(anyb)-5 b(o)g(dy)42 b Fl(could)c(start)i(dev)m -(eloping)f(his)f(o)m(wn)h Fd(spider)i Fl(for)94 284 y(implemen)m(ting) -25 b(his)h(o)m(wn)i(searc)m(hing)f(requiremen)m(ts.)39 -b(This)25 b(is)i(clearly)f(a)i(ma)5 b(jor)28 b(impro)m(v)m(emen)m(t)f -(w.r.t.)40 b(the)94 397 y(presen)m(t)31 b(situation.)42 -b(Curren)m(tly)-8 b(,)30 b(y)m(ou)i(m)m(ust)f(not)g(only)f(rely)g(on)h -(the)h(searc)m(hing)f(facilities)e(o\013ered)i(b)m(y)g(the)94 -510 y(sp)s(eci\014c)d(applications,)g(but)h(ev)m(en)h(if)e(y)m(ou)i(w)m -(ould)e(wish)g(to)i(implemen)m(t)e(y)m(our)h(o)m(wn)h(searc)m(hing)f -(algorithm,)94 623 y(y)m(ou)36 b(w)m(ould)e(b)s(e)h(prev)m(en)m(ted)h -(b)m(y)g(the)g(simple)d(reason)j(that)g(the)g(information)e(is)g(not)i -(accessible)f(\(in)g(an)m(y)94 736 y(reasonable)30 b(sense)h(of)f(the)h -(w)m(ord\).)235 849 y(The)d(pro)5 b(ject)29 b(builds)c(on)j(the)h -(solid)d(ground)h(pro)m(vided)g(b)m(y)i(sev)m(eral)f(existing)f -(XML-based)i(languages)94 962 y(for)34 b(the)g(managemen)m(t)h(of)f -(mathematical)h(do)s(cumen)m(ts)e(suc)m(h)h(as)g(MathML,)h(Op)s(enMath) -e(and)g(OMDo)s(c.)94 1075 y(Eac)m(h)25 b(of)g(these)g(markup)f -(languages)g(co)m(v)m(ers)j(a)e(di\013eren)m(t)f(asp)s(ect)h(of)g(the)g -(information.)37 b(Our)23 b(aim)h(is)g(not)h(to)94 1187 -y(prop)s(ose)h(a)g(new)g(language,)i(but)e(to)h(study)f(and)g(to)h(dev) -m(elop)f(the)h(tec)m(hnological)g(infrastructure)d(required)94 -1300 y(to)29 b(in)m(tegrate)h(all)e(these)h(languages)g(together,)h(in) -e(order)g(to)h(tak)m(e)i(adv)-5 b(an)m(tage)30 b(of)f(the)g(sp)s -(eci\014c)e(features)i(of)94 1413 y(eac)m(h)j(of)e(them.)94 -1700 y Fj(6)135 b(Comm)l(unit)l(y)46 b(added)e(v)-7 b(alue)46 -b(and)e(con)l(tribution)i(to)f(EC)g(p)t(olicies)94 1903 -y Fl(The)31 b(Pro)5 b(ject)32 b(relies)f(in)f(an)h(essen)m(tial)h(w)m -(a)m(y)g(on)g(the)f(con)m(v)m(ergence)j(of)e(information)e(pro)s -(cessing,)h(comm)m(u-)94 2016 y(nication)i(and)h(new)f(media,)i -(meeting)f(the)g(main)f(p)s(olicy)f(issue)h(of)i(the)f(IST)f -(programme.)52 b(In)33 b(fact,)j(due)94 2128 y(to)f(its)f(v)m(ery)h -(nature,)g(mathematical)g(information)e(is)g(particularly)f(suited)h -(to)i(an)g(in)m(tegrated)g(analysis)94 2241 y(under)29 -b(the)h(di\013eren)m(t)f(p)s(ersp)s(ectiv)m(es)h(of)g(elab)s(oration,)f -(comm)m(unication)h(and)f(\(h)m(yp)s(er\)media)h(publishing,)94 -2354 y(pro)m(viding)24 b(a)i(main)f(arena)h(for)f(inno)m(v)-5 -b(ativ)m(e)26 b(exp)s(erimen)m(ts)f(and)g(solutions,)g(esp)s(ecially)f -(in)h(view)g(of)h(the)g(new)94 2467 y(tec)m(hnological)31 -b(fron)m(tier)f(of)g(the)h(Seman)m(tic)f(W)-8 b(eb.)235 -2580 y(The)26 b(Pro)5 b(ject)27 b(also)f(tries)g(to)h(answ)m(er)f(to)h -(a)f(clear)h(need)f(for)g(wider)e(in)m(terop)s(erabilit)m(y)g(and)h -(coherence)j(in)94 2693 y(the)j(realm)g(of)g(mathematics)g(o)m(v)m(er)i -(the)e(W)-8 b(eb,)32 b(esp)s(ecially)d(for)i(educational,)g(scien)m -(ti\014c)f(and)h(commercial)94 2806 y(purp)s(oses.)235 -2919 y(Electronic)i(textb)s(o)s(oks)h(are)g(rapidly)d(b)s(ecoming)i(a)h -(main)e(to)s(ol)h(for)h(education)f(and)g(kno)m(wledge)h(dis-)94 -3032 y(semination.)50 b(Electronic)33 b(textb)s(o)s(oks)h(m)m(ust)g(b)s -(e)f(in)m(teractiv)m(e,)i(allo)m(wing)e(in)m(tercomm)m(unication)g(b)s -(et)m(w)m(een)94 3145 y(the)39 b(text)g(and)f(scien)m(ti\014c)g(soft)m -(w)m(are)i(and)d(graphics.)64 b(This)37 b(is)h(v)m(ery)g(hard)g(to)h -(ac)m(hiev)m(e)h(starting)e(form)g(a)94 3258 y(mere)31 -b(presen)m(tational)g(description)e(of)i(the)g(information,)f(clearly)g -(requiring)f(a)i(sophisticated)f(seman)m(ti-)94 3370 -y(cal)g(description)f(of)h(the)h(con)m(ten)m(t.)235 3483 -y(Similarly)-8 b(,)39 b(the)g(academic)h(and)f(commercial)g(researc)m -(h)h(comm)m(unities)e(generate)j(large)e(v)m(olume)g(of)94 -3596 y(dense)g(scien)m(ti\014c)g(material.)67 b(Increasingly)-8 -b(,)41 b(researc)m(h)f(publications)d(are)j(b)s(eing)e(stored)h(in)f -(databases,)94 3709 y(esp)s(ecially)i(for)i(those)h(areas)g(of)f(ph)m -(ysics)f(and)h(mathematics)h(where)e(academic)i(journal)e(prices)g(ha)m -(v)m(e)94 3822 y(b)s(een)33 b(gro)m(wing)h(at)g(an)g(unsustainable)d -(rate.)52 b(Still,)33 b(ho)m(w)m(ev)m(er,)j(the)e(information)e(is)h -(stored)h(in)f(a)h(format)94 3935 y(whic)m(h)26 b(is)h(mac)m(hine)g -(readable)g(but)g(not)h(mac)m(hine)f(understandable;)g(in)f(particular) -g(it)h(is)g(not)h(suitable)e(for)94 4048 y(an)m(y)h(form)f(of)g(elab)s -(oration)f(other)i(than)f(its)g(rendering.)37 b(MO)m(W)m(GLI's)28 -b(con)m(ten)m(t)g(and)e(metadata)i(lev)m(els)e(are)94 -4161 y(exactly)h(mean)m(t)g(to)g(address)e(complex)h(elab)s(oration)g -(requiremen)m(ts,)g(and)g(to)g(facilitate)h(the)f(main)m(tenance)94 -4274 y(and)h(op)s(erabilit)m(y)e(of)i(large)g(do)s(cumen)m(t)h -(collections,)f(for)g(whic)m(h)f(automatic)i(searc)m(hing)f(and)g -(indexing)e(are)94 4387 y(crucial.)235 4500 y(Corp)s(orate)d(and)g -(academic)h(scien)m(tists)f(and)f(engineers)h(also)g(use)g(tec)m -(hnical)g(do)s(cumen)m(ts)g(in)f(their)g(w)m(ork)94 4612 -y(to)27 b(collab)s(orate,)g(to)g(record)f(results)f(of)h(exp)s(erimen)m -(ts)f(and)g(computer)h(sim)m(ulations,)f(and)h(to)h(v)m(erify)e(calcu-) -94 4725 y(lations.)40 b(The)29 b(W)-8 b(eb)30 b(is,)f(p)s(oten)m -(tially)-8 b(,)30 b(the)g(natural)e(media)h(for)h(sharing)e(this)h -(information;)f(MO)m(W)m(GLI)j(is)94 4838 y(mean)m(t)c(to)h(pro)m(vide) -d(the)i(basic)f(tec)m(hnology)h(to)g(transform)f(this)g(p)s(oten)m -(tialit)m(y)g(in)m(to)g(an)g(actual)h(p)s(ossibilit)m(y)-8 -b(.)235 4951 y(Commercial)32 b(publishers)d(are)k(also)g(in)m(v)m(olv)m -(ed)g(with)e(mathematics)j(on)e(the)h(W)-8 b(eb)34 b(at)g(all)d(lev)m -(els)i(from)94 5064 y(electronic)i(v)m(ersions)g(of)h(prin)m(ted)e(b)s -(o)s(oks)h(to)h(in)m(teractiv)m(e)g(textb)s(o)s(oks)g(and)f(academic)h -(journals.)55 b(In)34 b(this)94 5177 y(case,)g(MO)m(W)m(GLI)f(o\013ers) -f(supp)s(ort)e(for)i(adv)-5 b(anced)32 b(capabilities,)f(suc)m(h)g(as)h -(bro)m(wsing,)g(in)m(teractivit)m(y)-8 b(,)33 b(pre-)94 -5290 y(sen)m(tational)e(and)e(st)m(ylistic)h(customisation,)g(and)g -(adv)-5 b(anced)30 b(searc)m(hing)g(and)g(retrieving)f(features.)p -eop -%%Page: 11 11 -11 10 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(11)235 171 y(The)23 b(pro)5 b(ject)25 b(deals)e(with)g(problems)f -(traditionally)f(b)s(elonging)h(to)j(di\013eren)m(t)e(scien)m(ti\014c)g -(comm)m(unities:)94 284 y(digital)31 b(libraries,)f(W)-8 -b(eb)33 b(publishing,)28 b(automation)33 b(of)g(mathematics)f(and)g -(computer)g(aided)g(reasoning.)94 397 y(An)m(y)41 b(serious)g(solution) -f(needs)g(a)i(co)s(ordinated)f(e\013ort)h(of)g(all)e(these)i(groups)e -(and)h(a)h(synergy)f(of)g(their)94 510 y(di\013eren)m(t)31 -b(exp)s(ertise.)45 b(The)32 b(mem)m(b)s(ers)f(of)h(the)g(consortium)f -(ha)m(v)m(e)i(b)s(een)f(also)g(carefully)e(c)m(hosen)j(for)e(their)94 -623 y(exp)s(erience)37 b(in)f(the)h(ab)s(o)m(v)m(e)i(men)m(tioned)d -(areas.)63 b(F)-8 b(rom)38 b(this)e(in)m(teraction,)j(w)m(e)f(exp)s -(ect)g(to)g(dev)m(elop)f(new)94 736 y(tec)m(hnologies)23 -b(and)e(solutions,)i Fd(fostering)i(innovation)f Fl(to)m(w)m(ards)f -(the)f(construction)g(of)g(the)g(Seman)m(tic)g(W)-8 b(eb.)235 -849 y(MO)m(W)m(GLI)33 b(con)m(tributes)e(in)f(the)h Fd(spr)-5 -b(e)g(ad)36 b(of)d(information)j(and)e(know-how)p Fl(,)g(since)c(new)h -(information)94 962 y(tec)m(hnologies)23 b(will)d(b)s(e)i(applied)e(to) -j(realms)f(suc)m(h)g(as)h(education)f(and)g(publishing,)e(whic)m(h)h -(are)i(traditionally)94 1075 y(not)31 b(v)m(ery)g(inclined)c(to)32 -b(inno)m(v)-5 b(ation.)40 b(More)31 b Fd(c)-5 b(omp)g(etitiveness)33 -b Fl(will)28 b(b)s(e)i(acquired)f(b)s(oth)h(b)m(y)g(the)h(end)f(users) -94 1187 y(of)k(the)g(system)g(and)g(b)m(y)f(the)h(tec)m(hnology)i(pro)m -(viders,)d(whic)m(h)g(will)e(ev)m(en)m(tually)j(pro\014t)f(b)m(y)h(the) -g(exp)s(ertise)94 1300 y(gained)26 b(b)m(y)h(applying)e(new)h(and)h -(emerging)f(tec)m(hnologies)i(to)g(the)f(h)m(uge)g(and)f(comp)s(elling) -f(problem)g(of)i(the)94 1413 y(managemen)m(t)32 b(of)e(mathematical)h -(do)s(cumen)m(ts)f(o)m(v)m(er)i(the)e(W)-8 b(eb.)235 -1526 y(By)47 b(op)s(ening)e(new)h(p)s(ersp)s(ectiv)m(es)f(in)g(the)i -(domains)e(of)h(in)m(teractiv)m(e)i(publishing)42 b(and)j(education,)94 -1639 y(MO)m(W)m(GLI)36 b(suggests)f Fd(new)i(job-pr)-5 -b(o\014les)36 b Fl(in)e(these)h(domains,)f(and)g Fd(incr)-5 -b(e)g(ases)38 b(job)f(opp)-5 b(ortunities)37 b Fl(in)c(the)94 -1752 y(Information)c(So)s(ciet)m(y)i(sector.)235 1865 -y(Finally)-8 b(,)32 b(the)i Fd(so)-5 b(cial)36 b(and)g(cultur)-5 -b(al)36 b(c)-5 b(ohesion)35 b Fl(of)e(Europ)s(e)f(is)g(ev)m(en)m -(tually)h(strengthened)g(b)m(y)g(the)g(cre-)94 1978 y(ation)d(of)h(a)g -(large)f(distributed)d(rep)s(ositories)i(of)i(scien)m(ti\014c)f(kno)m -(wledge.)94 2264 y Fj(7)135 b(Con)l(tribution)46 b(to)f(Comm)l(unit)l -(y)h(So)t(cial)f(Ob)7 b(jectiv)l(es)94 2467 y Fl(The)34 -b(qualit)m(y)f(of)h(life,)g(in)f(a)h(civilised)d(coun)m(try)-8 -b(,)36 b(strictly)d(dep)s(ends)g(on)h(the)g(qualit)m(y)f(of)i(its)e -(services,)i(and)94 2580 y(in)28 b(particular)g(on)i(the)g(atten)m -(tion)h(dev)m(oted)g(to)f(those)g(services)g(aimed)f(to)h(preserv)m(e,) -h(increase)e(and)g(mak)m(e)94 2693 y(accessible)h(to)h(a)f(wider)f -(audience)h(its)f(cultural)g(and)g(scien)m(ti\014c)h(heritage.)41 -b(Building)27 b(a)k(user)e(friendly)f(In-)94 2806 y(formation)23 -b(So)s(ciet)m(y)-8 b(,)26 b(with)21 b(particular)h(emphasis)g(on)h -(digital)f(heritage,)j(cultural)d(con)m(ten)m(t)j(and)e(education)94 -2919 y(is)29 b(indeed)g(a)i(main)e(so)s(cial)h(ob)5 b(jectiv)m(e)31 -b(of)g(the)f(Europ)s(ean)f(Comm)m(unit)m(y)-8 b(.)235 -3032 y(The)29 b(new)g(Information)f(So)s(ciet)m(y)i(is)e(essen)m -(tially)g(based)h(on)h(the)f(con)m(v)m(ergence)j(of)d(information,)g -(com-)94 3145 y(m)m(unication)e(and)g(net)m(w)m(orking)h(tec)m -(hnologies)h(and)f(tak)m(es)h(adv)-5 b(an)m(tage)30 b(of)e -(infrastructures)e(lik)m(e)i(the)g(In)m(ter-)94 3258 -y(net)j(and)e(the)i(W)-8 b(eb.)235 3370 y(Our)37 b(pro)5 -b(ject)38 b(builds)c(on)k(these)g(grounds,)h(to)f(create)h(the)f(tec)m -(hnological)g(infrastructure)e(required)94 3483 y(for)45 -b(the)g(creation)h(and)e(main)m(tenance)i(of)f(a)h(digital)d(kno)m -(wledge)j(base)f(of)g Fd(structur)-5 b(e)g(d)47 b Fl(mathematical)94 -3596 y(information,)29 b(univ)m(ersally)f(and)i(seamlessly)g -(accessible)g(to)i(all)d(p)s(eople,)h(and)g(in)f(particular)g(to)j -(studen)m(ts)94 3709 y(and)e(professionals,)f(through)g(in)m(terop)s -(erable,)h(dep)s(endable)e(and)i(a\013ordable)g(pro)s(ducts)f(and)g -(services.)235 3822 y(F)-8 b(rom)25 b(the)f(educational)f(p)s(oin)m(t)g -(of)h(view,)h(our)e(system)h(could)f(easily)h(b)s(ecome)g(a)g(main)f -(to)s(ol)h(for)g(a)g(wider)94 3935 y(and)35 b(more)g(friendly)e -(dissemination)g(of)i(mathematical)h(kno)m(wledge.)55 -b(Indeed,)36 b(its)f(in)m(teractiv)m(e)h(nature,)94 4048 -y(and)f(the)h(p)s(ossibilit)m(y)d(to)j(access)h(single)e(information)f -(units,)i(and)f(p)s(ossibly)e(applying)h(them,)j(pro)m(vides)94 -4161 y(a)32 b(more)f(op)s(erational)g(and)f(far)h(less)g(abstract)h -(comprehension)e(of)h(mathematical)h(en)m(tities,)g(and)e(should)94 -4274 y(naturally)39 b(induce)g(the)j(user)e(to)h(pla)m(y)g(with)e(the)i -(kno)m(wledge)g(base,)j(assem)m(bling)c(comp)s(onen)m(ts)h(in)e(the)94 -4387 y(dev)m(elopmen)m(t)31 b(of)f(new)g(theorems)h(and)f(results.)235 -4500 y(F)-8 b(rom)43 b(the)f(p)s(oin)m(t)f(of)h(view)f(of)h(emplo)m -(ymen)m(t)h(and)e(dev)m(elopmen)m(t)i(of)f(individual)37 -b(skills,)43 b(there)f(are)94 4612 y(t)m(w)m(o)31 b(di\013eren)m(t)e -(asp)s(ects)h(to)h(b)s(e)e(considered,)g(according)h(to)g(the)g -Fd(obje)-5 b(ctives)30 b Fl(and)f(the)h Fd(metho)-5 b(dolo)g(gy)33 -b Fl(of)d(the)94 4725 y(pro)5 b(ject.)235 4838 y(F)-8 -b(orm)30 b(the)g(metho)s(dological)f(p)s(oin)m(t)f(of)i(view,)f(the)h -(pro)5 b(ject)30 b(mak)m(es)g(an)g(essen)m(tial)f(use)g(of)h(tec)m -(hnologies)94 4951 y(whic)m(h)19 b(are)i(the)g(v)m(ery)f(foundations)f -(of)i(the)g(information)d(so)s(ciet)m(y)-8 b(,)24 b(driving)18 -b(their)h(dev)m(elopmen)m(t,)k(enhancing)94 5064 y(their)39 -b(applicabilit)m(y)-8 b(,)41 b(and)e(accelerating)i(their)f(tak)m(e)i -(up)d(in)g(Europ)s(e.)69 b(In)40 b(particular,)h(w)m(e)g(shall)d(build) -94 5177 y(on)k(most)g(of)h(the)f(recen)m(t)h(recommendations)f(of)g -(the)g(W)-8 b(orld)42 b(Wide)f(W)-8 b(eb)43 b(Consortium)e(\(W3C\),)i -(lik)m(e)94 5290 y(XML,)30 b(DOM,)g(XSL,)f(XLL,)g(MathML,)h(RDF,)h -(etc.)41 b(testing)29 b(their)g(applicabilit)m(y)d(to)k(the)g -(de\014nition)d(of)i(a)p eop -%%Page: 12 12 -12 11 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(12)94 171 y(comprehensiv)m(e,)30 b(in)m(tegrated)h(description)e -(of)h(a)h(giv)m(en)f(\014eld)f(of)i(kno)m(wledge.)235 -284 y(This)e(kind)g(of)i(to)s(ols)g(and)f(tec)m(hniques)g(is)g(of)h -(crucial)e(imp)s(ortance)h(in)g(the)h(dev)m(elopmen)m(t)g(of)g(the)g(W) --8 b(eb)94 397 y(and)29 b(of)g(the)h(Information)e(T)-8 -b(ec)m(hnology)30 b(of)g(the)f(next)h(y)m(ears,)g(and)f(our)g(pro)5 -b(ject)29 b(could)g(pla)m(y)g(a)g(ma)5 b(jor)30 b(role)94 -510 y(in)f(their)g(dissemination)f(in)h(Europ)s(e,)h(and)f(in)h -(training)e(p)s(eople)i(in)f(their)g(use.)235 623 y(On)39 -b(the)h(other)h(side,)g(MO)m(W)m(GLI)h(itself)c(could)h(b)s(ecome)i(a)f -(ma)5 b(jor)40 b(source)g(of)h(inspiration)36 b(for)k(the)94 -736 y(re-in)m(v)m(en)m(tion)28 b(of)g(existing)f(activities,)h(and)f -(in)g(particular)f(for)i(the)g(exploitation)f(of)h(new)g(business)e(in) -g(the)94 849 y(publishing)32 b(mark)m(et.)60 b(Curren)m(tly)-8 -b(,)37 b(digital)e(journals)g(just)h(o\013er)h(purely)d(textual)j(ob)5 -b(jects:)54 b(our)36 b(pro)5 b(ject)94 962 y(could)27 -b(help)f(to)i(de\014ne)f(new)g(mark)m(et)i(p)s(ossibilit)m(y)24 -b(for)j(con)m(ten)m(t-based)j(publishing)23 b(\()p Fd(i.e.)39 -b Fl(structured,)28 b(p)s(os-)94 1075 y(sibly)e(formal)i(mathematical)h -(dev)m(elopmen)m(ts\),)h(with)d(all)g(the)i(p)s(oten)m(tialities)e -(o\013ered)i(b)m(y)f(this)g(approac)m(h,)94 1187 y(from)f(bro)m(wsing)g -(facilities,)g(to)h(the)g(p)s(ersonalisation)e(of)i(the)g(st)m(yle,)g -(from)g(enhanced)f(forms)g(of)h(searc)m(hing,)94 1300 -y(to)j(more)g(or)f(less)g(arbitrarily)d(complex)j(forms)g(of)h(elab)s -(oration.)235 1413 y(Our)39 b(system)g(also)h(op)s(ens)f(new)g(p)s -(ersp)s(ectiv)m(es)g(on)h(the)g(mec)m(hanisation)f(of)h(mathematics)g -(and)f(the)94 1526 y(automation)34 b(of)f(formal)f(reasoning.)49 -b(The)33 b(gro)m(wing)g(complexit)m(y)g(of)g(adv)-5 b(anced)33 -b(tec)m(hnological)h(pro)5 b(jects)94 1639 y(\(in)29 -b(the)i(areas)f(of)h(electronic)f(and)f(a)m(vionic)h(engineering,)f -(for)h(example\))h(has)f(recen)m(tly)g(arose)h(a)f(renew)m(ed)94 -1752 y(in)m(terest)36 b(in)e(formal)g(metho)s(ds.)56 -b(F)-8 b(rom)36 b(this)e(resp)s(ect,)j(our)e(pro)5 b(ject)36 -b(con)m(tributes)f(to)h(build)c(an)k(essen)m(tial)94 -1865 y(infrastructure)28 b(for)h(the)h(exploitation)e(of)i(these)g -(metho)s(ds,)f(pro)m(viding)f(a)i(ma)5 b(jor)29 b(help)g(for)g -(professionals,)94 1978 y(and)h(fostering)g(their)f(skills.)235 -2091 y(Let)f(us)f(\014nally)e(remark)i(that)h(the)f(pro)5 -b(ject)28 b(has)f(no)g(negativ)m(e)i(impact)e(on)g(the)g(natural)g(en)m -(vironmen)m(t.)94 2204 y(W)-8 b(e)32 b(could)f(ev)m(en)h(claim)e(a)i -(few)f(b)s(ene\014ts,)f(related)i(to)g(the)f(electronic)g(distribution) -d(of)j(do)s(cumen)m(ts,)h(suc)m(h)94 2317 y(as)f(the)f(minimisation)d -(in)i(the)i(use)f(of)g(means)h(of)f(con)m(v)m(ey)m(ance)j(and)d(the)h -(sa)m(ving)f(of)h(pap)s(er.)235 2429 y(The)43 b(p)s(ossible)f -(customisation)h(via)g(suitable)g(st)m(yle-sheets)i(of)f -Fd(structur)-5 b(e)g(d)45 b Fl(electronic)f(do)s(cumen)m(ts)94 -2542 y(could)37 b(also)g(meet)i(the)f(needs)f(of)h(particular)e(users,) -j(suc)m(h)e(as)h(disabled)d(\(in)i(particular,)h(disabled)d(stu-)94 -2655 y(den)m(ts\))26 b(or)g(elderly)e(\(as)i(retired)f(researc)m(hers)h -(who)g(w)m(ould)e(lik)m(e)h(to)i(con)m(tin)m(ue)f(their)e(professional) -g(activit)m(y\),)94 2768 y(pro)m(viding)38 b(at)i(the)g(same)h(time)e -(comfortable)i(w)m(orking)e(conditions)f(\()p Fd(e.g.)69 -b Fl(at)40 b(home\).)70 b(Another)40 b(gen-)94 2881 y(eral)29 -b(design)f(requiremen)m(t)g(is)h(the)g(abilit)m(y)f(to)i(render)e -(mathematical)i(material)e(in)g(other)i(media)e(suc)m(h)h(as)94 -2994 y(sp)s(eec)m(h)h(or)h(braille,)d(whic)m(h)h(is)h(extremely)g(imp)s -(ortan)m(t)g(for)g(the)g(visually)e(impaired.)235 3107 -y(In)j(conclusion,)g(the)h(aim)f(of)h(our)f(w)m(ork)h(is)e(to)j(con)m -(tribute)e(to)i(the)e(creation)h(of)g(the)g(next)g(generation)94 -3220 y(of)26 b(user-friendly)-8 b(,)25 b(dep)s(endable)f(and)h(in)m -(terop)s(erable)g(general-in)m(terest)h(services,)h(meeting)f(user)f -(demands)94 3333 y(for)30 b(\015exible)f(access,)j(for)e(ev)m(eryb)s(o) -s(dy)-8 b(,)30 b(from)g(an)m(ywhere,)h(at)g(an)m(y)f(time.)94 -3619 y Fj(8)135 b(Economic)45 b(dev)l(elopmen)l(t)i(and)d(Scien)l -(ti\014c)h(and)296 3769 y(T)-11 b(ec)l(hnological)46 -b(Prosp)t(ects)94 3975 y Fg(8.1)112 b(Iden)m(ti\014cation)36 -b(of)i(exploitable)e(results)94 4147 y Fl(MO)m(W)m(GLI)23 -b(is)e(mean)m(t)h(to)g(dev)m(elop,)i(ev)-5 b(aluate,)24 -b(\014ne-tune)d(and)g(deliv)m(er)g(a)h(complete)g(protot)m(yp)s(e)g -(supp)s(orting)94 4259 y(friendly)h(and)h(in)m(teractiv)m(e)i(access)h -(to)f(h)m(uge,)h(distributed)22 b(rep)s(ositories)i(of)i(con)m(ten)m -(t-based)h(mathematical)94 4372 y(kno)m(wledge.)38 b(The)20 -b(purp)s(ose)g(of)h(the)g(pro)5 b(ject)22 b(is)e(to)i(o)m(v)m(ercome)i -(some)d(of)h(the)f(main)f(obstacles)i(that)f(curren)m(tly)94 -4485 y(hinder)33 b(a)i(wider)f(dissemination)e(of)k(Information)e(T)-8 -b(ec)m(hnologies)35 b(in)f(the)i(mathematical)f(and)g(researc)m(h)94 -4598 y(comm)m(unit)m(y)28 b(\(comprising)f(b)s(oth)h(professionals)f -(and)h(studen)m(ts\).)40 b(This)27 b(is)g(in)m(tended)h(as)h(a)g -(public)d(service)94 4711 y(for)k(the)h(whole)e(comm)m(unit)m(y)h(of)h -(users,)f(and)g(w)m(e)g(exp)s(ect)h(no)g(direct)e(commercial)h -(pro\014t)g(b)m(y)g(our)g(w)m(ork.)235 4824 y(Of)j(course,)h(the)f -(core)h(tec)m(hnologies)f(and)g(languages)g(dev)m(elop)s(ed)f(in)g(MO)m -(W)m(GLI)i(ma)m(y)g(b)s(e)e(exploited)94 4937 y(in)d(a)i(lot)f(of)h -(di\013eren)m(t)f(w)m(a)m(ys,)h(according)f(to)h(the)g(nature)f(and)g -(exploitation)f(plan)g(of)i(eac)m(h)h(partner.)235 5050 -y(In)h(particular,)g(it)g(should)f(b)s(e)h(clear)h(that)g(ha)m(ving)g -(a)g(coheren)m(t,)h(distributed)c(library)g(of)j(structured)94 -5163 y(mathematical)j(kno)m(wledge,)h(sa)m(v)m(ed)f(in)e(a)i(clearly)e -(de\014ned,)i(w)m(ell)e(do)s(cumen)m(ted)h(and)g(application)e(inde-)94 -5276 y(p)s(enden)m(t)c(format,)j(is)d(just)h(the)g(starting)g(p)s(oin)m -(t)g(of)g(a)h(wider,)e(p)s(oten)m(tially)g(enormous)h(pro)s(cess.)43 -b(Building)p eop -%%Page: 13 13 -13 12 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(13)94 171 y(on)32 b(the)g(grounds)f(pro)m(vided)g(b)m(y)h(MO)m(W)m -(GLI,)i(a)e(lot)g(of)g(di\013eren)m(t)g(services)g(can)g(b)s(e)g -(imagined,)f(and)g(inde-)94 284 y(p)s(enden)m(tly)k(dev)m(elop)s(ed)i -(b)m(y)g(di\013eren)m(t)f(organisations.)60 b(Inside)35 -b(the)i(pro)5 b(ject,)40 b(w)m(e)d(shall)e(just)i(giv)m(e)g(a)h(few)94 -397 y(hin)m(ts)24 b(in)g(this)g(direction,)h(supp)s(orting)e(adv)-5 -b(anced)25 b(and)g(in)m(teractiv)m(e)h(forms)e(of)h(searc)m(hing)g(and) -g(na)m(vigation,)94 510 y(as)31 b(w)m(ell)e(as)i(automatic)g(v)-5 -b(alidation)29 b(facilities,)f(for)j(suitable)d(fragmen)m(ts)j(of)g -(the)f(library)-8 b(.)94 753 y Fg(8.2)112 b(T)-9 b(arget)37 -b(Mark)m(et)94 925 y Fl(The)22 b(main)g(target)i(mark)m(et)f(of)g(MO)m -(W)m(GLI)h(is)e(education.)38 b(Here,)25 b(the)d(p)s(oten)m(tialit)m(y) -h(o\013ered)f(b)m(y)h(a)g(seman)m(tic)94 1038 y(description)40 -b(of)i(the)g(information)e(for)i(the)g(dev)m(elopmen)m(t)g(of)g(in)m -(teractiv)m(e,)k(electronic)c(textb)s(o)s(oks)g(are)94 -1151 y(enormous.)h(In)30 b(particular,)g(the)i(MO)m(W)m(GLI)g(protot)m -(yp)s(e)g(could)e(b)s(ecome)i(an)f(essen)m(tial)g(to)s(ol)g(for)g(a)h -(wider)94 1264 y(and)e(more)g(friendly)e(dissemination)g(of)i -(mathematical)h(kno)m(wledge.)235 1377 y(A)42 b(second,)i(p)s(oten)m -(tial)d(mark)m(et)h(is)e(Publishing.)70 b(Digital)40 -b(libraries)f(curren)m(tly)h(su\013ers)g(from)h(clear)94 -1490 y(limitations)h(due)h(to)i(the)f(mac)m(hine-readable)g(but)f(not)h -(mac)m(hine)g(understandable)e(enco)s(ding)h(of)h(the)94 -1603 y(information.)74 b(No)43 b(other)f(kind)e(of)i(elab)s(oration)g -(than)f(displa)m(ying)f(or)i(prin)m(ting)e(is)h(usually)f(p)s(ossible.) -94 1715 y(There)28 b(is)f(no)g(p)s(ossibilit)m(y)e(of)j(cut-and)g -(paste,)h(formal)f(c)m(hec)m(king,)h(complex)f(searc)m(hing.)40 -b(F)-8 b(or)28 b(instance,)h(w)m(e)94 1828 y(cannot)f(write)f(a)h -(spider)e(going)h(around)g(searc)m(hing)g(for)h(a)g(pro)s(of)f(with)f -(a)i(giv)m(en)g(template,)h(b)s(ecause)e(there)94 1941 -y(is)i(not)i(structure,)f(and)g(in)f(particular)g(no)h(seman)m(tics)h -(inside)d(the)i(text.)235 2054 y(A)40 b(third)e(mark)m(et)j(are)f -(industries)d(sp)s(ecialised)g(in)i(formal)g(v)m(eri\014cation)g(and)h -(securit)m(y)-8 b(.)69 b(These)39 b(in-)94 2167 y(dustries)d(are)i -(usually)d(ask)m(ed)k(to)f(c)m(hec)m(k)h(a)f(giv)m(en)g(system)g(or)g -(proto)s(col)f(for)h(securit)m(y)f(issues)f(or)i(formal)94 -2280 y(v)-5 b(alidation)27 b(of)j(functional/temp)s(oral)d(b)s(eha)m -(viour.)39 b(The)28 b(result)g(of)h(the)h(formalisation)d(w)m(ork)i -(and)g(its)f(au-)94 2393 y(tomatic)c(v)-5 b(alidation)22 -b(is)g(t)m(ypically)h(in)f(an)h(in)m(ternal)f(format)i(whic)m(h)e(is)g -(obscure)h(ev)m(en)h(to)g(exp)s(erts.)38 b(Studying)94 -2506 y(the)32 b(p)s(ossibilit)m(y)d(to)k(automatically)f(generate)i(a)e -(more)h(friendly)c(presen)m(tation)j(in)f(usual)g(mathematical)94 -2619 y(notation)g(is)e(th)m(us)h(a)h(ma)5 b(jor)30 b(topic.)94 -2862 y Fg(8.3)112 b(Consortium's)37 b(Dissemination)e(and)j -(Exploitation)d(Strategy)94 3034 y Fl(According)h(to)i(the)f(Pro)5 -b(ject)38 b(W)-8 b(orkplan,)38 b(a)f(considerable)e(e\013ort)j(will)c -(b)s(e)i(dev)m(oted)i(to)f(the)g(dissemina-)94 3147 y -(tion/exploitation)23 b(of)h(the)g(results.)38 b(During)22 -b(the)i(\014rst)g(six)e(mon)m(ths,)k(the)e(consortium)f(will)e -(undertak)m(e)j(the)94 3260 y(dev)m(elopmen)m(t)36 b(and)f(execution)g -(of)h(a)g(w)m(orkplan)e(to)i(ac)m(hiev)m(e)h(successful)d -(dissemination)f(of)i(the)h(pro)5 b(ject)94 3373 y(results.)38 -b(In)25 b(particular,)g(the)g(v)m(ery)h(nature)f(of)h(the)f(pro)5 -b(ject)26 b(suggests)g(to)h(in)m(v)m(olv)m(e)e(the)h(largest)g(comm)m -(unit)m(y)94 3485 y(of)j(professionals)e(during)g(the)i(mo)s(delling)d -(phase.)40 b(Here,)30 b(w)m(e)g(shall)d(b)s(e)h(op)s(en)h(to)g(an)m(y)h -(con)m(tribution,)e(ev)m(en)94 3598 y(soliciting)g(them,)j(still)d(k)m -(eeping)i(\014nal)f(tec)m(hnical)i(decisions)e(inside)f(the)i(Pro)5 -b(ject.)94 3711 y(The)30 b(foreseen)h(dissemination)c(steps)k(include:) -205 3899 y(1.)46 b(Preparation)30 b(of)h(an)f(\\information)f(pac)m -(k",)j(including)27 b(a)j(folder)g(and)g(CDR)m(OM)g(with)f(demos.)205 -4087 y(2.)46 b(Presen)m(tation)25 b(of)f(MO)m(W)m(GLI)i(to)f(national)e -(and)h(in)m(ternational)f(conferences)i(on)f(I.T.T)-8 -b(ec)m(hnologies.)205 4274 y(3.)46 b(Presen)m(tation)29 -b(of)f(MO)m(W)m(GLI)h(to)g(thematic)f(conferences)h(on)f(Education,)g -(Digital)f(Libraries,)f(F)-8 b(or-)321 4387 y(mal)30 -b(V)-8 b(eri\014cation)30 b(and)g(so)h(on.)205 4575 y(4.)46 -b(Adv)m(ertising)32 b(to)h(actors/institutions)f(whic)m(h)g(ma)m(y)h(b) -s(e)f(direct)g(users)g(or)h(ma)m(y)g(c)m(hannel)g(the)g(infor-)321 -4688 y(mation)d(to)h(\014nal)e(users)h(\(suc)m(h)g(as)h(the)g(W)-8 -b(orld)30 b(Wide)f(W)-8 b(eb)32 b(Consortium\).)205 4875 -y(5.)46 b(T)-8 b(ec)m(hnical)30 b(pap)s(ers)f(and)h(articles)g(to)h(b)s -(e)f(sen)m(t)h(to)g(sp)s(ecialised)d(reviews.)205 5063 -y(6.)46 b(Managemen)m(t)33 b(of)d(the)h(MO)m(W)m(GLI)g(W)-8 -b(eb)32 b(site.)205 5250 y(7.)46 b(Dissemination)23 b(of)h(tec)m -(hnical)h(ac)m(hiev)m(emen)m(ts)h(in)d(sp)s(eci\014c)g(scien)m(ti\014c) -g(comm)m(unities,)i(suc)m(h)f(as)h(XML-)321 5363 y(related)31 -b(in)m(terests)f(groups.)p eop -%%Page: 14 14 -14 13 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(14)235 171 y(Managemen)m(t)37 b(of)d(the)h(Exploitation)e(and)h -(Dissemination)f(activities)h(is)f(a)i(sp)s(eci\014c)e(W)-8 -b(ork-pac)m(k)j(age)94 284 y(that)44 b(will)c(b)s(e)j(lead)g(b)m(y)g -(the)h(Pro)5 b(ject)44 b(Exploitation)e(Board.)79 b(It)44 -b(is)e(planned)f(that)j(all)f(partners)f(will)94 397 -y(nominate)j(quali\014ed)e(p)s(ersons)h(as)h(exploitation)g(managers)g -(to)h(co)s(ordinate)g(their)e(o)m(wn)h(exploitation)94 -510 y(activities.)39 b(The)26 b(Exploitation)f(Board)h(will)e(b)s(e)i -(in)f(c)m(harge)i(of)g(the)f(preparation)g(of)g(the)h(exploitation)e -(and)94 623 y(dissemination)j(plan.)94 909 y Fj(9)135 -b(W)-11 b(orkplan)94 1115 y Fg(9.1)112 b(W)-9 b(orkpac)m(k)j(age)38 -b(list)94 1286 y Fl(The)30 b(w)m(ork)g(plan)f(is)h(structured)f(in)g -(the)i(follo)m(wing)e(w)m(ork)h(pac)m(k)-5 b(ages)32 -b(and)e(T)-8 b(asks.)94 1494 y Fi(WP0)36 b(Pro)6 b(ject)35 -b(Managemen)m(t)94 1680 y(WP1)h(State)e(of)h(the)f(art)h(and)f -(Requiremen)m(ts)h(Analysis)321 1866 y(T1.1)46 b Fl(Mathematics)31 -b(and)f(the)h(W)-8 b(eb;)321 2011 y Fi(T1.2)46 b Fl(Structured)29 -b(and)h(F)-8 b(ormal)30 b(Mathematics;)321 2155 y Fi(T1.3)46 -b Fl(Metadata;)321 2300 y Fi(T1.4)g Fl(Searc)m(hing)30 -b(and)g(Retrieving;)321 2444 y Fi(T1.5)46 b Fl(Distribution;)321 -2589 y Fi(T1.6)g Fl(Do)s(cumen)m(t)31 b(Authoring)94 -2775 y Fi(WP2)36 b(T)-9 b(ransformation)321 2961 y(T2.1)46 -b Fl(XML)31 b(Exp)s(ortation;)321 3106 y Fi(T2.2)46 b -Fl(St)m(ylesheets)31 b(to)g(In)m(termediate)f(Represen)m(tation;)321 -3250 y Fi(T2.3)46 b Fl(Pro)s(of)30 b(T)-8 b(ransformations;)321 -3395 y Fi(T2.4)46 b Fl(Automatic)31 b(extraction)g(of)g(metadata;)321 -3539 y Fi(T2.5)46 b Fl(Presen)m(tational)31 b(St)m(ylesheets)f -(\(HTML/MathML\);)321 3684 y Fi(T2.6)46 b Fl(Automatic)31 -b(Generation)g(of)f(Pro)s(ofs)g(in)f(Natural)h(Language;)94 -3870 y Fi(WP3)36 b(Metadata)321 4056 y(T3.1)46 b Fl(Use,)31 -b(meaning)f(and)f(classi\014cation;)321 4200 y Fi(T3.2)46 -b Fl(Mo)s(delling;)94 4386 y Fi(WP4)36 b(In)m(terfaces)321 -4572 y(T4.1)46 b Fl(MathML)31 b(rendering/bro)m(wsing)d(engines;)321 -4717 y Fi(T4.2)46 b Fl(Consultation)29 b(Engine)g(\(arc)m(hiving,)h -(searc)m(hing)g(and)g(retrieving\);)321 4861 y Fi(T4.3)46 -b Fl(Assisted)30 b(Annotation;)321 5006 y Fi(T4.4)46 -b Fl(L)597 4989 y Ff(A)636 5006 y Fl(T)687 5025 y(E)737 -5006 y(X-based)31 b(authoring)e(to)s(ol;)94 5192 y Fi(WP5)36 -b(Distribution)321 5378 y(T5.1)46 b Fl(Arc)m(hitectural)30 -b(Design)g(of)h(the)f(Distribution)e(Mo)s(del;)p eop -%%Page: 15 15 -15 14 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(15)321 171 y Fi(T5.2)46 b Fl(Protot)m(yp)s(e)31 -b(implemen)m(tation;)321 317 y Fi(T5.3)46 b Fl(In)m(tegration)31 -b(with)e(the)i(Consultation)e(Engine;)94 505 y Fi(WP6)36 -b(T)-9 b(esting)35 b(and)g(V)-9 b(alidation)321 693 y(T6.1)46 -b Fl(Pilot)30 b(Application:)38 b(education;)321 839 -y Fi(T6.2)46 b Fl(Pilot)30 b(Application:)38 b(certi\014ed)30 -b(co)s(de)h(for)f(Ja)m(v)-5 b(a)31 b(cards;)321 985 y -Fi(T6.3)46 b Fl(Pilot)30 b(Application:)38 b(electronic)31 -b(publishing)94 1173 y Fi(WP7)36 b(Information)d(Dissemination)i(and)g -(Exploitation)94 1416 y Fg(9.2)112 b(General)38 b(description)94 -1588 y Fl(The)30 b(previous)f(w)m(ork)h(pac)m(k)-5 b(ages)32 -b(are)f(not)g(strictly)e(sequen)m(tial.)235 1700 y(WP1)23 -b(should)d(b)s(e)i(reasonably)f(short;)k(apart)e(from)e(a)i(few)f -(topics)g(requiring)d(a)k(deep)s(er)e(analysis)g(\(T)-8 -b(asks)94 1813 y(1.3-5\),)31 b(this)d(phase)g(is)g(essen)m(tially)g -(mean)m(t)h(to)h(rapidly)c(reac)m(h)j(a)h(go)s(o)s(d)e(lev)m(el)g(of)h -(in)m(ter-op)s(erabilit)m(y)e(among)94 1926 y(the)k(di\013eren)m(t)e -(sites.)235 2039 y(Most)34 b(part)e(of)h(the)g(w)m(ork)f(is)g(based)g -(on)h(the)f(p)s(ossibilit)m(y)d(to)34 b(ha)m(v)m(e)g(at)f(our)f(disp)s -(osal,)f(and)h(as)h(so)s(on)f(as)94 2152 y(p)s(ossible,)g(large)h -(collections)g(of)g(do)s(cumen)m(ts)g(enco)s(ded)g(with)f(seman)m(tic)i -(markup.)48 b(One)33 b(strategy)i(is)d(the)94 2265 y(imp)s(ort)k(of)i -(material)f(\(e.g.)64 b(journal)37 b(articles\))g(written)g(in)g(LaT)-8 -b(eX.)38 b(The)g(dev)m(elopmen)m(t)g(of)g(a)g(suitable)94 -2378 y(LaT)-8 b(eX)42 b(based)e(authoring)g(to)s(ol)h(\(T)-8 -b(ask)41 b(4.4\))h(will)d(need)h(to)i(b)s(egin)d(immediately)-8 -b(,)43 b(as)e(an)f(appropriate)94 2491 y(seman)m(tic)32 -b(enco)s(ding)f(in)g(LaT)-8 b(eX)33 b(has)e(to)i(b)s(e)e(dev)m(elop)s -(ed)h(\014rst.)44 b(The)32 b(deliv)m(ery)e(of)i(the)h(\014rst)e(protot) -m(yp)s(e)h(of)94 2604 y(the)f(authoring)e(to)s(ol)h(is)g(sc)m(heduled)f -(for)h(mon)m(th)g(18.)235 2717 y(A)h(more)h(rapid)d(w)m(a)m(y)k(to)f -(get)g(meaningful)d(rep)s(ositories)h(of)h(fully)e(structured)h -(mathematical)i(kno)m(wl-)94 2830 y(edge)j(is)e(b)m(y)h(exp)s(orting)f -(them)h(from)f(the)h(a)m(v)-5 b(ailable)34 b(libraries)d(of)j(Logical)g -(F)-8 b(ramew)m(orks)35 b(and)e(Pro)s(of)h(As-)94 2943 -y(sistan)m(ts)i(\(T)-8 b(ask)36 b(2.1\).)58 b(The)35 -b(in)m(telligence)f(con)m(tained)i(in)f(the)g(exp)s(orted)h(XML)g -(\014les)e(should)g(re\015ect)i(the)94 3055 y(requiremen)m(ts)d -(de\014ned)g(in)g(the)h(previous)f(w)m(ork)h(pac)m(k)-5 -b(age,)37 b(requiring)32 b(a)i(deep)g(analysis)f(of)h(the)h(markup)94 -3168 y(mo)s(del.)44 b(After)32 b(six)f(mon)m(ths)h(from)g(the)g(b)s -(eginning)d(of)j(the)g(pro)5 b(ject)33 b(w)m(e)f(plan)f(to)h(ha)m(v)m -(e)h(a)g(\014rst)e(protot)m(yp)s(e)94 3281 y(of)37 b(the)g(Exp)s -(ortation)g(Mo)s(dule)f(and)g(a)i(\014rst)e(draft)h(of)g(the)g(Do)s -(cumen)m(t)h(T)m(yp)s(e)e(Descriptor)h(for)g(the)g(lo)m(w,)94 -3394 y(logical)30 b(lev)m(el.)40 b(This)29 b(is)g(our)h(\014rst)g -(Milestone.)235 3507 y(A)m(t)k(this)f(p)s(oin)m(t)f(w)m(e)i(ma)m(y)g -(start)g(the)g(study)e(of)i(the)f(in)m(termediate)g(format)h(of)g(the)f -(information,)g(and)94 3620 y(the)25 b(implemen)m(tation)e(of)i(the)f -(st)m(ylesheets)i(p)s(erforming)c(the)j(transformation)f(\(tasks)h -(T2.2-3\).)41 b(This)23 b(part)94 3733 y(of)33 b(the)g(w)m(ork)h(is)e -(exp)s(ected)h(to)h(b)s(e)e(essen)m(tially)g(completed)h(after)h(one)f -(y)m(ear)h(\(second)g(Milestone\).)48 b(Since)94 3846 -y(a)29 b(strong)g(feedbac)m(k)g(is)f(exp)s(ected)h(with)f(presen)m -(tational)g(issues,)g(w)m(e)h(plan)f(to)h(b)s(egin)e(the)i(dev)m -(elopmen)m(t)g(of)94 3959 y(presen)m(tational)j(st)m(ylesheets)h -(around)e(mon)m(th)h(9.)46 b(In)32 b(turn,)g(the)g(need)g(of)g(rapidly) -e(ha)m(v)m(e)j(at)g(our)f(disp)s(osal)94 4072 y(go)s(o)s(d)25 -b(presen)m(tational)f(engines)h(suggests)g(to)h(b)s(egin)d(their)h(dev) -m(elopmen)m(t)i(as)f(so)s(on)f(as)h(p)s(ossible)e(\(task)j(4.1\).)235 -4185 y(In)32 b(parallel)e(with)i(these)g(transformation)g(issues,)g(w)m -(e)h(shall)e(start)i(the)f(study)g(and)g(classi\014cation)f(of)94 -4297 y(metadata,)h(and)e(their)f(concrete)j(mo)s(delling.)235 -4410 y(Summing)c(up,)i(at)h(the)f(end)g(of)h(\014rst)e(y)m(ear)j(w)m(e) -e(plan)f(to)i(ha)m(v)m(e:)230 4598 y Fe(\017)46 b Fl(a)31 -b(formal)f(Do)s(cumen)m(t)h(T)m(yp)s(e)f(Descriptor)g(of)g(the)h(in)m -(termediate)f(lev)m(el;)230 4786 y Fe(\017)46 b Fl(a)23 -b(bunc)m(h)e(of)i(st)m(ylesheet)g(p)s(erforming)d(the)i(transformation) -g(to)h(in)m(termediate)f(represen)m(tation,)i(b)s(oth)321 -4899 y(for)30 b(form)m(ulae)g(and)g(pro)s(ofs;)230 5086 -y Fe(\017)46 b Fl(a)31 b(detailed)e(rep)s(ort)h(on)g(metadata;)230 -5274 y Fe(\017)46 b Fl(a)31 b(\014rst)f(protot)m(yp)s(e)h(mo)s(del)e -(of)h(metadata)i(\(in)e(RDF)h(format\);)p eop -%%Page: 16 16 -16 15 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(16)230 171 y Fe(\017)46 b Fl(a)31 b(protot)m(yp)s(e)g(MathML-view) -m(er.)235 359 y(During)e(the)i(\014rst)e(half)h(of)g(second)h(y)m(ear)g -(w)m(e)g(shall)d(p)s(erform,)i(in)f(parallel,)f(four)i(ma)5 -b(jor)30 b(activities:)205 547 y(1.)46 b(study)37 b(and)g(dev)m -(elopmen)m(t)h(of)f(presen)m(tational)h(st)m(ylesheets,)i(b)s(oth)d -(for)g(expressions)f(and)h(pro)s(ofs,)321 659 y(and)30 -b(automatic)h(extraction)g(of)g(metadata)h(\(tasks)f(T2.4-6\).)205 -847 y(2.)46 b(arc)m(hitectural)25 b(design)g(and)f(implemen)m(tation)g -(of)i(the)f(consultation)g(engine)f(\(task)j(T4.2,)g(requiring)321 -960 y(the)34 b(metadata)i(mo)s(del\),)e(and)g(of)g(the)g -(functionalities)d(for)j(assisted)f(annotation)h(in)f(natural)g(lan-) -321 1073 y(guage)g(of)e(the)h(do)s(cumen)m(ts)f(\(task)h(T4.3,)h -(requiring)c(b)s(oth)h(the)i(MathML-view)m(er,)h(and)e(a)g(detailed)321 -1186 y(description)e(of)h(the)h(in)m(termediate)f(lev)m(el\).)205 -1373 y(3.)46 b(o)m(v)m(erall)25 b(arc)m(hitectural)g(design)e(and)h -(\014rst)g(protot)m(yp)s(e)h(implemen)m(tation)e(of)i(the)g -(distribution)c(mo)s(del)321 1486 y(\(task)32 b(T5.1-T5.2\).)205 -1674 y(4.)46 b(\014nalize)29 b(the)i(\014rst)f(protot)m(yp)s(e)g(of)h -(a)g(LaT)-8 b(eX)31 b(based)f(authoring)f(to)s(ol)i(\(T)-8 -b(ask)31 b(4.4\))235 1862 y(The)c(second)h(half)f(of)h(the)g(second)g -(y)m(ear)g(is)f(dev)m(oted)i(to)g(the)f(completion)f(of)h(the)g -(previous)e(tasks,)j(and)94 1975 y(to)40 b(their)e(in)m(tegration)h -(inside)e(a)j(single,)g(comp)s(ound)d(application.)66 -b(Around)38 b(this)g(time)g(w)m(e)i(shall)d(also)94 2087 -y(start)31 b(a)g(detailed)e(v)-5 b(alidation)29 b(of)h(the)h -(application,)e(according)h(to)h(three)g(pilot)e(applications:)205 -2275 y(1.)46 b(F)-8 b(ormalisation)36 b(of)h(a)g(full)e(undergraduate)h -(course)g(in)g(algebra)h(or)f(analysis)g(for)g(didactical)g(pur-)321 -2388 y(p)s(oses.)205 2576 y(2.)46 b(F)-8 b(ormalization)44 -b(of)f(\(part)h(of)7 b(\))44 b(the)f(pro)s(cess)g(of)h(loading,)h(v)m -(erifying)d(and)h(executing)h(an)f(applet)321 2689 y(in)m(to)32 -b(a)g(smart)f(card.)44 b(This)29 b(application)h(will)f(pro)m(vide)i(a) -g(case)i(study)d(close)i(to)g(b)s(oth)f(information)321 -2801 y(tec)m(hnology)38 b(\(IT\))g(industry)c(and)j(Computer)f(Science) -h(researc)m(h,)i(where)e(the)g(presen)m(tation)g(and)321 -2914 y(la)m(y)m(out)h(needs)f(are)g(not)h(exactly)g(the)f(same)g(as)h -(in)e(Mathematics.)62 b(The)36 b(example)h(concerns)g(the)321 -3027 y(represen)m(tation)c(of)f(di\013eren)m(t)g(abstract)i(state)g -(mac)m(hines,)e(transition)f(systems,)j(t)m(yping)e(calculus,)321 -3140 y(and)h(program)g(co)s(de.)51 b(Suc)m(h)33 b(concepts)h(are)g -(pragmatic)g(use)f(cases)h(of)g(the)g(formal)e(concepts)j(that)321 -3253 y(usually)28 b(app)s(ears)i(in)f(securit)m(y)h(ev)-5 -b(aluations)30 b(of)g(IT)g(pro)s(ducts)f(and)h(Computer)g(Science)g -(articles.)205 3441 y(3.)46 b(Mak)m(e)33 b(maximal)c(use)i(of)f(con)m -(ten)m(t)j(mark)m(ed-up)d(articles)g(in)g(a)h(solely)f(electronic)h -(scien)m(ti\014c)f(ph)m(ysics)321 3554 y(journal.)52 -b(This)33 b(will)f(allo)m(w)j(us)f(to)h(demonstrate)g(the)g(b)s -(ene\014ts)f(of)h(con)m(ten)m(t)h(mark-up)e(for)g(searc)m(h,)321 -3667 y(retriev)-5 b(al,)34 b(and)f(re-use)h(of)g(mathematical)g(con)m -(ten)m(t,)i(and)d(user)g(customisable)g(con)m(ten)m(t)j(presen)m(ta-) -321 3779 y(tion.)k(Sev)m(eral)30 b(articles)g(will)d(b)s(e)i(pro)s -(cessed)h(to)g(test)h(scop)s(e,)g(functionalit)m(y)-8 -b(,)29 b(and)g(user)g(friendliness)321 3892 y(of)e(the)h(authoring)e -(to)s(ol)h(dev)m(elop)s(ed)f(in)g(T)-8 b(ask)27 b(4.4.)41 -b(The)26 b(to)s(ol)h(will)d(b)s(e)j(re\014ned)f(and)g(the)h(mathemat-) -321 4005 y(ical)34 b(seman)m(tics)i(co)m(v)m(ered)g(extended.)54 -b(The)35 b(suite)f(of)h(articles)f(will)f(b)s(e)h(used)g(to)i(sho)m(w)e -(b)s(ene\014ts)g(of)321 4118 y(automated)e(annotation)e(and)g -(cross-linking)e(b)s(et)m(w)m(een)j(related)f(mathematical)h(concepts.) -235 4306 y(The)26 b(last)h(six)f(mon)m(ths)h(are)g(mainly)e(dev)m(oted) -j(to)f(testing,)h(debugging,)f(v)-5 b(alidation,)26 b(dissemination)e -(of)94 4419 y(results)29 b(and)h(exploitation)f(plans.)p -eop -%%Page: 17 17 -17 16 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(17)94 171 y Fg(9.3)112 b(W)-9 b(ork)37 b(P)m(ac)m(k)-6 -b(age)38 b(descriptions)94 343 y Fi(9.3.1)105 b(Pro)6 -b(ject)36 b(Managemen)m(t)94 633 y(w)m(ork)f(pac)m(k)-6 -b(age)36 b(n)m(um)m(b)s(er:)k Fl(0)30 b(-)h(Pro)5 b(ject)31 -b(Managemen)m(t)94 746 y Fi(Start)j(date)g(or)i(starting)e(ev)m(en)m -(t:)41 b Fl(mon)m(th)30 b(0)h(-)f(mon)m(th)h(30)94 1035 -y Fi(P)m(articipan)m(t)k(Num)m(b)s(er:)479 b Fl(1)236 -b(2)f(3)g(4)g(5)h(6)94 1148 y Fi(P)m(erson-mon)m(th)35 -b(p)s(er)g(participan)m(t:)40 b Fl(8)236 b(0)f(0)g(0)g(0)h(0)94 -1507 y Fi(Ob)6 b(jectiv)m(es:)49 b Fl(General)35 b(pro)5 -b(ject)35 b(managemen)m(t)i(and)d(co)s(ordination.)53 -b(Kno)m(wledge)34 b(and)h(skills)d(transfer)94 1620 y(b)s(et)m(w)m(een) -f(consortium)e(mem)m(b)s(ers.)40 b(Relation)30 b(to)h(the)g(Europ)s -(ean)e(Commission.)94 1851 y Fi(Description)43 b(of)f(w)m(ork:)53 -b Fl(The)36 b(Pro)5 b(ject)38 b(managemen)m(t)g(will)c(b)s(e)i(assured) -g(b)m(y)g(the)h(follo)m(wing)e(relev)-5 b(an)m(t)94 1964 -y(roles:)57 b(a\))39 b(Pro)5 b(ject)40 b(Manager,)i(b\))c(Exploitation) -f(manager,)42 b(c\))d(W)-8 b(ork-pac)m(k)j(age)42 b(Leaders)d(d\)T)-8 -b(ec)m(hnical)94 2077 y(Con)m(tributors,)22 b(and)g(b)m(y)g(the)g -(follo)m(wing)f(Pro)5 b(ject)22 b(Bo)s(dies:)36 b(a\)Pro)5 -b(ject)24 b(Co)s(ordination)c(Committee)i(\(PCC\),)94 -2190 y(b\))30 b(Pro)5 b(ject)31 b(Exploitation)e(Board)i(\(PEB\))g(and) -f(e\))h(W)-8 b(ork-pac)m(k)j(age)34 b(T)-8 b(eams.)94 -2303 y(The)25 b Fi(Pro)6 b(ject)30 b(Manager)25 b Fl(c)m(hairs)g(the)h -(PCC.)e(The)h(mandate)h(of)g(the)f(PCC)g(is)f(to)i(represen)m(t)g(the)f -(Pro)5 b(ject,)94 2416 y(rep)s(ort)25 b(to)h(the)g(Commission,)e -(monitor)h(o)m(v)m(erall)h(p)s(erformance)f(of)g(the)h(pro)5 -b(ject,)27 b(ensure)e(accomplishmen)m(t)94 2529 y(of)g(the)h(tec)m -(hnical)f(ob)5 b(jectiv)m(es,)27 b(promote)f(pro)5 b(ject)26 -b(visibilit)m(y)-8 b(,)23 b(promote)j(dissemination)c(of)k(pro)5 -b(ject)26 b(results)94 2642 y(in)e(the)i(relev)-5 b(an)m(t)26 -b(in)m(ternational)e(forums,)i(promote)g(acceptance)h(of)f(pro)5 -b(ject)26 b(results,)f(administer)f(pro)5 b(ject)94 2755 -y(resources)27 b(and)g(monitor)g(pro)5 b(ject)27 b(sp)s(ending.)38 -b(The)26 b Fi(Exploitation)31 b(Manager)d Fl(will)d(b)s(e)h(resp)s -(onsible)f(for)94 2868 y(co)s(ordinating)f(dissemination)f(and)i -(exploitation)g(activities)g(undertak)m(en)h(b)m(y)f(the)h(Pro)5 -b(ject)27 b(Exploitation)94 2981 y(Board)k(\(PEB\))g(in)e(close)i(co)s -(op)s(eration)f(with)f(the)h(Pro)5 b(ject)32 b(Co)s(ordination)c -(Committee)j(\(PCC\).)94 3093 y(Information)e(\015o)m(w)h(within)d(the) -j(Pro)5 b(ject)31 b(will)c(b)s(e)j(ensured)e(b)m(y)i(exc)m(hange)i(of)e -(in)m(ternal)e(tec)m(hnical)i(pap)s(ers,)94 3206 y(noti\014cation)f(of) -g(relev)-5 b(an)m(t)30 b(new)f(publications)d(tec)m(hnologies)k(or)g -(standards,)e(and)h(rep)s(orts)g(from)f(external)94 3319 -y(meetings.)40 b(All)29 b(tec)m(hnical)h(do)s(cumen)m(tation)g -(generated)g(b)m(y)g(the)g(pro)5 b(ject)31 b(will)c(b)s(e)i(exc)m -(hangeable)i(in)e(elec-)94 3432 y(tronic)k(format,)i(according)f(to)g -(a)g(set)g(of)g(guidelines)d(to)j(b)s(e)f(agreed)h(at)h(pro)5 -b(ject)34 b(start-up.)50 b(The)33 b(pro)5 b(ject)94 3545 -y(Manager)33 b(will)c(enforce)j(adherence)g(to)g(these)g(guidelines.)42 -b(Only)30 b(strictly)h(formal)g(corresp)s(ondence)g(will)94 -3658 y(b)s(e)h(exc)m(hanged)i(b)m(y)e(ordinary)f(mail)g(and)h(telefax.) -48 b(Urgen)m(t)34 b(corresp)s(ondence)e(o)m(v)m(er)i(e-email)e(will)e -(b)s(e)i(sen)m(t)94 3771 y(with)d(a)i(request)f(for)g(explicit)f(ac)m -(kno)m(wledgemen)m(t.)94 3884 y(The)40 b(Co)s(ordinating)e(P)m(artner)i -(will)e(b)s(e)h(resp)s(onsible)f(to)j(prepare)e(and)h(main)m(tain)f(a)i -(W)-8 b(eb)41 b(page)g(of)f(the)94 3997 y(pro)5 b(ject)31 -b(and)f(a)g(CVS)g(rep)s(ository)f(\(also)i(a)m(v)-5 b(ailable)30 -b(via)g(W)-8 b(eb\).)94 4228 y Fi(Deliv)m(erables:)41 -b Fl(Cost)31 b(Statemen)m(ts)g(and)f(Pro)5 b(ject)31 -b(Rep)s(orts)f(\(mon)m(th)h(12,)g(20,)h(30\).)94 4404 -y Fi(D0.a)46 b Fl(Self)29 b(Assesmen)m(t)i(parameters)g(and)e -(criteria.)94 4587 y Fi(D0.b)46 b Fl(First)30 b(Self-assesmen)m(t)g -(Rep)s(ort.)94 4770 y Fi(D0.c)46 b Fl(Second)30 b(Self-assesmen)m(t)h -(Rep)s(ort.)94 4953 y Fi(D0.d)46 b Fl(Final)29 b(Self-assesmen)m(t)i -(Rep)s(ort.)94 5247 y Fi(Milestones)41 b(and)f(exp)s(ected)h(results:) -50 b Fl(Main)34 b(milestones)h(are)g(the)h(p)s(erio)s(dic)c(meetings,) -37 b(at)e(mon)m(th)94 5360 y(6,)c(12,)g(20,)h(24,)f(30.)p -eop -%%Page: 18 18 -18 17 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(18)94 171 y Fi(9.3.2)105 b(Requiremen)m(t)35 b(Analysis)94 -461 y(w)m(ork)g(pac)m(k)-6 b(age)36 b(n)m(um)m(b)s(er:)k -Fl(1)30 b(-)h(Requiremen)m(t)f(Analysis)94 574 y Fi(Start)k(date)g(or)i -(starting)e(ev)m(en)m(t:)41 b Fl(mon)m(th)30 b(0)h(-)f(mon)m(th)h(6)94 -874 y Fi(P)m(articipan)m(t)k(Num)m(b)s(er:)479 b Fl(1)236 -b(2)f(3)g(4)g(5)h(6)94 987 y Fi(P)m(erson-mon)m(th)35 -b(p)s(er)g(participan)m(t:)40 b Fl(3)236 b(4)f(3)g(6)g(3)h(1)94 -1335 y Fi(Ob)6 b(jectiv)m(es:)45 b Fl(De\014nition)31 -b(of)i(the)g(application)e(scenarios.)47 b(Precise)33 -b(articulation)e(of)i(all)f(the)g(function-)94 1448 y(alities)26 -b(required)g(b)m(y)h(the)g(system,)h(and)f(all)f(p)s(ossible)f(exp)s -(ected)j(in)m(teractions)f(with)f(do)s(cumen)m(ts.)39 -b(Ov)m(erall)94 1561 y(requiremen)m(ts)29 b(of)i(the)g(distribution)26 -b(mo)s(del)j(of)i(the)g(library)-8 b(.)94 1792 y Fi(Description)44 -b(of)g(w)m(ork:)55 b Fl(The)37 b(w)m(ork)h(plan)f(is)f(naturally)g -(organised)i(in)e(subtasks)h(according)h(to)g(the)94 -1905 y(di\013eren)m(t)30 b(basic)g(kind)e(of)j(in)m(teractions)f(and)g -(manipulation)d(to)k(b)s(e)f(considered,)f(namely:)94 -2093 y Fi(T1.1)46 b Fl(Mathematics)31 b(and)f(the)h(W)-8 -b(eb.)41 b(State)31 b(of)g(the)f(art,)h(standards)f(and)g(to)s(ols.)94 -2280 y Fi(T1.2)46 b Fl(Structured)39 b(and)h(F)-8 b(ormal)41 -b(Mathematics.)73 b(Delineation)40 b(and)g(la)m(y)m(ering)g(of)h(Seman) -m(tic)g(Comp)s(o-)321 2393 y(nen)m(ts.)g(Requiremen)m(ts)28 -b(for)h(the)h(in)m(teraction)f(with)f(to)s(ols)h(for)g(the)h -(automation)g(of)f(formal)g(reason-)321 2506 y(ing.)94 -2694 y Fi(T1.3)46 b Fl(Metadata.)i(Classi\014cation)31 -b(and)h(data)h(mining)d(for)i(con)m(ten)m(t-based)i(mathematical)e(do)s -(cumen)m(ts,)321 2807 y(and)e(k)m(ey)h(arc)m(hitectural)g(guidelines)c -(for)j(the)h(metadata)h(mo)s(del.)94 2994 y Fi(T1.4)46 -b Fl(Searc)m(hing)30 b(and)f(Retrieving.)40 b(State)32 -b(of)e(the)h(art,)g(use)f(cases)h(and)f(application)e(scenarios.)94 -3182 y Fi(T1.5)46 b Fl(Distribution.)38 b(Distributed)28 -b(do)s(cumen)m(t)i(rep)s(ositories)f(and)h(p)s(eer-to-p)s(eer)h(in)m -(terop)s(erabilit)m(y)-8 b(.)94 3369 y Fi(T1.6)46 b Fl(Do)s(cumen)m(t) -31 b(Authoring.)39 b(State)32 b(of)e(the)h(art,)g(use)f(cases)h(and)f -(application)f(scenarios.)94 3557 y(P)m(art)24 b(of)f(the)g(activit)m -(y)-8 b(,)25 b(co)m(v)m(ering)f(T)-8 b(asks)23 b(T1.1-2-6)i(should)c(b) -s(e)i(concluded)e(within)g(the)i(\014rst)f(three)h(mon)m(ths,)94 -3670 y(with)k(the)h(preliminary)d(rep)s(ort)j(D1.a.)41 -b(The)28 b(main)f(aim)h(of)h(this)e(phase)h(is)f(to)i(rapidly)d(reac)m -(h)j(a)g(go)s(o)s(d)f(lev)m(el)94 3783 y(of)h(in)m(ter-op)s(erabilit)m -(y)e(among)i(the)g(di\013eren)m(t)g(sites,)g(b)m(y)g(implemen)m(ting)e -(a)i(suitable)e(p)s(olitic)g(of)i(kno)m(wledge)94 3896 -y(and)c(skills)e(transfer)j(b)s(et)m(w)m(een)g(the)g(mem)m(b)s(ers)g -(of)g(the)g(consortium)f(\(short)g(visits)g(and/or)h(small)e(thematic) -94 4009 y(w)m(orkshops,)30 b(according)g(to)h(the)g(case\).)235 -4122 y(Ho)m(w)m(ev)m(er,)i(some)e(delicate)g(issues,)f(suc)m(h)g(as)h -(Metadata,)i(Searc)m(hing)d(and)h(Retrieving)e(and)h(Distribu-)94 -4235 y(tion)g(\(T)-8 b(ask)31 b(T1.3-4-5\))i(will)28 -b(ev)m(en)m(tually)i(require)f(a)i(deep)s(er)e(analysis)g(\(deliv)m -(erables)g(D1.b)i(and)f(D1.c\).)235 4347 y(WP1)k(will)d(b)s(e)h(ev)m -(en)m(tually)i(closed)f(during)e(the)i(\014rst)g(meeting)g(of)h(the)f -(Pro)5 b(ject)34 b(\(mon)m(th)g(six\),)f(when)94 4460 -y(all)c(the)i(rep)s(orts)e(will)f(b)s(e)i(discussed)e(and)i(appro)m(v)m -(ed.)94 4691 y Fi(Deliv)m(erables:)94 4879 y(D1.a)46 -b Fl(Preliminary)27 b(Rep)s(ort)j(on)g(Application)f(Scenarios)h(and)f -(Requiremen)m(t)h(Analysis.)94 5067 y Fi(D1.b)46 b Fl(Structure)30 -b(and)f(Meta-Structure)j(of)e(Mathematical)i(Do)s(cumen)m(ts.)94 -5254 y Fi(D1.c)46 b Fl(Distributed)29 b(Electronic)h(Libraries:)38 -b(dev)m(elopmen)m(t,)31 b(arc)m(hiving,)e(retrieving.)p -eop -%%Page: 19 19 -19 18 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(19)94 385 y Fi(Milestones)35 b(and)f(exp)s(ected)g(results:)40 -b Fl(The)29 b(preliminary)d(rep)s(ort)j(D1.a)i(is)e(not)h(a)g(real)f -(milestone:)40 b(it)94 498 y(should)24 b(b)s(e)i(considered)f(as)i(a)f -(\014rst)g(in)m(ternal)f(draft)h(summarising)d(the)k(main)e -(functionalities)f(required)g(b)m(y)94 610 y(the)35 b(system)g(and)f -(the)i(basic)e(in)m(telligence)g(to)h(add)f(to)i(do)s(cumen)m(ts,)g(as) -f(markup)f(and/or)h(metadata,)j(to)94 723 y(meet)30 b(these)g -(requiremen)m(ts.)39 b(All)28 b(these)i(issues)e(will)f(b)s(e)i(ev)m -(en)m(tually)g(detailed)g(in)f(D1.b)i(and)e(D1.c,)k(whic)m(h)94 -836 y(are)f(real)f(Milestones,)g(since)g(the)g(rest)h(of)f(the)h(w)m -(ork)f(will)e(b)s(e)i(largely)g(driv)m(en)f(b)m(y)h(them.)p -eop -%%Page: 20 20 -20 19 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(20)94 171 y Fi(9.3.3)105 b(T)-9 b(ransformation)94 -414 y(w)m(ork)35 b(pac)m(k)-6 b(age)36 b(n)m(um)m(b)s(er:)k -Fl(2)30 b(-)h(T)-8 b(ransformation)94 527 y Fi(Start)34 -b(date)g(or)i(starting)e(ev)m(en)m(t:)41 b Fl(mon)m(th)30 -b(3)h(-)f(mon)m(th)h(21)94 827 y Fi(P)m(articipan)m(t)k(Num)m(b)s(er:) -479 b Fl(1)236 b(2)f(3)g(4)g(5)h(6)94 940 y Fi(P)m(erson-mon)m(th)35 -b(p)s(er)g(participan)m(t:)40 b Fl(13)191 b(4)235 b(3)g(11)190 -b(3)236 b(0)94 1241 y Fi(Ob)6 b(jectiv)m(es:)43 b Fl(This)31 -b(w)m(ork)h(pac)m(k)-5 b(age)34 b(is)d(dev)m(oted)i(to)f(the)g(complex) -g(issue)f(of)h(transforming)e(a)j(lo)m(w)e(lev)m(el,)94 -1354 y(con)m(ten)m(t)i(description)c(of)i(mathematics)g -(\(understandable)e(b)m(y)i(automatic)h(applications)d(for)h(the)i(mec) -m(h-)94 1466 y(anization)c(of)g(mathematics\))h(in)m(to)f(a)h(h)m -(uman-readable)e(presen)m(tational)h(format.)40 b(It)29 -b(co)m(v)m(ers)g(b)s(oth)f(state-)94 1579 y(men)m(ts)43 -b(and)g(pro)s(ofs.)77 b(The)43 b(transformation)f(will)e(b)s(e)j -(decomp)s(osed)f(in)g(a)h(sequence)h(of)f(in)m(termediate)94 -1692 y(steps,)37 b(for)e(mo)s(dularit)m(y)f(reasons.)56 -b(All)34 b(transformations)h(will)d(b)s(e)j(implemen)m(ted)f(b)m(y)i -(means)f(of)h(XSL)-8 b(T-)94 1805 y(st)m(ylesheets.)38 -b(St)m(ylesheets)21 b(will)d(b)s(e)i(simple,)h(mo)s(dular,)f(and)g -(easily)g(comp)s(osable.)37 b(All)19 b(the)i(transformation)94 -1918 y(pro)s(cess)30 b(should)e(b)s(e)i(indep)s(enden)m(t)e(from)i(an)m -(y)h(sp)s(eci\014c)e(application.)94 2149 y Fi(Description)36 -b(of)f(w)m(ork:)40 b Fl(The)30 b(w)m(ork)h(pac)m(k)-5 -b(age)32 b(is)e(articulated)f(in)h(the)g(follo)m(wing)f(tasks.)94 -2337 y Fi(T2.1)46 b Fl(XML)29 b(exp)s(ortation.)40 b(The)28 -b(task)h(is)e(dev)m(oted)j(to)f(the)g(translation)f(of)h(the)f -(standard)g(library)e(of)j(the)321 2450 y(COQ)36 b(Pro)s(of)g(assistan) -m(t)h(in)m(to)f(a)h(suitable)e(XML)i(dialect,)g(and)f(to)h(the)g -(de\014nition)d(of)j(a)g(lo)m(w-lev)m(el)321 2563 y(DTD)e(for)f(the)h -(terms)f(of)h(the)f(Calculus)f(of)h(Inductiv)m(e)g(Construction)f -(\(the)i(logical)f(system)g(used)321 2676 y(b)m(y)d(COQ\).)94 -2863 y Fi(T2.2)46 b Fl(St)m(ylesheets)38 b(to)g(in)m(termediate)g -(represen)m(tation.)62 b(Implemen)m(tation)37 b(of)h(a)g(bunc)m(h)f(of) -h(st)m(ylesheets)321 2976 y(transforming)30 b(the)g(lo)m(w-lev)m(el)h -(logical)f(description)f(of)i(COQ-expressions)e(in)m(to)h(a)i -(\\standard")e(in-)321 3089 y(termediate,)h(con)m(ten)m(t-lev)m(el)i -(represen)m(tation)d(suc)m(h)g(as)h(MathML)g(con)m(ten)m(t.)94 -3277 y Fi(T2.3)46 b Fl(Pro)s(of)30 b(transformation.)43 -b(Similar)28 b(to)j(the)h(previous)d(task,)j(but)f(for)g(pro)s(ofs.)42 -b(The)30 b(delicate)h(p)s(oin)m(t,)321 3389 y(here,)41 -b(is)c(the)i(fact)g(that)g(no)f(\\standard")h(in)m(termediate)f -(represen)m(tation)g(curren)m(tly)g(exists,)i(and)321 -3502 y(th)m(us)30 b(it)g(has)g(to)h(b)s(e)f(de\014ned.)94 -3690 y Fi(T2.4)46 b Fl(Automatic)27 b(extraction)f(of)h(metadata.)41 -b(Relev)-5 b(an)m(t)26 b(metadata)i(suc)m(h)e(as)g(list)f(of)h(iden)m -(ti\014ers)e(in)h(criti-)321 3803 y(cal)k(p)s(ositions)d(inside)g -(statemen)m(ts)k(can)e(b)s(e)g(automatically)g(extracted)h(from)f(the)g -(fully)e(structured)321 3916 y(represen)m(tation)44 b(of)f -(mathematical)h(ob)5 b(jects.)81 b(This)42 b(information)f(can)j(then)f -(b)s(e)g(exploited)g(for)321 4029 y(searc)m(hing)32 b(and)g -(retrieving.)45 b(The)31 b(precise)h(list)f(of)h(metadata)i(will)29 -b(b)s(e)j(de\014ned)f(in)g(W)-8 b(ork)33 b(P)m(ac)m(k)-5 -b(age)321 4142 y(3.)94 4329 y Fi(T2.5)46 b Fl(Presen)m(tational)32 -b(St)m(ylesheets.)46 b(Implemen)m(tation)31 b(of)h(a)h(bunc)m(h)e(of)h -(st)m(ylesheets)h(transforming)d(the)321 4442 y(in)m(termediate)j(con)m -(ten)m(t)h(represen)m(tation)f(in)m(to)g(a)g(suitable)e(rendering)g -(format)i(\(MathML)h(presen-)321 4555 y(tation,)d(HTML,)g(etc.\))94 -4743 y Fi(T2.6)46 b Fl(Automatic)39 b(Pro)s(of)g(Generation)g(in)f -(Natural)h(Language.)67 b(Similar)36 b(to)k(the)f(previous)f(task)h -(but)321 4856 y(for)33 b(pro)s(ofs.)46 b(In)32 b(this)g(case,)i(a)f -(fully)d(automated)k(approac)m(h)f(is)f(unlik)m(ely)e(to)j(pro)s(duce)f -(really)f(satis-)321 4969 y(factory)g(results,)e(and)g(the)h(pro)s -(cess)f(should)f(b)s(e)h(p)s(ossibly)e(in)m(tegrated)j(with)e(some)j -(mec)m(hanism)e(for)321 5081 y(in)m(teractiv)m(e)i(annotation)g(\(see)g -(T)-8 b(ask)31 b(4.3\).)94 5340 y Fi(Deliv)m(erables:)p -eop -%%Page: 21 21 -21 20 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(21)94 171 y Fi(D2.a)46 b Fl(Exp)s(ortation)29 b(mo)s(dule.)94 -359 y Fi(D2.b)46 b Fl(Do)s(cumen)m(t)31 b(T)m(yp)s(e)f(Descriptors.)94 -547 y Fi(D2.c-d)46 b Fl(St)m(ylesheets)31 b(to)g(in)m(termediate)f -(represen)m(tation)h(\(form)m(ulae)f(and)g(pro)s(ofs\).)94 -734 y Fi(D2.e-f)46 b Fl(Presen)m(tational)30 b(St)m(ylesheets)h(\(form) -m(ulae)f(and)g(pro)s(ofs\).)94 922 y Fi(D2.g)46 b Fl(T)-8 -b(o)s(ols)30 b(for)g(automatic)i(extraction)f(of)f(Metadata.)94 -1180 y Fi(Milestones)41 b(and)g(exp)s(ected)g(results:)51 -b Fl(The)35 b(exp)s(ortation)g(mo)s(dule)f(D2.a.)58 b(is)34 -b(our)h(\014rst)g(milestone:)94 1293 y(without)27 b(a)h(large)h(amoun)m -(t)f(of)g(a)m(v)-5 b(ailable)27 b(do)s(cumen)m(ts)h(it)g(w)m(ould)f(b)s -(e)g(imp)s(ossible)d(to)29 b(test)g(the)f(transforma-)94 -1406 y(tions.)39 b(Similarly)-8 b(,)26 b(without)i(a)h(precise)f -(de\014nition)e(of)i(the)h(in)m(termediate)f(language,)i(and)e(a)h -(large)f(sample)94 1519 y(of)34 b(do)s(cumen)m(ts)g(in)f(this)g(format) -i(\(D2c-d\))h(w)m(e)e(cannot)h(start)g(to)g(seriously)d(address)h(the)i -(presen)m(tational)94 1632 y(issue.)40 b(Note)31 b(that)g(the)g(in)m -(termediate)f(language)h(is)e(the)i(real)f(core)h(of)f(the)h(whole)e -(pro)5 b(ject.)235 1745 y(The)29 b(dev)m(elopmen)m(t)g(of)g(presen)m -(tational)g(st)m(ylesheets)g(also)g(dep)s(ends)e(in)h(an)h(essen)m -(tial)f(w)m(a)m(y)i(on)f(the)g(de-)94 1858 y(v)m(elopmen)m(t)23 -b(of)h(rendering/bro)m(wsing)c(engines)i(for)h(the)g(c)m(hosen)h -(presen)m(tational)e(language)i(\(in)e(particular,)94 -1971 y(for)30 b(MathML\).)235 2084 y(F)-8 b(or)32 b(the)g(end)f(of)g -(mon)m(th)h(18,)g(w)m(e)g(exp)s(ect)g(to)g(ha)m(v)m(e)h(a)f(\014rst)f -(w)m(orking)f(protot)m(yp)s(e)i(of)g(the)g(whole)e(appli-)94 -2196 y(cation.)p eop -%%Page: 22 22 -22 21 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(22)94 171 y Fi(9.3.4)105 b(Metadata)94 579 y(w)m(ork)35 -b(pac)m(k)-6 b(age)36 b(n)m(um)m(b)s(er:)k Fl(3)30 b(-)h(Metadata)94 -692 y Fi(Start)j(date)g(or)i(starting)e(ev)m(en)m(t:)41 -b Fl(mon)m(th)30 b(6)h(-)f(mon)m(th)h(21)94 993 y Fi(P)m(articipan)m(t) -k(Num)m(b)s(er:)479 b Fl(1)236 b(2)f(3)g(4)g(5)h(6)94 -1105 y Fi(P)m(erson-mon)m(th)35 b(p)s(er)g(participan)m(t:)40 -b Fl(3)236 b(3)f(8)g(3)g(3)h(0)94 1524 y Fi(Ob)6 b(jectiv)m(es:)39 -b Fl(Delineation)28 b(of)h(the)g(basic)f(in)m(telligence)g(to)h(b)s(e)f -(considered)g(for)g(encapsulation)g(in)f(meta-)94 1637 -y(data,)34 b(in)d(order)h(to)h(meet)g(the)g(needs)f(delineated)g -(during)e(Requiremen)m(t)i(Analysis)e(\(WP1\).)49 b(De\014nition)94 -1750 y(and)30 b(Dev)m(elopmen)m(t)h(of)g(a)g(sp)s(eci\014c)e(Markup)h -(Mo)s(del)f(in)g(RDF.)94 1981 y Fi(Description)42 b(of)f(w)m(ork:)51 -b Fl(The)35 b(precise)g(de\014nition)e(of)j(metadata)h(and)e(their)g -(actual)h(Markup)f(Mo)s(del)94 2094 y(are)24 b(essen)m(tial)g(asp)s -(ects)g(for)g(implemen)m(ting)e(the)i(main)f(functionalities)e(of)j -(the)h(library)-8 b(,)23 b(and)g(esp)s(ecially)g(for)94 -2207 y(arc)m(hiving,)33 b(searc)m(hing)g(and)g(retrieving)f(issues.)48 -b(The)32 b(w)m(ork)i(will)c(b)s(e)j(articulated)g(in)f(t)m(w)m(o)i -(main,)f(almost)94 2320 y(sequen)m(tial,)d(tasks:)94 -2507 y Fi(T3.1)46 b Fl(Use,)36 b(meaning)f(and)f(classi\014cation.)53 -b(This)34 b(task,)j(based)d(on)h(the)g(previous)f(do)s(cumen)m(ts)g(D1) -i(and)321 2620 y(D2,)h(is)d(aimed)g(to)i(pro)m(vide)e(a)h(precise)f -(de\014nition)f(and)h(classi\014cation)g(of)h(all)f(metadata)i -(required)321 2733 y(for)30 b(an)h(e\013ectiv)m(e)h(and)d(e\016cien)m -(t)i(managemen)m(t)h(of)f(the)f(library)-8 b(.)94 2921 -y Fi(T3.2)46 b Fl(Mo)s(delling.)51 b(This)32 b(is)i(dev)m(oted)i(to)f -(the)g(de\014nition)d(of)i(a)h(precise)f(markup)f(mo)s(del.)52 -b(T)-8 b(o)35 b(this)f(aim,)321 3034 y(w)m(e)d(plan)e(to)i(use)f(the)h -(Resource)g(Description)e(F)-8 b(ramew)m(ork)32 b(of)e(W3C.)94 -3339 y Fi(Deliv)m(erables:)94 3527 y(D3.a)46 b Fl(Metadata)32 -b(for)f(Mathematics;)94 3715 y Fi(D3.b)46 b Fl(Metadata)33 -b(Mo)s(del;)94 4020 y Fi(Milestones)39 b(and)f(exp)s(ected)g(results:) -46 b Fl(The)32 b(de\014nition)f(of)i(the)h(Metadata)h(mo)s(del)d(is)g -(a)h(main)f(mile-)94 4133 y(stone,)c(since)e(the)h(arc)m(hitectural)f -(design)g(and)f(implemen)m(tation)h(of)g(the)h(consultation)f(engine)g -(\(T)-8 b(ask)27 b(4.2\))94 4246 y(will)j(b)s(e)j(essen)m(tially)f -(based)g(on)h(it.)48 b(Similarly)-8 b(,)31 b(it)h(is)g(required)f(for)i -(T)-8 b(ask)33 b(2.4)h(\(automatic)h(extraction)e(of)94 -4359 y(metadata\).)p eop -%%Page: 23 23 -23 22 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(23)94 171 y Fi(9.3.5)105 b(In)m(terfaces)94 461 -y(w)m(ork)35 b(pac)m(k)-6 b(age)36 b(n)m(um)m(b)s(er:)k -Fl(4)30 b(-)h(In)m(terfaces)94 574 y Fi(Start)j(date)g(or)i(starting)e -(ev)m(en)m(t:)41 b Fl(mon)m(th)30 b(3)h(-)f(mon)m(th)h(24)94 -869 y Fi(P)m(articipan)m(t)k(Num)m(b)s(er:)479 b Fl(1)236 -b(2)f(3)g(4)g(5)h(6)94 982 y Fi(P)m(erson-mon)m(th)35 -b(p)s(er)g(participan)m(t:)40 b Fl(16)191 b(16)f(5)235 -b(4)g(14)191 b(0)94 1396 y Fi(Ob)6 b(jectiv)m(es:)65 -b Fl(This)41 b(W)-8 b(ork-P)m(ac)m(k)j(age)47 b(is)41 -b(dev)m(oted)j(to)g(the)e(design)g(and)g(the)h(implemen)m(tation)e(of)i -(the)94 1509 y(in)m(terfaces)25 b(to)h(the)f(library)-8 -b(,)24 b(co)m(v)m(ering)i(rendering,)e(bro)m(wsing,)h(searc)m(hing)g -(and)f(retrieving)g(functionalities.)94 1622 y(Some)29 -b(additional)e(functionalities)f(for)j(authoring)f(purp)s(oses)f(\(suc) -m(h)i(as)g(computer)g(assisted)f(annotation)94 1735 y(of)j(pro)s(ofs\)) -e(will)f(b)s(e)i(also)g(tak)m(en)i(in)m(to)e(accoun)m(t.)235 -1847 y(Our)g(privileged)e(rendering)i(language)h(will)d(b)s(e)j -(MathML,)h(whic)m(h)d(is)h(lik)m(ely)g(to)h(b)s(e)g(rapidly)d(adopted) -94 1960 y(as)j(the)f(main)f(language)i(for)f(represen)m(ting)g -(mathematical)h(notation)f(on)h(the)f(W)-8 b(eb.)94 2191 -y Fi(Description)36 b(of)f(w)m(ork:)40 b Fl(The)30 b(w)m(ork)h(is)e -(organised)h(in)f(the)i(follo)m(wing)d(tasks:)94 2374 -y Fi(T4.1)46 b Fl(MathML)21 b(rendering/bro)m(wsing)c(engines.)37 -b(Our)19 b(privileged)f(rendering)g(language)j(will)d(b)s(e)h(MathML.) -321 2487 y(In)28 b(order)g(to)h(b)s(e)f(able)f(to)j(test)f(the)f -(presen)m(tational)h(st)m(ylesheets,)g(\(T)-8 b(ask)29 -b(2.5\))h(w)m(e)f(need)f(a)h(MathML)321 2600 y(complian)m(t)43 -b(bro)m(wser,)j(that)e(will)c(b)s(e)j(dev)m(elop)s(ed)f(as)h(a)h(part)f -(of)g(the)g(pro)5 b(ject)44 b(\(starting)f(from)g(a)321 -2713 y(previous)29 b(protot)m(yp)s(e\).)94 2898 y Fi(T4.2)46 -b Fl(Consultation)32 b(Engine)g(\(arc)m(hiving,)i(searc)m(hing)f(and)g -(retrieving\).)48 b(The)33 b(task)h(is)f(dev)m(oted)h(to)g(the)321 -3011 y(arc)m(hitectural)f(design)f(an)h(implemen)m(tation)f(of)h(the)g -(main)f(functionalities)e(for)j(the)g(consultation)321 -3124 y(and)d(the)h(managemen)m(t)g(of)g(the)g(library)-8 -b(.)94 3310 y Fi(T4.3)46 b Fl(Assisted)32 b(Annotation.)49 -b(This)31 b(co)m(v)m(er)k(an)e(additional)e(functionalit)m(y)h(of)h -(the)h(in)m(terface,)g(aimed)f(to)321 3423 y(supp)s(ort)c(the)h(user)g -(in)f(the)i(pro)s(cess)f(of)g(annotating)h(a)g(pro)s(of)e(in)g(natural) -h(language.)94 3608 y Fi(T4.4)46 b Fl(L)370 3591 y Ff(A)409 -3608 y Fl(T)460 3628 y(E)510 3608 y(X-based)20 b(authoring)g(to)s(ol.) -37 b(A)20 b(to)s(ol)h(supp)s(orting)c(automatic)22 b(generation)e(of)h -(Con)m(ten)m(t-MathML)321 3721 y(from)30 b(a)h(suitably)d -(\(macro-\)enric)m(hed)j(v)m(ersion)f(of)h(L)2100 3704 -y Ff(A)2139 3721 y Fl(T)2190 3741 y(E)2240 3721 y(X.)94 -4022 y Fi(Deliv)m(erables:)94 4204 y(D4.a)46 b Fl(MathML)31 -b(Rendering/Bro)m(wsing)e(engine;)94 4390 y Fi(D4.b)46 -b Fl(First)30 b(MO)m(W)m(GLI)h(Protot)m(yp)s(e;)94 4575 -y Fi(D4.c)46 b Fl(Protot)m(yp)s(e)32 b(functionalities)c(for)i -(assisted)g(annotation.)94 4761 y Fi(D4.d)46 b Fl(L)383 -4744 y Ff(A)422 4761 y Fl(T)473 4781 y(E)523 4761 y(X-based)31 -b(authoring)e(to)s(ol)i(\(\014rst)f(protot)m(yp)s(e\).)94 -4947 y Fi(D4.e)46 b Fl(Re\014ned)29 b(and)h(extended)h(proto)m(yp)s(e)f -(of)h(the)f(L)1907 4930 y Ff(A)1946 4947 y Fl(T)1997 -4966 y(E)2048 4947 y(X-based)g(authoring)f(to)s(ol)94 -5247 y Fi(Milestones)i(and)g(exp)s(ected)f(results:)39 -b Fl(The)26 b(main)g(milestone)g(is)g(the)g(release)h(of)g(the)g -(\014rst)f(MO)m(W)m(GLI)94 5360 y(protot)m(yp)s(e,)31 -b(at)g(mon)m(th)g(18.)p eop -%%Page: 24 24 -24 23 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(24)94 171 y Fi(9.3.6)105 b(Distribution)94 579 y(w)m(ork)35 -b(pac)m(k)-6 b(age)36 b(n)m(um)m(b)s(er:)k Fl(5)30 b(-)h(Distribution) -94 692 y Fi(Start)j(date)g(or)i(starting)e(ev)m(en)m(t:)41 -b Fl(mon)m(th)30 b(18)h(-)g(mon)m(th)f(30)94 993 y Fi(P)m(articipan)m -(t)35 b(Num)m(b)s(er:)479 b Fl(1)236 b(2)f(3)g(4)g(5)h(6)94 -1105 y Fi(P)m(erson-mon)m(th)35 b(p)s(er)g(participan)m(t:)40 -b Fl(6)236 b(5)f(8)g(3)g(5)h(0)94 1524 y Fi(Ob)6 b(jectiv)m(es:)48 -b Fl(Ov)m(erall)34 b(arc)m(hitectural)g(design)f(of)i(the)f -(distribution)d(mo)s(del,)j(its)g(implemen)m(tation)f(and)94 -1637 y(in)m(tegration)d(with)f(the)i(consultation)f(engine.)94 -1868 y Fi(Description)36 b(of)f(w)m(ork:)40 b Fl(The)30 -b(w)m(ork)h(is)e(articulated)h(in)f(three,)i(conceptually)f(sequen)m -(tial)f(tasks:)94 2056 y Fi(T5.1)46 b Fl(Arc)m(hitectural)29 -b(Design)h(of)h(the)f(Distribution)d(Mo)s(del.)40 b(The)30 -b(big)f(issue)g(it)g(to)i(\014nd)e(the)h(righ)m(t)g(com-)321 -2169 y(promise)h(b)s(et)m(w)m(een)h(t)m(w)m(o)h(opp)s(osite)e -(requiremen)m(ts:)42 b Fd(distribution)33 b Fl(\(in)e(the)g(sense)h(of) -g(the)g(W)-8 b(eb:)44 b(few)321 2282 y(rules,)28 b(no)g(cen)m(tral)h -(authorit)m(y\))f(and)g Fd(c)-5 b(oher)g(enc)g(e)30 b -Fl(\(coherence)g(b)s(et)m(w)m(een)f(di\013eren)m(t)f(copies)g(of)g(a)h -(same)321 2394 y(do)s(cumen)m(t)22 b(and)g(global)f(managemen)m(t)j(of) -e(the)h(library)d(as)i(a)h(single)e(rational)g(dev)m(elopmen)m(t\).)39 -b(Other)321 2507 y(arc)m(hitectural)24 b(problems)e(to)j(b)s(e)f(solv)m -(ed)f(are)i(the)f(managemen)m(t)h(of)g(Uniform)d(Resource)i(Iden)m -(ti\014ers,)321 2620 y(their)36 b(mapping)f(to)j(Uniform)d(Resource)i -(Lo)s(cators,)j(and)c(the)h(in)m(tegration)f(of)h(databases)h(in)d(the) -321 2733 y(distribution)23 b(mo)s(del.)39 b(The)26 b(\014nal)g(aim)g -(is)g(to)i(ha)m(v)m(e)g(a)f Fd(phisic)-5 b(al)5 b(ly)28 -b Fl(distributed)c(library)h(with)g(a)j(single)321 2846 -y Fd(lo)-5 b(gic)g(al)32 b Fl(view.)94 3034 y Fi(T5.2)46 -b Fl(Protot)m(yp)s(e)31 b(implemen)m(tation.)39 b(First)29 -b(protot)m(yping)h(implemen)m(tation)e(of)i(the)g(distribution)d(la)m -(y)m(er.)94 3221 y Fi(T5.3)46 b Fl(In)m(tegration)c(with)e(the)i -(Consultation)f(Engine.)73 b(First)42 b(implemen)m(tation)e(of)i(the)g -(library)d(as)j(a)321 3334 y(distributed)36 b(rep)s(ository)-8 -b(.)67 b(Distribution)36 b(should)h(b)s(e)i(completely)g(transparen)m -(t)g(to)h(users)e(of)h(the)321 3447 y(Consultation)29 -b(Engine.)94 3753 y Fi(Deliv)m(erables:)94 3941 y(D5.a)46 -b Fl(Ov)m(erall)29 b(Arc)m(hitectural)h(Design)g(of)h(the)g -(Distribution)c(Mo)s(del;)94 4128 y Fi(D5.b)46 b Fl(Adv)-5 -b(anced)30 b(MO)m(W)m(GLI)i(Protot)m(yp)s(e.)94 4434 -y Fi(Milestones)51 b(and)f(exp)s(ected)g(results:)67 -b Fl(The)43 b(main)f(milestone)h(is)f(the)i(release)g(of)g(the)f(adv)-5 -b(anced)94 4547 y(MO)m(W)m(GLI)45 b(protot)m(yp)s(e,)j(for)43 -b(the)h(fourth)e(meeting)i(of)g(the)g(pro)5 b(ject,)47 -b(at)d(mon)m(th)g(24.)81 b(The)43 b(adv)-5 b(anced)94 -4660 y(protot)m(yp)s(e)38 b(will)d(in)m(tegrate)j(the)g(previous)e(one) -h(with)f(the)i(new)f(distribution)d(facilities)h(o\013ered)j(b)m(y)f -(the)94 4773 y(distribution)27 b(la)m(y)m(er.)p eop -%%Page: 25 25 -25 24 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(25)94 171 y Fi(9.3.7)105 b(T)-9 b(esting)35 b(and)g(V)-9 -b(alidation)94 579 y(w)m(ork)35 b(pac)m(k)-6 b(age)36 -b(n)m(um)m(b)s(er:)k Fl(6)30 b(-)h(T)-8 b(esting)30 b(and)g(V)-8 -b(alidation)94 692 y Fi(Start)34 b(date)g(or)i(starting)e(ev)m(en)m(t:) -41 b Fl(mon)m(th)30 b(12)h(-)g(mon)m(th)f(30)94 993 y -Fi(P)m(articipan)m(t)35 b(Num)m(b)s(er:)479 b Fl(1)236 -b(2)f(3)g(4)g(5)h(6)94 1105 y Fi(P)m(erson-mon)m(th)35 -b(p)s(er)g(participan)m(t:)40 b Fl(5)236 b(6)f(3)g(17)190 -b(14)h(9)94 1524 y Fi(Ob)6 b(jectiv)m(es:)71 b Fl(The)45 -b(WP)g(in)m(tends)g(to)h(measure)f(the)h(system)g(suitabilit)m(y)c(and) -j(scalabilit)m(y)f(and)h(the)94 1637 y(satisfaction)30 -b(lev)m(el)g(of)h(users)e(with)g(the)i(service.)94 1868 -y Fi(Description)41 b(of)g(w)m(ork:)50 b Fl(Large)35 -b(scale)h(testing)f(and)f(v)-5 b(alidation)34 b(will)e(start)k(after)f -(the)h(release)f(of)g(the)94 1981 y(\014rst)30 b(MO)m(W)m(GLI)h(protot) -m(yp)s(e,)g(at)h(mon)m(th)e(18.)42 b(W)-8 b(e)31 b(shall)e(consider)g -(three)i(main)e(v)-5 b(alidation)29 b(tests:)94 2169 -y Fi(T6.1)46 b Fl(Education.)39 b(F)-8 b(ull)27 b(dev)m(elopmen)m(t)i -(of)g(a)g(fragmen)m(t)g(of)g(the)g(library)d(co)m(v)m(ering)j(a)g(t)m -(ypical)g(undergrad-)321 2282 y(uate)i(course)g(in)e(algebra)h(of)h -(analysis.)94 2469 y Fi(T6.2)46 b Fl(Certi\014ed)21 b(co)s(de.)39 -b(The)23 b(aim)f(is)g(to)i(b)s(e)e(able)h(to)h(presen)m(t)f(the)g -(formalization)f(and)h(the)g(demonstration)321 2582 y(of)j(some)g -(securit)m(y)f(prop)s(erties)f(related)i(to)g(the)g(co)s(de)f(em)m(b)s -(edded)g(in)m(to)g(a)h(smart)g(card.)39 b(The)25 b(presen-)321 -2695 y(tation)32 b(m)m(ust)f(b)s(e)g(in)f(a)i(format)f(understandable)f -(b)m(y)h(the)g(compan)m(y)h(in)e(c)m(harge)j(of)e(the)h(ev)-5 -b(aluation)321 2808 y(of)31 b(the)f(co)s(de)h(and)f(in)f(accordance)j -(with)d(the)h(Common)g(Criteria)f(standard.)94 2995 y -Fi(T6.3)46 b Fl(Electronic)24 b(Publishing.)35 b(The)24 -b(aim)h(is)f(to)h(test)h(the)f(L)2147 2979 y Ff(A)2186 -2995 y Fl(T)2237 3015 y(E)2288 2995 y(X-based)g(authoring)f(to)s(ol)h -(and)f(to)i(demon-)321 3108 y(strate)f(ho)m(w)e(an)h(electronic)g(ph)m -(ysics)e(journal)g(b)s(ene\014ts)h(from)g(the)h(exploitation)e(of)i -(con)m(ten)m(t)i(markup)321 3221 y(in)j(journal)g(articles.)94 -3527 y Fi(Deliv)m(erables:)94 3715 y(D6.a)46 b Fl(V)-8 -b(alidation)29 b(1:)41 b(Education.)94 3902 y Fi(D6.b)46 -b Fl(V)-8 b(alidation)29 b(2:)41 b(Do)s(cumen)m(ts)30 -b(describing)e(the)i(formalization)e(of)i(a)g(securit)m(y)g(function)e -(em)m(b)s(edded)321 4015 y(in)m(to)j(a)f(smart)h(card)f(and)g(the)g -(pro)s(of)g(that)h(the)f(co)s(de)h(meets)g(its)f(securit)m(y)g(ob)5 -b(jectiv)m(es.)94 4203 y Fi(D6.c)46 b Fl(V)-8 b(alidation)32 -b(3:)46 b(Journal)31 b(in)m(terface)i(with)e(added)h(functionalities)e -(due)i(to)h(con)m(ten)m(t)i(markup,)d(e.g.)321 4316 y(searc)m(h)f(in)m -(terface)94 4503 y Fi(D6.d)46 b Fl(Final)29 b(MO)m(W)m(GLI)j(Protot)m -(yp)s(e)94 4809 y Fi(Milestones)d(and)f(exp)s(ected)g(results:)38 -b Fl(W)-8 b(e)26 b(exp)s(ect)f(a)g(lot)f(of)h(feed-bac)m(k)h(during)c -(this)h(phase,)j(that)f(will)94 4922 y(b)s(e)34 b(tak)m(en)i(in)m(to)e -(accoun)m(t)i(for)e(the)h(de\014nition)d(of)j(the)g(adv)-5 -b(anced)35 b(and)e(\014nal)h(v)m(ersions)g(of)g(the)h(MO)m(W)m(GLI)94 -5035 y(protot)m(yp)s(e.)p eop -%%Page: 26 26 -26 25 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(26)94 171 y Fi(9.3.8)105 b(Information)34 b(Dissemination)h(and)g -(Exploitation)94 461 y(w)m(ork)g(pac)m(k)-6 b(age)36 -b(n)m(um)m(b)s(er:)k Fl(7)30 b(-)h(Information)e(Dissemination)g(and)h -(Exploitation)f(Plan)94 574 y Fi(Start)34 b(date)g(or)i(starting)e(ev)m -(en)m(t:)41 b Fl(mon)m(th)30 b(3)h(-)f(30)94 874 y Fi(P)m(articipan)m -(t)35 b(Num)m(b)s(er:)479 b Fl(1)236 b(2)f(3)g(4)g(5)h(6)94 -987 y Fi(P)m(erson-mon)m(th)35 b(p)s(er)g(participan)m(t:)40 -b Fl(1)236 b(0)f(0)g(1)g(6)h(0)94 1406 y Fi(Ob)6 b(jectiv)m(es:)40 -b Fl(The)30 b(w)m(ork)h(pac)m(k)-5 b(age)32 b(aims)e(to:)205 -1594 y(1.)46 b(in)m(v)m(olv)m(e)31 b(the)f(largest)h(comm)m(unit)m(y)f -(of)h(professionals)d(in)h(the)i(mo)s(delling)d(phase.)205 -1781 y(2.)46 b(promote)31 b(dissemination)d(of)i(pro)5 -b(ject)31 b(results)e(in)g(the)i(relev)-5 b(an)m(t)31 -b(in)m(ternational)e(forums.)205 1969 y(3.)46 b(promote)39 -b(the)g(use)f(of)h(the)g(service,)i(b)s(oth)c(for)i(educational)f(and)g -(professional)f(purp)s(oses.)63 b(This)321 2082 y(phase)30 -b(will)e(start)j(after)g(the)f(release)h(of)g(the)f(\014rst)g(protot)m -(yp)s(e,)h(at)g(mon)m(th)f(18.)94 2388 y Fi(Description)h(of)g(w)m -(ork:)38 b Fl(The)26 b(dissemination)e(of)i(results)f(is)g(in)g(c)m -(harge)j(of)e(the)h(Pro)5 b(ject)27 b(Dissemination)94 -2500 y(&)39 b(Exploitation)g(Committee,)j(whic)m(h)d(is)g(resp)s -(onsible)d(to)41 b(prepare,)h(during)37 b(the)j(\014rst)f(six)g(mon)m -(ths,)j(a)94 2613 y(detailed)29 b(dissemination)f(w)m(ork-plan)i -(\(D2\),)i(and)e(to)h(follo)m(w)e(its)h(execution)h(during)d(the)i(Pro) -5 b(ject.)235 2726 y(Information)25 b(dissemination)e(will)g(tak)m(e)28 -b(place)d(via)h(professional)e(journal)g(articles,)j(presen)m(tations)f -(at)94 2839 y(conferences,)j(in)m(ternational)d(news)h(groups,)h(sp)s -(eci\014c)e(in)m(terest)h(groups)g(and)g(so)h(on.)39 -b(Relev)-5 b(an)m(t)29 b(rep)s(orts)d(of)94 2952 y(the)31 -b(pro)5 b(jects)32 b(will)d(b)s(e)h(made)i(publicly)27 -b(a)m(v)-5 b(ailable)31 b(on)g(the)h(W)-8 b(orld)31 b(Wide)f(W)-8 -b(eb.)45 b(F)-8 b(or)32 b(adv)-5 b(anced)31 b(releases,)94 -3065 y(w)m(e)g(also)f(plan)f(to)i(prepare)f(an)g(\\information)f(pac)m -(k",)j(including)27 b(a)k(folder)e(and)h(CDR)m(OM)h(with)e(demos.)94 -3296 y Fi(Deliv)m(erables:)94 3484 y(D7.a)46 b Fl(Dissemination)28 -b(and)i(Use)h(Plan;)94 3671 y Fi(D7.b)46 b Fl(T)-8 b(ec)m(hnological)31 -b(Implemen)m(tation)e(Plan;)94 3859 y Fi(Articles)46 -b Fl(Scien)m(ti\014c)29 b(Publications)f(on)i(professional)f(journals)g -(and)h(conference)h(pro)s(ceedings.)94 4165 y Fi(Milestones)39 -b(and)g(exp)s(ected)g(results:)47 b Fl(Criteria)33 b(for)g(ev)-5 -b(aluating)34 b(MO)m(W)m(GLI's)h(dissemination)c(and)94 -4278 y(its)41 b(tec)m(hnological)i(impact)e(will)e(b)s(e)i(detailed)g -(in)g(the)h(Dissemination)e(and)h(use)g(Plan.)74 b(The)42 -b(Pro)5 b(ject)94 4390 y(Dissemination)19 b(&)h(Exploitation)f -(Committee)i(will)d(b)s(e)i(in)f(c)m(harge)j(to)f(monitor)f(the)h -(state)h(of)e(adv)-5 b(ancemen)m(t)94 4503 y(of)31 b(the)f(Pro)5 -b(ject)31 b(according)g(to)g(these)g(criteria.)p eop -%%Page: 27 27 -27 26 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(27)94 171 y Fg(9.4)112 b(Deliv)m(erable)36 b(list)f(b)m(y)j(W)-9 -b(orkP)m(ac)m(k)j(age)p 94 379 3888 4 v 92 492 4 113 -v 144 458 a Fl(n.)p 313 492 V 145 w(Deliv)m(erable)29 -b(Title)p 1957 492 V 978 w(WP)p 2212 492 V 100 w(Lead)p -2618 492 V 213 w(Estim.)p 3009 492 V 131 w(T)m(yp)s(e)p -3313 492 V 99 w(Secu-)p 3625 492 V 100 w(Deliv.)p 3980 -492 V 92 605 V 313 605 V 1957 605 V 2009 571 a(no.)p -2212 605 V 134 w(P)m(artic.)p 2618 605 V 140 w(p)s(erson-)p -3009 605 V 3313 605 V 403 w(rit)m(y)p 3625 605 V 170 -w(mon)m(th)p 3980 605 V 92 718 V 313 718 V 1957 718 V -2212 718 V 2618 718 V 2670 684 a(mon)m(th)p 3009 718 -V 3313 718 V 3625 718 V 3980 718 V 94 721 3888 4 v 92 -834 4 113 v 144 800 a(0.a)p 313 834 V 106 w(Self-Assesmen)m(t)p -1957 834 V 1054 w(0)p 2212 834 V 210 w(UNIBO)p 2618 834 -V 102 w(2)p 3009 834 V 346 w(R)p 3313 834 V 237 w(Pub)p -3625 834 V 148 w(6)p 3980 834 V 92 947 V 313 947 V 365 -913 a(parameters)h(and)g(criteria.)p 1957 947 V 2212 -947 V 2618 947 V 3009 947 V 3313 947 V 3625 947 V 3980 -947 V 94 950 3888 4 v 92 1063 4 113 v 144 1029 a(0.b)p -313 1063 V 100 w(First)f(Self-Assesmen)m(t)i(Rep)s(ort)p -1957 1063 V 525 w(0)p 2212 1063 V 210 w(UNIBO)p 2618 -1063 V 102 w(1)p 3009 1063 V 346 w(R)p 3313 1063 V 237 -w(Pub)p 3625 1063 V 148 w(12)p 3980 1063 V 94 1067 3888 -4 v 92 1179 4 113 v 144 1146 a(0.c)p 313 1179 V 111 w(Second)f -(Self-Assesmen)m(t)g(Rep)s(ort)p 1957 1179 V 439 w(0)p -2212 1179 V 210 w(UNIBO)p 2618 1179 V 102 w(1)p 3009 -1179 V 346 w(R)p 3313 1179 V 237 w(Pub)p 3625 1179 V -148 w(20)p 3980 1179 V 94 1183 3888 4 v 92 1296 4 113 -v 144 1262 a(0.d)p 313 1296 V 100 w(Final)f(Self-Assesmen)m(t)h(Rep)s -(ort)p 1957 1296 V 511 w(0)p 2212 1296 V 210 w(UNIBO)p -2618 1296 V 102 w(1)p 3009 1296 V 346 w(R)p 3313 1296 -V 237 w(Pub)p 3625 1296 V 148 w(30)p 3980 1296 V 94 1299 -3888 4 v 92 1412 4 113 v 144 1378 a(1.a)p 313 1412 V -106 w(Preliminary)d(Rep)s(ort)j(on)g(Application)p 1957 -1412 V 248 w(1)p 2212 1412 V 210 w(KUN)p 2618 1412 V -199 w(6)p 3009 1412 V 346 w(R)p 3313 1412 V 237 w(Pub)p -3625 1412 V 148 w(3)p 3980 1412 V 92 1525 V 313 1525 -V 365 1491 a(Scenarios)f(and)h(Requiremen)m(t)g(Analysis)p -1957 1525 V 2212 1525 V 2618 1525 V 3009 1525 V 3313 -1525 V 3625 1525 V 3980 1525 V 94 1528 3888 4 v 92 1641 -4 113 v 144 1607 a(1.b)p 313 1641 V 100 w(Structure)f(and)h -(Metastructure)h(of)p 1957 1641 V 396 w(1)p 2212 1641 -V 210 w(DFKI)p 2618 1641 V 174 w(8)p 3009 1641 V 346 -w(R)p 3313 1641 V 237 w(Pub)p 3625 1641 V 148 w(6)p 3980 -1641 V 92 1754 V 313 1754 V 365 1720 a(Mathematical)g(Do)s(cumen)m(ts)p -1957 1754 V 2212 1754 V 2618 1754 V 3009 1754 V 3313 -1754 V 3625 1754 V 3980 1754 V 94 1757 3888 4 v 92 1870 -4 113 v 144 1836 a(1.c)p 313 1870 V 111 w(Distributed)d(Digital)i -(Libraries:)p 1957 1870 V 480 w(1)p 2212 1870 V 210 w(MPG)p -2618 1870 V 190 w(6)p 3009 1870 V 346 w(R)p 3313 1870 -V 237 w(Pub)p 3625 1870 V 148 w(6)p 3980 1870 V 92 1983 -V 313 1983 V 365 1949 a(dev)m(elopmen)m(t,)h(arc)m(hiving,)e -(retrieving.)p 1957 1983 V 2212 1983 V 2618 1983 V 3009 -1983 V 3313 1983 V 3625 1983 V 3980 1983 V 94 1986 3888 -4 v 92 2099 4 113 v 144 2065 a(2.a)p 313 2099 V 106 w(XML)h(Exp)s -(ortation)g(Mo)s(dule\(s\))p 1957 2099 V 489 w(2)p 2212 -2099 V 210 w(INRIA)p 2618 2099 V 137 w(4)p 3009 2099 -V 346 w(P)p 3313 2099 V 242 w(Pub)p 3625 2099 V 148 w(6)p -3980 2099 V 94 2103 3888 4 v 92 2216 4 113 v 144 2182 -a(2.b)p 313 2216 V 100 w(Do)s(cumen)m(t)h(T)m(yp)s(e)f(Descriptors)p -1957 2216 V 521 w(2)p 2212 2216 V 210 w(INRIA)p 2618 -2216 V 137 w(2)p 3009 2216 V 346 w(R)p 3313 2216 V 237 -w(Pub)p 3625 2216 V 148 w(12)p 3980 2216 V 94 2219 3888 -4 v 92 2332 4 113 v 144 2298 a(2.c)p 313 2332 V 111 w(St)m(ylesheets)g -(to)h(In)m(termediate)p 1957 2332 V 563 w(2)p 2212 2332 -V 210 w(UNIBO)p 2618 2332 V 102 w(7)p 3009 2332 V 346 -w(P)p 3313 2332 V 242 w(Pub)p 3625 2332 V 148 w(12)p -3980 2332 V 92 2445 V 313 2445 V 365 2411 a(represen)m(tation)f(\(form) -m(ulae\))p 1957 2445 V 2212 2445 V 2618 2445 V 3009 2445 -V 3313 2445 V 3625 2445 V 3980 2445 V 94 2448 3888 4 -v 92 2561 4 113 v 144 2527 a(2.d)p 313 2561 V 100 w(St)m(ylesheets)g -(to)h(In)m(termediate)p 1957 2561 V 563 w(2)p 2212 2561 -V 210 w(UNIBO)p 2618 2561 V 102 w(9)p 3009 2561 V 346 -w(P)p 3313 2561 V 242 w(Pub)p 3625 2561 V 148 w(12)p -3980 2561 V 92 2674 V 313 2674 V 365 2640 a(represen)m(tation)f(\(pro)s -(ofs\))p 1957 2674 V 2212 2674 V 2618 2674 V 3009 2674 -V 3313 2674 V 3625 2674 V 3980 2674 V 94 2677 3888 4 -v 92 2790 4 113 v 144 2756 a(2.e)p 313 2790 V 111 w(Presen)m(tational)g -(St)m(ylesheets)h(\(form)m(ulae\))p 1957 2790 V 164 w(2)p -2212 2790 V 210 w(KUN)p 2618 2790 V 199 w(4)p 3009 2790 -V 346 w(P)p 3313 2790 V 242 w(Pub)p 3625 2790 V 148 w(18)p -3980 2790 V 94 2793 3888 4 v 92 2906 4 113 v 144 2872 -a(2.f)p 313 2906 V 123 w(Presen)m(tational)f(St)m(ylesheets)h(\(pro)s -(ofs\))p 1957 2906 V 264 w(2)p 2212 2906 V 210 w(KUN)p -2618 2906 V 199 w(6)p 3009 2906 V 346 w(P)p 3313 2906 -V 242 w(Pub)p 3625 2906 V 148 w(18)p 3980 2906 V 94 2910 -3888 4 v 92 3023 4 113 v 144 2989 a(2.g)p 313 3023 V -106 w(T)-8 b(o)s(ols)30 b(for)g(metadata)i(extraction)p -1957 3023 V 457 w(2)p 2212 3023 V 210 w(INRIA)p 2618 -3023 V 137 w(4)p 3009 3023 V 346 w(P)p 3313 3023 V 242 -w(Pub)p 3625 3023 V 148 w(18)p 3980 3023 V 94 3026 3888 -4 v 92 3139 4 113 v 144 3105 a(3.a)p 313 3139 V 106 w(Rep)s(ort)e(on)g -(Metadata)j(for)p 1957 3139 V 690 w(3)p 2212 3139 V 210 -w(DFKI)p 2618 3139 V 174 w(9)p 3009 3139 V 346 w(R)p -3313 3139 V 237 w(Pub)p 3625 3139 V 148 w(12)p 3980 3139 -V 92 3252 V 313 3252 V 365 3218 a(Mathematical)e(Libraries)p -1957 3252 V 2212 3252 V 2618 3252 V 3009 3252 V 3313 -3252 V 3625 3252 V 3980 3252 V 94 3255 3888 4 v 92 3368 -4 113 v 144 3334 a(3.b)p 313 3368 V 100 w(Metadata)h(Mo)s(del)p -1957 3368 V 985 w(3)p 2212 3368 V 210 w(DFKI)p 2618 3368 -V 174 w(11)p 3009 3368 V 301 w(R)p 3313 3368 V 237 w(Pub)p -3625 3368 V 148 w(12)p 3980 3368 V 94 3371 3888 4 v 92 -3484 4 113 v 144 3450 a(4.a)p 313 3484 V 106 w(First)d(Protot)m(yp)s(e) -j(implemen)m(tation)d(of)p 1957 3484 V 272 w(4)p 2212 -3484 V 210 w(UNIBO)p 2618 3484 V 102 w(16)p 3009 3484 -V 301 w(P)p 3313 3484 V 242 w(Pub)p 3625 3484 V 148 w(12)p -3980 3484 V 92 3597 V 313 3597 V 365 3563 a(Rendering)f(Engines)i(for)g -(MathML)p 1957 3597 V 2212 3597 V 2618 3597 V 3009 3597 -V 3313 3597 V 3625 3597 V 3980 3597 V 94 3600 3888 4 -v 92 3713 4 113 v 144 3679 a(4.b)p 313 3713 V 100 w Fi(First)k(MO)m(W)m -(GLI)h(Protot)m(yp)s(e)p 1957 3713 V 429 w Fl(4)p 2212 -3713 V 210 w(INRIA)p 2618 3713 V 137 w(15)p 3009 3713 -V 301 w(P)p 3313 3713 V 242 w(Pub)p 3625 3713 V 148 w(18)p -3980 3713 V 92 3826 V 313 3826 V 365 3792 a(\(bro)m(wsing,)29 -b(rendering)g(and)h(consultation\))p 1957 3826 V 2212 -3826 V 2618 3826 V 3009 3826 V 3313 3826 V 3625 3826 -V 3980 3826 V 94 3829 3888 4 v 92 3942 4 113 v 144 3909 -a(4.c)p 313 3942 V 111 w(Protot)m(yp)s(e)h(for)f(assisted)g(annotation) -p 1957 3942 V 313 w(4)p 2212 3942 V 210 w(UNIBO)p 2618 -3942 V 102 w(7)p 3009 3942 V 346 w(P)p 3313 3942 V 242 -w(Pub)p 3625 3942 V 148 w(18)p 3980 3942 V 94 3946 3888 -4 v 92 4059 4 113 v 144 4025 a(4.d)p 313 4059 V 100 w(L)389 -4008 y Ff(A)428 4025 y Fl(T)479 4044 y(E)529 4025 y(X-based)g -(authoring)g(to)s(ol)p 1957 4059 V 560 w(4)p 2212 4059 -V 210 w(MPG)p 2618 4059 V 190 w(9)p 3009 4059 V 346 w(P)p -3313 4059 V 242 w(Pub)p 3625 4059 V 148 w(18)p 3980 4059 -V 94 4062 3888 4 v 92 4175 4 113 v 144 4141 a(4.e)p 313 -4175 V 111 w(Extended)f(L)796 4124 y Ff(A)835 4141 y -Fl(T)886 4161 y(E)937 4141 y(X-authoring)h(protot)m(yp)s(e)p -1957 4175 V 173 w(4)p 2212 4175 V 210 w(MPG)p 2618 4175 -V 190 w(8)p 3009 4175 V 346 w(P)p 3313 4175 V 242 w(Pub)p -3625 4175 V 148 w(24)p 3980 4175 V 94 4178 3888 4 v 92 -4291 4 113 v 144 4257 a(5.a)p 313 4291 V 106 w(Ov)m(erall)f(Arc)m -(hitectural)h(Design)g(of)p 1957 4291 V 400 w(5)p 2212 -4291 V 210 w(DFKI)p 2618 4291 V 174 w(11)p 3009 4291 -V 301 w(R)p 3313 4291 V 237 w(Pub)p 3625 4291 V 148 w(18)p -3980 4291 V 92 4404 V 313 4404 V 365 4370 a(the)g(distribution)d(Mo)s -(del)p 1957 4404 V 2212 4404 V 2618 4404 V 3009 4404 -V 3313 4404 V 3625 4404 V 3980 4404 V 94 4407 3888 4 -v 92 4520 4 113 v 144 4486 a(5.b)p 313 4520 V 100 w Fi(Adv)-6 -b(anced)35 b(MO)m(W)m(GLI)g(Protot)m(yp)s(e)p 1957 4520 -V 201 w Fl(5)p 2212 4520 V 210 w(DFKI)p 2618 4520 V 174 -w(16)p 3009 4520 V 301 w(P)p 3313 4520 V 242 w(Pub)p -3625 4520 V 148 w(24)p 3980 4520 V 92 4633 V 313 4633 -V 365 4599 a(\(distribution\))p 1957 4633 V 2212 4633 -V 2618 4633 V 3009 4633 V 3313 4633 V 3625 4633 V 3980 -4633 V 94 4636 3888 4 v 92 4749 4 113 v 144 4715 a(6.a)p -313 4749 V 106 w(V)-8 b(alidation)29 b(1:)41 b(MO)m(W)m(GLI)32 -b(for)e(education)p 1957 4749 V 137 w(6)p 2212 4749 V -210 w(KUN)p 2618 4749 V 199 w(16)p 3009 4749 V 301 w(R)p -3313 4749 V 237 w(Pub)p 3625 4749 V 148 w(30)p 3980 4749 -V 94 4753 3888 4 v 92 4866 4 113 v 144 4832 a(6.b)p 313 -4866 V 100 w(V)-8 b(alidation)29 b(2:)41 b(MO)m(W)m(GLI)32 -b(and)p 1957 4866 V 513 w(6)p 2212 4866 V 210 w(T)-8 -b(rusted)p 2618 4866 V 99 w(9)p 3009 4866 V 346 w(R)p -3313 4866 V 237 w(Pub)p 3625 4866 V 148 w(30)p 3980 4866 -V 92 4979 V 313 4979 V 365 4945 a(smart)30 b(card)g(securit)m(y)p -1957 4979 V 2212 4979 V 1130 w(Logic)p 2618 4979 V 3009 -4979 V 3313 4979 V 3625 4979 V 3980 4979 V 94 4982 3888 -4 v 92 5095 4 113 v 144 5061 a(6.c)p 313 5095 V 111 w(V)-8 -b(alidation)29 b(3:)41 b(Journal)29 b(in)m(terface)p -1957 5095 V 426 w(6)p 2212 5095 V 210 w(MPG)p 2618 5095 -V 190 w(14)p 3009 5095 V 301 w(P)p 3313 5095 V 242 w(Pub)p -3625 5095 V 148 w(30)p 3980 5095 V 94 5098 3888 4 v 92 -5211 4 113 v 144 5177 a(6.d)p 313 5211 V 100 w Fi(Final)34 -b(MO)m(W)m(GLI)h(Protot)m(yp)s(e)p 1957 5211 V 416 w -Fl(6)p 2212 5211 V 210 w(UNIBO)p 2618 5211 V 102 w(12)p -3009 5211 V 301 w(P)p 3313 5211 V 242 w(Pub)p 3625 5211 -V 148 w(30)p 3980 5211 V 94 5214 3888 4 v 92 5327 4 113 -v 144 5293 a(7.a)p 313 5327 V 106 w(Dissemination)28 -b(and)i(Use)h(Plan)p 1957 5327 V 518 w(7)p 2212 5327 -V 210 w(MPG)p 2618 5327 V 190 w(3)p 3009 5327 V 346 w(R)p -3313 5327 V 237 w(Pub)p 3625 5327 V 148 w(6)p 3980 5327 -V 94 5331 3888 4 v 92 5443 4 113 v 144 5410 a(7.b)p 313 -5443 V 100 w(T)-8 b(ec)m(hnological)30 b(Implemen)m(tation)g(Plan)p -1957 5443 V 238 w(7)p 2212 5443 V 210 w(MPG)p 2618 5443 -V 190 w(3)p 3009 5443 V 346 w(P)p 3313 5443 V 242 w(Pub)p -3625 5443 V 148 w(30)p 3980 5443 V 94 5447 3888 4 v 94 -5463 V 92 5576 4 113 v 144 5542 a Fc(R)c Fl(=Rep)s(ort,)k -Fc(P)38 b Fl(=Protot)m(yp)s(e,)31 b(Pub=Public)p 3980 -5576 V 94 5580 3888 4 v eop -%%Page: 28 28 -28 27 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(28)748 171 y Fj(W)-11 b(ork)44 b(pac)l(k)-7 b(age)46 -b(list)g(and)e(team)i(in)l(v)l(olv)l(emen)l(t)94 384 -y Fl(UNIBO)31 b(=)f(1)94 497 y(INRIA)g(=)g(2)94 610 y(DFKI)h(=)f(3)94 -723 y(KUN)g(=)g(4)94 835 y(MPG)h(=)f(5)94 948 y(T)-8 -b(rusted)30 b(Logic)g(=)g(6)94 1161 y(Ov)m(erview)g(o)m(v)m(er)h(the)g -(W)-8 b(ork)31 b(pac)m(k)-5 b(ages)p 192 1399 3501 4 -v 190 1512 4 113 v 242 1478 a(n.)p 366 1512 V 100 w(Title)p -1651 1512 V 1092 w(Lead)p 2006 1512 V 161 w(P)m(erson-)p -2403 1512 V 101 w(Start-)p 2758 1512 V 122 w(End-)p 3112 -1512 V 161 w(Deliv)m(erables)p 3691 1512 V 190 1625 V -366 1625 V 1651 1625 V 1703 1591 a(Con)m(tr.)p 2006 1625 -V 99 w(mon)m(ths)p 2403 1625 V 107 w(mon)m(th)p 2758 -1625 V 99 w(mon)m(th)p 3112 1625 V 3691 1625 V 192 1628 -3501 4 v 190 1741 4 113 v 242 1707 a(0)p 366 1741 V 131 -w(Pro)5 b(ject)31 b(Managemen)m(t)p 1651 1741 V 455 w(1)p -2006 1741 V 309 w(8)p 2403 1741 V 353 w(0)p 2758 1741 -V 309 w(30)p 3112 1741 V 265 w(a,b,c,d)p 3691 1741 V -192 1745 3501 4 v 190 1858 4 113 v 242 1824 a(1)p 366 -1858 V 131 w(Requiremen)m(t)e(Analysis)p 1651 1858 V -413 w(4)p 2006 1858 V 309 w(20)p 2403 1858 V 308 w(0)p -2758 1858 V 309 w(6)p 3112 1858 V 310 w(a,b,c)p 3691 -1858 V 192 1861 3501 4 v 190 1974 4 113 v 242 1940 a(2)p -366 1974 V 131 w(T)-8 b(ransformation)p 1651 1974 V 672 -w(1)p 2006 1974 V 309 w(34)p 2403 1974 V 308 w(3)p 2758 -1974 V 309 w(21)p 3112 1974 V 265 w(a,b,c,d,e,f,g)p 3691 -1974 V 192 1977 3501 4 v 190 2090 4 113 v 242 2056 a(3)p -366 2090 V 131 w(Metadata)p 1651 2090 V 906 w(3)p 2006 -2090 V 309 w(20)p 2403 2090 V 308 w(6)p 2758 2090 V 309 -w(21)p 3112 2090 V 265 w(a,b)p 3691 2090 V 192 2093 3501 -4 v 190 2206 4 113 v 242 2172 a(4)p 366 2206 V 131 w(In)m(terfaces)p -1651 2206 V 904 w(2)p 2006 2206 V 309 w(55)p 2403 2206 -V 308 w(3)p 2758 2206 V 309 w(24)p 3112 2206 V 265 w(a,b,c,d,e)p -3691 2206 V 192 2210 3501 4 v 190 2322 4 113 v 242 2289 -a(5)p 366 2322 V 131 w(Distribution)p 1651 2322 V 798 -w(3)p 2006 2322 V 309 w(27)p 2403 2322 V 308 w(9)p 2758 -2322 V 309 w(27)p 3112 2322 V 265 w(a,b)p 3691 2322 V -192 2326 3501 4 v 190 2439 4 113 v 242 2405 a(6)p 366 -2439 V 131 w(T)g(esting)30 b(and)g(V)-8 b(alidation)p -1651 2439 V 377 w(4)p 2006 2439 V 309 w(54)p 2403 2439 -V 308 w(12)p 2758 2439 V 264 w(30)p 3112 2439 V 265 w(a,b,c,d)p -3691 2439 V 192 2442 3501 4 v 190 2555 4 113 v 242 2521 -a(7)p 366 2555 V 131 w(Dissemination)28 b(&)i(Exploitation)p -1651 2555 V 99 w(5)p 2006 2555 V 309 w(8)p 2403 2555 -V 353 w(3)p 2758 2555 V 309 w(30)p 3112 2555 V 265 w(a,b)p -3691 2555 V 192 2558 3501 4 v 190 2671 4 113 v 940 2637 -a(TOT)-8 b(AL)p 2006 2671 V 797 w(226)p 2403 2671 V 2403 -2671 V 3691 2671 V 192 2675 3501 4 v 94 3062 a(In)m(v)m(olv)m(emen)m(t) -32 b(b)m(y)e(Researc)m(h)h(T)-8 b(eam)31 b(\(leader)f(in)g(b)s -(oldface\))p 888 3300 2111 4 v 886 3413 4 113 v 937 3379 -a(T)-8 b(eam)p 1205 3413 V 1205 3413 V 514 w(W)g(ork)31 -b(P)m(ac)m(k)-5 b(age)p 2693 3413 V 2710 3413 V 532 w(total)p -2996 3413 V 888 3417 2111 4 v 886 3529 4 113 v 937 3496 -a(n.)p 1205 3529 V 244 w(0)p 1357 3529 V 107 w(1)p 1548 -3529 V 145 w(2)p 1752 3529 V 159 w(3)p 1942 3529 V 146 -w(4)p 2147 3529 V 159 w(5)p 2337 3529 V 146 w(6)p 2541 -3529 V 159 w(7)p 2693 3529 V 2710 3529 V 2996 3529 V -888 3533 2111 4 v 888 3549 V 886 3662 4 113 v 937 3628 -a(1)p 1205 3662 V 275 w Fi(8)p 1357 3662 V 100 w Fl(3)p -1548 3662 V 145 w Fi(13)p 1752 3662 V 100 w Fl(3)p 1942 -3662 V 146 w(16)p 2147 3662 V 114 w(6)p 2337 3662 V 146 -w(5)p 2541 3662 V 159 w(1)p 2693 3662 V 2710 3662 V 123 -w(55)p 2996 3662 V 888 3666 2111 4 v 886 3779 4 113 v -937 3745 a(2)p 1205 3779 V 275 w(0)p 1357 3779 V 107 -w(4)p 1548 3779 V 145 w(4)p 1752 3779 V 159 w(3)p 1942 -3779 V 146 w Fi(16)p 2147 3779 V 100 w Fl(5)p 2337 3779 -V 146 w(6)p 2541 3779 V 159 w(0)p 2693 3779 V 2710 3779 -V 123 w(38)p 2996 3779 V 888 3782 2111 4 v 886 3895 4 -113 v 937 3861 a(3)p 1205 3895 V 275 w(0)p 1357 3895 -V 107 w(3)p 1548 3895 V 145 w(3)p 1752 3895 V 159 w Fi(8)p -1942 3895 V 139 w Fl(5)p 2147 3895 V 159 w Fi(8)p 2337 -3895 V 139 w Fl(3)p 2541 3895 V 159 w(0)p 2693 3895 V -2710 3895 V 123 w(30)p 2996 3895 V 888 3898 2111 4 v -886 4011 4 113 v 937 3977 a(4)p 1205 4011 V 275 w(0)p -1357 4011 V 107 w Fi(6)p 1548 4011 V 138 w Fl(11)p 1752 -4011 V 114 w(3)p 1942 4011 V 146 w(4)p 2147 4011 V 159 -w(3)p 2337 4011 V 146 w Fi(17)p 2541 4011 V 100 w Fl(1)p -2693 4011 V 2710 4011 V 123 w(45)p 2996 4011 V 888 4014 -2111 4 v 886 4127 4 113 v 937 4093 a(5)p 1205 4127 V -275 w(0)p 1357 4127 V 107 w(3)p 1548 4127 V 145 w(3)p -1752 4127 V 159 w(3)p 1942 4127 V 146 w(14)p 2147 4127 -V 114 w(5)p 2337 4127 V 146 w(14)p 2541 4127 V 114 w -Fi(6)p 2693 4127 V 2710 4127 V 116 w Fl(48)p 2996 4127 -V 888 4131 2111 4 v 886 4243 4 113 v 937 4210 a(6)p 1205 -4243 V 275 w(0)p 1357 4243 V 107 w(1)p 1548 4243 V 145 -w(0)p 1752 4243 V 159 w(0)p 1942 4243 V 146 w(0)p 2147 -4243 V 159 w(0)p 2337 4243 V 146 w(9)p 2541 4243 V 159 -w(0)p 2693 4243 V 2710 4243 V 123 w(10)p 2996 4243 V -888 4247 2111 4 v 888 4263 V 886 4376 4 113 v 937 4342 -a(total)p 1205 4376 V 134 w(8)p 1357 4376 V 107 w(20)p -1548 4376 V 100 w(34)p 1752 4376 V 114 w(20)p 1942 4376 -V 101 w(55)p 2147 4376 V 114 w(27)p 2337 4376 V 101 w(54)p -2541 4376 V 114 w(8)p 2693 4376 V 2710 4376 V 123 w(226)p -2996 4376 V 888 4380 2111 4 v 94 4625 a(The)29 b(total)g(of)g(226)i -(m.m.)40 b(comprises)28 b(59)i(m.m.)40 b(of)29 b(p)s(ermanen)m(t)f -(sta\013)i(w)m(ork)f(for)g(the)g(four)f(sites)h(under)e(an)94 -4738 y(Additional)34 b(Cost)i(Regime:)52 b(UNIBO)36 b(\(17)h(m.m\),)h -(DFKI)e(\(9)h(m.m\),)g(KUN)f(\(15)h(m.m\))f(and)g(MPG)g(\(18)94 -4851 y(m.m\).)p eop -%%Page: 29 29 -29 28 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(29)94 171 y Fg(9.5)112 b(Pro)6 b(ject)37 b(Planning)g(and)h -(timetable)94 3861 y @beginspecial 0 @llx 0 @lly 497 -@urx 471 @ury 4437 @rwi @setspecial -%%BeginDocument: gantt_new.eps -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: gantt_new.eps -%%Creator: fig2dev Version 3.2 Patchlevel 3a -%%CreationDate: Mon Jul 2 13:23:36 2001 -%%For: asperti@marcello (Andrea Asperti, docente, 2094505) -%%BoundingBox: 0 0 497 471 -%%Magnification: 0.8000 -%%EndComments -/MyAppDict 100 dict dup begin def -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 471 moveto 0 0 lineto 497 0 lineto 497 471 lineto closepath clip newpath --24.0 492.0 translate -1 -1 scale - -% This junk string is used by the show operators -/PATsstr 1 string def -/PATawidthshow { % cx cy cchar rx ry string - % Loop over each character in the string - { % cx cy cchar rx ry char - % Show the character - dup % cx cy cchar rx ry char char - PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) - false charpath % cx cy cchar rx ry char - /clip load PATdraw - % Move past the character (charpath modified the - % current point) - currentpoint % cx cy cchar rx ry char x y - newpath - moveto % cx cy cchar rx ry char - % Reposition by cx,cy if the character in the string is cchar - 3 index eq { % cx cy cchar rx ry - 4 index 4 index rmoveto - } if - % Reposition all characters by rx ry - 2 copy rmoveto % cx cy cchar rx ry - } forall - pop pop pop pop pop % - - currentpoint - newpath - moveto -} bind def -/PATcg { - 7 dict dup begin - /lw currentlinewidth def - /lc currentlinecap def - /lj currentlinejoin def - /ml currentmiterlimit def - /ds [ currentdash ] def - /cc [ currentrgbcolor ] def - /cm matrix currentmatrix def - end -} bind def -% PATdraw - calculates the boundaries of the object and -% fills it with the current pattern -/PATdraw { % proc - save exch - PATpcalc % proc nw nh px py - 5 -1 roll exec % nw nh px py - newpath - PATfill % - - restore -} bind def -% PATfill - performs the tiling for the shape -/PATfill { % nw nh px py PATfill - - PATDict /CurrentPattern get dup begin - setfont - % Set the coordinate system to Pattern Space - PatternGState PATsg - % Set the color for uncolored pattezns - PaintType 2 eq { PATDict /PColor get PATsc } if - % Create the string for showing - 3 index string % nw nh px py str - % Loop for each of the pattern sources - 0 1 Multi 1 sub { % nw nh px py str source - % Move to the starting location - 3 index 3 index % nw nh px py str source px py - moveto % nw nh px py str source - % For multiple sources, set the appropriate color - Multi 1 ne { dup PC exch get PATsc } if - % Set the appropriate string for the source - 0 1 7 index 1 sub { 2 index exch 2 index put } for pop - % Loop over the number of vertical cells - 3 index % nw nh px py str nh - { % nw nh px py str - currentpoint % nw nh px py str cx cy - 2 index show % nw nh px py str cx cy - YStep add moveto % nw nh px py str - } repeat % nw nh px py str - } for - 5 { pop } repeat - end -} bind def - -% PATkshow - kshow with the current pattezn -/PATkshow { % proc string - exch bind % string proc - 1 index 0 get % string proc char - % Loop over all but the last character in the string - 0 1 4 index length 2 sub { - % string proc char idx - % Find the n+1th character in the string - 3 index exch 1 add get % string proe char char+1 - exch 2 copy % strinq proc char+1 char char+1 char - % Now show the nth character - PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) - false charpath % string proc char+1 char char+1 - /clip load PATdraw - % Move past the character (charpath modified the current point) - currentpoint newpath moveto - % Execute the user proc (should consume char and char+1) - mark 3 1 roll % string proc char+1 mark char char+1 - 4 index exec % string proc char+1 mark... - cleartomark % string proc char+1 - } for - % Now display the last character - PATsstr dup 0 4 -1 roll put % string proc (char+1) - false charpath % string proc - /clip load PATdraw - neewath - pop pop % - -} bind def -% PATmp - the makepattern equivalent -/PATmp { % patdict patmtx PATmp patinstance - exch dup length 7 add % We will add 6 new entries plus 1 FID - dict copy % Create a new dictionary - begin - % Matrix to install when painting the pattern - TilingType PATtcalc - /PatternGState PATcg def - PatternGState /cm 3 -1 roll put - % Check for multi pattern sources (Level 1 fast color patterns) - currentdict /Multi known not { /Multi 1 def } if - % Font dictionary definitions - /FontType 3 def - % Create a dummy encoding vector - /Encoding 256 array def - 3 string 0 1 255 { - Encoding exch dup 3 index cvs cvn put } for pop - /FontMatrix matrix def - /FontBBox BBox def - /BuildChar { - mark 3 1 roll % mark dict char - exch begin - Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] - PaintType 2 eq Multi 1 ne or - { XStep 0 FontBBox aload pop setcachedevice } - { XStep 0 setcharwidth } ifelse - currentdict % mark [paintdata] dict - /PaintProc load % mark [paintdata] dict paintproc - end - gsave - false PATredef exec true PATredef - grestore - cleartomark % - - } bind def - currentdict - end % newdict - /foo exch % /foo newlict - definefont % newfont -} bind def -% PATpcalc - calculates the starting point and width/height -% of the tile fill for the shape -/PATpcalc { % - PATpcalc nw nh px py - PATDict /CurrentPattern get begin - gsave - % Set up the coordinate system to Pattern Space - % and lock down pattern - PatternGState /cm get setmatrix - BBox aload pop pop pop translate - % Determine the bounding box of the shape - pathbbox % llx lly urx ury - grestore - % Determine (nw, nh) the # of cells to paint width and height - PatHeight div ceiling % llx lly urx qh - 4 1 roll % qh llx lly urx - PatWidth div ceiling % qh llx lly qw - 4 1 roll % qw qh llx lly - PatHeight div floor % qw qh llx ph - 4 1 roll % ph qw qh llx - PatWidth div floor % ph qw qh pw - 4 1 roll % pw ph qw qh - 2 index sub cvi abs % pw ph qs qh-ph - exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph - % Determine the starting point of the pattern fill - %(px, py) - 4 2 roll % nw nh pw ph - PatHeight mul % nw nh pw py - exch % nw nh py pw - PatWidth mul exch % nw nh px py - end -} bind def - -% Save the original routines so that we can use them later on -/oldfill /fill load def -/oldeofill /eofill load def -/oldstroke /stroke load def -/oldshow /show load def -/oldashow /ashow load def -/oldwidthshow /widthshow load def -/oldawidthshow /awidthshow load def -/oldkshow /kshow load def - -% These defs are necessary so that subsequent procs don't bind in -% the originals -/fill { oldfill } bind def -/eofill { oldeofill } bind def -/stroke { oldstroke } bind def -/show { oldshow } bind def -/ashow { oldashow } bind def -/widthshow { oldwidthshow } bind def -/awidthshow { oldawidthshow } bind def -/kshow { oldkshow } bind def -/PATredef { - MyAppDict begin - { - /fill { /clip load PATdraw newpath } bind def - /eofill { /eoclip load PATdraw newpath } bind def - /stroke { PATstroke } bind def - /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def - /ashow { 0 0 null 6 3 roll PATawidthshow } - bind def - /widthshow { 0 0 3 -1 roll PATawidthshow } - bind def - /awidthshow { PATawidthshow } bind def - /kshow { PATkshow } bind def - } { - /fill { oldfill } bind def - /eofill { oldeofill } bind def - /stroke { oldstroke } bind def - /show { oldshow } bind def - /ashow { oldashow } bind def - /widthshow { oldwidthshow } bind def - /awidthshow { oldawidthshow } bind def - /kshow { oldkshow } bind def - } ifelse - end -} bind def -false PATredef -% Conditionally define setcmykcolor if not available -/setcmykcolor where { pop } { - /setcmykcolor { - 1 sub 4 1 roll - 3 { - 3 index add neg dup 0 lt { pop 0 } if 3 1 roll - } repeat - setrgbcolor - pop - } bind def -} ifelse -/PATsc { % colorarray - aload length % c1 ... cn length - dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor - } ifelse } ifelse -} bind def -/PATsg { % dict - begin - lw setlinewidth - lc setlinecap - lj setlinejoin - ml setmiterlimit - ds aload pop setdash - cc aload pop setrgbcolor - cm setmatrix - end -} bind def - -/PATDict 3 dict def -/PATsp { - true PATredef - PATDict begin - /CurrentPattern exch def - % If it's an uncolored pattern, save the color - CurrentPattern /PaintType get 2 eq { - /PColor exch def - } if - /CColor [ currentrgbcolor ] def - end -} bind def -% PATstroke - stroke with the current pattern -/PATstroke { - countdictstack - save - mark - { - currentpoint strokepath moveto - PATpcalc % proc nw nh px py - clip newpath PATfill - } stopped { - (*** PATstroke Warning: Path is too complex, stroking - with gray) = - cleartomark - restore - countdictstack exch sub dup 0 gt - { { end } repeat } { pop } ifelse - gsave 0.5 setgray oldstroke grestore - } { pop restore pop } ifelse - newpath -} bind def -/PATtcalc { % modmtx tilingtype PATtcalc tilematrix - % Note: tiling types 2 and 3 are not supported - gsave - exch concat % tilingtype - matrix currentmatrix exch % cmtx tilingtype - % Tiling type 1 and 3: constant spacing - 2 ne { - % Distort the pattern so that it occupies - % an integral number of device pixels - dup 4 get exch dup 5 get exch % tx ty cmtx - XStep 0 dtransform - round exch round exch % tx ty cmtx dx.x dx.y - XStep div exch XStep div exch % tx ty cmtx a b - 0 YStep dtransform - round exch round exch % tx ty cmtx a b dy.x dy.y - YStep div exch YStep div exch % tx ty cmtx a b c d - 7 -3 roll astore % { a b c d tx ty } - } if - grestore -} bind def -/PATusp { - false PATredef - PATDict begin - CColor PATsc - end -} bind def - -% crosshatch30 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 32 16 true [ 32 0 0 -16 0 16 ] - {<033003300c0c0c0c30033003c000c000300330030c0c0c0c - 0330033000c000c0033003300c0c0c0c30033003c000c000 - 300330030c0c0c0c0330033000c000c0>} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P3 exch def - -% left45 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 32 32 true [ 32 0 0 -32 0 32 ] - {<808080804040404020202020101010100808080804040404 - 020202020101010180808080404040402020202010101010 - 080808080404040402020202010101018080808040404040 - 202020201010101008080808040404040202020201010101 - 808080804040404020202020101010100808080804040404 - 0202020201010101>} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P4 exch def - -% crosshatch45 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 32 32 true [ 32 0 0 -32 0 32 ] - {<828282824444444428282828101010102828282844444444 - 828282820101010182828282444444442828282810101010 - 282828284444444482828282010101018282828244444444 - 282828281010101028282828444444448282828201010101 - 828282824444444428282828101010102828282844444444 - 8282828201010101>} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P6 exch def - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/reencdict 12 dict def /ReEncode { reencdict begin -/newcodesandnames exch def /newfontname exch def /basefontname exch def -/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def -basefontdict { exch dup /FID ne { dup /Encoding eq -{ exch dup length array copy newfont 3 1 roll put } -{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall -newfont /FontName newfontname put newcodesandnames aload pop -128 1 255 { newfont /Encoding get exch /.notdef put } for -newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat -newfontname newfont definefont pop end } def -/isovec [ -8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde -8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis -8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron -8#220 /dotlessi 8#230 /oe 8#231 /OE -8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling -8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis -8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot -8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus -8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph -8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine -8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf -8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute -8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring -8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute -8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute -8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve -8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply -8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex -8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave -8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring -8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute -8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute -8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve -8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide -8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex -8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def -/Times-Roman /Times-Roman-iso isovec ReEncode -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -%%Page: 1 1 -10 setmiterlimit - 0.04800 0.04800 sc -% Polyline -7.500 slw -n 4800 450 m - 4800 8250 l gs col7 0.90 shd ef gr gs col0 s gr -% Polyline -n 5400 4275 m 7200 4275 l 7200 4500 l 5400 4500 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P3 [16 0 0 -8 360.00 285.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 6000 4500 m 7800 4500 l 7800 4725 l 6000 4725 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P3 [16 0 0 -8 400.00 300.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 6000 4725 m 7800 4725 l 7800 4950 l 6000 4950 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P3 [16 0 0 -8 400.00 315.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 7200 450 m - 7200 8325 l gs col7 0.90 shd ef gr gs col0 s gr -% Polyline -n 6000 450 m - 6000 8325 l gs col7 0.90 shd ef gr gs col0 s gr -% Polyline -n 6000 6000 m 7200 6000 l 7200 6225 l 6000 6225 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P4 [16 0 0 -16 400.00 400.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 7200 4950 m 9000 4950 l 9000 5175 l 7200 5175 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P3 [16 0 0 -8 480.00 330.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 7200 5400 m 9000 5400 l 9000 5625 l 7200 5625 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P3 [16 0 0 -8 480.00 360.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 6600 5175 m 9000 5175 l 9000 5400 l 6600 5400 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P3 [16 0 0 -8 440.00 345.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 7200 7350 m 9600 7350 l 9600 7575 l 7200 7575 l - cp gs col7 0.55 shd ef gr gs col0 s gr -% Polyline -n 5400 6900 m 7800 6900 l 7800 7125 l 5400 7125 l - cp gs col7 0.55 shd ef gr gs col0 s gr -% Polyline -n 6600 6225 m 9000 6225 l 9000 6450 l 6600 6450 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P4 [16 0 0 -16 440.00 415.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 7200 7125 m 9600 7125 l 9600 7350 l 7200 7350 l - cp gs col7 0.55 shd ef gr gs col0 s gr -% Polyline -n 525 450 m - 10800 450 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 4800 825 m - 10800 825 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 525 1275 m - 10800 1275 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 525 5625 m - 10800 5625 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 525 6450 m - 10800 6450 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 525 2175 m - 10800 2175 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 525 1800 m - 10800 1800 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 525 3900 m - 10800 3900 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 4800 1800 m 10800 1800 l 10800 2175 l 4800 2175 l - cp gs col7 0.40 shd ef gr gs col0 s gr -% Polyline -n 6600 450 m - 6600 8325 l gs col7 0.90 shd ef gr gs col0 s gr -% Polyline -n 525 450 m - 525 8925 l gs col7 0.90 shd ef gr gs col0 s gr -% Polyline -n 5400 7575 m 8400 7575 l 8400 7800 l 5400 7800 l - cp gs col7 0.55 shd ef gr gs col0 s gr -% Polyline -n 6600 8175 m 8400 8175 l 8400 8400 l 6600 8400 l - cp gs col7 0.75 shd ef gr gs col0 s gr -% Polyline -n 4800 8250 m - 4800 10050 l gs col0 s gr -% Polyline -n 6000 8250 m - 6000 10050 l gs col0 s gr -% Polyline -n 8400 8625 m 10200 8625 l 10200 8850 l 8400 8850 l - cp gs col7 0.75 shd ef gr gs col0 s gr -% Polyline -45.000 slw -n 7200 9225 m - 7200 10050 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 8400 9150 m - 8400 10050 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 9600 9150 m - 9600 10050 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 10800 9075 m - 10800 10050 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -7.500 slw -n 525 7800 m - 10800 7800 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 525 8850 m - 10800 8850 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 7800 8400 m 9000 8400 l 9000 8625 l 7800 8625 l - cp gs col7 0.75 shd ef gr gs col0 s gr -% Polyline -n 525 10200 m - 10800 10200 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 7200 9675 m 10800 9675 l 10800 9900 l 7200 9900 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P3 [16 0 0 -8 480.00 645.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 7200 9225 m 10800 9225 l 10800 9450 l 7200 9450 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P3 [16 0 0 -8 480.00 615.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 9600 8250 m - 9600 10050 l gs col0 s gr -% Polyline -n 525 9900 m - 525 8925 l gs col0 s gr -% Polyline -n 525 9900 m - 525 10200 l gs col0 s gr -% Polyline -n 675 10200 m 10800 10200 l - 10800 9975 l gs col0 s gr -% Polyline -n 525 9900 m - 10800 9900 l gs col0 s gr -% Polyline -n 5400 8100 m - 5400 10200 l gs col0 s gr -% Polyline -n 5400 9900 m 10800 9900 l 10800 10200 l 5400 10200 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P6 [16 0 0 -16 360.00 660.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 6600 8025 m - 6600 10200 l gs col0 s gr -% Polyline -n 7200 9450 m 10800 9450 l 10800 9675 l 7200 9675 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P3 [16 0 0 -8 480.00 630.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 7800 7875 m - 7800 10200 l gs col0 s gr -% Polyline -n 9000 8250 m - 9000 10200 l gs col0 s gr -% Polyline -n 10200 8175 m - 10200 10200 l gs col0 s gr -% Polyline -45.000 slw -n 6000 9150 m - 6000 9975 l gs col7 0.95 shd ef gr gs col0 s gr -% Polyline -n 6000 9825 m - 6000 10200 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P6 [16 0 0 -16 400.00 655.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 7200 9150 m - 7200 10200 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P6 [16 0 0 -16 480.00 610.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 8400 9000 m - 8400 10200 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P6 [16 0 0 -16 560.00 600.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 9600 9000 m - 9600 10200 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P6 [16 0 0 -16 640.00 600.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 10800 9075 m - 10800 10200 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P6 [16 0 0 -16 720.00 605.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -7.500 slw -n 7800 825 m - 7800 8700 l gs col7 0.90 shd ef gr gs col0 s gr -% Polyline -n 4800 9675 m - 4800 10200 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P6 [16 0 0 -16 320.00 645.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 4800 2550 m 5400 2550 l 5400 2775 l 4800 2775 l - cp gs col7 0.90 shd ef gr gs col0 s gr -% Polyline -n 4800 2775 m 5400 2775 l 5400 3000 l 4800 3000 l - cp gs col7 0.90 shd ef gr gs col0 s gr -% Polyline -n 4800 3000 m 6000 3000 l 6000 3225 l 4800 3225 l - cp gs col7 0.90 shd ef gr gs col0 s gr -% Polyline -n 4800 3225 m 6000 3225 l 6000 3450 l 4800 3450 l - cp gs col7 0.90 shd ef gr gs col0 s gr -% Polyline -n 4800 3450 m 6000 3450 l 6000 3675 l 4800 3675 l - cp gs col7 0.90 shd ef gr gs col0 s gr -% Polyline -n 4800 3675 m 5400 3675 l 5400 3900 l 4800 3900 l - cp gs col7 0.90 shd ef gr gs col0 s gr -% Polyline -n 5400 450 m - 5400 8325 l gs col7 0.90 shd ef gr gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf -675 5325 m -gs 1 -1 sc (T2.5 Presentational Stylesheets) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 5550 m -gs 1 -1 sc (T2.6 Automatic Proof Generation in Natural Language) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 6150 m -gs 1 -1 sc (T3.1 Use, meaning and classification) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 8550 m -gs 1 -1 sc (T5.2 Prototype Implementation) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 8775 m -gs 1 -1 sc (T5.3. Integration with the Consultation Engine) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 3825 m -gs 1 -1 sc (T1.6 Document Authoring) col0 sh gr -% Polyline -n 10785 450 m - 10785 9165 l gs col0 s gr -% Polyline -n 9600 450 m - 9600 9165 l gs col0 s gr -% Polyline -n 8400 450 m - 8400 9165 l gs col0 s gr -% Polyline -45.000 slw -n 6000 825 m - 6000 9150 l gs col0 s gr -% Polyline -7.500 slw -n 9000 450 m - 9000 9165 l gs col0 s gr -% Polyline -n 10200 450 m - 10200 9165 l gs col0 s gr -% Polyline -45.000 slw -n 9600 825 m - 9600 9150 l gs col0 s gr -% Polyline -n 10800 825 m - 10800 9150 l gs col0 s gr -% Polyline -n 7200 825 m - 7200 9150 l gs col0 s gr -% Polyline -n 8400 825 m - 8400 9150 l gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf -10485 720 m -gs 1 -1 sc (30) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -9300 720 m -gs 1 -1 sc (24) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -8085 720 m -gs 1 -1 sc (18) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -6915 720 m -gs 1 -1 sc (12) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -5790 720 m -gs 1 -1 sc (6) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -3825 1050 m -gs 1 -1 sc (Milestones) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -3510 780 m -gs 1 -1 sc (Review months) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -660 2070 m -gs 1 -1 sc (WP0 - PROJECT MANAGEMENT) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -660 1545 m -gs 1 -1 sc (Work Packages and Tasks) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 4200 m -gs 1 -1 sc (WP2 TRANSFORMATION) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 4425 m -gs 1 -1 sc (T2.1 XML Exportation) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 4650 m -gs 1 -1 sc (T2.2. Stylesheets to Intermediate Representation) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 4875 m -gs 1 -1 sc (T2.3 Proof Transformation) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 5100 m -gs 1 -1 sc (T2.4 Automatic Extraction of Metadata) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 5925 m -gs 1 -1 sc (WP3 METADATA) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 6375 m -gs 1 -1 sc (T3.2 Modeling) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 7275 m -gs 1 -1 sc (T4.2 Consultation Engine ) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 7500 m -gs 1 -1 sc (T4.3 Assisted Annotation) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 6825 m -gs 1 -1 sc (WP4 INTERFACES) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 7050 m -gs 1 -1 sc (T4.1 MathML Rendering/Browsing Engines) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 7725 m -gs 1 -1 sc (T4.4 Latex-based authoring tools) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 8100 m -gs 1 -1 sc (WP5 DISTRIBUTION) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 8325 m -gs 1 -1 sc (T5.1 Overall architectural Design) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 9150 m -gs 1 -1 sc (WP6 TESTING AND VALIDATION) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 9375 m -gs 1 -1 sc (T6.1 Education) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 9600 m -gs 1 -1 sc (T6.2 Certified Code) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 10125 m -gs 1 -1 sc (WP7 DISSEMINATION AND EXPLOITATION) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 2475 m -gs 1 -1 sc (WP1 -REQUIREMENT ANALYSIS) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 2700 m -gs 1 -1 sc (T1.1 Mathematics and the Web) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 2925 m -gs 1 -1 sc (T1.2 Structured and Formal Mathematics) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 3150 m -gs 1 -1 sc (T1.3 Metadata) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 3375 m -gs 1 -1 sc (T1.4 Searching and Retrieving) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 3600 m -gs 1 -1 sc (T1.5 Distribution) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf -675 9825 m -gs 1 -1 sc (T6.3 Electronic Publishing) col0 sh gr -$F2psEnd -rs -end - -%%EndDocument - @endspecial eop -%%Page: 30 30 -30 29 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(30)94 171 y Fg(9.6)112 b(Graphical)37 b(presen)m(tation)g(of)h -(pro)6 b(ject)37 b(comp)s(onen)m(ts)94 5876 y @beginspecial -0 @llx 0 @lly 372 @urx 628 @ury 3993 @rwi @setspecial -%%BeginDocument: pert_new.eps -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: pert_new.eps -%%Creator: fig2dev Version 3.2 Patchlevel 3a -%%CreationDate: Mon Jul 2 13:36:49 2001 -%%For: asperti@marcello (Andrea Asperti, docente, 2094505) -%%BoundingBox: 0 0 372 628 -%%Magnification: 0.4500 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 628 moveto 0 0 lineto 372 0 lineto 372 628 lineto closepath clip newpath -373.0 627.0 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/reencdict 12 dict def /ReEncode { reencdict begin -/newcodesandnames exch def /newfontname exch def /basefontname exch def -/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def -basefontdict { exch dup /FID ne { dup /Encoding eq -{ exch dup length array copy newfont 3 1 roll put } -{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall -newfont /FontName newfontname put newcodesandnames aload pop -128 1 255 { newfont /Encoding get exch /.notdef put } for -newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat -newfontname newfont definefont pop end } def -/isovec [ -8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde -8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis -8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron -8#220 /dotlessi 8#230 /oe 8#231 /OE -8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling -8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis -8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot -8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus -8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph -8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine -8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf -8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute -8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring -8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute -8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute -8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve -8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply -8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex -8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave -8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring -8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute -8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute -8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve -8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide -8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex -8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def -/Times-Roman /Times-Roman-iso isovec ReEncode -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -%%Page: 1 1 -10 setmiterlimit - 0.02700 0.02700 sc -% Polyline -7.500 slw -n -2325 6750 m -2325 9075 l -3150 9075 l -3150 6750 l - cp gs col0 s gr -% Polyline -n -3450 6750 m -3450 9075 l -4275 9075 l -4275 6750 l - cp gs col0 s gr -% Polyline -n -2775 6450 m - -5025 6450 l gs col0 s gr -% Polyline -n -4575 6750 m -4575 9075 l -5400 9075 l -5400 6750 l - cp gs col0 s gr -% Polyline -n -3450 10875 m -3450 13200 l -4275 13200 l -4275 10875 l - cp gs col0 s gr -% Polyline -n -6975 14925 m -6975 16950 l -7800 16950 l -7800 14925 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --7200 15000 m -gs 1 -1 sc 270.0 rot (6.1) col0 sh gr -% Polyline -n -6975 18675 m -6975 20700 l -7800 20700 l -7800 18675 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --7200 18750 m -gs 1 -1 sc 270.0 rot (6.1) col0 sh gr -% Polyline -n -5775 2700 m -5775 9075 l -6600 9075 l -6600 2700 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --6000 2775 m -gs 1 -1 sc 270.0 rot (4.1) col0 sh gr -% Polyline -n -11025 14625 m - -11025 14925 l gs col0 s gr -% Polyline -n -10950 14625 m - -12225 14625 l gs col0 s gr -% Polyline -n -12225 14625 m - -12225 14925 l gs col0 s gr -% Polyline -n -11775 14925 m -11775 16950 l -12600 16950 l -12600 14925 l - cp gs col0 s gr -% Polyline -n -10650 14925 m -10650 16950 l -11475 16950 l -11475 14925 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --10875 15000 m -gs 1 -1 sc 270.0 rot (4.2) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --12000 15000 m -gs 1 -1 sc 270.0 rot (5.2-5.3) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --8475 17700 m -gs 1 -1 sc 270.0 rot (M8) col0 sh gr -% Polyline -n -6675 10875 m -6675 13200 l -7500 13200 l -7500 10875 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --6900 10950 m -gs 1 -1 sc 270.0 rot (4.4) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --7200 10950 m -gs 1 -1 sc 270.0 rot (Latex-based authoring tool) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --7425 10950 m -gs 1 -1 sc 270.0 rot (6,0) col0 sh gr -% Polyline -n -8400 1500 m -8400 4950 l -9225 4950 l -9225 1500 l - cp gs col0 s gr -% Polyline -n -9600 1500 m -9600 4950 l -10425 4950 l -10425 1500 l - cp gs col0 s gr -% Polyline -n -10725 10875 m -10725 13200 l -11550 13200 l -11550 10875 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --10950 10950 m -gs 1 -1 sc 270.0 rot (4.2) col0 sh gr -% Polyline -n -9675 10875 m -9675 13200 l -10500 13200 l -10500 10875 l - cp gs col0 s gr -% Polyline -n -8700 10875 m -8700 13200 l -9525 13200 l -9525 10875 l - cp gs col0 s gr -% Polyline -n -3300 3225 m - -4500 3225 l gs col0 s gr -% Polyline -n -3900 4950 m - -3900 5550 l gs col0 s gr -% Polyline -n -3900 6075 m - -3900 6750 l gs col0 s gr -% Polyline -n -2775 9375 m - -4950 9375 l gs col0 s gr -% Polyline -n -3900 10425 m - -3900 10875 l gs col0 s gr -% Polyline -n -4575 10875 m -4575 13200 l -5400 13200 l -5400 10875 l - cp gs col0 s gr -% Polyline -n -5025 10575 m - -3900 10575 l gs col0 s gr -% Polyline -n -6225 1350 m - -6225 2700 l gs col0 s gr -% Polyline -n -4950 10575 m - -6150 10575 l gs col0 s gr -% Polyline -n -6150 10200 m - -6150 10575 l gs col0 s gr -% Polyline -n -6150 9075 m - -6150 9675 l gs col0 s gr -% Polyline -n -5700 10575 m - -8175 10575 l gs col0 s gr -% Polyline -n -2325 10875 m -2325 13200 l -3150 13200 l -3150 10875 l - cp gs col0 s gr -% Polyline -n -3900 10575 m -2775 10575 l - -2775 10875 l gs col0 s gr -% Polyline -n -6150 10575 m - -6150 10875 l gs col0 s gr -% Polyline -n -2775 13500 m - -9825 13500 l gs col0 s gr -% Polyline -n -7650 13500 m - -7650 13800 l gs col0 s gr -% Polyline -n -7650 14625 m -6150 14625 l - -6150 14925 l gs col0 s gr -% Polyline -n -7575 14625 m - -9825 14625 l gs col0 s gr -% Polyline -n -5700 14925 m -5700 16950 l -6525 16950 l -6525 14925 l - cp gs col0 s gr -% Polyline -n -4350 21075 m - -8400 21075 l gs col0 s gr -% Polyline -n -8400 20700 m - -8400 21075 l gs col0 s gr -% Polyline -n -7500 20700 m - -7500 21075 l gs col0 s gr -% Polyline -n -1575 19125 m -1575 21075 l - -4350 21075 l gs col0 s gr -% Polyline -n -1575 6075 m - -1575 7725 l gs col0 s gr -% Polyline -n -1575 12750 m - -1575 19275 l gs col0 s gr -% Polyline -n -7425 18375 m - -7425 18675 l gs col0 s gr -% Polyline -n -5925 21900 m - -5925 22200 l gs col0 s gr -% Polyline -n -5925 21075 m - -5925 21375 l gs col0 s gr -% Polyline -n -7650 10575 m - -9450 10575 l gs col0 s gr -% Polyline -n -7425 9075 m - -7425 10875 l gs col0 s gr -% Polyline -n -7575 9075 m - -7575 9375 l gs col0 s gr -% Polyline -n -7575 9375 m -8100 9375 l -8100 6450 l -8775 6450 l - -8775 6750 l gs col0 s gr -% Polyline -n -9075 1200 m - -10350 1200 l gs col0 s gr -% Polyline -n -9675 13500 m - -11100 13500 l gs col0 s gr -% Polyline -n -9150 14925 m -9150 16950 l -9975 16950 l -9975 14925 l - cp gs col0 s gr -% Polyline -n -8025 14925 m -8025 16950 l -8850 16950 l -8850 14925 l - cp gs col0 s gr -% Polyline -n -9150 18675 m -9150 20700 l -9975 20700 l -9975 18675 l - cp gs col0 s gr -% Polyline -n -8025 18675 m -8025 20700 l -8850 20700 l -8850 18675 l - cp gs col0 s gr -% Polyline -n -6225 17250 m - -12150 17250 l gs col0 s gr -% Polyline -n -7425 18375 m -9675 18375 l - -9675 18675 l gs col0 s gr -% Polyline -n -8475 18300 m - -8475 18675 l gs col0 s gr -% Polyline -n -9750 14625 m - -11625 14625 l gs col0 s gr -% Polyline -n -12225 14625 m - -12225 14925 l gs col0 s gr -% Polyline -n -2700 1200 m - -3450 1200 l gs col0 s gr -% Polyline -n -1575 1200 m - -525 1200 l gs col0 s gr -% Polyline -n -525 1200 m - -525 7725 l gs col0 s gr -% Polyline -n -525 12750 m -525 21075 l - -1725 21075 l gs col0 s gr -% Polyline -n -9450 10200 m - -9450 10575 l gs col0 s gr -% Polyline -n -9375 10575 m - -11100 10575 l gs col0 s gr -% Polyline -n -11100 10575 m - -11100 10875 l gs col0 s gr -% Polyline -n -10125 10575 m - -10125 10875 l gs col0 s gr -% Polyline -n -11850 7650 m -11850 13200 l -12675 13200 l -12675 7650 l - cp gs col0 s gr -% Polyline -n -12300 7350 m - -10050 7350 l gs col0 s gr -% Polyline -n -8850 5250 m - -10050 5250 l gs col0 s gr -% Polyline -n -8400 6750 m -8400 9075 l -9225 9075 l -9225 6750 l - cp gs col0 s gr -% Polyline -n -8850 6450 m -10050 6450 l - -10050 7650 l gs col0 s gr -% Polyline -n -9450 6075 m - -9450 6450 l gs col0 s gr -% Polyline -n -8775 9375 m - -10050 9375 l gs col0 s gr -% Polyline -n -9450 9375 m - -9450 9675 l gs col0 s gr -% Polyline -n -11850 1500 m -11850 4950 l -12675 4950 l -12675 1500 l - cp gs col0 s gr -% Polyline -n -10125 1200 m -12300 1200 l - -12300 1500 l gs col0 s gr -% Polyline -n -12300 6075 m - -12300 7350 l gs col0 s gr -% Polyline -n -12300 4950 m - -12300 5550 l gs col0 s gr -% Polyline -n -12975 10875 m -12975 13200 l -13800 13200 l -13800 10875 l - cp gs col0 s gr -% Polyline -n -13425 10875 m -13425 10575 l - -12675 10575 l gs col0 s gr -% Polyline -n -11025 13500 m - -13425 13500 l gs col0 s gr -% Polyline -n -7725 10875 m -7725 13200 l -8550 13200 l -8550 10875 l - cp gs col0 s gr -% Polyline -n -7050 13200 m - -7050 13500 l gs col0 s gr -% Polyline -n -8175 13200 m - -8175 13500 l gs col0 s gr -% Polyline -n -9075 10575 m - -9075 10875 l gs col0 s gr -% Polyline -n -9600 20700 m - -9600 21075 l gs col0 s gr -% Polyline -n -9600 21075 m - -8325 21075 l gs col0 s gr -% Polyline -n -5700 10875 m -5700 13200 l -6525 13200 l -6525 10875 l - cp gs col0 s gr -% Polyline -n -6975 3675 m -6975 9075 l -7800 9075 l -7800 3675 l - cp gs col0 s gr -% Polyline -n -7425 1200 m - -7425 1575 l gs col0 s gr -% Polyline -n -7425 3000 m - -7425 3675 l gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --7650 13950 m -gs 1 -1 sc 270.0 rot (M7) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --6000 21525 m -gs 1 -1 sc 270.0 rot (M9) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --8250 15000 m -gs 1 -1 sc 270.0 rot (6.2) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --8250 18750 m -gs 1 -1 sc 270.0 rot (6.2) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --9900 15000 m -gs 1 -1 sc 270.0 rot (6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --9900 18750 m -gs 1 -1 sc 270.0 rot (6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --1725 7800 m -gs 1 -1 sc 270.0 rot (Dissemination and Exploitation) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --9375 15000 m -gs 1 -1 sc 270.0 rot (6.3) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --9375 18750 m -gs 1 -1 sc 270.0 rot (6.3) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --8550 16500 m -gs 1 -1 sc 270.0 rot ( ) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --8550 15000 m -gs 1 -1 sc 270.0 rot (Validation:Certified Code) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --8550 18750 m -gs 1 -1 sc 270.0 rot (Validation:Certified Code) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --12075 7725 m -gs 1 -1 sc 270.0 rot (5.1) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --13200 10950 m -gs 1 -1 sc 270.0 rot (5.2) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --8250 10950 m -gs 1 -1 sc 270.0 rot (Validation) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --7950 10950 m -gs 1 -1 sc 270.0 rot (6.1-3) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --5925 10950 m -gs 1 -1 sc 270.0 rot (4.3) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --5925 15000 m -gs 1 -1 sc 270.0 rot (4.3) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --7200 3825 m -gs 1 -1 sc 270.0 rot (4.4) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --7200 1650 m -gs 1 -1 sc 270.0 rot (1.6) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --7500 1650 m -gs 1 -1 sc 270.0 rot (Authoring) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --7725 1650 m -gs 1 -1 sc 270.0 rot (3,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --9675 15000 m -gs 1 -1 sc 270.0 rot (Validation: e-publishing) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --9675 18750 m -gs 1 -1 sc 270.0 rot (Validation: e-publishing) col0 sh gr -% Polyline -n -6000 750 m -6225 975 l - -6450 750 l gs col0 s gr -% Polyline -n -6450 750 m -6450 0 l -6000 0 l - -6000 750 l gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --6300 150 m -gs 1 -1 sc 270.0 rot (START) col0 sh gr -% Polyline -n -2850 1500 m -2850 2925 l -3675 2925 l -3675 1500 l - cp gs col0 s gr -% Polyline -n -2850 1500 m -2850 2475 l -3150 2475 l -3150 1500 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --3600 1575 m -gs 1 -1 sc 270.0 rot (3,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3375 1575 m -gs 1 -1 sc 270.0 rot (Math & the Web) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3075 1575 m -gs 1 -1 sc 270.0 rot (1.1) col0 sh gr -% Polyline -n -4050 1500 m -4050 2925 l -4875 2925 l -4875 1500 l - cp gs col0 s gr -% Polyline -n -4050 1500 m -4050 2475 l -4350 2475 l -4350 1500 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --4575 1575 m -gs 1 -1 sc 270.0 rot (Structured and ) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --4800 1575 m -gs 1 -1 sc 270.0 rot (Formal Math 3,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --4275 1575 m -gs 1 -1 sc 270.0 rot (1.2) col0 sh gr -% Polyline -n -3675 5550 m -3675 6075 l -4200 6075 l -4200 5550 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --3975 5700 m -gs 1 -1 sc 270.0 rot (M1) col0 sh gr -% Polyline -n -2325 6750 m -2325 7725 l -2625 7725 l -2625 6750 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --2550 6825 m -gs 1 -1 sc 270.0 rot (2.1) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --2850 6825 m -gs 1 -1 sc 270.0 rot (XML Exportation) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3075 6825 m -gs 1 -1 sc 270.0 rot (6,0) col0 sh gr -% Polyline -n -3450 6750 m -3450 7725 l -3750 7725 l -3750 6750 l - cp gs col0 s gr -% Polyline -n -3900 9075 m - -3900 9375 l gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --3975 6825 m -gs 1 -1 sc 270.0 rot (Stylesheets to Intermediate) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3675 6825 m -gs 1 -1 sc 270.0 rot (2.2) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --4200 6825 m -gs 1 -1 sc 270.0 rot (Rerpresentation 6,0) col0 sh gr -% Polyline -n -4575 6750 m -4575 7725 l -4875 7725 l -4875 6750 l - cp gs col0 s gr -% Polyline -n -4950 9075 m - -4950 9375 l gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --5325 6825 m -gs 1 -1 sc 270.0 rot (6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --5100 6825 m -gs 1 -1 sc 270.0 rot (Proof Transformation) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --4800 6825 m -gs 1 -1 sc 270.0 rot (2.3) col0 sh gr -% Polyline -n -3450 3525 m -3450 4500 l -3750 4500 l -3750 3525 l - cp gs col0 s gr -% Polyline -n -3450 3525 m -3450 4950 l -4275 4950 l -4275 3525 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --4200 3600 m -gs 1 -1 sc 270.0 rot (3,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3675 3600 m -gs 1 -1 sc 270.0 rot (2.1) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3975 3600 m -gs 1 -1 sc 270.0 rot (XML Exportation) col0 sh gr -% Polyline -n -3450 3525 m -3450 4500 l -3750 4500 l -3750 3525 l - cp gs col0 s gr -% Polyline -n -3450 3525 m -3450 4950 l -4275 4950 l -4275 3525 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --4200 3600 m -gs 1 -1 sc 270.0 rot (3,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3675 3600 m -gs 1 -1 sc 270.0 rot (2.1) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3975 3600 m -gs 1 -1 sc 270.0 rot (XML Exportation) col0 sh gr -% Polyline -n -3450 3525 m -3450 4500 l -3750 4500 l -3750 3525 l - cp gs col0 s gr -% Polyline -n -3450 3525 m -3450 4950 l -4275 4950 l -4275 3525 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --4200 3600 m -gs 1 -1 sc 270.0 rot (3,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3675 3600 m -gs 1 -1 sc 270.0 rot (2.1) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3975 3600 m -gs 1 -1 sc 270.0 rot (XML Exportation) col0 sh gr -% Polyline -n -3450 3525 m -3450 4500 l -3750 4500 l -3750 3525 l - cp gs col0 s gr -% Polyline -n -3450 3525 m -3450 4950 l -4275 4950 l -4275 3525 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --4200 3600 m -gs 1 -1 sc 270.0 rot (3,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3675 3600 m -gs 1 -1 sc 270.0 rot (2.1) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3975 3600 m -gs 1 -1 sc 270.0 rot (XML Exportation) col0 sh gr -% Polyline -n -3450 10875 m -3450 11850 l -3750 11850 l -3750 10875 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --3675 10950 m -gs 1 -1 sc 270.0 rot (2.5) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3975 10950 m -gs 1 -1 sc 270.0 rot (Presentational Stylesheets) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --4200 10950 m -gs 1 -1 sc 270.0 rot ( 6,0) col0 sh gr -% Polyline -n -6975 14925 m -6975 15900 l -7275 15900 l -7275 14925 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --7725 15000 m -gs 1 -1 sc 270.0 rot ( 6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --7500 15000 m -gs 1 -1 sc 270.0 rot (Validation: Education) col0 sh gr -% Polyline -n -6975 18675 m -6975 19650 l -7275 19650 l -7275 18675 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --7725 18750 m -gs 1 -1 sc 270.0 rot ( 6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --7500 18750 m -gs 1 -1 sc 270.0 rot (Validation: Education) col0 sh gr -% Polyline -n -5700 22425 m -5925 22200 l - -6150 22425 l gs col0 s gr -% Polyline -n -6150 22425 m -6150 23175 l -5700 23175 l - -5700 22425 l gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --6000 22500 m -gs 1 -1 sc 270.0 rot (END) col0 sh gr -% Polyline -n -5775 2700 m -5775 3675 l -6075 3675 l -6075 2700 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --6300 2775 m -gs 1 -1 sc 270.0 rot (MathML Rendering/Browsing Engines) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --6525 2775 m -gs 1 -1 sc 270.0 rot (9,0) col0 sh gr -% Polyline -n -11775 14925 m -11775 15900 l -12075 15900 l -12075 14925 l - cp gs col0 s gr -% Polyline -n -10650 14925 m -10650 15900 l -10950 15900 l -10950 14925 l - cp gs col0 s gr -% Polyline -n -11100 16950 m - -11100 17250 l gs col0 s gr -% Polyline -n -12150 16950 m - -12150 17250 l gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --12300 15000 m -gs 1 -1 sc 270.0 rot (Integration Consultation/) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --12525 15000 m -gs 1 -1 sc 270.0 rot (Distribution 6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --11400 15000 m -gs 1 -1 sc 270.0 rot ( 6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --11175 15000 m -gs 1 -1 sc 270.0 rot (Consultation Engine) col0 sh gr -% Polyline -n -8175 17550 m -8175 18075 l -8700 18075 l -8700 17550 l - cp gs col0 s gr -% Polyline -n -8475 17250 m - -8475 17550 l gs col0 s gr -% Polyline -n -8475 18075 m - -8475 18375 l gs col0 s gr -% Polyline -n -6675 10875 m -6675 11850 l -6975 11850 l -6975 10875 l - cp gs col0 s gr -% Polyline -n -8400 1500 m -8400 2475 l -8700 2475 l -8700 1500 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --9150 1575 m -gs 1 -1 sc 270.0 rot (3,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --8925 1575 m -gs 1 -1 sc 270.0 rot (Metadata) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --8625 1575 m -gs 1 -1 sc 270.0 rot (1.3) col0 sh gr -% Polyline -n -10050 4950 m - -10050 5250 l gs col0 s gr -% Polyline -n -9600 1500 m -9600 2475 l -9900 2475 l -9900 1500 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --10350 1575 m -gs 1 -1 sc 270.0 rot (3,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --9825 1575 m -gs 1 -1 sc 270.0 rot (1.4) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --10125 1575 m -gs 1 -1 sc 270.0 rot (Searching & Retrieving) col0 sh gr -% Polyline -n -9225 5550 m -9225 6075 l -9750 6075 l -9750 5550 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --9525 5700 m -gs 1 -1 sc 270.0 rot (M2) col0 sh gr -% Polyline -n -9600 7650 m -9600 9075 l -10425 9075 l -10425 7650 l - cp gs col0 s gr -% Polyline -n -9600 7650 m -9600 8625 l -9900 8625 l -9900 7650 l - cp gs col0 s gr -% Polyline -n -10050 9075 m - -10050 9375 l gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --9825 7725 m -gs 1 -1 sc 270.0 rot (3.2) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --10125 7725 m -gs 1 -1 sc 270.0 rot (Metadata) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --10350 7725 m -gs 1 -1 sc 270.0 rot (Modeling 3,0) col0 sh gr -% Polyline -n -10725 10875 m -10725 11850 l -11025 11850 l -11025 10875 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --11475 10950 m -gs 1 -1 sc 270.0 rot ( 6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --11250 10950 m -gs 1 -1 sc 270.0 rot (Consultation Engine) col0 sh gr -% Polyline -n -9675 10875 m -9675 11850 l -9975 11850 l -9975 10875 l - cp gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --10425 10950 m -gs 1 -1 sc 270.0 rot ( 6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --9900 10950 m -gs 1 -1 sc 270.0 rot (3.2) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --10200 10950 m -gs 1 -1 sc 270.0 rot (Metadata Modeling) col0 sh gr -% Polyline -n -8700 10875 m -8700 11850 l -9000 11850 l -9000 10875 l - cp gs col0 s gr -% Polyline -n -9150 13200 m - -9150 13500 l gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --8925 10950 m -gs 1 -1 sc 270.0 rot (2.4) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --9225 10950 m -gs 1 -1 sc 270.0 rot (Automatics Extraction of) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --9450 10950 m -gs 1 -1 sc 270.0 rot (Metadata 6,0) col0 sh gr -% Polyline -n -6225 975 m - -6225 1200 l gs col0 s gr -% Polyline -n -1575 6300 m -1575 1200 l - -2850 1200 l gs col0 s gr -% Polyline -n -3300 2925 m - -3300 3225 l gs col0 s gr -% Polyline -n -4500 2925 m - -4500 3225 l gs col0 s gr -% Polyline -n -3300 1200 m - -3300 1500 l gs col0 s gr -% Polyline -n -4500 1200 m - -4500 1500 l gs col0 s gr -% Polyline -n -3900 3225 m - -3900 3525 l gs col0 s gr -% Polyline -n -2775 6450 m - -2775 6750 l gs col0 s gr -% Polyline -n -5025 6450 m - -5025 6750 l gs col0 s gr -% Polyline -n -2775 9075 m - -2775 9375 l gs col0 s gr -% Polyline -n -3900 9375 m - -3900 9675 l gs col0 s gr -% Polyline -n -3900 10200 m - -3900 10500 l gs col0 s gr -% Polyline -n -6225 1200 m - -6225 1500 l gs col0 s gr -% Polyline -n -3900 13200 m - -3900 13500 l gs col0 s gr -% Polyline -n -4575 10875 m -4575 11850 l -4875 11850 l -4875 10875 l - cp gs col0 s gr -% Polyline -n -5025 10575 m - -5025 10875 l gs col0 s gr -% Polyline -n -5850 9675 m -5850 10200 l -6375 10200 l -6375 9675 l - cp gs col0 s gr -% Polyline -n -2325 10875 m -2325 11850 l -2625 11850 l -2625 10875 l - cp gs col0 s gr -% Polyline -n -2775 13200 m - -2775 13500 l gs col0 s gr -% Polyline -n -6150 13200 m - -6150 13500 l gs col0 s gr -% Polyline -n -5025 13200 m - -5025 13500 l gs col0 s gr -% Polyline -n -7350 13800 m -7350 14325 l -7875 14325 l -7875 13800 l - cp gs col0 s gr -% Polyline -n -7650 14325 m - -7650 14625 l gs col0 s gr -% Polyline -n -8475 14625 m - -8475 14925 l gs col0 s gr -% Polyline -n -5700 14925 m -5700 15900 l -6000 15900 l -6000 14925 l - cp gs col0 s gr -% Polyline -n -7425 14625 m - -7425 14925 l gs col0 s gr -% Polyline -n -6225 16950 m - -6225 17250 l gs col0 s gr -% Polyline -n -8475 16950 m - -8475 17250 l gs col0 s gr -% Polyline -n -1200 7725 m -1200 8700 l -1500 8700 l -1500 7725 l - cp gs col0 s gr -% Polyline -n -1200 7725 m -1200 12750 l -2025 12750 l -2025 7725 l - cp gs col0 s gr -% Polyline -n -7425 16950 m - -7425 17250 l gs col0 s gr -% Polyline -n -3675 9675 m -3675 10200 l -4200 10200 l -4200 9675 l - cp gs col0 s gr -% Polyline -n -5700 21375 m -5700 21900 l -6225 21900 l -6225 21375 l - cp gs col0 s gr -% Polyline -n -9150 14925 m -9150 15900 l -9450 15900 l -9450 14925 l - cp gs col0 s gr -% Polyline -n -8025 14925 m -8025 15900 l -8325 15900 l -8325 14925 l - cp gs col0 s gr -% Polyline -n -9150 18675 m -9150 19650 l -9450 19650 l -9450 18675 l - cp gs col0 s gr -% Polyline -n -8025 18675 m -8025 19650 l -8325 19650 l -8325 18675 l - cp gs col0 s gr -% Polyline -n -75 7725 m -75 12750 l -900 12750 l -900 7725 l - cp gs col0 s gr -% Polyline -n -75 7725 m -75 8700 l -375 8700 l -375 7725 l - cp gs col0 s gr -% Polyline -n -10200 1200 m - -10200 1500 l gs col0 s gr -% Polyline -n -8700 1200 m - -8700 1500 l gs col0 s gr -% Polyline -n -10050 13200 m - -10050 13500 l gs col0 s gr -% Polyline -n -11100 13200 m - -11100 13500 l gs col0 s gr -% Polyline -n -11850 7650 m -11850 8625 l -12150 8625 l -12150 7650 l - cp gs col0 s gr -% Polyline -n -12300 7350 m - -12300 7650 l gs col0 s gr -% Polyline -n -9450 5250 m - -9450 5550 l gs col0 s gr -% Polyline -n -8850 4950 m - -8850 5250 l gs col0 s gr -% Polyline -n -8400 6750 m -8400 7725 l -8700 7725 l -8700 6750 l - cp gs col0 s gr -% Polyline -n -8775 9075 m - -8775 9375 l gs col0 s gr -% Polyline -n -8850 6450 m - -8850 6750 l gs col0 s gr -% Polyline -n -11850 1500 m -11850 2475 l -12150 2475 l -12150 1500 l - cp gs col0 s gr -% Polyline -n -12975 10875 m -12975 11850 l -13275 11850 l -13275 10875 l - cp gs col0 s gr -% Polyline -n -12300 13200 m - -12300 13500 l gs col0 s gr -% Polyline -n -13425 13200 m - -13425 13500 l gs col0 s gr -% Polyline -n -12000 5550 m -12000 6075 l -12525 6075 l -12525 5550 l - cp gs col0 s gr -% Polyline -n -9225 9675 m -9225 10200 l -9750 10200 l -9750 9675 l - cp gs col0 s gr -% Polyline -n -7725 10875 m -7725 11850 l -8025 11850 l -8025 10875 l - cp gs col0 s gr -% Polyline -n -5700 10875 m -5700 11850 l -6000 11850 l -6000 10875 l - cp gs col0 s gr -% Polyline -n -6975 3675 m -6975 4650 l -7275 4650 l -7275 3675 l - cp gs col0 s gr -% Polyline -n -6975 1575 m -6975 3000 l -7800 3000 l -7800 1575 l - cp gs col0 s gr -% Polyline -n -6975 1575 m -6975 2550 l -7275 2550 l -7275 1575 l - cp gs col0 s gr -% Polyline -n -3300 1200 m - -9375 1200 l gs col0 s gr -/Times-Roman-iso ff 180.00 scf sf --4800 10950 m -gs 1 -1 sc 270.0 rot (2.6) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --5325 10950 m -gs 1 -1 sc 270.0 rot (Proofs in NL 6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --2850 10950 m -gs 1 -1 sc 270.0 rot (Stylesheets to intermediate) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3075 10950 m -gs 1 -1 sc 270.0 rot (Representation 6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --2550 10950 m -gs 1 -1 sc 270.0 rot (2.2-2.3) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --5100 10950 m -gs 1 -1 sc 270.0 rot (Automatic Generation of) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --6450 15000 m -gs 1 -1 sc 270.0 rot ( 6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --6225 15000 m -gs 1 -1 sc 270.0 rot (Assisted Annotation) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --1425 7800 m -gs 1 -1 sc 270.0 rot (0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --3975 9825 m -gs 1 -1 sc 270.0 rot (M4) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --6150 9825 m -gs 1 -1 sc 270.0 rot (M6) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --300 7800 m -gs 1 -1 sc 270.0 rot (0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --600 7800 m -gs 1 -1 sc 270.0 rot (Project Management.) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --825 7875 m -gs 1 -1 sc 270.0 rot (30,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --1950 7800 m -gs 1 -1 sc 270.0 rot (27,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --8775 15000 m -gs 1 -1 sc 270.0 rot ( 6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --8775 18750 m -gs 1 -1 sc 270.0 rot (6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --12375 7725 m -gs 1 -1 sc 270.0 rot (Architectural Design of the Distribution Model) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --8625 6825 m -gs 1 -1 sc 270.0 rot (3.1) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --8925 6825 m -gs 1 -1 sc 270.0 rot (Metadata: use, meaning and ) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --9150 6825 m -gs 1 -1 sc 270.0 rot (classification 6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --12600 1575 m -gs 1 -1 sc 270.0 rot (3,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --12075 1575 m -gs 1 -1 sc 270.0 rot (1.5) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --12375 1575 m -gs 1 -1 sc 270.0 rot (Distribution) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --12600 7725 m -gs 1 -1 sc 270.0 rot ( 9,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --13725 10950 m -gs 1 -1 sc 270.0 rot ( 6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --13500 10950 m -gs 1 -1 sc 270.0 rot (Prototype Implementation) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --12300 5700 m -gs 1 -1 sc 270.0 rot (M3) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --9525 9825 m -gs 1 -1 sc 270.0 rot (M5) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --6450 10950 m -gs 1 -1 sc 270.0 rot ( 6,0) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --6225 10950 m -gs 1 -1 sc 270.0 rot (Assisted Annotation) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --7500 3750 m -gs 1 -1 sc 270.0 rot (Latex-based authoring tool) col0 sh gr -/Times-Roman-iso ff 180.00 scf sf --7725 3825 m -gs 1 -1 sc 270.0 rot (9,0) col0 sh gr -$F2psEnd -rs - -%%EndDocument - @endspecial eop -%%Page: 31 31 -31 30 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(31)94 171 y Fg(9.7)112 b(Pro)6 b(ject)37 b(Managemen)m(t)94 -343 y Fl(The)28 b(Pro)5 b(ject)29 b(managemen)m(t)g(will)d(b)s(e)h -(assured)h(b)m(y)g(the)g(follo)m(wing)f(relev)-5 b(an)m(t)28 -b(roles:)39 b(a\))29 b(Pro)5 b(ject)29 b(Manager,)94 -456 y(b\))g(Exploitation)g(manager,)h(c\))g(W)-8 b(ork-pac)m(k)j(age)33 -b(Leaders)d(d\))f(T)-8 b(ec)m(hnical)29 b(Con)m(tributors)f(and)h(b)m -(y)h(the)g(fol-)94 569 y(lo)m(wing)k(Pro)5 b(ject)36 -b(Bo)s(dies:)50 b(a\))35 b(Pro)5 b(ject)36 b(Co)s(ordination)d -(Committee)j(\(PCC\),)f(b\))g(Pro)5 b(ject)36 b(Exploitation)94 -682 y(Board)31 b(and)e(c\))j(W)-8 b(ork-pac)m(k)j(age)33 -b(T)-8 b(eams.)94 795 y Fi(Pro)6 b(ject)38 b(Manager)32 -b Fl(The)g(mandate)h(of)f(the)h(Pro)5 b(ject)33 b(Manager)h(is)d(to)i -(represen)m(t)f(the)h(Pro)5 b(ject,)34 b(rep)s(ort)94 -907 y(to)28 b(the)f(Commission,)f(monitor)h(o)m(v)m(erall)h(p)s -(erformance)e(of)i(the)f(pro)5 b(ject,)29 b(ensure)d(accomplishmen)m(t) -h(of)g(the)94 1020 y(tec)m(hnical)40 b(ob)5 b(jectiv)m(es,)43 -b(promote)d(pro)5 b(ject)41 b(visibilit)m(y)-8 b(,)39 -b(promote)h(dissemination)e(of)i(pro)5 b(ject)40 b(results)f(in)94 -1133 y(the)d(relev)-5 b(an)m(t)36 b(in)m(ternational)e(forums,)i -(promote)g(acceptance)i(of)e(pro)5 b(ject)36 b(results,)f(administer)f -(pro)5 b(ject)94 1246 y(resources)30 b(and)g(monitor)g(pro)5 -b(ject)31 b(sp)s(ending.)94 1359 y Fi(Exploitation)j(Manager)d -Fl(S/he)f(will)d(b)s(e)i(resp)s(onsible)f(for)h(co)s(ordinating)g -(exploitation)h(activities)f(un-)94 1472 y(dertak)m(en)44 -b(b)m(y)g(the)g(Pro)5 b(ject)44 b(Exploitation)e(Board)i(\(PEB\))h(in)d -(close)i(co)s(op)s(eration)f(with)g(the)h(Pro)5 b(ject)94 -1585 y(Co)s(ordination)28 b(Committee)j(\(PCC\).)94 1698 -y Fi(W)-9 b(ork-pac)m(k)j(age)45 b(Leaders)37 b Fl(They)h(are)g(resp)s -(onsible)d(for)i(the)h(p)s(erformance)f(of)h(W)-8 b(ork-pac)m(k)j -(ages,)43 b(and)94 1811 y(they)31 b(m)m(ust)f(b)s(e)g(committed)g(to)h -(the)g(W)-8 b(ork-pac)m(k)j(age)33 b(for)d(at)i(least)e(\014v)m(e)h -(man)f(mon)m(ths)g(p)s(er)f(y)m(ear.)94 1924 y Fi(T)-9 -b(ec)m(hnical)38 b(Con)m(tributors)32 b Fl(T)-8 b(ec)m(hnical)32 -b(Con)m(tributors)f(are)i(sp)s(ecialised)d(sta\013)j(pro)m(vided)e(b)m -(y)h(the)g(part-)94 2037 y(ners.)39 b(They)26 b(could)g(b)s(e)g(either) -h(p)s(eople)f(activ)m(e)i(on)e(a)i(stable)e(basis)g(in)m(to)h(a)g(W)-8 -b(ork-pac)m(k)j(age,)31 b(or)c(p)s(eople)f(who)94 2149 -y(con)m(tribute)e(from)g(time)g(to)h(time)f(on)g(sp)s(eci\014c)f(tasks) -i(related)f(to)h(the)g(w)m(ork-plan)e(\(external)i(con)m(tributors\).) -94 2262 y Fi(Pro)6 b(ject)36 b(Co)s(ordination)f(Committee)28 -b Fl(The)i(PCC)g(is)g(c)m(haired)g(b)m(y)h(the)g(Pro)5 -b(ject)32 b(Manager)g(and)e(con-)94 2375 y(stituted)i(b)m(y)g(one)g -(represen)m(tativ)m(e)h(from)f(eac)m(h)h(P)m(artner,)g(and)e(is)h(the)g -(main)f(decision)f(b)s(o)s(dy)h(of)h(the)h(Con-)94 2488 -y(sortium.)k(It)25 b(is)f(in)f(c)m(harge)j(of)f(all)e(formal)h -(decisions)f(regarding)h(tec)m(hnical)g(direction)f(of)i(the)g(w)m -(ork,)h(prop)s(er)94 2601 y(in)m(terrelation)32 b(b)s(et)m(w)m(een)i(W) --8 b(ork-pac)m(k)j(ages,)38 b(relations)32 b(with)g(IST)h(O\016ce,)h(p) -s(olicies)e(for)h(promotion)g(of)g(re-)94 2714 y(sults,)c -(administrativ)m(e)f(arrangemen)m(ts.)41 b(In)29 b(view)g(of)h -(minimising)c(managemen)m(t)31 b(o)m(v)m(erhead)g(and)e(pro)5 -b(ject)94 2827 y(costs,)36 b(partners)d(pro)m(viding)e(the)j(Pro)5 -b(ject)35 b(Manager,)h(and)d(the)h(W)-8 b(ork-pac)m(k)j(ages)36 -b(Leaders)e(are)g(required)94 2940 y(to)f(app)s(oin)m(t)e(the)h(same)g -(p)s(erson)f(as)h(their)f(o\016cial)h(represen)m(tativ)m(e)h(in)d(the)j -(Pro)5 b(ject)32 b(Co)s(ordination)e(Com-)94 3053 y(mittee.)94 -3166 y Fi(Pro)6 b(ject)26 b(Exploitation)f(Board)e Fl(The)e(PEB)h(will) -e(b)s(e)h(c)m(haired)h(b)m(y)g(the)g(Pro)5 b(ject)23 -b(Exploitation)e(Manager,)94 3279 y(and)29 b(comp)s(osed)h(b)m(y)g(the) -g(Exploitation)f(Managers)i(of)f(eac)m(h)h(partner.)40 -b(It)30 b(will)d(monitor)j(the)g(state)h(of)f(the)94 -3391 y(art)25 b(in)d(the)j(domains)e(of)h(con)m(ten)m(t-based)i -(information)d(tec)m(hnologies,)j(W3C)f(activities,)g(W)-8 -b(eb)25 b(publishing,)94 3504 y(and)37 b(digital)f(libraries.)59 -b(It)38 b(will)d(b)s(e)i(resp)s(onsible)d(for)k(planning)d(the)i -(dissemination)e(and)i(exploitation)94 3617 y(strategies)31 -b(for)f(the)h(consortium,)f(to)h(b)s(e)f(appro)m(v)m(ed)g(b)m(y)g(the)h -(PCC.)94 3730 y Fi(W)-9 b(ork-pac)m(k)j(age)41 b(T)-9 -b(eams)34 b Fl(They)g(are)h(constituted)g(of)g(the)g(tec)m(hnical)f -(con)m(tributors.)53 b(Eac)m(h)35 b(team)h(will)94 3843 -y(b)s(e)e(c)m(haired)f(b)m(y)i(a)f(W)-8 b(ork-pac)m(k)j(age)38 -b(Leader,)d(and)f(it)g(will)d(b)s(e)j(in)f(c)m(harge)j(of)e(carrying)f -(out)i(the)f(tec)m(hnical)94 3956 y(w)m(ork)c(describ)s(ed)f(in)g -(Section)h(9.)94 4196 y Fi(9.7.1)105 b(Decision)37 b(Pro)s(cess)94 -4368 y Fl(Decisions)c(will)f(normally)g(b)s(e)i(tak)m(en)h(b)m(y)f -(seeking)g(consensus.)51 b(Ho)m(w)m(ev)m(er,)37 b(after)e(a)f -(reasonable)g(amoun)m(t)94 4481 y(of)k(time)f(has)g(b)s(een)g(allo)m(w) -m(ed)g(to)i(illustrate)c(and)i(defend)g(of)g(con\015icting)g(p)s -(ositions,)g(in)g(order)g(to)h(a)m(v)m(oid)94 4594 y(deadlo)s(c)m(k)d -(in)f(pro)5 b(ject)35 b(op)s(erational)f(progress,)j(the)e(appro)m(v)-5 -b(al)34 b(of)i(t)m(w)m(o-third)f(ma)5 b(jorit)m(y)35 -b(of)g(the)g(partners)94 4706 y(will)23 b(b)s(e)j(su\016cien)m(t.)38 -b(If)26 b(the)g(decision)f(b)s(eing)f(tak)m(en)j(is)e(unacceptable)h -(to)h(partners)e(found)g(in)g(the)h(minorit)m(y)94 4819 -y(p)s(ositions,)d(the)i(resolution)d(of)i(the)g(con\015ict)g(will)e(b)s -(e)h(elev)-5 b(ated)24 b(to)h(eac)m(h)g(partner's)f(higher)e(executiv)m -(e)j(lev)m(el.)94 4932 y(If)d(no)h(resolution)e(is)g(p)s(ossible,)h -(than)h(the)f(standard)g(\\red)h(\015ag")g(pro)s(cedure)e(will)f(b)s(e) -i(used,)i(as)f(a)f(last)h(resort.)94 5045 y(Either)29 -b(the)i(PCC)e(or)i(the)f(Pro)5 b(ject)31 b(Manager)h(can)f(initiate)e -(the)h(con\015ict)h(resolution)d(pro)s(cedure.)p eop -%%Page: 32 32 -32 31 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(32)94 171 y Fi(9.7.2)105 b(Information)34 b(Flo)m(w)94 -343 y Fl(Information)29 b(\015o)m(w)h(within)d(the)j(Pro)5 -b(ject)31 b(will)c(b)s(e)j(ensured)e(b)m(y)i(exc)m(hange)i(of)e(in)m -(ternal)e(tec)m(hnical)i(pap)s(ers,)94 456 y(noti\014cation)f(of)g -(relev)-5 b(an)m(t)30 b(new)f(publications)d(tec)m(hnologies)k(or)g -(standards,)e(and)h(rep)s(orts)g(from)f(external)94 569 -y(meetings.)60 b(All)36 b(tec)m(hnical)h(do)s(cumen)m(tation)f -(generated)i(b)m(y)f(the)g(pro)5 b(ject)37 b(should)e(b)s(e)i(exc)m -(hangeable)h(in)94 682 y(electronic)24 b(format,)i(according)e(to)g(a)h -(set)f(of)g(guidelines)d(to)k(b)s(e)e(agreed)i(at)g(pro)5 -b(ject)24 b(start-up.)38 b(The)24 b(pro)5 b(ject)94 795 -y(Manager)33 b(will)c(enforce)j(adherence)g(to)g(these)g(guidelines.)42 -b(Only)30 b(strictly)h(formal)g(corresp)s(ondence)g(will)94 -907 y(b)s(e)k(exc)m(hanged)h(b)m(y)f(ordinary)f(mail)g(and)g(telefax.) -56 b(Urgen)m(t)37 b(corresp)s(ondence)d(o)m(v)m(er)j(e-mail)e(will)d(b) -s(e)j(sen)m(t)94 1020 y(with)29 b(a)i(request)f(for)g(explicit)f(ac)m -(kno)m(wledgemen)m(t.)94 1133 y(The)40 b(Co)s(ordinating)e(P)m(artner)i -(will)e(b)s(e)h(resp)s(onsible)f(to)j(prepare)e(and)h(main)m(tain)f(a)i -(W)-8 b(eb)41 b(page)g(of)f(the)94 1246 y(pro)5 b(ject)43 -b(and)f(a)g(CVS)g(rep)s(ository)f(\(also)i(a)m(v)-5 b(ailable)42 -b(via)g(W)-8 b(eb\).)77 b(The)42 b(CVS)g(rep)s(ository)f(is)g(mean)m(t) -j(to)94 1359 y(k)m(eep)g(the)f(trace)i(of)e(the)h(o)m(v)m(erall)f -(progress)g(of)h(the)f(Pro)5 b(ject,)48 b(and)42 b(it)h(will)e(b)s(e)h -(used)h(b)m(y)g(the)g(PCC)g(to)94 1472 y(monitor)34 b(the)h(state)i(of) -e(adv)-5 b(ancemen)m(t)36 b(of)f(the)g(w)m(ork.)55 b(Eac)m(h)36 -b(partner)e(p)s(erio)s(dically)d(submit)i(rep)s(orts)i(to)94 -1585 y(the)27 b(prime)f(con)m(tractor,)k(listing)25 b(all)h(tec)m -(hnical)h(con)m(tributions,)g(publications,)e(meeting)j(attendance)g -(and)94 1698 y(other)j(information)d(whic)m(h)h(ma)m(y)i(help)e(in)g -(understanding)f(the)j(pro)m(vided)e(e\013ort)i(and)f(cost)h -(\014gures.)94 1811 y(The)g(Pro)5 b(ject)33 b(will)c(establish)h(a)i -(high)e(qualit)m(y)h(W)-8 b(eb)32 b(site)f(for)h(in)m(ternal)e(and)h -(external)h(comm)m(unications.)94 1924 y(It)h(will)c(b)s(e)j(op)s -(erational)g(as)h(from)f(one)h(mon)m(th)f(of)h(the)g(commencemen)m(t)h -(date)f(and)f(will)e(b)s(e)i(main)m(tained)94 2037 y(during)19 -b(the)j(pro)5 b(ject)23 b(duration.)36 b(The)21 b(\\mem)m(b)s(ers)h -(only")f(area)i(will)c(include)g(e.g.)39 b(all)21 b(priv)-5 -b(ate)21 b(deliv)m(erables,)94 2149 y(progress)i(and)f(managemen)m(t)j -(rep)s(orts,)f(and)f(cost)h(statemen)m(ts.)40 b(The)23 -b(op)s(en)f(area)i(will)d(include)g(the)i(pro)5 b(ject)94 -2262 y(presen)m(tation)24 b(as)g(de\014ned)f(in)f(App)s(endix)g(2)i(of) -g(the)g(\\Guidelines)e(for)h(Con)m(tract)j(Preparation")d(do)s(cumen)m -(t,)94 2375 y(all)37 b(public)f(deliv)m(erables,)j(and)e(an)m(y)i -(relev)-5 b(an)m(t)38 b(information)f(suggested)i(b)m(y)f(the)h(Pro)5 -b(ject)39 b(Exploitation)94 2488 y(Board.)94 2728 y Fi(9.7.3)105 -b(Qualit)m(y)35 b(Pro)s(cedures)94 2900 y Fl(F)-8 b(or)41 -b(all)e(deliv)m(erables,)j(the)e(follo)m(wing)f(review)h(pro)s(cedure)f -(will)f(b)s(e)i(adopted:)61 b(release)40 b(b)m(y)h(the)f(W)-8 -b(ork-)94 3013 y(P)m(ac)m(k)j(age)43 b(Leader,)g(t)m(w)m(o-w)m(eek)f -(review)e(p)s(erio)s(d)d(for)j(commen)m(ts)h(b)m(y)f(the)g(PCC,)g(t)m -(w)m(o-w)m(eek)i(amendmen)m(t)94 3126 y(p)s(erio)s(d)31 -b(to)k(incorp)s(orate)e(PCC)g(recommendations,)h(one-w)m(eek)h -(balloting)d(p)s(erio)s(d)g(for)h(appro)m(v)-5 b(al)34 -b(b)m(y)f(the)94 3239 y(PCC.)94 3479 y Fi(9.7.4)105 b(Con\014den)m -(tialit)m(y)35 b(and)g(IPR)g(handling)94 3650 y Fl(Matters)25 -b(related)e(to)h(Con\014den)m(tialit)m(y)d(and)i(IPR)g(handling)d(will) -h(b)s(e)i(de\014ned)f(in)g(the)h(\\Consortium)f(Agree-)94 -3763 y(men)m(t".)59 b(As)37 b(regards)f(literature)f(pap)s(ers)g -(originated)h(from)g(w)m(ork)g(in)f(the)h(Pro)5 b(ject,)39 -b(there)e(will)c(b)s(e)j(t)m(w)m(o)94 3876 y(categories)c(of)e(pap)s -(ers:)205 4064 y(1.)46 b(Pro)5 b(ject)31 b(Endorsed)e(Publications,)g -(requiring)f(noti\014cation)h(and)h(appro)m(v)-5 b(al)30 -b(b)m(y)g(the)h(PCC.)205 4251 y(2.)46 b(Pro)5 b(ject-related)29 -b(publications,)d(only)h(requiring)f(noti\014cation)h(to)i(the)f(PCC.)f -(They)g(m)m(ust)h(con)m(tain)321 4364 y(an)f(ac)m(kno)m(wledgemen)m(t)h -(of)e(supp)s(ort)f(b)m(y)h(the)h(pro)5 b(ject)27 b(Consortium)d(and,)j -(if)f(required)e(b)m(y)i(the)h(PCC,)321 4477 y(a)k(disclaimer)d(that)j -(the)g(views)e(are)i(not)f(necessarily)g(those)h(of)f(the)h -(Consortium.)94 4665 y(Concerning)37 b(p)s(ossible)f(con)m(tributions)g -(to)j(Standards,)g(they)f(will)e(b)s(e)h(directly)g(submitted)g(b)m(y)h -(pro)5 b(ject)94 4778 y(mem)m(b)s(ers.)94 5064 y Fj(10)135 -b(Clustering)94 5267 y Fl(Not)31 b(applicable.)p eop -%%Page: 33 33 -33 32 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(33)94 171 y Fj(11)135 b(Other)45 b(con)l(tractual)h(conditions)94 -378 y Fg(11.1)112 b(Other)38 b(signi\014can)m(t)e(pro)6 -b(ject)38 b(costs)94 549 y Fl(One)e(category)j(of)e(other)g -(signi\014can)m(t)f(pro)5 b(ject)37 b(costs)g(is)f(due)g(to)i(\\audit)e -(certi\014cates")i(for)e(INRIA)h(and)94 662 y(DFKI.)235 -775 y(UNIBO)26 b(\(co)s(ordinator\))f(requires)f(11.25Keuro)j(to)f(co)m -(v)m(er)h(the)e(mem)m(b)s(ership)e(fee)j(to)g(the)f(W)-8 -b(orld)25 b(Wide)94 888 y(W)-8 b(eb)28 b(Consortium)e(\(5000)k(dollars) -c(p)s(er)h(y)m(ear\))h(for)g(the)g(duration)e(of)i(the)g(Pro)5 -b(ject.)40 b(W)-8 b(e)29 b(recall)e(that)h(mem-)94 1001 -y(b)s(ership)e(is)i(required)g(in)f(order)i(to)h(participate)e(to)i -(some)g(activities)e(and)h(W)-8 b(orking)29 b(Groups)f(of)h(strategic) -94 1114 y(relev)-5 b(ance)26 b(for)g(MO)m(W)m(GLI,)h(suc)m(h)f(as)g -(the)g(MathML)h(or)f(RDF)g(W)m(G's.)41 b(Establishing)23 -b(a)j(tigh)m(t)h(co)s(op)s(eration)94 1227 y(with)32 -b(the)i(W)-8 b(orld)33 b(Wide)g(W)-8 b(eb)35 b(Consortium)d(is)g(moreo) -m(v)m(er)j(a)f(crucial)f(p)s(oin)m(t)f(of)i(our)f(dissemination)e(and) -94 1340 y(exploitation)f(plan.)235 1452 y(Finally)-8 -b(,)29 b(a)i(small)e(amoun)m(t)i(of)f(money)h(is)e(required)g(to)i(co)m -(v)m(er)h(conference)f(fees.)94 1696 y Fg(11.2)112 b(T)-9 -b(ra)m(v)m(el)37 b(costs)g(outside)g(MS/AS)94 1867 y -Fl(Some)26 b(tra)m(v)m(els)g(outside)g(MS/AS)f(will)e(b)s(e)j(p)s -(ossibly)d(required)h(for)h(dissemination)e(purp)s(oses.)38 -b(This)24 b(co)m(v)m(ers)94 1980 y(b)s(oth)j(the)g(participation)f(to)i -(In)m(ternational)f(Conferences)g(outside)g(Europ)s(e)f(to)i(presen)m -(t)g(scien)m(ti\014c)e(w)m(orks)94 2093 y(related)j(to)h(the)g(Pro)5 -b(ject,)31 b(participation)c(to)j(relev)-5 b(an)m(t)30 -b(In)m(ternational)f(Meetings)h(\(suc)m(h)f(as)h(A)m(C)f(meetings)94 -2206 y(of)g(the)f(W3C\),)i(and)e(p)s(ossibly)d(tra)m(v)m(els)30 -b(aimed)d(to)j(establish)d(co)s(op)s(erations)h(with)f(other)i(related) -f(pro)5 b(jects)94 2319 y(outside)21 b(MS/AS.)g(F)-8 -b(or)22 b(ob)m(vious)f(reasons,)i(a)f(detailed)f(list)f(of)h(these)h -(tra)m(v)m(els)g(cannot)g(b)s(e)f(presen)m(tly)f(de\014ned,)94 -2432 y(and)30 b(the)g(cost)i(\014gures)d(in)g(the)i(CPF's)f(are)h -(purely)e(indicativ)m(e.)p eop -%%Page: 34 34 -34 33 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(34)94 171 y Fj(References)139 374 y Fl([1])47 b(Comm)m(unication) -29 b(of)h(the)h(A)m(CM.)g(Sp)s(ecial)e(Issue)h(on)g(Digital)g -(Libraries.)e(April)g(1998.)139 562 y([2])47 b Fd(Digital)28 -b(Libr)-5 b(aries)29 b(in)g(Computer)g(Scienc)-5 b(e:)40 -b(the)28 b(MeDo)-5 b(c)28 b(Appr)-5 b(o)g(ach)p Fl(.)29 -b(Lecture)d(Notes)h(in)d(Computer)281 675 y(Science)30 -b(1392,)i(Springer)d(V)-8 b(erlag.)31 b(1998.)139 862 -y([3])47 b(Tim)110 b(Berner's)h(Lee.)h Fd(The)c(Semantic)g(Web)p -Fl(.)j(W3C)g(Arc)m(hitecture)h(Note,)133 b(1998.)281 -975 y Fb(http://www.w3.org/Design)o(Iss)o(ues/)o(Sema)o(nti)o(c.ht)o -(ml)139 1163 y Fl([4])47 b(Common)36 b(Criteria)f(for)i(Information)e -(T)-8 b(ec)m(hnology)38 b(Securit)m(y)e(Ev)-5 b(aluation.)35 -b(P)m(art)j(1,2,)h(3.)f(August)281 1276 y(1999,)32 b(V)-8 -b(ersion)30 b(2.1,)i(CCIMB-99-031.)139 1463 y([5])47 -b(The)30 b(Dublin)d(Core)k(Metadata)i(Inititiativ)m(e.)c -Fb(http://purl.org/dc/)139 1651 y Fl([6])47 b(C.LaGuardia,)37 -b(B.A.Mitc)m(hell)f(eds.)g Fd(Finding)i(Common)i(Gr)-5 -b(ound:)54 b(Cr)-5 b(e)g(ating)39 b(the)f(Libr)-5 b(ary)39 -b(of)f(the)281 1764 y(F)-7 b(utur)i(e)26 b(without)i(Diminishing)e(the) -g(Libr)-5 b(ary)27 b(of)f(the)h(Past)p Fl(.)c(New)h(Y)-8 -b(ork:)37 b(Neal-Sc)m(h)m(uman)24 b(Publishers,)281 1877 -y(Inc.1998.)139 2065 y([7])47 b(Goldfarb)30 b(and)g(Presco)s(d.)h -Fd(The)i(XML)f(Handb)-5 b(o)g(ok)p Fl(.)34 b(The)c(C.F.Goldfarb)g -(Series)g(on)h(Op)s(en)f(Informa-)281 2177 y(tion)g(Managemen)m(t.)i -(Pren)m(tice)f(Hall.)f(1998.)139 2365 y([8])47 b(G.)31 -b(Huet,)g(G.)g(Plotkin)e(\(eds\).)i Fd(L)-5 b(o)g(gic)g(al)34 -b(F)-7 b(r)i(ameworks)p Fl(.)33 b(Cam)m(bridge)d(Univ)m(ersit)m(y)f -(Press.)i(1991.)139 2553 y([9])47 b(G.)31 b(Huet,)g(G.)g(Plotkin)e -(\(eds\).)i Fd(L)-5 b(o)g(gic)g(al)34 b(Envir)-5 b(onments)p -Fl(.)32 b(Cam)m(bridge)d(Univ)m(ersit)m(y)h(Press.)g(1993.)94 -2740 y([10])47 b(M.Lev)m(en)m(thal,)114 b(D.Lewis,)g(M.F)-8 -b(uc)m(hs.)98 b Fd(Designing)92 b(XML)h(Internet)h(Applic)-5 -b(ations)p Fl(.)99 b(The)281 2853 y(C.F.Goldfarb)55 b(Series)g(on)h(Op) -s(en)f(Information)f(Managemen)m(t.)59 b(Pren)m(tice)d(Hall,)62 -b(ISBN)55 b(0-13-)281 2966 y(616822-1.)34 b(1998.)94 -3154 y([11])47 b(Mathematical)35 b(Markup)f(Language)h(\(MathML\))h(V) --8 b(ersion)34 b(2.0.)h(W3C)g(Prop)s(osed)f(Recommenda-)281 -3267 y(tion,)c(Jan)m(uary)g(2001.)i Fb(http://www.w3.org/TR/2001/)o -(PR-)o(Math)o(ML2-)o(200)o(1010)o(8/)94 3454 y Fl([12])47 -b(Megginson.)p Fd(Structuring)34 b(XML)f(Do)-5 b(cuments)p -Fl(.)32 b(The)f(C.F.Goldfarb)g(Series)f(on)h(Op)s(en)f(Information)281 -3567 y(Managemen)m(t.)j(Pren)m(tice)d(Hall.)g(1998.)94 -3755 y([13])47 b(E.)38 b(Maler,)j(J.)d(El)f(Andaloussi.)f -Fd(Developing)k(SGML)g(DTD's.)f(F)-7 b(r)i(om)42 b(text)e(to)g(mo)-5 -b(del)42 b(to)e(markup)p Fl(.)281 3868 y(Pren)m(tice)30 -b(Hall,)g(ISBN)g(0-13-309881-8,)36 b(1996.)94 4055 y([14])47 -b(OMDo)s(c:)387 b(A)203 b(Standard)f(for)h(Op)s(en)e(Mathematical)k(Do) -s(cumen)m(ts.)281 4168 y Fb(http://www.mathweb.org/o)o(mdo)o(c/)94 -4356 y Fl([15])47 b(The)30 b(Op)s(enMath)f(So)s(ciet)m(y)-8 -b(.)32 b Fb(http://www.nag.co.uk/pr)o(ojec)o(ts/)o(open)o(math)o(/om)o -(soc/)94 4544 y Fl([16])47 b(Resource)31 b(Description)e(F)-8 -b(ramew)m(ork)32 b(\(RDF\))f Fb(http://www.w3.org/RDF/)94 -4731 y Fl([17])47 b(XML)30 b(Linking)f(Language)i(\(XLink\).)f -Fb(http://www.w3.org/XML/Li)o(nkin)o(g)p Fl(.)94 4919 -y([18])47 b(XSL)39 b(T)-8 b(ransformations)39 b(\(XSL)-8 -b(T\))40 b(V)-8 b(ersion)39 b(1.0.)j(W3C)e(Recommendation)g(16)g(No)m -(v)m(em)m(b)s(er)h(1999.)281 5032 y Fb(http://www.w3.org/TR/xsl)o(t)p -eop -%%Page: 35 35 -35 34 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(35)94 171 y Fj(A)134 b(Consortium)46 b(Description)94 -374 y Fl(The)30 b(Consortium)f(is)g(comp)s(osed)h(of)h(the)f(follo)m -(wing)f(partners:)230 562 y Fe(\017)46 b Fl(Univ)m(ersit)m(y)20 -b(of)g(Bologna)h(\(Italy\),)i(Departmen)m(t)f(of)e(Computer)g(Science)g -Fb(http://www.cs.unibo.it)p Fl(.)321 675 y(Resp)s(onsible:)38 -b(A.Asp)s(erti.)230 862 y Fe(\017)46 b Fl(INRIA)31 b(Ro)s(cquencourt)f -(\(F)-8 b(rance\))32 b Fb(http://www.inria.fr)p Fl(.)j(Resp)s(onsible:) -k(H.Herb)s(elin.)230 1050 y Fe(\017)46 b Fl(German)34 -b(Researc)m(h)h(Cen)m(ter)f(for)f(Arti\014cial)f(In)m(telligence)h(Gm)m -(bH,)h(DFKI)g(\(German)m(y\).)52 b(Resp)s(on-)321 1163 -y(sible:)39 b(M.Kohlhase.)230 1351 y Fe(\017)46 b Fl(Katholiek)m(e)28 -b(Univ)m(ersiteit)e(Nijmegen,)i(\(The)f(Netherlands\))g -Fb(http://www.cs.kun.nl)p Fl(.)34 b(Resp)s(on-)321 1463 -y(sible:)39 b(H.Geuv)m(ers.)230 1651 y Fe(\017)46 b Fl(Max)31 -b(Planc)m(k)g(Institute)e(for)h(Gra)m(vitational)h(Ph)m(ysics)e(\(Alb)s -(ert)h(Einstein)e(Institute/AEI\).)321 1764 y Fb(http://www.aei.mpg.de) -p Fl(.)35 b(Resp)s(onsible:)j(B.F.Sc)m(h)m(utz.)230 1952 -y Fe(\017)46 b Fl(T)-8 b(rusted)30 b(Logic)h(\(F)-8 b(rance\))32 -b Fb(http://www.trusted-logi)o(c.fr)o Fl(.)j(Resp)s(onsible:)j -(D.Bolignano.)235 2139 y(The)h(Consortium)e(has)i(b)s(een)f(built)f -(with)h(the)h(aim)f(to)i(join)e(some)i(essen)m(tial)e(kno)m(who)m(w)i -(in)d(di\013er-)94 2252 y(en)m(t)j(areas)g(of)f(I.T.)g(related)g(to)h -(the)f(creation)h(and)e(main)m(tenance)i(of)f(a)h(digital)d(library)g -(of)i(structured)94 2365 y(mathematical)31 b(kno)m(wledge.)235 -2478 y(As)41 b(describ)s(ed)e(in)h(the)h(T)-8 b(ec)m(hnical)41 -b(Annex,)i(MO)m(W)m(GLI)g(is)d(mean)m(t)i(to)g(dev)m(elop)f(the)g(tec)m -(hnological)94 2591 y(infrastructure)18 b(required)h(to)i(in)m(tegrate) -h(existing)d(Markup)h(languages)h(and)e(standards)h(suc)m(h)g(as)g -(MathML,)94 2704 y(Op)s(enMath)36 b(or)h(OMDo)s(c,)i(co)m(v)m(ering)f -(di\013eren)m(t)e(asp)s(ects)h(of)g(mathematical)g(in)m(telligence,)g -(in)m(to)g(a)g(single)94 2817 y(application.)g(Exp)s(ertise)23 -b(on)h(these)h(languages)f(and)g(the)h(related)f(tec)m(hnologies)h(is)e -(resp)s(ectiv)m(ely)h(pro)m(vided)94 2930 y(b)m(y)30 -b(the)h(follo)m(wing)e(partners:)94 3117 y Fi(MathML)45 -b Fl(Departmen)m(t)40 b(of)f(Computer)f(Science,)j(Univ)m(ersit)m(y)d -(of)h(Bologna,)j(mem)m(b)s(er)c(of)h(the)g(W)-8 b(orld)321 -3230 y(Wide)35 b(W)-8 b(eb)37 b(Consortium)d(and)h(of)g(the)h(W3C)g(W) --8 b(orking)36 b(Group)f(on)g(MathML;)i(Lemme-Pro)5 b(ject)321 -3343 y(at)31 b(INRIA)g(Sophia-An)m(tip)s(olis.)94 3531 -y Fi(Op)s(enMath)45 b Fl(Univ)m(ersit)m(y)25 b(of)i(Eindho)m(v)m(en)e -(\(sub-site)h(of)h(Nijmegen\):)39 b(Professor)26 b(Arjeh)g(Cohen)g(is)f -(one)i(of)321 3644 y(the)f(leaders)g(of)g(the)g(Op)s(enMath)f -(initiativ)m(e,)g(and)g(MO)m(W)m(GLI)i(is)e(exp)s(ected)i(to)f(tak)m(e) -h(the)g(maxim)m(um)321 3757 y(pro\014t)j(from)g(the)g(successful)g(Op)s -(enMath)f(Esprit)g(pro)5 b(ject,)31 b(no.24969.)94 3944 -y Fi(OMDo)s(c)46 b Fl(DFKI.)22 b(Dr.Mic)m(hael)f(Kohlhase)g(is)f(the)i -(main)e(auh)m(tor)i(of)f(OMDo)s(c;)k(DFKI)d(has)f(a)h(long)f(researc)m -(h)321 4057 y(tradition)j(in)f(the)i(managemen)m(t)h(of)f(mathematical) -g(kno)m(wledge)g(bases,)h(metadata,)h(searc)m(hing)e(and)321 -4170 y(retriev)-5 b(al)30 b(issues.)94 4358 y(More)41 -b(generally)-8 b(,)42 b(the)f(Departmen)m(t)g(of)g(Computer)e(Science)h -(in)f(Bologna)i(has)f(a)g(long)g(exp)s(erience)g(in)94 -4471 y(XML-related)f(tec)m(hnology)-8 b(,)43 b(and)38 -b(in)g(particular)f(in)h(their)g(application)f(to)i(the)g(particular)f -(domain)f(of)94 4583 y(mathematical)f(dev)m(elopmen)m(ts,)h(as)e -(testi\014ed)g(b)m(y)h(the)f(\\Hyp)s(ertextual)g(Electronic)g(Library)f -(of)h(Mathe-)94 4696 y(matics")k(\(HELM\))g(Pro)5 b(ject)40 -b(\()p Fb(http://www.cs.unibo.it/h)o(elm)p Fl(\).)59 -b(A)38 b(main)g(comp)s(onen)m(t)h(of)f(HELM)94 4809 y(is)g(the)i -(GtkMathView)g(widget)f(\()p Fb(http://www.cs.unibo.it/he)o(lm/m)o -(ml-w)o(idg)o(et/i)o(ndex)o(.ht)o(ml)p Fl(\),)d(a)94 -4922 y(C++)29 b(rendering)f(engine)h(for)h(MathML)g(that)h(will)c(b)s -(e)i(distributed)e(as)j(an)g(o\016cial)f(pac)m(k)-5 b(age)32 -b(of)e(the)g(next)94 5035 y(Debian)g(release)h(of)f(Lin)m(ux.)235 -5148 y(Similarly)-8 b(,)22 b(the)h(Lemme)g(Pro)5 b(ject)24 -b(in)d(Sophia-An)m(tip)s(olis)f(has)i(a)i(large)f(exp)s(erience)f(of)h -(edition)f(of)h(math-)94 5261 y(ematical)32 b(ob)5 b(jects.)47 -b(It)32 b(dev)m(elops)g(the)g(graphical)f(en)m(vironmen)m(t)h(Pco)s(q,) -h(dedicated)f(to)h(the)f(dev)m(elopmen)m(t)94 5374 y(of)39 -b(mathematical)g(pro)s(ofs,)g(using)e(the)i(Co)s(q)f(pro)s(of)g -(assistan)m(t.)66 b(Among)38 b(man)m(y)h(features,)i(Pco)s(q)e(has)f(a) -p eop -%%Page: 36 36 -36 35 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(36)94 171 y(sophisticated)30 b(t)m(w)m(o)i(dimensional)c(form)m -(ula)j(and)f(natural)g(language)h(pro)s(of)f(edition)g(comp)s(onen)m -(t,)i(allo)m(w-)94 284 y(ing)i(in)m(tuitiv)m(e)f(and)h(p)s(o)m(w)m -(erful)g(in)m(teractions.)53 b(Built)34 b(on)g(the)h(Figue)g(en)m -(vironmen)m(t,)g(Pco)s(q)g(can)g(b)s(e)f(made)94 397 -y(compatible)k(with)g(MathML.)i(The)e(Pco)s(q)h(in)m(terface)h(is)e(in) -m(tensiv)m(ely)f(used)h(b)m(y)h(teams)h(whose)f(researc)m(h)94 -510 y(activit)m(y)31 b(concerns)f(the)h(certi\014cation)f(of)h -(mathematical)f(algorithms.)235 623 y(DFKI)36 b(will)d(con)m(tribute)j -(requiremen)m(ts)f(and)g(metadata)i(from)f(the)g(viewp)s(oin)m(t)e(of)i -(educational)f(ap-)94 736 y(plications)27 b(including)f(searc)m(h)j -(functionalities.)38 b(It)29 b(will)d(activ)m(ely)k(w)m(ork)f(on)g -(presen)m(tational)f(transforma-)94 849 y(tions,)37 b(the)e(generation) -h(of)g(pro)s(ofs)f(in)f(natural)h(language)h(as)g(w)m(ell)e(as)i(on)f -(kno)m(wledge)h(bases)g(for)f(math-)94 962 y(ematical)43 -b(kno)m(wledge)h(DFKI)f(in)m(tends)f(to)i(exploit)e(the)h(results)f(of) -h(the)h(MO)m(W)m(GLI)g(pro)5 b(ject)44 b(in)e(pilot)94 -1075 y(applications)33 b(in)g(curren)m(t)h(and)f(planned)g(researc)m(h) -i(and)f(in)f(pro)5 b(jects)34 b(for)g(the)h(protot)m(ypical)f -(implemen-)94 1187 y(tation)h(of)g(in)m(telligen)m(t)e(en)m(vironmen)m -(ts)h(for)h(learning)e(of)h(mathematics.)54 b(In)34 b(particular,)h -(the)f(kno)m(wledge)94 1300 y(represen)m(tation)26 b(for)h(mathematics) -f(on)h(the)f(W)-8 b(eb)27 b(is)f(imp)s(ortan)m(t)f(for)i(suc)m(h)f(W)-8 -b(eb-based)27 b(systems.)39 b(Kno)m(wl-)94 1413 y(edge)c(bases)f(that)h -(pro)m(vide)e(a)i(common)f(rep)s(ository)f(and)h(on)m(tology)h(for)f -(mathematical)h(kno)m(wledge)f(are)94 1526 y(indisp)s(ensible)26 -b(in)31 b(systems)g(that)h(in)m(tegrate)h(v)-5 b(arious)31 -b(systems)h(w)m(orking)f(on)g(mathematical)h(kno)m(wledge.)94 -1639 y(DFKI)37 b(also)g(has)g(a)g(\014erce)g(in)m(terest)h(in)d -(pushing)g(and)h(lev)m(eraging)h(the)g(qualit)m(y)g(of)g -(standardisation)e(ef-)94 1752 y(forts)h(within)d(the)j(w)m(orldwide)e -(initiativ)m(e)g(of)i(the)g(Seman)m(tic)g(W)-8 b(eb)37 -b(education)e(systems)h(and)f(electronic)94 1865 y(publishing.)235 -1978 y(In)28 b(order)g(to)h(immediately)e(disp)s(ose)f(of)j(a)g(large)f -(rep)s(ository)g(of)g(structured)g(mathematical)g(informa-)94 -2091 y(tion,)39 b(the)f(consortium)f(comprises)g(the)h(dev)m(elop)s -(ers)f(of)h(one)g(of)g(the)f(most)i(successful)d(pro)s(of)h(assistan)m -(t)94 2204 y(to)s(ols)21 b(curren)m(tly)f(a)m(v)-5 b(ailable:)36 -b(the)21 b(Co)s(q)g(pro)s(of)f(engine)h(\()p Fb -(http://pauillac.inria.fr/)o(coq/)o Fl(\))16 b(of)21 -b(INRIA-)94 2317 y(Ro)s(cquencourt.)40 b(The)28 b(Co)s(q)f(standard)h -(library)e(includes)f(more)k(than)f(thousand)f(lemmas)h(and)f(theorems) -94 2429 y(and)h(the)i(whole)e(n)m(um)m(b)s(er)f(of)j(statemen)m(ts)g -(pro)m(v)m(ed)g(b)m(y)e(users)h(is)f(ev)-5 b(aluated)29 -b(to)g(h)m(undred)e(thousands,)i(co)m(v-)94 2542 y(ering)f -(arithmetics,)h(algebra,)g(analysis)f(and)g(computer)h(science.)40 -b(W)-8 b(e)30 b(exp)s(ect)g(to)f(in)m(tegrate)h(the)g(curren)m(t)94 -2655 y(di\013eren)m(t)36 b(w)m(a)m(ys)i(of)f(bro)m(wsing,)g(searc)m -(hing)g(and)f(rendering)f(Co)s(q)i(mathematical)g(dev)m(elopmen)m(ts)g -(in)m(to)g(a)94 2768 y(coheren)m(t)31 b(and)f(W)-8 b(eb-orien)m(ted)32 -b(arc)m(hitecture)f(op)s(en)e(to)i(the)g(Co)s(q)f(user)g(comm)m(unit)m -(y)g(and)f(b)s(ey)m(ond.)235 2881 y(An)22 b(alternativ)m(e)h(route)g -(for)g(the)g(creation)g(of)f(con)m(ten)m(t-based)j(mathematical)e -(information)e(from)h(stan-)94 2994 y(dard)i(digital)g(rep)s(ositories) -f(b)m(y)i(means)h(of)f(a)g(suitable)f(L)1978 2977 y Ff(A)2017 -2994 y Fl(T)2068 3014 y(E)2118 2994 y(X-based)i(authoring)e(system)h -(will)e(b)s(e)h(explored)94 3107 y(b)m(y)29 b(the)h(Alb)s(ert)e -(Einstein)f(Institute)i(\(AEI\))h(in)e(Golm)h(\(German)m(y\).)41 -b(AEI)29 b(publishes)d(a)k(solely)e(electronic)94 3220 -y(review)36 b(journal,)h Fd(Living)h(R)-5 b(eviews)39 -b(in)g(R)-5 b(elativity)38 b Fl(on)e(the)h(W)-8 b(eb,)40 -b(whic)m(h)35 b(pro)m(vides)h(refereed,)j(regularly)94 -3333 y(up)s(dated)27 b(review)g(articles)h(on)g(all)g(areas)h(of)f(gra) -m(vitational)g(ph)m(ysics.)39 b(Since)28 b(its)f(release)i(in)e(Jan)m -(uary)h(1998)94 3446 y(the)i(journal)e(has)h(b)s(ecome)h(a)f(primary)f -(en)m(try)i(p)s(oin)m(t)e(for)h(studen)m(ts,)h(lecturers)f(and)f -(researc)m(hers)i(alik)m(e)g(for)94 3559 y(up-to-date)f(information)d -(on)i(the)g(curren)m(t)g(status)h(of)f(researc)m(h)g(in)f(gra)m -(vitational)h(ph)m(ysics.)39 b(Mo)m(ving)28 b(this)94 -3671 y(unique)d(rep)s(ository)i(and)g(comm)m(unication)g(forum)f(of)i -(curren)m(t)f(ph)m(ysical)f(and)h(mathematical)g(kno)m(wledge)94 -3784 y(in)32 b(relativit)m(y)h(to)h(con)m(ten)m(t)i(mark-up,)d(making)g -(it)g(a)m(v)-5 b(ailable)33 b(for)g(seman)m(tic)h(searc)m(h,)h(and)e -(for)g(re-use)h(and)94 3897 y(ev)-5 b(aluation)30 b(e.g.)44 -b(in)30 b(math)h(algebra)g(systems)g(motiv)-5 b(ates)32 -b(the)f(in)m(v)m(olv)m(emen)m(t)g(in)f(the)h(MO)m(W)m(GLI)i(pro)5 -b(ject.)94 4010 y(The)31 b(journal)g(will)e(dev)m(elop)j(a)g(L)1199 -3993 y Ff(A)1238 4010 y Fl(T)1289 4030 y(E)1339 4010 -y(X)g(based)g(authoring)e(to)s(ol)i(in)m(terfacing)f(with)g(MO)m(W)m -(GLI,)i(and)f(serv)m(e)94 4123 y(as)39 b(a)h(sho)m(w)m(case)g(to)g -(demonstrate)f(ho)m(w)g(con)m(ten)m(t-mark-up)i(in)c(mathematics)j -(impro)m(v)m(es)e(the)i(usabilit)m(y)94 4236 y(and)30 -b(information)e(depth)i(of)h(electronic)f(science)g(journals.)235 -4349 y(The)40 b(AEI)g(will)e(b)s(e)h(supp)s(orted)g(b)m(y)h(the)h -(newly)e(founded)f(Cen)m(ter)j(for)f(Information)f(Managemen)m(t)94 -4462 y(\(CIM\))44 b(of)g(the)g(Max)g(Planc)m(k)g(So)s(ciet)m(y)-8 -b(.)81 b(The)43 b(CIM)h(has)f(b)s(een)g(set)i(up)d(b)m(y)i(the)g(So)s -(ciet)m(y)g(to)g(supp)s(ort)94 4575 y(researc)m(hers)31 -b(and)f(researc)m(h)i(pro)s(cesses)e(in)g(the)h(area)g(of)g -(information)e(managemen)m(t.)43 b(The)31 b(ob)5 b(jectiv)m(es)31 -b(of)94 4688 y(the)h(pro)5 b(ject)32 b(include)d(co)s(ordination)h(of)h -(existing)g(activities)g(within)e(the)i(So)s(ciet)m(y)h(and)f(implemen) -m(tation)94 4801 y(of)40 b(a)h(strategy)g(to)g(dev)m(elop)f(electronic) -g(researc)m(h)g(arc)m(hiv)m(es.)70 b(The)40 b(curren)m(t)g(Managing)g -(Editor)f(of)h(the)94 4913 y(AEI's)26 b(electronic)g(journal)f(Living)f -(Reviews)i(in)f(Relativit)m(y)h(has)g(b)s(een)f(app)s(oin)m(ted)g -(executiv)m(e)i(director)f(of)94 5026 y(the)g(CIM)f(\(starting)g(from)g -(1)h(Sep)e(2001\))k(and)c(will)f(b)s(e)i(in)f(c)m(harge)i(of)g(the)f -(pro)5 b(ject)26 b(managemen)m(t)h(for)e(T)-8 b(asks)94 -5139 y(4.4)25 b(and)f(6.3)h(of)g(the)f(prop)s(osal.)38 -b(The)24 b(CIM)g(will)d(b)s(e)j(in)f(an)h(excellen)m(t)h(p)s(osition)d -(to)j(promote)g(dissemination)94 5252 y(and)36 b(use)g(of)g(the)h(pro)5 -b(ject)36 b(results)f(within)f(the)i(Max)h(Planc)m(k)g(So)s(ciet)m(y)-8 -b(.)59 b(It)36 b(will)e(further)h(giv)m(e)h(tec)m(hnical)94 -5365 y(supp)s(ort)29 b(to)i(the)f(Dissemination)f(Manager)i(in)f(pro)m -(viding)e(the)i(MO)m(W)m(GLI)i(w)m(ebsite.)p eop -%%Page: 37 37 -37 36 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(37)235 171 y(Professor)36 b(W)-8 b(egner,)40 b(Scien)m(ti\014c)35 -b(Co)s(ordinator)g(of)i(EMIS)f(\(Europ)s(ean)f(Mathematical)i -(Information)94 284 y(Service\),)47 b(will)41 b(also)j(pro)m(vide)e(a)i -(main)f(liaison)e(with)i(previous)f(and)h(successful)f(Europ)s(ean)h -(Pro)5 b(jects)94 397 y(on)33 b(digital)f(libraries)e(and)j(metadata,)j -(suc)m(h)d(as)h(EULER)f(\()p Fb(http://www.emis.de/projec)o(ts/)o(EULE) -o(R)p Fl(\))94 510 y(and)38 b(the)g(TRIAL)g(Solution)f(pro)5 -b(ject)39 b(\()p Fb(http://www.trial-solutio)o(n.de)o -Fl(\).)59 b(In)38 b(particular,)h(all)e(the)94 623 y(ac)m(hiev)m(emen)m -(ts)i(of)f(these)h(Pro)5 b(jects)38 b(will)d(b)s(e)i(in)m(tegrated)i -(inside)c(MO)m(W)m(GLI,)40 b(as)e(far)f(as)h(the)g(resp)s(ectiv)m(e)94 -736 y(teams)32 b(will)d(agree)j(to)g(this.)42 b(Moreo)m(v)m(er,)34 -b(in)c(his)g(qualit)m(y)g(of)h(Scien)m(ti\014c)g(Co)s(ordinator)f(of)h -(EMIS,)g(mem)m(b)s(er)94 849 y(of)c(the)g(advisory)e(b)s(oard)h(for)g -(MA)-8 b(THDI,)28 b(and)e(Chairman)f(of)i(the)g(Electronic)f -(Publishing)c(Committee)27 b(of)94 962 y(Europ)s(ean)34 -b(Mathematical)i(So)s(ciet)m(y)-8 b(,)37 b(Professor)e(W)-8 -b(egner)36 b(is)e(an)h(excellen)m(t)h(candidate)e(to)i(organise)f(the) -94 1075 y(information)29 b(dissemination)e(and)j(exploitation)g -(activities)g(for)g(the)g(pro)5 b(ject.)235 1187 y(Some)37 -b(of)h(the)f(partners)g(of)g(the)h(consortium)e(will)f(primarily)f(w)m -(ork)j(in)f(the)h(dev)m(elopmen)m(t)h(of)g(pilot)94 1300 -y(applications.)e(In)22 b(particular,)g(the)g(Departmen)m(t)i(of)e -(Computer)f(Science)h(of)h(the)f(Univ)m(ersit)m(y)f(of)i(Nijmegen)94 -1413 y(will)36 b(apply)g(MO)m(W)m(GLI's)k(tec)m(hnologies)f(to)g(the)f -(dev)m(elopmen)m(t)h(of)f(an)g(\\electronic)h(b)s(o)s(ok",)h(co)m(v)m -(ering)f(a)94 1526 y(t)m(ypical)33 b(undergraduate)g(course)h(in)e -(Algebra)h(or)h(Analysis.)48 b(The)33 b(Departmen)m(t)i(of)f(Computer)f -(Science)94 1639 y(in)j(Nijmegen)h(has)h(a)g(lot)f(of)h(exp)s(erience)f -(in)f(formal)g(mathematics)i(and)f(theorem)h(pro)m(ving.)62 -b(Notably)-8 b(,)94 1752 y(the)28 b(group)f(has)g(done)h(large)g -(theory)f(dev)m(elopmen)m(ts)h(in)f(the)g(theorem)i(pro)m(v)m(er)f(Co)s -(q.)39 b(\(The)27 b(FT)-8 b(A)29 b(pro)5 b(ject:)94 1865 -y Fb(http://www.cs.kun.nl/gi/)o(proj)o(ects)o(/ft)o(a/)p -Fl(\))25 b(Eindho)m(v)m(en)k(Univ)m(ersit)m(y)h(of)h(T)-8 -b(ec)m(hnology)g(,)32 b(a)f(sub-site)94 1978 y(of)45 -b(Nijmegen,)j(has)c(exp)s(ertise)f(in)h(Op)s(enMath)f(and)h(in)f(using) -g(WWW)j(tec)m(hnology)g(for)e(educational)94 2091 y(purp)s(oses.)i -(This)31 b(has)h(resulted)g({)h(among)g(other)g(things)e({)j(in)d(`ID)m -(A',)j(the)f(in)m(teractiv)m(e)h(course)e(notes)i(in)94 -2204 y(algebra)24 b(\()p Fb(http://www.win.tue.nl/)42 -b(ida/)p Fl(\),)25 b(where)f(a)h(com)m(bination)f(of)g(HTML)g(and)g -(applets)g(is)f(used)94 2317 y(to)33 b(presen)m(t)f(the)h(mathematics.) -46 b(Join)m(tly)-8 b(,)33 b(Nijmegen)e(and)h(Eindho)m(v)m(en)f(ha)m(v)m -(e)i(exp)s(erience)f(in)f(com)m(bining)94 2429 y(theorem)g(pro)m(v)m -(ers)f(and)g(computer)h(algebra)f(pac)m(k)-5 b(ages,)32 -b(notably)e(Co)s(q)g(and)g(GAP)-8 b(.)235 2542 y(T)g(rusted)40 -b(Logic)h(\(F)-8 b(rance\),)45 b(whic)m(h)39 b(is)h(sp)s(ecialized)f -(in)g(secure)i(and)f(v)-5 b(alidated)40 b(solutions)f(for)h(op)s(en)94 -2655 y(systems,)29 b(aims)f(to)i(presen)m(t)f(the)g(formalization)f -(and)g(the)h(demonstration)f(of)h(some)g(securit)m(y)g(prop)s(erties)94 -2768 y(related)44 b(to)g(the)h(co)s(de)f(em)m(b)s(edded)e(in)m(to)i(a)h -(smart)f(card.)81 b(The)43 b(presen)m(tation)h(m)m(ust)g(b)s(e)f(in)g -(a)h(format)94 2881 y(understandable)37 b(b)m(y)h(the)h(compan)m(y)g -(in)f(c)m(harge)i(of)f(the)g(ev)-5 b(aluation)38 b(of)h(the)g(co)s(de)g -(and)f(in)g(accordance)94 2994 y(with)29 b(the)i(Common)f(Criteria)e -(standard.)235 3107 y(A)22 b(third)f(pilot)f(application)h(is)g(the)h -(seman)m(tic)h(markup)d(of)j(the)f(Journal)e Fd(Living)25 -b(R)-5 b(eviews)25 b(in)g(R)-5 b(elativity)94 3220 y -Fl(published)27 b(b)m(y)j(AEI-Golm,)g(already)g(men)m(tioned)g(ab)s(o)m -(v)m(e.)133 3432 y Fj(Description)46 b(of)f(the)g(P)l(articipan)l(ts)94 -3676 y Fg(A.1)112 b(Univ)m(ersit)m(y)36 b(of)h(Bologna,)h(Departmen)m -(t)e(of)i(Computer)f(Science)94 3847 y Fl(Dipartimen)m(to)30 -b(di)f(Scienze)h(dell'Informazione)94 3960 y(Univ)m(ersit\022)-45 -b(a)30 b(degli)f(Studi)f(di)h(Bologna)94 4073 y(Via)h(di)f(m)m(ura)h -(An)m(teo)i(Zam)m(b)s(oni)d(VI)s(I,)h(40127,)j(Bologna,)e(IT)-8 -b(AL)g(Y.)94 4186 y(h)m(ttp://www.cs.unib)s(o.it)94 4412 -y(The)32 b(Departmen)m(t)i(of)e(Computer)g(Science)g(of)h(Bologna)g(is) -e(the)i(only)f(educational)f(institution)f(in)i(Italy)94 -4525 y(to)42 b(b)s(e)e(a\016liated)g(to)i(the)f(W)-8 -b(orld)40 b(Wide)g(W)-8 b(eb)42 b(Consortium)d(\(and)i(one)g(of)g(the)g -(few)f(mem)m(b)s(ers)g(of)h(this)94 4638 y(category)34 -b(in)d(Europ)s(e\).)45 b(This)30 b(a\016liation)h(testi\014es)g(the)i -(in)m(terest,)g(b)s(oth)e(tec)m(hnical)h(and)f(didactic,)h(tradi-)94 -4751 y(tionally)h(dev)m(oted)j(b)m(y)f(our)f(Departmen)m(t)i(to)g(W)-8 -b(eb)36 b(tec)m(hnologies,)h(In)m(ternet)e(and,)h(more)f(generally)-8 -b(,)36 b(dis-)94 4864 y(tributed)25 b(computing.)38 b(This)24 -b(is)i(joined)f(to)i(a)f(solid)f(exp)s(ertise)g(in)g(programming)g -(languages,)i(algorithms,)94 4977 y(theory)k(and)g(formal)f(metho)s -(ds,)h(that)h(pro)m(vides)e(a)i(v)m(ery)f(stim)m(ulating)f(and)h -(dialectical)f(en)m(vironmen)m(t)h(for)94 5089 y(researc)m(h.)57 -b(The)35 b(Departmen)m(t)i(is)d(in)h(c)m(harge)i(of)e(an)h -(undergraduate)f(Program)g(in)g(Computer)f(Science,)94 -5202 y(with)24 b(more)h(than)f(three)h(h)m(undreds)e(new)h(studen)m(ts) -h(a)g(y)m(ear,)i(and)d(a)h(graduate)h(Ph.D.)f(Program,)h(curren)m(tly)p -eop -%%Page: 38 38 -38 37 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(38)94 171 y(comprising)28 b(sixteen)i(studen)m(ts.)94 -402 y Fi(The)41 b(HELM)f(Pro)6 b(ject)36 b Fl(The)f(\\Hyp)s(ertextual)h -(Electronic)f(Library)e(of)j(Mathematics")h(Pro)5 b(ject)36 -b(\(see)94 515 y Fb(http://www.cs.unibo.it/h)o(elm)p -Fl(\))15 b(is)21 b(activ)m(e)i(in)d(Bologna)j(since)e(1999.)39 -b(Its)22 b(aim)f(is)f(the)i(dev)m(elopmen)m(t)g(of)94 -628 y(a)29 b(suitable)f(tec)m(hnology)i(for)e(the)i(creation)f(and)f -(main)m(tenance)h(of)h(a)f(virtual,)f(distributed,)e(h)m(yp)s -(ertextual)94 741 y(library)g(of)j(formal)e(mathematical)i(kno)m -(wledge.)40 b(As)29 b(a)g(subsidiary)c(goal,)k(HELM)g(is)f(mean)m(t)h -(to)g(in)m(tegrate)94 854 y(the)22 b(curren)m(t)g(to)s(ols)g(for)g(the) -h(automation)f(of)h(formal)e(reasoning)h(and)f(the)i(mec)m(hanisation)f -(of)g(mathematics)94 967 y(\(pro)s(of)e(assistan)m(ts)g(and)g(logical)g -(framew)m(orks\))h(with)e(the)h(most)h(recen)m(t)g(tec)m(hnologies)g -(for)f(the)h(dev)m(elopmen)m(t)94 1080 y(of)29 b(W)-8 -b(eb)29 b(applications)e(and)h(electronic)g(publishing,)d(taking)j(adv) --5 b(an)m(tage)31 b(of)e(the)f(p)s(oten)m(tialit)m(y)h(o\013ered)f(b)m -(y)94 1193 y(XML)37 b(T)-8 b(ec)m(hnologies.)62 b(The)37 -b(Pro)5 b(ject)38 b(is)e(dev)m(elop)s(ed)h(in)f(tigh)m(t)h(co)s(op)s -(eration)h(with)d(the)j(W3C)g(MathML)94 1306 y(W)-8 b(orking)30 -b(Group,)g(whic)m(h)f(w)m(e)i(are)g(a)g(mem)m(b)s(er)f(of.)94 -1537 y Fi(T)-9 b(ec)m(hnical)36 b(Con)m(tributors)30 -b Fl(The)g(p)s(eople)f(in)m(v)m(olv)m(ed)i(in)e(the)h(pro)5 -b(ject)31 b(are:)230 1715 y Fe(\017)46 b Fl(Andrea)30 -b(Asp)s(erti)f(\(F)-8 b(ull)30 b(Professor,)g(Mem)m(b)s(er)g(of)h(W3C)g -(Advisory)e(Committee\))230 1899 y Fe(\017)46 b Fl(Irene)30 -b(Sc)m(hena)h(\(Ph.D.)g(Studen)m(t,)f(Mem)m(b)s(er)g(of)h(MathML-W)m -(G\))230 2083 y Fe(\017)46 b Fl(Luca)31 b(P)m(ado)m(v)-5 -b(ani)30 b(\(Ph.D)h(Studen)m(t\))230 2267 y Fe(\017)46 -b Fl(F)-8 b(erruccio)31 b(Guidi)d(\(Ph.D.)j(Studen)m(t\))230 -2451 y Fe(\017)46 b Fl(Claudio)29 b(Sacerdoti)h(Co)s(en)g(\(Ph.D.)h -(Studen)m(t\))94 2630 y(In)f(case)h(of)g(appro)m(v)-5 -b(al,)30 b(w)m(e)h(exp)s(ect)f(to)i(o\013er)e(a)h(t)m(w)m(o-y)m(ear)i -(P)m(ost-Do)s(c)g(p)s(osition)28 b(on)i(pro)5 b(ject)31 -b(funding.)94 2861 y Fa(Andrea)i(Asper)-6 b(ti)33 b(\(Coordina)-6 -b(ting)34 b(pr)n(oposer\))94 2997 y Fl(Born)c(05/09/1961.)94 -3110 y(F)-8 b(ull)29 b(Professor)h(of)h(F)-8 b(ormal)30 -b(Languages)i(and)d(Compilers)94 3223 y(Mem)m(b)s(er)h(of)h(the)f -(Advisory)g(Committee)g(of)h(the)f(W)-8 b(orld)30 b(Wide)g(W)-8 -b(eb)31 b(Consortium.)94 3336 y(Dip.)40 b(di)29 b(Scienze)h -(dell'Informazione,)f(Via)h(di)f(Mura)h(An)m(teo)i(Zam)m(b)s(oni)d(7,)i -(Bologna,)g(Italy)-8 b(.)94 3449 y(Phone:)40 b(+39)31 -b(51)h(35)f(45)g(05.)94 3562 y(E-mail:)40 b Fb(asperti@cs.unibo.it)94 -3698 y Fl(Andrea)f(Asp)s(erti)f(w)m(as)i(b)s(orn)f(in)f(Italy)-8 -b(,)42 b(in)d(1961.)70 b(He)40 b(w)m(as)g(a)m(w)m(arded)g(a)g(Ph.D)f -(in)g(Computer)g(Science)94 3811 y(b)m(y)45 b(the)g(Univ)m(ersit)m(y)f -(of)g(Pisa)h(in)e(1989.)86 b(In)44 b(the)h(same)g(y)m(ear)g(he)g -(obtained)f(a)h(p)s(ost-do)s(c)g(p)s(osition)e(at)94 -3923 y(INRIA-Ro)s(cquencourt,)37 b(where)d(he)h(w)m(as)g(emplo)m(y)m -(ed)h(as)f(a)g(researc)m(her)h(in)e(1991.)56 b(In)34 -b(1992)j(he)e(obtained)94 4036 y(the)42 b(c)m(hair)g(of)g(F)-8 -b(ormal)42 b(Languages)h(and)e(Compilers)f(at)j(the)f(Departmen)m(t)h -(of)f(Computer)f(Science)h(of)94 4149 y(the)e(Univ)m(ersit)m(y)e(of)i -(Bologna,)i(b)s(ecoming)d(F)-8 b(ull)38 b(Professor)h(in)f(y)m(ear)j -(2000.)69 b(He)40 b(is)e(curren)m(tly)h(teac)m(hing)94 -4262 y(courses)i(on)g(Programming)f(Languages,)45 b(Theoretical)c -(Computer)f(Science)h(and)f(Human-Computer)94 4375 y(In)m(teraction.)94 -4534 y Fi(P)m(ositions)c(and)f(Managemen)m(t)f(Exp)s(erience)230 -4713 y Fe(\017)46 b Fl(Mem)m(b)s(er)31 b(of)f(the)h(Advisory)e -(Committee)h(of)h(the)g(W)-8 b(orld)30 b(Wide)f(W)-8 -b(eb)230 4897 y Fe(\017)46 b Fl(F)-8 b(ormer)29 b(Director)f(of)g(the)h -(the)f(Undergraduate)g(Program)g(in)e(Computer)i(Science)f(of)i(the)f -(Univ)m(er-)321 5010 y(sit)m(y)i(of)h(Bologna.)230 5194 -y Fe(\017)46 b Fl(Resp)s(onsible)28 b(of)j(the)f(Bologna)h(site)g(for)f -(the)g(Europ)s(ean)f(TMR)i(Pro)5 b(ject)31 b(\\LINEAR".)230 -5378 y Fe(\017)46 b Fl(F)-8 b(ormer)31 b(Resp)s(onsible)d(of)i(the)h -(Bologna)g(site)f(for)h(the)f(W)m(G-21836)k(CONFER-I)s(I.)p -eop -%%Page: 39 39 -39 38 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(39)230 171 y Fe(\017)46 b Fl(Main)30 b(Resp)s(onsible)e(for)i(the) -h(National)f(Researc)m(h)h(Pro)5 b(ject)31 b(\\Linear)f(Logic)h(and)f -(b)s(ey)m(ond".)94 394 y Fi(Researc)m(h)35 b(In)m(terests)30 -b Fl(The)f(researc)m(h)i(in)m(terests)f(of)g(Andrea)f(Asp)s(erti)g(are) -h(fo)s(cused)g(on)g(forms,)f(formats)94 507 y(and)35 -b(metho)s(ds)g(of)h(kno)m(wledge)g(represen)m(tation)f(and)g(elab)s -(oration.)56 b(This)34 b(co)m(v)m(ers)j(Markup)e(Languages,)94 -620 y(Information)25 b(Pro)s(cessing,)h(Programming)g(Languages,)i(In)m -(terpreters)e(and)f(Compilers,)g(T)m(yp)s(e)g(Systems,)94 -733 y(Higher-order)38 b(Logics,)j(Linear)d(Logic,)j(Category)f(Theory) --8 b(.)65 b(He)39 b(is)f(author)g(of)h(o)m(v)m(er)h(40)g(in)m -(ternational)94 846 y(publications)28 b(on)i(formal)f(asp)s(ects)i(of)g -(the)f(theory)h(of)f(Computing,)f(and)h(sev)m(eral)h(b)s(o)s(oks.)94 -959 y(He)43 b(has)f(b)s(een)f(mem)m(b)s(er)g(of)i(the)f(Programme)h -(Committees)f(of)g(sev)m(eral)h(In)m(ternational)e(Conferences,)94 -1072 y(comprising)28 b(CONCUR'98,)j(R)-8 b(T)g(A'99,)32 -b(LICS'99,)e(PPDP'00,)h(CSL'01,)g(MKM'01)g(\(First)f(In)m(ternational) -94 1185 y(W)-8 b(orkshop)31 b(on)f(Mathematical)h(Kno)m(wledge)f -(Managemen)m(t\).)94 1298 y(His)k(recen)m(t)h(scien)m(ti\014c)f -(activit)m(y)h(has)f(b)s(een)f(mostly)h(fo)s(cused)g(on)g(the)h(HELM)f -(Pro)5 b(ject,)37 b(aimed)c(to)i(build)94 1411 y(the)c(tec)m -(hnological)f(infrastructure)f(for)h(an)g(Hyp)s(ertextual)g(Electronic) -g(Library)f(of)h(Mathematics.)94 1569 y Fi(Selected)35 -b(Publications)230 1747 y Fe(\017)46 b Fl(A.Asp)s(erti,)22 -b(L.P)m(ado)m(v)-5 b(ani,)23 b(C.Sacerdoti)d(Co)s(en,)i(I.Sc)m(hena.)37 -b Fd(XML,)23 b(Styleshe)-5 b(ets)24 b(and)h(the)e(r)-5 -b(e-mathematization)321 1860 y(of)29 b(F)-7 b(ormal)30 -b(Content)p Fl(.)40 b(Pro)s(ceedings)25 b(of)h(\\Extreme)g(Markup)f -(Languages)i(2001)g(Conference",)g(Au-)321 1972 y(gust)k(12-17,)h -(2001,)h(Mon)m(tr'eal,)e(Canada.)230 2156 y Fe(\017)46 -b Fl(A.Asp)s(erti,)e(L.P)m(ado)m(v)-5 b(ani,)45 b(C.Sacerdoti)d(Co)s -(en,)i(I.Sc)m(hena.)75 b Fd(HELM)42 b(and)i(the)f(semantic)h(Math-)321 -2269 y(Web)p Fl(.)i(Pro)s(ceedings)31 b(of)h(the)h(14th)g(In)m -(ternational)e(Conference)h(on)h(Theorem)e(Pro)m(ving)h(in)f(Higher)321 -2382 y(Order)e(Logics)i(\(TPHOLS)e(2001\),)k(3-6)f(Septem)m(b)s(er)d -(2001,)k(Edin)m(burgh,)27 b(Scotland.)230 2565 y Fe(\017)46 -b Fl(A.Asp)s(erti,)35 b(L.P)m(ado)m(v)-5 b(ani,)36 b(C.Sacerdoti)e(Co)s -(en,)i(I.Sc)m(hena.)53 b Fd(F)-7 b(ormal)38 b(Mathematics)g(on)f(the)g -(Web)p Fl(.)321 2678 y(Pro)s(ceedings)g(of)g(the)h(Eigh)m(th)e(In)m -(ternational)h(Conference)g(on)g("Libraries)e(and)i(Asso)s(ciations)g -(in)321 2791 y(the)i(T)-8 b(ransien)m(t)39 b(W)-8 b(orld:)57 -b(New)39 b(T)-8 b(ec)m(hnologies)39 b(and)g(New)g(F)-8 -b(orms)39 b(of)g(Co)s(op)s(eration",)i(June)d(9-17,)321 -2904 y(2001,)33 b(Sudak,)c(Autonomous)h(Republic)f(of)h(Crimea,)g -(Ukraine.)230 3088 y Fe(\017)46 b Fl(A.Asp)s(erti,)36 -b(L.P)m(ado)m(v)-5 b(ani,)36 b(C.Sacerdoti)f(Co)s(en,)h(I.Sc)m(hena.)54 -b Fd(F)-7 b(ormal)39 b(Mathematics)f(in)f(MathML)p Fl(.)321 -3201 y(First)32 b(MathML)h(In)m(ternational)f(Conference,)h(Octob)s(er) -f(20-21,)j(2000,)g(Urbana-Champaign,)d(IL,)321 3313 y(USA.)230 -3497 y Fe(\017)46 b Fl(A.Asp)s(erti,)40 b(G.Longo.)64 -b Fd(Cate)-5 b(gories,)43 b(T)-7 b(yp)i(es,)42 b(and)f(Structur)-5 -b(es.)64 b(A)n(n)39 b(intr)-5 b(o)g(duction)42 b(to)e(Cate)-5 -b(gory)321 3610 y(The)g(ory)44 b(for)f(the)g(Working)g(Computer)g -(Scientist)p Fl(.)73 b(F)-8 b(oundation)41 b(of)g(Computing)f(Series,)i -(Mas-)321 3723 y(sac)m(h)m(usetts)32 b(Institute)e(of)g(T)-8 -b(ec)m(hnology)32 b(Press,)e(ISBN)g(0)h(262)g(01125-5.)44 -b(1991.)94 3964 y Fg(A.2)112 b(INRIA)94 4136 y Fl(Institut)29 -b(National)i(de)f(Rec)m(herc)m(he)i(en)e(Informatique)f(et)i -(Automatique)f(\(INRIA\))94 4249 y(Domaine)h(de)f(V)-8 -b(oluceau)94 4362 y(78153)33 b(Ro)s(cquencourt)d(Cedex)94 -4475 y(F)-8 b(rance)94 4813 y(INRIA)27 b(\(National)h(Institute)f(for)g -(Researc)m(h)i(in)d(Computer)h(Science)g(and)g(Con)m(trol\))h(is)f(a)h -(F)-8 b(renc)m(h)28 b(public-)94 4926 y(sector)g(scien)m(ti\014c)e(and) -g(tec)m(hnological)h(institute)f(op)s(erating)g(under)f(the)i(dual)f -(authorit)m(y)g(of)h(the)g(Ministry)94 5039 y(of)42 b(Researc)m(h)i -(and)e(the)g(Ministry)e(of)j(Industry)-8 b(.)75 b(INRIA's)42 -b(missions)e(are)j(\\to)h(undertak)m(e)e(basic)g(and)94 -5152 y(applied)29 b(researc)m(h,)j(to)g(design)e(exp)s(erimen)m(tal)g -(systems,)h(to)h(ensure)e(tec)m(hnology)j(and)d(kno)m(wledge)h(trans-) -94 5265 y(fer,)36 b(to)f(organise)g(in)m(ternational)e(scien)m(ti\014c) -h(exc)m(hanges,)k(to)d(carry)g(out)g(scien)m(ti\014c)f(assessmen)m(ts,) -j(and)d(to)94 5378 y(con)m(tribute)c(to)h(standardisation".)p -eop -%%Page: 40 40 -40 39 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(40)94 171 y(The)36 b(researc)m(h)h(carried)f(out)h(at)h(INRIA)e -(brings)f(together)j(exp)s(erts)e(from)g(the)h(\014elds)e(of)i -(computer)g(sci-)94 284 y(ence)31 b(and)f(applied)f(mathematics)i(co)m -(v)m(ering)h(the)f(follo)m(wing)e(areas:)42 b(Net)m(w)m(orks)32 -b(and)e(Systems;)h(Soft)m(w)m(are)94 397 y(Engineering)42 -b(and)h(Sym)m(b)s(olic)f(Computing;)49 b(Man-Mac)m(hine)44 -b(In)m(teraction;)52 b(Image)44 b(Pro)s(cessing,)j(Data)94 -510 y(Managemen)m(t,)33 b(Kno)m(wledge)d(Systems;)g(Sim)m(ulation)e -(and)i(Optimisation)e(of)i(Complex)g(Systems.)94 623 -y(INRIA)c(gathers)h(in)e(its)h(premises)f(around)h(2)h(100)g(p)s -(ersons)e(including)e(1)k(600)h(scien)m(tists)e(,)h(man)m(y)g(of)g -(whic)m(h)94 736 y(b)s(elong)e(to)j(partner)d(organisations)h(\(CNRS,)g -(industrial)d(labs,)k(univ)m(ersities\))d(and)i(are)h(assigned)e(to)i -(w)m(ork)94 849 y(in)33 b(common)i(\\pro)5 b(jects".)53 -b(On)34 b(INRIA's)g(budget,)h(around)f(500)h(full-time)d(equiv)-5 -b(alen)m(t)34 b(R&D)g(p)s(ositions)94 962 y(can)d(b)s(e)e(accoun)m(ted) -j(for.)94 1075 y(A)f(large)f(n)m(um)m(b)s(er)f(of)i(INRIA)g(senior)e -(researc)m(hers)i(are)g(in)m(v)m(olv)m(ed)f(in)g(teac)m(hing)h(and)f -(their)f(PhD)i(studen)m(ts)94 1187 y(\(ab)s(out)f(550\))i(prepare)e -(their)g(thesis)f(within)f(the)j(di\013eren)m(t)e(INRIA)i(researc)m(h)g -(pro)5 b(jects)30 b(\(curren)m(tly)g(74\).)94 1300 y(Its)23 -b(budget)f(is)g(roughly)g(90)i(MEuro,)g(20\045)f(of)g(whic)m(h)f(comes) -i(from)e(researc)m(h)i(and)e(dev)m(elopmen)m(t)h(con)m(tracts,)94 -1413 y(ro)m(y)m(alties)31 b(and)f(sales.)40 b(Industrial)28 -b(relations)h(are)i(strategic)g(for)f(INRIA:)94 1650 -y Fi(Industrial)43 b(con)m(tracts)i(and)e(Europ)s(ean)h(Pro)6 -b(jects.)92 b Fl(Numerous)37 b(industrial)d(partners)j(con)m(tract)94 -1763 y(with)h(the)i(Institute)e(for)h(collab)s(orativ)m(e)h(researc)m -(h.)68 b(They)39 b(are)h(F)-8 b(renc)m(h)39 b(or)h(foreign)f -(companies,)i(of)e(all)94 1876 y(sizes.)45 b(400)34 b(suc)m(h)d(con)m -(tracts)j(are)f(presen)m(tly)e(activ)m(e.)47 b(Roughly)31 -b(40\045)i(of)f(these)g(con)m(tracts)i(are)f(Europ)s(ean)94 -1989 y(funded)43 b(ones.)85 b(Since)44 b(1984,)50 b(250)c(Europ)s(ean)e -(F)-8 b(ramew)m(ork-Programme)47 b(\(FP\))f(pro)5 b(jects)45 -b(ha)m(v)m(e)h(b)s(een)94 2102 y(executed.)94 2338 y -Fi(T)-9 b(ec)m(hnology)32 b(companies.)91 b Fl(As)26 -b(the)h(ultimate)f(step)g(in)g(tec)m(hnology)h(transfer,)g(researc)m -(hers)g(are)g(part)m(y)94 2451 y(to)k(the)f(setting)h(up)e(of)h -(companies)g(in)f(order)h(to)h(implemen)m(t)e(their)g(tec)m(hnology)i -(on)g(the)f(mark)m(et.)42 b(Thirt)m(y)94 2564 y(sev)m(en)e(spin-o\013)f -(companies)h(ha)m(v)m(e)h(b)s(een)e(created)i(since)e(1984.)71 -b(In)39 b(1999,)45 b(INRIA)40 b(has)f(launc)m(hed)g(t)m(w)m(o)94 -2677 y(subsidiaries)26 b(to)31 b(promote)f(high-tec)m(h)g(start-up)f -(companies:)40 b(INRIA-TRANSFER)-8 b(T)30 b(deals)f(with)g(early)94 -2790 y(accompanimen)m(t)35 b(of)g(the)f(future)g(companies,)h(whereas)f -(I-SOUR)m(CE)g(GESTION)f(pro)m(vides)g(for)i(\\seed-)94 -2903 y(money".)94 3016 y(INRIA)c(is)f(a)h(mem)m(b)s(er)g(of)g(ER)m(CIM) -g(EEIG,)g(Europ)s(ean)f(Researc)m(h)i(Consortium)e(for)g(Computer)h -(Science)94 3129 y(and)e(Mathematics.)41 b(Outside)28 -b(Europ)s(e,)h(INRIA)g(also)h(has)f(a)h(signi\014can)m(t)e(activit)m -(y:)41 b(it)29 b(has)g(created)i(join)m(t)94 3242 y(researc)m(h)e(lab)s -(oratories)e(\(Russia)h(and)f(China\),)h(signed)f(co)s(op)s(eration)h -(agreemen)m(ts)i(\(NSF,)e(India,)g(Brazil,)94 3355 y(etc.\))42 -b(and)30 b(promotes)h(in)m(tensiv)m(e)e(scien)m(ti\014c)h(exc)m -(hanges.)94 3468 y(INRIA)g(W)-8 b(eb:)42 b(h)m(ttp://www.inria.fr/)94 -3704 y Fi(A.2.1)105 b(The)35 b(Lemme)e(pro)6 b(ject)94 -3876 y Fl(The)39 b(purp)s(ose)g(of)h(the)g(Lemme)g(pro)5 -b(ject)40 b(is)f(to)h(in)m(tro)s(duce)f(and)g(dev)m(elop)h(formal)f -(metho)s(ds)g(for)h(use)g(in)94 3989 y(writing)35 b(scien)m(ti\014c)i -(computing)f(soft)m(w)m(are.)63 b(In)37 b(scien)m(ti\014c)g(computing,) -h(algorithms)e(and)h(mathematics)94 4102 y(are)j(at)g(the)f(forefron)m -(t.)67 b(W)-8 b(e)41 b(are)e(th)m(us)g(dev)m(eloping)g(to)s(ols)g(and)f -(metho)s(ds)h(to)h(help)d(pro)s(ducing)g(correct)94 4215 -y(programs)f(starting)h(from)g(the)g(usual)e(mathematical)i -(descriptions)e(of)i(data,)i(algorithms,)f(prop)s(erties)94 -4328 y(and)30 b(pro)s(ofs,)f(structured)h(in)m(to)g(four)g(researc)m(h) -h(themes:)230 4498 y Fe(\017)46 b Fl(Pro)s(of)27 b(en)m(vironmen)m(ts)f -(\(dev)m(elopmen)m(t)i(of)f(the)g(Pco)s(q)g(system)g(in)f(Ja)m(v)-5 -b(a)28 b(and)e(its)h(compatibilit)m(y)e(with)321 4610 -y(XML/MathML\).)230 4791 y Fe(\017)46 b Fl(F)-8 b(ormalisation)45 -b(of)g(mathematical)g(theories)g(\(algebraic)g(geometry)-8 -b(,)50 b(elemen)m(tary)c(algebra)f(and)321 4904 y(analysis\).)230 -5084 y Fe(\017)h Fl(Certi\014ed)37 b(implemen)m(tation)g(of)i(scien)m -(ti\014c)f(computing)f(algorithms)h(\(computer)g(algebra,)j(arith-)321 -5197 y(metics,)31 b(logic\).)230 5378 y Fe(\017)46 b -Fl(Pro)s(ofs)30 b(on)g(seman)m(tics)h(of)g(programming)e(languages)h -(\(Ja)m(v)-5 b(acard\).)p eop -%%Page: 41 41 -41 40 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(41)235 171 y(The)25 b(pro)5 b(ject)27 b(b)s(elongs)e(to)h(the)g -(Europ)s(ean)f(w)m(orking)g(group)g(T)m(yp)s(es,)i(and)e(to)i(the)f(F) --8 b(renc)m(h)26 b(action)g(A)m(OC)94 284 y(\(Arithm)m(\023)-43 -b(etique)30 b(des)g(Ordinateurs)d(Certi\014e\).)40 b(It)30 -b(k)m(eeps)h(up)e(industrial)e(collab)s(orations)h(with)h(Dassault-)94 -397 y(Aviation)39 b(\(program)h(pro)s(of)g(en)m(vironmen)m(ts\),)i -(Alcatel)e(Space)g(Industry)e(\(certi\014ed)i(n)m(umerical)f(co)s -(de\),)94 510 y(and)25 b(GemPlus)g(\(Ja)m(v)-5 b(acard)28 -b(certi\014cation\),)f(and)e(also)h(collab)s(orates)g(with)f(teac)m -(hers)i(at)g(univ)m(ersit)m(y)d(on)i(the)94 623 y(use)k(of)h(formal)e -(pro)s(ofs)h(and)f(W)-8 b(eb-based)32 b(en)m(vironmen)m(ts)d(in)g -(mathematics)i(courses.)235 736 y(P)m(eople)j(of)g(Lemme)g(in)m(v)m -(olv)m(ed)g(in)e(the)i(MO)m(W)m(GLI)i(prop)s(osal)c(are:)48 -b(Laurence)34 b(Rideau)f(\(researc)m(her\),)94 849 y(Hanane)42 -b(Naciri)e(\(PhD)h(studen)m(t\),)k(Lo)-10 b(\177)-35 -b(\020c)41 b(P)m(ottier)g(\(researc)m(her\),)46 b(Yv)m(es)c(Bertot)h -(\(researc)m(her\),)i(Ahmed)94 962 y(Amerk)-5 b(ad)30 -b(\(engineer\),)h(Lauren)m(t)f(Th)m(\023)-43 b(ery)31 -b(\(researc)m(her\))h(and)d(Lauren)m(t)i(Chicli)c(\(PhD)k(studen)m -(t\).)94 1198 y Fi(A.2.2)105 b(The)35 b(LogiCal)f(pro)6 -b(ject)94 1370 y Fl(The)31 b(LogiCal)g(team)i(of)f(INRIA)g(is)e(w)m -(orking)i(on)f(theoretical)h(and)g(practical)f(asp)s(ects)h(of)g -(mathematical)94 1483 y(pro)s(ofs.)64 b(It)39 b(dev)m(elops)f(the)h(Co) -s(q)f(pro)s(of)g(assistan)m(t,)j(an)e(implemen)m(tation)e(of)i(an)f -(expressiv)m(e)g(formalism)94 1596 y(called)25 b(Calculus)g(of)h -(Inductiv)m(e)f(Constructions.)38 b(Co)s(q)26 b(is)f(used)h(b)s(oth)f -(for)h(dev)m(elopmen)m(t)h(of)g(formal)e(math-)94 1708 -y(ematics)31 b(and)f(for)g(certi\014cation)g(of)g(programs,)h(esp)s -(ecially)d(proto)s(cols)i(and)g(critical)g(systems.)235 -1821 y(The)43 b(LogiCal)f(pro)5 b(ject)44 b(is)e(a)i(join)m(t)f(pro)5 -b(ject)43 b(with)f(Univ)m(ersit)m(y)g(P)m(aris)h(11.)80 -b(It)43 b(is)f(in)m(v)m(olv)m(ed)h(in)f(the)94 1934 y(Europ)s(ean)33 -b(TYPES)g(w)m(orking)h(group)g(and)f(in)g(sev)m(eral)i(F)-8 -b(renc)m(h)35 b(actions.)52 b(Esp)s(ecially)-8 b(,)34 -b(it)f(is)h(in)m(v)m(olv)m(ed)g(in)94 2047 y(the)g(S-Ja)m(v)-5 -b(a)34 b(action)h(aiming)d(at)i(certifying)f(safet)m(y)i(prop)s(erties) -d(for)i(Ja)m(v)-5 b(aCard)34 b(programs,)g(in)f(a)h(pro)5 -b(ject)94 2160 y(aiming)31 b(at)j(certifying)d(algorithms)h(used)g(in)f -(computer)i(algebra)f(systems.)48 b(LogiCal)32 b(collab)s(orates)g -(also)94 2273 y(on)e(pro)s(of)g(automation)h(with)e(F)-8 -b(rance)31 b(T)-8 b(elecom.)94 2504 y Fi(T)f(ec)m(hnical)36 -b(Con)m(tributors)f(of)g(LogiCal)g(team)28 b Fl(The)i(p)s(eople)g(in)m -(v)m(olv)m(ed)g(in)f(the)h(pro)5 b(ject)31 b(are:)230 -2672 y Fe(\017)46 b Fl(Hugo)31 b(Herb)s(elin)d(\(Asso)s(ciate)k -(Professor)e(at)h(Univ)m(ersit)m(y)e(P)m(aris)h(10,)i(seconded)e(at)h -(INRIA\))230 2852 y Fe(\017)46 b Fl(Da)m(vid)31 b(Delaha)m(y)m(e)h -(\(Ph.D.)f(Studen)m(t\))94 3021 y(In)f(case)h(of)g(appro)m(v)-5 -b(al,)30 b(w)m(e)h(exp)s(ect)f(to)i(o\013er)e(a)h(three-mon)m(th)g -(training)e(course)h(on)h(pro)5 b(ject)30 b(funding.)94 -3252 y Fa(Hugo)k(Herbelin)94 3386 y Fl(Born)c(June)g(9,)h(1967.)94 -3499 y(Asso)s(ciate)g(Professor)f(at)h(Univ)m(ersit)m(y)f(P)m(aris)g -(10,)h(seconded)g(at)g(INRIA.)94 3612 y(Domaine)g(de)f(V)-8 -b(oluceau)94 3724 y(78153)33 b(Ro)s(cquencourt)d(Cedex)94 -3837 y(F)-8 b(rance)94 4063 y(Phone:)40 b(+33)31 b(\(0\))h(1)f(39)g(63) -g(53)g(77.)94 4176 y(E-mail:)40 b Fb(Hugo.Herbelin@inria.fr)94 -4416 y Fg(A.3)112 b(German)37 b(Researc)m(h)h(Cen)m(ter)f(for)h -(Arti\014cial)c(In)m(telligence)h(Gm)m(bH,)h(DFKI)94 -4588 y Fl(The)f(German)h(Researc)m(h)h(Cen)m(ter)f(for)g(Arti\014cial)e -(In)m(telligence)i(Gm)m(bH,)g(DFKI)g(w)m(as)g(founded)f(in)f(1988.)94 -4700 y(T)-8 b(o)s(da)m(y)g(,)33 b(DFKI)g(is)e(one)i(of)g(the)f(largest) -h(non-pro\014t)e(con)m(tract)j(researc)m(h)f(institutes)e(in)g(the)i -(\014eld)e(of)h(inno-)94 4813 y(v)-5 b(ativ)m(e)29 b(soft)m(w)m(are)g -(tec)m(hnology)g(based)f(on)g(Arti\014cial)e(In)m(telligence)h(\(AI\))i -(metho)s(ds.)39 b(DFKI)28 b(is)f(fo)s(cusing)f(on)94 -4926 y(the)f(complete)h(cycle)f(of)h(inno)m(v)-5 b(ation)24 -b(-)h(from)g(w)m(orld-class)f(basic)g(researc)m(h)i(and)f(tec)m -(hnology)h(dev)m(elopmen)m(t)94 5039 y(through)j(leading-edge)h -(demonstrators)f(and)h(protot)m(yp)s(es)g(to)g(pro)s(duct)f(functions)f -(and)h(commercializa-)94 5152 y(tion.)64 b(Based)39 b(in)d -(Kaiserslautern)h(and)h(Saarbr)s(\177)-48 b(uc)m(k)m(en,)40 -b(the)e(German)g(Researc)m(h)i(Cen)m(ter)e(for)g(Arti\014cial)94 -5265 y(In)m(telligence)e(ranks)g(among)i(the)e(imp)s(ortan)m(t)g(\\Cen) -m(ters)i(of)f(Excellence")g(w)m(orldwide.)57 b(The)36 -b(k)m(ey)i(direc-)94 5378 y(tors)f(of)g(DFKI)h(are)f(Prof.)60 -b(Dr.)h(W)-8 b(olfgang)38 b(W)-8 b(ahlster)37 b(\(CEO\))g(and)f(Dr.)61 -b(W)-8 b(alter)38 b(G.)f(Oltho\013)f(\(CF)m(O\).)p eop -%%Page: 42 42 -42 41 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(42)94 171 y(DFKI's)27 b(mission)d(is)i(tec)m(hnology)h(transfer,)g -(that)g(is)f(to)h(mo)m(v)m(e)h(inno)m(v)-5 b(ations)25 -b(in)g(AI)h(as)h(quic)m(kly)e(as)i(p)s(ossible)94 284 -y(from)g(the)g(lab)f(in)m(to)h(the)h(mark)m(etplace)g(b)m(y)f(main)m -(taining)e(researc)m(h)j(pro)5 b(jects)27 b(at)h(the)f(forefron)m(t)h -(of)f(science.)94 397 y(Exp)s(ertise)j(and)h(exp)s(erience)f(of)i(the)g -(compan)m(y)f(DFKI)h(has)f(strong)h(exp)s(ertise)e(in)g(eac)m(h)j(of)e -(the)h(follo)m(wing)94 510 y(domains:)230 698 y Fe(\017)46 -b Fl(Information)23 b(Managemen)m(t)i(and)e(Do)s(cumen)m(t)h(Analysis)e -(\(Director:)38 b(Prof.)g(Dr.)h(Andreas)23 b(Dengel\))230 -885 y Fe(\017)46 b Fl(In)m(telligen)m(t)30 b(Visualization)f(and)g(Sim) -m(ulation)f(Systems)i(\(Director:)42 b(Prof.)e(Dr.)h(Hans)30 -b(Hagen\))230 1073 y Fe(\017)46 b Fl(Deduction)30 b(and)g(Multiagen)m -(t)h(Systems)f(\(Director:)41 b(Prof.)g(Dr.)f(J\177)-45 -b(org)31 b(Siekmann\))230 1261 y Fe(\017)46 b Fl(Language)32 -b(T)-8 b(ec)m(hnology)31 b(\(Director:)41 b(Prof.)g(Dr.)f(Hans)31 -b(Uszk)m(oreit\))230 1448 y Fe(\017)46 b Fl(In)m(telligen)m(t)30 -b(User)g(In)m(terfaces)i(\(Director:)41 b(Prof.)g(Dr.)f(W)-8 -b(olfgang)32 b(W)-8 b(ahlster\))94 1636 y(DFKI)26 b(is)f(in)m(v)m(olv)m -(ed)h(in)f(n)m(umerous)g(industrial,)e(academian)j(pro)5 -b(jects)27 b(including)22 b(pro)5 b(jects)27 b(in)d(the)j(curren)m(t)94 -1749 y(EC)34 b(IST)f(programme)h(dealing)g(with)f(researc)m(h)i(and)f -(dev)m(elopmen)m(t)g(in)f(the)i(broad)f(areas)h(of)g(in)m(telligen)m(t) -94 1862 y(in)m(terface)26 b(agen)m(ts,)h(and)e(m)m(ultiagen)m(t)g -(systems)g(for)g(applications)e(in)h(supply-c)m(hain)e(managemen)m(t,) -28 b(virtual)94 1975 y(en)m(terprises,)39 b(e-commerce)g(and)e(adv)-5 -b(anced)37 b(information)f(systems.)62 b(The)37 b(partners)g(of)h(the)f -(DFKI)h(are)94 2087 y(leading)30 b(large-scale)i(concerns)f(suc)m(h)g -(as)g(DaimlerChrysler,)d(SAP)-8 b(,)31 b(and)g(Alcatel,)h(plus)d(the)i -(t)m(w)m(o)h(univ)m(er-)94 2200 y(sities)e(of)h(Kaiserlautern)e(and)h -(Saarbr)s(\177)-48 b(uc)m(k)m(en.)42 b(In)30 b(the)h(range)g(of)g -(medium-sized)e(\014rms)h(INSIDERS,)g(IDS)94 2313 y(Sc)m(heer,)44 -b(T)-8 b(ecmath)41 b(and)f(KIBG)g(are)h(to)h(b)s(e)d(added.)71 -b(Finally)-8 b(,)42 b(the)e(t)m(w)m(o)i(most)f(imp)s(ortan)m(t)f -(large-scale)94 2426 y(researc)m(h)c(cen)m(ters)g(on)f(in)m -(ternational)f(lev)m(el,)j(i.e.)55 b(the)36 b(F)-8 b(raunhofer)35 -b(So)s(ciet)m(y)g(and)g(GMD,)i(round)c(o\013)j(the)94 -2539 y(circle)23 b(of)h(partners.)38 b(DFKI)24 b(is)f(part)h(of)g(sev)m -(eral)g(Europ)s(ean)f(Net)m(w)m(orks)i(of)f(Excellence)g(suc)m(h)f(as)i -(Agen)m(tLink)94 2652 y(and)30 b(CompuLog.)235 2765 y(Recen)m(tly)-8 -b(,)48 b(an)43 b(Education)g(T)-8 b(ec)m(hnology)44 b(Group)f(of)g -(DFKI,)h(headed)f(b)m(y)g(Prof.)79 b(J.H.)44 b(Siekmann,)94 -2878 y(has)39 b(b)s(een)g(established.)g(It)h(has)f(carried)g(out)h -(basic)f(researc)m(h)h(and)g(applications)e(in)g(sev)m(eral)i(\014elds) -e(of)94 2991 y(AI,)c(including)29 b(presen)m(tation)34 -b(planning)c(\(for)k(education)f(material\),)h(user)f(mo)s(deling,)f -(pro)s(of)h(planning,)94 3104 y(kno)m(wledge)24 b(represen)m(tation)g -(\(for)h(educational)e(and)h(mathematical)h(W)-8 b(eb-do)s(cumen)m -(ts\))25 b(and)e(in)m(tegration)94 3217 y(of)40 b(\(mathematical)h -(services\).)69 b(Its)40 b(main)e(protot)m(ypical)i(pro)s(duct)f(so)h -(far)g(has)f(b)s(een)g(the)h(W)-8 b(eb-based,)94 3329 -y(user-adaptiv)m(e,)41 b(generativ)m(e)f(learning)e(en)m(vironmen)m(t)g -(Activ)m(eMath)j(that)e(in)m(tegrates)h(sev)m(eral)f(external)94 -3442 y(services.)68 b(Mem)m(b)s(ers)39 b(of)h(the)f(group)g(are)h -(activ)m(ely)g(in)m(v)m(olv)m(ed)f(in)f(the)i(in)m(ternational)e -(academic)i(life)e(b)m(y)94 3555 y(organizing)30 b(or)g(con)m -(tributing)f(to)i(conferences)g(and)f(w)m(orkshops.)94 -3786 y Fa(Pr)n(of.Dr.)45 b(Joer)n(g)33 b(Siekmann)94 -3899 y Fl(Prof.)56 b(Dr.)g(Jo)s(erg)36 b(Siekmann)e(is)g(Professor)h -(of)h(Computer)f(Science)g(and)g(Director)h(of)g(the)g(Deduction)94 -4012 y(and)f(Multiagen)m(t)i(Systems)e(researc)m(h)i(departmen)m(t)f -(at)h(the)f(DFKI.)g(He)h(studied)d(at)j(the)f(Univ)m(ersit)m(y)f(of)94 -4125 y(Go)s(ettingen)25 b(\(Mathematics)i(and)d(Ph)m(ysics,)h(1972\))i -(and)d(the)h(Univ)m(ersit)m(y)f(of)h(Essex)g(\(M.Sc.)40 -b(in)23 b(Computer)94 4238 y(Science,)34 b(1973,)i(and)c(Ph.D.)h(in)f -(Computer)g(Science,)i(1976\).)51 b(F)-8 b(rom)34 b(1976)g(to)g(1983)h -(he)e(w)m(as)g(a)h(researc)m(h)94 4351 y(assistan)m(t)j(at)f(the)h -(Univ)m(ersit)m(y)e(of)i(Karlsruhe.)56 b(F)-8 b(rom)36 -b(1983)i(to)f(1991)h(he)e(w)m(as)h(Professor)f(of)g(Computer)94 -4464 y(Science)28 b(at)i(the)f(Univ)m(ersit)m(y)f(of)g(Kaiserslautern)f -(and)h(since)g(1991)j(he)d(has)h(a)g(join)m(t)f(p)s(osition)f(as)i -(professor)94 4577 y(for)36 b(Computer)g(Science)g(at)h(the)f(Univ)m -(ersitaet)h(des)f(Saarlandes)f(and)h(as)h(one)f(of)h(the)f(directors)g -(at)h(the)94 4690 y(DFKI.)42 b(He)g(has)f(published)c(widely)j(in)g -(AI,)h(Automated)h(Reasoning)f(and)g(Uni\014cation)f(Theory)h(and)94 -4802 y(serv)m(ed)30 b(on)g(man)m(y)f(programme)h(committees)h(and)e(w)m -(as)h(programme)g(c)m(hairman)f(of)h(v)-5 b(arious)29 -b(conferences)94 4915 y(\(suc)m(h)e(as)h(CADE,)g(KI)e(etc.\).)42 -b(He)28 b(is)e(editor)h(of)g(sev)m(eral)h(logic)f(and)g(AI)g(orien)m -(ted)g(scien)m(ti\014c)g(journals)e(\(suc)m(h)94 5028 -y(as)36 b(Journal)f(of)h(Automated)h(Reasoning,)g(Journal)e(of)h -(Arti\014cial)e(In)m(telligence,)j(Journal)d(of)j(Logic)f(and)94 -5141 y(Computation)30 b(etc\).)44 b(His)30 b(biograph)m(y)h(is)f -(included)e(in)i(most)h(in)m(ternational)f(Whos)h(Who,)h(as)f(one)g(of) -g(the)p eop -%%Page: 43 43 -43 42 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(43)94 171 y(founders)29 b(of)h(AI)h(in)e(German)m(y)-8 -b(.)94 402 y Fa(PD.Dr.)46 b(Erica)34 b(Melis)94 515 y -Fl(Erica)g(Melis)f(is)g(a)h(Senior)f(Researc)m(her)i(at)f(the)h(German) -f(Researc)m(h)h(Cen)m(ter)f(for)g(Arti\014cial)e(In)m(telligence)94 -628 y(\(DFKI)j(Gm)m(bH\).)h(She)e(w)m(as)h(a)g(researc)m(h)g(scien)m -(tist)f(at)i(the)f(Sc)m(ho)s(ol)f(of)h(Computer)e(Science)i(of)g -(Carnegie)94 741 y(Mellon)h(Univ)m(ersit)m(y)h(and)g(at)h(the)f -(Departmen)m(t)h(of)g(AI)f(at)h(the)f(Univ)m(ersit)m(y)g(of)g(Edin)m -(burgh.)59 b(Later)38 b(she)94 854 y(has)g(b)s(een)f(an)h(Assistan)m(t) -h(Professor)f(at)h(the)f(Univ)m(ersit)m(y)g(of)g(Saarland)f(and)g(is)h -(mem)m(b)s(er)f(of)i(a)f(Sonder-)94 967 y(forsc)m(h)m(ungsb)s(ereic)m -(h)d(in)g(Saarbruec)m(k)m(en.)59 b(She)36 b(serv)m(ed)g(on)h(n)m -(umerous)e(programme)h(committees.)60 b(Erica)94 1080 -y(Melis)38 b(is)g(the)g(editor)h(of)g(pro)s(ceedings)e(and)h(the)h -(co/author)h(of)f(n)m(umerous)f(scien)m(ti\014c)g(pap)s(ers)f(in)h -(jour-)94 1193 y(nals,)32 b(conferences,)h(and)f(collections)f(in)g -(areas)i(suc)m(h)f(as)g(deduction,)f(planning,)g(case-based)i -(reasoning,)94 1306 y(in)m(telligen)m(t)k(tutor)i(systems.)g(Curren)m -(tly)-8 b(,)40 b(her)e(researc)m(h)h(in)m(terests)g(fo)s(cus)f(pro)s -(of)g(planning)e(and)i(on)g(the)94 1418 y(application)32 -b(of)i(Arti\014cial)e(In)m(telligence)h(tec)m(hnology)i(in)d(in)m -(telligen)m(t)h(learning)f(en)m(vironmen)m(ts.)h(She)g(is)g(a)94 -1531 y(mem)m(b)s(er)d(of)g(AAAI)h(and)f(GI.)94 1775 y -Fg(A.4)112 b(Nijmegen)36 b(\(&)h(Eindho)m(v)m(en\))94 -1946 y Fl(Subfaculteit)29 b(Informatica)94 2059 y(F)-8 -b(aculteit)31 b(Natuurw)m(etensc)m(happ)s(en,)f(Wiskunde)f(en)h -(Informatica)94 2172 y(Katholiek)m(e)h(Univ)m(ersiteit)e(Nijmegen)94 -2285 y(T)-8 b(o)s(erno)s(oiv)m(eld)29 b(1)94 2398 y(6525)j(ED)f -(Nijmegen)94 2511 y(The)f(Netherlands)94 2624 y(h)m -(ttp://www.cs.kun.nl)235 2737 y(The)41 b(Sub-facult)m(y)e(of)j -(Computer)e(Science)g(at)i(the)f(Univ)m(ersit)m(y)f(of)i(Nijmegen)e -(hosts)h(a)g(broad)g(ex-)94 2850 y(p)s(erience)f(in)f(logic,)k(formal)d -(metho)s(ds)g(and)g(theorem)h(pro)m(ving.)71 b(The)40 -b(F)-8 b(acult)m(y)41 b(of)g(Mathematics)h(and)94 2963 -y(Computer)29 b(Science)i(of)f(Eindho)m(v)m(en)f(Univ)m(ersit)m(y)h(of) -g(T)-8 b(ec)m(hnology)31 b(is)f(strong)g(in)f(computer)h(algebra,)h -(the-)94 3076 y(orem)j(pro)m(ving)e(and)h(applying)f(W)-8 -b(eb)34 b(tec)m(hnology)h(to)f(mathematics.)51 b(Nijmegen)33 -b(and)g(Eindho)m(v)m(en)f(ha)m(v)m(e)94 3188 y(a)39 b(long)f(history)g -(in)f(co)s(op)s(eration)i(on)f(topics)h(related)f(to)i(this)d(FET)i -(prop)s(osal,)g(notably)g(t)m(yp)s(e)f(theory)-8 b(,)94 -3301 y(theorem)31 b(pro)m(ving)f(and)g(com)m(bining)f(v)-5 -b(arious)29 b(computer)i(mathematics)g(applications,)e(esp)s(ecially)g -(using)94 3414 y(Op)s(enMath.)38 b(This)23 b(co)s(op)s(eration)h(w)m -(as)h(mainly)e(taking)i(place)g(b)s(et)m(w)m(een)g(the)g(researc)m(h)g -(groups)f(of)h(Geuv)m(ers)94 3527 y(and)30 b(Barendregt)h(in)e -(Nijmegen)h(and)g(the)g(researc)m(h)h(group)f(of)h(Cohen)e(in)g(Eindho) -m(v)m(en.)235 3640 y(The)41 b(researc)m(h)i(group)e(of)h(Geuv)m(ers)g -(and)f(Barendregt)h(is)f(part)g(of)h(the)g(EC)f(sp)s(onsored)g -(Thematic)94 3753 y(Net)m(w)m(ork)32 b(\\TYPES")f(\(IST-1999-29001\))k -(and)30 b(of)h(its)f(ancestor,)i(the)e(EC)g(W)-8 b(orking)31 -b(Group)f(\\T)m(yp)s(es)h(for)94 3866 y(Pro)s(ofs)c(and)g(Programs",)i -(whic)m(h)e(testi\014es)h(there)g(in)m(terest)g(in)e(theorem)i(pro)m -(ving,)g(esp)s(ecially)e(using)g(t)m(yp)s(e)94 3979 y(theory)j(based)g -(theorem)h(pro)m(v)m(ers.)40 b(The)29 b(FT)-8 b(A)29 -b(pro)5 b(ject)30 b(\(F)-8 b(undamen)m(tal)29 b(Theorem)g(of)g -(Algebra\),)h(started)94 4092 y(in)f(1999)j(and)e(to)h(b)s(e)e -(\014nished)f(in)h(2001,)j(has)e(as)h(its)e(main)h(goal)g(to)h -(formalize)f(\(in)f(Co)s(q\))h(a)h(large)g(b)s(o)s(dy)d(of)94 -4205 y(undergraduate)d(mathematics)h(\(algebra)g(and)f(analysis\),)g -(culminating)e(in)h(a)i(pro)s(of)f(of)h(the)f(fundamen)m(tal)94 -4318 y(theorem)i(of)g(algebra.)39 b(The)26 b(formalization)f(of)i(the)g -(mathematics)g(is)e(no)m(w)i(\014nished)d(and)h(the)i(next)g(step)f(is) -94 4430 y(to)g(mak)m(e)h(the)e(formalization)f(accessible)i(and)e -(usable)h(b)m(y)g(others,)i(preferably)d(through)g(the)i(W)-8 -b(orld)25 b(Wide)94 4543 y(W)-8 b(eb.)40 b(The)25 b(researc)m(h)h -(group)e(in)h(Nijmegen)g(and)f(the)i(researc)m(h)g(group)f(of)g(Cohen)g -(in)f(Eindho)m(v)m(en)g(are)i(b)s(oth)94 4656 y(part)i(of)h(the)g(EC)e -(W)-8 b(orking)29 b(Group)f(Calculem)m(us,)f(whic)m(h)h(aims)f(at)i -(bridging)d(the)j(gap)g(b)s(et)m(w)m(een)g(di\013eren)m(t)94 -4769 y(mathematical)44 b(computer)g(applications,)h(lik)m(e)e(computer) -g(algebra)h(systems)g(and)f(theorem)h(pro)m(v)m(ers.)94 -4882 y(One)26 b(of)i(the)f(v)m(ehicles)f(for)h(doing)f(so)h(is)f(the)h -(de\014nition)e(of)i(Op)s(enMath)f(as)h(an)g(in)m(termediate)f -(language)i(for)94 4995 y(the)35 b(exc)m(hange)h(of)f(mathematical)h -(ob)5 b(jects)35 b(among)h(computer)f(applications.)52 -b(The)34 b(researc)m(h)i(group)e(of)94 5108 y(Cohen)29 -b(is)f(part)h(of)g(the)h(IST)e(Thematic)h(Net)m(w)m(ork)h(\\Op)s -(enMath")g(\(IST-2000-28719\))j(and)c(its)f(ancestor,)94 -5221 y(the)j(Op)s(enMath)e(Esprit)g(pro)5 b(ject)31 b(\()p -Fb(http://www.openmath.org/)p Fl(\).)p eop -%%Page: 44 44 -44 43 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(44)94 171 y Fi(T)-9 b(ec)m(hnical)29 b(Con)m(tributors)91 -b Fl(The)24 b(p)s(eople)g(from)g(Nijmegen)g(and)g(Eindho)m(v)m(en)f(in) -m(v)m(olv)m(ed)h(in)f(the)i(pro)5 b(ject)94 284 y(are:)230 -460 y Fe(\017)46 b Fl(Herman)30 b(Geuv)m(ers)h(\(Asso)s(ciate)h -(Professor,)e(Nijmegen\))230 644 y Fe(\017)46 b Fl(Arjeh)30 -b(Cohen)g(\(F)-8 b(ull)29 b(Professor,)i(Eindho)m(v)m(en\))230 -827 y Fe(\017)46 b Fl(Henk)31 b(Barendregt)g(\(F)-8 b(ull)29 -b(Professor,)i(Nijmegen\))230 1010 y Fe(\017)46 b Fl(Milad)29 -b(Niqui)g(\(Ph.D.)i(studen)m(t,)f(Nijmegen\))230 1193 -y Fe(\017)46 b Fl(Jasp)s(er)30 b(Stein)f(\(Ph.D.)i(studen)m(t,)f -(Nijmegen\))230 1376 y Fe(\017)46 b Fl(Luis)29 b(Cruz-Filip)s(e)e -(\(Ph.D.)k(studen)m(t,)g(Nijmegen\))230 1559 y Fe(\017)46 -b Fl(F)-8 b(reek)32 b(Wiedijk)d(\(P)m(ost)i(Do)s(c)g(researc)m(her,)h -(Nijmegen\))230 1742 y Fe(\017)46 b Fl(Dan)31 b(Synek)f(\(Programmer,)h -(Nijmegen\))230 1925 y Fe(\017)46 b Fl(Ernesto)31 b(Reinaldo)e -(Barreiro)h(\(Ph.D.)h(studen)m(t,)f(Eindho)m(v)m(en\))235 -2101 y(In)g(case)h(of)g(appro)m(v)-5 b(al,)30 b(w)m(e)h(exp)s(ect)g(to) -g(o\013er)g(a)f(30-mon)m(ths)i(Ph.D.)e(p)s(osition)f(on)h(pro)5 -b(ject)31 b(funding.)94 2327 y Fa(Herman)i(Geuvers)g(\(Nijmegen-Eindho) -n(ven)g(Site)h(Leader\))94 2440 y Fl(Born)c(19/05/64)94 -2553 y(Asso)s(ciate)h(Professor)f(in)f(F)-8 b(oundations)30 -b(of)h(Mathematics)g(and)f(Computer)f(Science)94 2666 -y(F)-8 b(aculteit)31 b(NWI,)g(KUN,)g(T)-8 b(o)s(erno)s(oiv)m(eld)29 -b(1,)i(6525)h(ED)f(Nijmegen,)f(NL)94 2779 y(Phone:)40 -b(+31)31 b(243)h(652603)94 2892 y(E-mail:)p Fb(herman@cs.kun.nl)235 -3005 y Fl(Herman)37 b(Geuv)m(ers)g(studied)e(Mathematics)j(at)g(the)f -(Univ)m(ersit)m(y)f(of)h(Nijmegen)f(and)h(got)h(his)d(Ph.D.)94 -3118 y(in)d(Mathematics)j(and)f(Computer)f(Science)g(in)g(1993)i(at)g -(the)f(same)g(Univ)m(ersit)m(y)-8 b(.)51 b(In)33 b(the)h(same)g(y)m -(ear)h(he)94 3230 y(b)s(ecame)30 b(assistan)m(t)g(professor)f(in)g -(computer)g(science)h(at)h(the)f(Eindho)m(v)m(en)e(Univ)m(ersit)m(y)h -(of)h(T)-8 b(ec)m(hnology)31 b(in)94 3343 y(the)21 b(F)-8 -b(ormal)20 b(Metho)s(ds)g(group.)37 b(F)-8 b(rom)21 b(Jan)m(uary)f(1st) -h(2000,)k(he)20 b(is)f(asso)s(ciate)j(professor)d(at)j(the)e(Departmen) -m(t)94 3456 y(of)29 b(Computer)f(Science)g(of)h(the)g(Univ)m(ersit)m(y) -f(of)h(Nijmegen)g(in)e(the)i(F)-8 b(oundations)29 b(group.)39 -b(He)30 b(is)d(curren)m(tly)94 3569 y(teac)m(hing)k(in)e(F)-8 -b(ormal)31 b(Languages)g(and)f(Computabilit)m(y)e(and)i(T)m(yp)s(e)f -(Theory)-8 b(.)94 3807 y Fi(P)m(ositions)36 b(and)f(Managemen)m(t)f -(Exp)s(erience)230 3983 y Fe(\017)46 b Fl(Resp)s(onsible)19 -b(for)i(the)g(Nijmegen-Utrec)m(h)m(t)i(site)e(of)h(the)f(EC)g(Thematic) -g(Net)m(w)m(ork)i(\\TYPES")e(\(Com-)321 4096 y(puter)30 -b(Assisted)g(Reasoning)g(Based)h(on)f(T)m(yp)s(e)g(Theory\),)g -(IST-1999-29001.)230 4279 y Fe(\017)46 b Fl(Presiden)m(t)40 -b(of)g(the)g(education)g(committee)h(of)f(the)h(Sub-facult)m(y)e(of)h -(Computer)f(Science)h(at)h(the)321 4392 y(Univ)m(ersit)m(y)30 -b(of)g(Nijmegen.)230 4575 y Fe(\017)46 b Fl(F)-8 b(ormer)32 -b(mem)m(b)s(er)f(of)h(the)f(Managemen)m(t)j(Board)d(of)h(the)g(Dutc)m -(h)g(researc)m(h)g(sc)m(ho)s(ol)f(IP)-8 b(A)32 b(\(Institute)321 -4688 y(for)e(Programming)g(Researc)m(h)h(and)f(Algorithmics\).)94 -4926 y Fi(Researc)m(h)g(In)m(terests)90 b Fl(The)25 b(researc)m(h)h(in) -m(terests)f(of)g(Herman)g(Geuv)m(ers)h(are:)38 b(F)-8 -b(ormalization)25 b(of)g(Math-)94 5039 y(ematics,)38 -b(In)m(teractiv)m(e)f(Theorem)e(Pro)m(ving,)i(Higher-order)e(Logics,)j -(Comm)m(unicating)c(F)-8 b(ormal)36 b(Mathe-)94 5152 -y(matics,)g(T)m(yp)s(e)e(Theory)g(and)f Fc(\025)p Fl(-calculus.)52 -b(His)34 b(recen)m(t)h(scien)m(ti\014c)f(activities)g(range)h(from)f -(the)h(study)e(of)94 5265 y(formal)40 b(theories)g(\(esp)s(ecially)f(t) -m(yp)s(ed)h Fc(\025)p Fl(-calculi\))g(to)h(doing)f(large)g(theory)h -(dev)m(elopmen)m(ts)g(in)e(theorem)94 5378 y(pro)m(v)m(ers,)31 -b(notably)f(the)g(formalization)g(of)g(the)h(fundamen)m(tal)e(theorem)i -(of)f(algebra)h(in)e(Co)s(q.)p eop -%%Page: 45 45 -45 44 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(45)94 171 y Fi(Selected)35 b(Publications)230 343 -y Fe(\017)46 b Fl(H.)25 b(Geuv)m(ers,)i(E.)e(Barendsen,)g(Some)g -(logical)f(and)g(syn)m(tactical)i(observ)-5 b(ations)24 -b(concerning)g(the)h(\014rst)321 456 y(order)30 b(dep)s(enden)m(t)g(t)m -(yp)s(e)g(system)h(lam)m(b)s(da)e(P)-8 b(,)31 b Fd(Mathematic)-5 -b(al)35 b(Structur)-5 b(es)34 b(in)e(Computer)i(Scienc)-5 -b(e)p Fl(,)321 569 y(v)m(ol.)31 b(9-4,)h(1999,)g(pp.)e(335)h({)g(360) -230 750 y Fe(\017)46 b Fl(H.)28 b(Geuv)m(ers,)h(F.)f(Wiedijk,)f(J.)g -(Zw)m(anen)m(burg,)g(Equational)g(Reasoning)g(via)g(P)m(artial)g -(Re\015ection,)i(in)321 863 y Fd(The)-5 b(or)g(em)39 -b(Pr)-5 b(oving)36 b(for)h(Higher)g(Or)-5 b(der)37 b(L)-5 -b(o)g(gics,)38 b(TPHOL)d(2000)p Fl(,)j(P)m(ortland)c(OR,)g(USA,)g(eds.) -h(M.)321 976 y(Aagaard)d(and)d(J.)i(Harrison,)e(LNCS)h(1869,)i(pp.)e -(162)h({)g(178.)230 1157 y Fe(\017)46 b Fl(M.)37 b(Oostdijk)e(and)h(H.) -h(Geuv)m(ers,)h(Pro)s(of)e(b)m(y)h(Computation)e(in)g(the)i(Co)s(q)f -(system,)i(to)f(app)s(ear)f(in)321 1270 y Fd(The)-5 b(or)g(etic)g(al)35 -b(Computer)f(Scienc)-5 b(e)p Fl(,)31 b(2001.)230 1451 -y Fe(\017)46 b Fl(H.)c(Barendregt)g(and)f(H.)h(Geuv)m(ers,)j(Pro)s(of)c -(Assistan)m(ts)g(using)f(Dep)s(enden)m(t)i(T)m(yp)s(e)f(Systems,)j(to) -321 1564 y(app)s(ear)29 b(as)h(a)f(c)m(hapter)h(of)g(the)f -Fd(Handb)-5 b(o)g(ok)34 b(of)e(A)n(utomate)-5 b(d)33 -b(R)-5 b(e)g(asoning)p Fl(,)31 b(eds.)f(A.)f(Robinson)f(and)h(A.)321 -1677 y(V)-8 b(oronk)m(o)m(v,)33 b(Elsevier)c(2001.)230 -1859 y Fe(\017)46 b Fl(P)-8 b(.A.M.)41 b(Seuren,)e(V.)h(Capretta)f(and) -f(H.)h(Geuv)m(ers,)j(The)c(logic)h(and)f(mathematics)h(of)g(o)s -(ccasion)321 1971 y(sen)m(tences,)32 b(to)f(app)s(ear)f(in)f(the)h -Fd(Journal)k(of)f(Linguistics)f(and)i(Philosophy)p Fl(,)f(2001.)94 -2212 y Fg(A.5)112 b(MPG)37 b(&)h(TU)f(Berlin)94 2384 -y Fi(A.5.1)105 b(Max)35 b(Planc)m(k)h(Institute)e(for)h(Gra)m -(vitational)g(Ph)m(ysics)94 2555 y Fl(Alb)s(ert)29 b(Einstein)f -(Institute)94 2668 y(Am)i(M)s(\177)-48 b(uhlen)m(b)s(erg)29 -b(1)94 2781 y(14476)k(Golm,)d(German)m(y)94 2894 y(h)m -(ttp://www.aei.mpg.de)94 3120 y(Since)42 b(1998)i(the)f(Max)g(Planc)m -(k)g(Institute)f(for)h(Gra)m(vitational)f(Ph)m(ysics,)k(whic)m(h)41 -b(is)h(dev)m(oted)i(to)f(basic)94 3233 y(researc)m(h)33 -b(in)d(relativit)m(y)-8 b(,)32 b(publishes)d(one)j(of)g(the)g(most)g -(inno)m(v)-5 b(ativ)m(e)32 b(electronic)g(science)g(journals,)f -Fd(Living)94 3346 y(R)-5 b(eviews)34 b(in)g(R)-5 b(elativity)32 -b Fl(\(h)m(ttp://www.livingreviews.org\).)43 b(Its)31 -b(mission)f(is)g(to)i(build)d(the)i(journal)f(in)m(to)94 -3458 y(a)36 b(primary)d(reference)j(p)s(oin)m(t)e(in)g(the)h(\014eld,)h -(exploiting)d(new)i(and)g(cutting)g(edge)h(W)-8 b(eb)36 -b(tec)m(hnologies)g(to)94 3571 y(maximise)25 b(use,)i(transparency)-8 -b(,)28 b(and)e(depth)g(of)g(the)h(information)e(pro)m(vided.)38 -b(The)26 b(Institute)g(has)g(a)h(n)m(um-)94 3684 y(b)s(er)i(of)h -(sta\013)h(who)e(are)h(exceptionally)f(skilled)f(in)h(computing,)g(and) -g(man)m(y)h(of)g(them)g(con)m(tributed)f(to)i(the)94 -3797 y(dev)m(elopmen)m(t)26 b(of)g(soft)m(w)m(are)h(that)g(has)e(made)h -(the)g(journal's)f(W)-8 b(eb)26 b(site)g(one)g(of)g(the)g(most)g(adv)-5 -b(anced)26 b(in)e(the)94 3910 y(w)m(orld)32 b(of)h(electronic)g -(publishing.)44 b(F)-8 b(urther)33 b(bac)m(kground)g(information)e(on)i -(the)g(journal)f(can)h(b)s(e)g(found)94 4023 y(at)28 -b(h)m(ttp://www.livingreviews.org/Pro)5 b(ject/index.h)m(tml.)38 -b(F)-8 b(ast)29 b(and)e(e\013ectiv)m(e)i(in)m(ternational)e(dissem-)94 -4136 y(ination)k(of)i(the)f(W)-8 b(eb)34 b(journal)d(is)g(pro)m(vided)g -(b)m(y)h(the)h(Europ)s(ean)e(Mathematical)j(So)s(ciet)m(y's)e -(Information)94 4249 y(Service,)e(whic)m(h)f(main)m(tains)g(a)i(net)m -(w)m(ork)g(of)g(more)f(than)h(30)g(mirror)d(serv)m(ers)j(w)m(orldwide.) -94 4475 y(The)40 b(Institute)f(has)h(close)h(connections)f(to)h(the)g -(newly)e(founded)g(Cen)m(ter)h(for)g(Information)g(Manage-)94 -4588 y(men)m(t)35 b(of)g(the)g(Max)g(Planc)m(k)f(So)s(ciet)m(y)h(that)g -(will)d(act)k(as)f(a)g(cen)m(tral)g(service)f(to)h(the)g(more)g(than)f -(80)i(Max)94 4700 y(Planc)m(k)23 b(Institutes,)h(to)g(impro)m(v)m(e)f -(their)g(abilit)m(y)f(to)i(access)g(and)f(to)h(publish)19 -b(information)j(on)h(the)h(In)m(ternet.)94 4813 y(It)32 -b(is)f(further)g(co)s(op)s(erating)h(with)f(the)h(leading)f(Europ)s -(ean)g(publisher)e(of)j(original)e(researc)m(h)j(in)e(gra)m(vita-)94 -4926 y(tional)c(ph)m(ysics,)g(the)h(Institute)e(of)i(Ph)m(ysics)f -(Publishing)c(\(Bristol,)28 b(UK\))g(with)e(its)h(journal)f -Fd(Classic)-5 b(al)31 b(and)94 5039 y(Quantum)i(R)-5 -b(elativity)p Fl(.)94 5152 y(The)43 b(Max)h(Planc)m(k)f(Institute)g -(for)g(Gra)m(vitational)h(Ph)m(ysics)f(will)d(join)j(forces)h(with)e -(Professor)h(Bernd)94 5265 y(W)-8 b(egner)35 b(at)g(the)f(T)-8 -b(ec)m(hnical)33 b(Univ)m(ersit)m(y)h(in)e(Berlin.)50 -b(Both)34 b(parties)g(are)g(curren)m(tly)f(co)s(op)s(erating)h(in)e -(the)94 5378 y(dissemination)c(and)h(mirroring)f(of)j(electronic)f -(journals)f(lik)m(e)h Fd(Living)i(R)-5 b(eviews)33 b(in)f(R)-5 -b(elativity)p Fl(.)p eop -%%Page: 46 46 -46 45 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(46)94 171 y Fi(T)-9 b(ec)m(hnical)36 b(Con)m(tributors)30 -b Fl(P)m(eople)h(in)m(v)m(olv)m(ed)f(in)f(the)i(pro)5 -b(ject)30 b(are:)230 346 y Fe(\017)46 b Fl(Bernard)30 -b(Sc)m(h)m(utz)h(\(Institute)f(Director)h(and)f(Editor-in-Chief)7 -b(\))230 529 y Fe(\017)46 b Fl(Ian)30 b(Kelley)g(\(Programmer\))230 -712 y Fe(\017)46 b Fl(N.N.)31 b(\(Ph.D.)g(Studen)m(ts)f(and)g(P)m -(ost-Do)s(cs\))235 887 y(In)g(case)h(of)g(appro)m(v)-5 -b(al)30 b(w)m(e)g(exp)s(ect)h(to)g(o\013er)g(a)g(full)d(scien)m -(ti\014c)i(programmer)g(p)s(osition)e(for)i(a)h(p)s(erio)s(d)d(of)94 -1000 y(2-y)m(ears.)235 1225 y(Prof.)50 b(Bernard)33 b(Sc)m(h)m(utz)h -(\(b)s(orn)e(in)g(1946)j(in)e(the)g(USA\))h(is)e(director)h(of)h(the)g -(Max)g(Planc)m(k)f(Institute)94 1338 y(for)41 b(Gra)m(vitational)h(Ph)m -(ysics)f(\(Alb)s(ert)f(Einstein)g(Institute\),)k(heading)c(the)i -(Astroph)m(ysical)f(Relativit)m(y)94 1451 y(Division)d(of)j(the)f -(Institute,)i(and)e(Professor)g(at)h(Cardi\013)e(Univ)m(ersit)m(y)-8 -b(.)70 b(In)39 b(ac)m(kno)m(wledgemen)m(t)k(of)d(pio-)94 -1564 y(neering)d(scien)m(ti\014c)h(w)m(ork)h(in)e(gra)m(vitational)i -(ph)m(ysics)e(he)h(has)g(b)s(een)g(elected)h(F)-8 b(ello)m(w)39 -b(of)f(the)h(American)94 1677 y(Ph)m(ysical)28 b(So)s(ciet)m(y)-8 -b(.)41 b(He)30 b(in)m(v)m(en)m(ted)f(the)h(\\Living)d(Reviews")i -(concept)i(in)c(1996)k(and)e(acts)h(as)f(the)h(journal's)94 -1790 y(Editor-in-c)m(hief.)42 b(Bernard)30 b(Sc)m(h)m(utz)i(has)f(serv) -m(ed)h(on)f(the)g(Editorial)e(Board)j(of)f Fd(Classic)-5 -b(al)36 b(and)e(Quantum)94 1903 y(Gr)-5 b(avity)27 b -Fl(b)s(et)m(w)m(een)f(1988)h(and)e(1990,)k(and)c(since)g(1998)i(is)e -(mem)m(b)s(er)g(of)g(the)h(Editorial)e(Board)h(of)h(the)g(mono-)94 -2016 y(graph)f(series)g(Studies)f(In)h(High)g(Energy)h(Ph)m(ysics,)g -(Cosmology)g(and)f(Gra)m(vitation)h(\(Institute)f(of)h(Ph)m(ysics)94 -2129 y(Publishing,)h(Bristol,)i(UK\).)230 2326 y Fe(\017)46 -b Fl(Sc)m(h)m(utz,)35 b(B.F.)f Fd(A)h(First)h(Course)f(in)g(Gener)-5 -b(al)37 b(R)-5 b(elativity)p Fl(.)50 b(Cam)m(bridge)32 -b(Univ)m(ersit)m(y)h(Press,)g(Cam-)321 2439 y(bridge)c(\(1985\).)230 -2622 y Fe(\017)46 b Fl(Sc)m(h)m(utz,)26 b(B.F.)e Fd(Ge)-5 -b(ometric)g(al)29 b(metho)-5 b(ds)28 b(of)e(mathematic)-5 -b(al)29 b(physics)p Fl(.)40 b(Cam)m(bridge)22 b(Univ)m(ersit)m(y)h -(Press,)321 2735 y(Cam)m(bridge,)30 b(\(1980\).)230 2917 -y Fe(\017)46 b Fl(Wheary)-8 b(,)39 b(J.,)f(and)d(Sc)m(h)m(utz,)j(B.)f -Fd(Making)h(an)g(Ele)-5 b(ctr)g(onic)39 b(Journal)g(Live)p -Fl(.)57 b(Journal)35 b(of)h(Electronic)321 3030 y(Publishing,)19 -b(v)m(ol.3,)k(is.)36 b(1,)23 b(Septem)m(b)s(er)d(\(1997\).)40 -b(\(h)m(ttp://www.press.umic)m(h.edu/jep/03-01/LR.h)m(tml\))230 -3213 y Fe(\017)46 b Fl(Wheary)-8 b(,)30 b(J.;)f(Wild,)e(L.;)i(Sc)m(h)m -(utz,)h(B.)e(F.)h(and)f(W)-8 b(eyher,)29 b(C.)f Fd(Thinking)j(and)g -(Developing)g(Ele)-5 b(ctr)g(oni-)321 3326 y(c)g(al)5 -b(ly)p Fl(,)24 b(Journal)18 b(of)j(Electronic)e(Publishing,)g(v)m -(ol.4,)k(is.)37 b(2,)23 b(Decem)m(b)s(er)e(\(1998\).)40 -b(\(h)m(ttp://www.press.umic)m(h.edu/jep/04-)321 3439 -y(02/wheary2.h)m(tml\))94 3676 y Fi(A.5.2)105 b(Cen)m(ter)34 -b(for)h(Information)f(Managemen)m(t)g(in)h(the)g(Max)g(Planc)m(k)h(So)s -(ciet)m(y)94 3848 y Fl(c/o)c(Max)f(Planc)m(k)f(So)s(ciet)m(y)94 -3961 y(Hofgartenstrasse)i(8)94 4074 y(PF)f(10)g(10)g(62)94 -4187 y(D-80084)i(Munic)m(h,)d(German)m(y)94 4300 y(h)m -(ttp://www.zim.mpg.de)g(\(not)h(y)m(et)h(a)m(v)-5 b(ailable\))94 -4525 y(The)38 b(mission)f(of)i(the)h(new)e(Cen)m(ter)h(for)g -(Information)f(Managemen)m(t)j(of)e(the)g(Max)h(Planc)m(k)f(So)s(ciet)m -(y)g(is)94 4638 y(to)d(allo)m(w)e(the)i(So)s(ciet)m(y)f(with)f(its)g -(more)h(than)g(80)h(sp)s(ecialized)d(researc)m(h)j(Institutes)e(to)i(k) -m(eep)g(pace)g(with)94 4751 y(and)c(ev)m(en)m(tually)g(pla)m(y)g(a)h -(leadership)c(role)j(in)f(Europ)s(e)h(in)e(the)j(managemen)m(t)h(of)e -(scien)m(ti\014c)g(information.)94 4864 y(It)i(will)d(b)s(e)i -(sta\013ed)i(with)d(6)i(emplo)m(y)m(ees)h(and)e(start)i(op)s(erating)e -(in)f(Septem)m(b)s(er)i(2001.)52 b(The)34 b(pro)5 b(ject)34 -b(will)94 4977 y(b)s(e)i(advised)f(b)m(y)h(a)h(commission)d(of)j(MPG)f -(Institute)g(directors)g(and)f(Ric)m(k)i(Luce,)h(the)e(Director)h(of)f -(the)94 5090 y(Los)30 b(Alamos)h(National)f(Lab)s(oratory's)h("Library) -e(Without)h(W)-8 b(alls".)94 5203 y Fi(T)f(ec)m(hnical)36 -b(Con)m(tributors)230 5378 y Fe(\017)46 b Fl(Theresa)30 -b(V)-8 b(elden)30 b(\(Executiv)m(e)i(Director,)f(CIM\))p -eop -%%Page: 47 47 -47 46 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(47)230 171 y Fe(\017)46 b Fl(N.N.)31 b(\(T)-8 b(ec)m(hnical)31 -b(supp)s(ort\))235 359 y(Theresa)36 b(V)-8 b(elden)36 -b(\(b)s(orn)f(in)f(1970)k(in)d(German)m(y\))i(graduated)f(in)e(Ph)m -(ysics)i(from)f(Bielefeld)g(Univ)m(er-)94 472 y(sit)m(y)c(in)f(1997)k -(after)e(ha)m(ving)f(completed)g(a)h(diploma)d(thesis)i(on)g -(Mathematical)i(Relativit)m(y)e(at)h(the)g(Max)94 585 -y(Planc)m(k)27 b(Institute)f(for)g(Gra)m(vitational)h(Ph)m(ysics.)39 -b(Since)26 b(1998)i(she)f(has)g(b)s(een)f(leading)f(the)i(editorial)e -(team)94 698 y(of)34 b Fd(Living)h(R)-5 b(eviews)36 b(in)g(R)-5 -b(elativity)35 b Fl(as)f(Managing)g(Editor,)f(organizing)g(the)h -(editorial)e(pro)s(cess)i(and)f(su-)94 811 y(p)s(ervising)28 -b(the)i(dev)m(elopmen)m(t)h(of)g(soft)m(w)m(are)g(for)f(electronic)h -(publishing)26 b(and)j(journal)g(managemen)m(t.)94 1164 -y Fi(A.5.3)105 b(TU)35 b(Berlin)94 1335 y Fl(F)-8 b(ac)m(h)m(b)s(ereic) -m(h)31 b(Mathematik)94 1448 y(T)-8 b(ec)m(hnisc)m(he)31 -b(Univ)m(ersitt)e(Berlin)94 1561 y(Strae)i(des)f(17.)41 -b(Juni)29 b(135)94 1674 y(D)i(-)f(10623)j(Berlin)94 1787 -y Fb(http://www.emis.de)94 2013 y Fl(The)i(group)g(at)h(TU)f(Berlin)f -(will)e(b)s(e)j(lead)g(b)m(y)g(Prof.Dr.)56 b(Bernd)35 -b(W)-8 b(egner.)57 b(He)36 b(is)e(professor)h(for)g(math-)94 -2126 y(ematics)f(with)f(a)h(full)e(p)s(osition)f(at)k(the)f -(mathematics)g(departmen)m(t.)52 b(Under)33 b(his)f(guidance)h(TU)h -(Berlin)94 2238 y(is)c(partner)f(in)h(sev)m(eral)g(pro)5 -b(jects)31 b(and)f(en)m(terprises)g(dealing)f(with)g(information)g(and) -h(comm)m(unication)g(in)94 2351 y(mathematics:)235 2464 -y(He)h(is)230 2652 y Fe(\017)46 b Fl(editor-in-c)m(hief)41 -b(of)i(Zen)m(tralblatt)f(MA)-8 b(TH,)43 b(the)g(most)g(comprehensiv)m -(e)f(literature)f(information)321 2765 y(service)30 b(in)g -(mathematics,)h(with)e(W)-8 b(eb)31 b(access)g(under)e(EMIS,)230 -2952 y Fe(\017)46 b Fl(mem)m(b)s(er)31 b(of)h(the)g(advisory)f(b)s -(oard)f(for)i(MA)-8 b(THDI,)33 b(an)e(information)f(data)j(base)f(on)f -(education)h(in)321 3065 y(mathematics,)230 3253 y Fe(\017)46 -b Fl(Scien)m(ti\014c)34 b(Co)s(ordinator)f(of)h(EMIS,)g(the)h(Europ)s -(ean)e(Mathematical)i(Information)e(Service,)j(pro-)321 -3366 y(viding)29 b(a)h(mathematics)h(p)s(ortal)f(with)f(an)h -(electronic)g(library)e(as)j(the)f(main)g(con)m(ten)m(t,)230 -3554 y Fe(\017)46 b Fl(leader)38 b(of)h(the)f(TU-group)g(for)g(the)g -(EULER-pro)5 b(ject,)41 b(whic)m(h)c(has)h(dev)m(elop)s(ed)g(a)h -(protot)m(yp)s(e)g(for)321 3666 y(an)34 b(in)m(tegrated)g(access)h(to)f -(W)-8 b(eb-based)34 b(mathematical)g(do)s(cumen)m(ts,)h(funded)c(b)m(y) -j(T)-8 b(elematics)34 b(for)321 3779 y(Libraries,)40 -b(and)f(supp)s(orted)f(b)m(y)i(a)g(small)e(T)-8 b(AKEUP-pro)5 -b(ject)40 b(for)g(the)g(transition)e(to)i(a)g(regular)321 -3892 y(W)-8 b(eb)31 b(service,)230 4080 y Fe(\017)46 -b Fl(Scien)m(ti\014c)38 b(Director)g(of)h(the)f(LIMES-pro)5 -b(ject)39 b(\(Large)g(Infrastructures)e(in)g(Mathematics)i(-)g(En-)321 -4193 y(hanced)30 b(Services\))h(whic)m(h)e(is)g(designed)h(to)h -(transform)f(Zen)m(tralblatt)f(MA)-8 b(TH)32 b(in)m(to)e(Europ)s(ean)f -(co-)321 4306 y(op)s(eration)23 b(with)f(W)-8 b(eb-based)25 -b(input)c(structures,)k(funded)c(b)m(y)j(the)g(Fifth)e(F)-8 -b(ramew)m(ork)25 b(Programme,)230 4493 y Fe(\017)46 b -Fl(Director)38 b(of)g(the)g(ERAM-pro)5 b(ject)39 b(\(Electronic)e -(Researc)m(h)i(Arc)m(hiv)m(e)f(in)e(Mathematics\),)41 -b(funded)321 4606 y(b)m(y)31 b(Deutsc)m(he)h(F)-8 b(orsc)m(h)m -(ungsgemeinsc)m(haft)32 b(and)e(designed)g(to)h(build)d(up)i(a)h -(digital)e(arc)m(hiv)m(e)i(of)g(clas-)321 4719 y(sical)h(mathematics,)h -(capturing)e(the)h(Jahrbuc)m(h)f(ueb)s(er)g(die)g(F)-8 -b(ortsc)m(hritte)34 b(in)d(database)i(as)f(a)h(pre-)321 -4832 y(Zen)m(talblatt)d(access)i(facilit)m(y)e(to)h(the)f(arc)m(hiv)m -(e,)230 5020 y Fe(\017)46 b Fl(Chairman)41 b(of)h(the)h(Electronic)f -(Publishing)c(Committee)43 b(of)f(EMS)g(\(Europ)s(ean)f(Mathematical) -321 5133 y(So)s(ciet)m(y\),)230 5320 y Fe(\017)46 b Fl(mem)m(b)s(er)30 -b(of)h(the)f(Database)i(Committee)f(of)g(the)f(EMS)p -eop -%%Page: 48 48 -48 47 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(48)230 171 y Fe(\017)46 b Fl(asso)s(ciated)33 b(with)d(pro)5 -b(ject)33 b(Euclid)c(\(Cornell)h(Univ)m(ersit)m(y)-8 -b(,)33 b(Ithak)-5 b(a,)33 b(U.S.A.\),)g(establishing)c(a)k(non-)321 -284 y(pro\014t)d(\(electronic\))h(publication)d(facilit)m(y)h(for)h -(mathematics,)230 472 y Fe(\017)46 b Fl(mem)m(b)s(er)30 -b(of)h(the)f(b)s(oard)f(of)i(IWI)f(\(Institute)g(for)h(Scien)m(ti\014c) -e(Information)g(in)g(Osnabruec)m(k\).)94 659 y(He)j(has)e(participated) -g(with)g(one)i(or)f(more)g(talks)g(at)g(ab)s(out)g(20)h(ev)m(en)m(ts)h -(on)e(electronic)g(information)e(and)94 772 y(comm)m(unication)24 -b(in)f(2000,)28 b(including)21 b(con)m(tinen)m(tal)k(congresses)g(in)f -(Lisb)s(on,)f(Barcelona,)k(Rio)d(de)h(Janeiro,)94 885 -y(Ha)m(v)-5 b(anna,)38 b(Mosco)m(w,)h(and)c(Manila.)57 -b(He)36 b(has)f(b)s(een)h(elected)g(as)g(mem)m(b)s(er)f(of)h(the)g -(scien)m(ti\014c)f(committee)94 998 y(for)f(sev)m(eral)h(conferences)g -(on)f(the)h(sub)5 b(ject)34 b(in)f(2001:)50 b(\(Crimea,)35 -b(A)m(thens,)h(Coim)m(bra,)f(Linz,)f(Guatemala)94 1111 -y(Cit)m(y\))c(and)g(receiv)m(ed)h(in)m(vitations)e(for)h(plenary)f -(lectures)h(at)h(additional)e(conferences.)235 1224 y(These)38 -b(activities)f(giv)m(e)h(an)g(excellen)m(t)g(bac)m(kground)f(to)i -(organise)e(the)h(information)e(dissemination)94 1337 -y(and)30 b(exploitation)f(activities)h(for)g(the)h(pro)5 -b(ject.)94 1580 y Fg(A.6)112 b(T)-9 b(rusted)37 b(Logic)94 -1752 y Fl(Created)21 b(in)f(Jan)m(uary)h(1999,)k(TR)m(USTED)c(LOGIC)f -(S.A.)i(is)e(a)i(frenc)m(h)e(start-up)h(compan)m(y)-8 -b(,)25 b(whic)m(h)19 b(presen)m(ts)94 1865 y(a)39 b(unique)d(com)m -(bination)i(of)g(exp)s(ertise)g(in)f(em)m(b)s(edded)g(soft)m(w)m(are)j -(c)m(hallenges)f(and)e(in)g(formal)h(metho)s(ds)94 1978 -y(analysis.)60 b(TR)m(USTED)37 b(LOGIC)f(o\013ers)i(a)g(wide)e(range)h -(of)h(e\016cien)m(t)g(and)e(secure)i(solutions)d(for)i(smart)94 -2091 y(cards)24 b(and)f(terminals)g(in)f(the)j(follo)m(wing)d(areas)j -(:)37 b(op)s(en)24 b(systems)g(for)g(smart)g(cards)f(\(Ja)m(v)-5 -b(a)26 b(Card,Windo)m(ws)94 2204 y(SmartCards,)h(Multos\),)h(op)s(en)e -(systems)i(for)e(terminals)g(\(mobile)g(phones,)h(PD)m(A,)i(bank)d -(terminals,)h(etc\),)94 2317 y(e-commerce,)35 b(remote)e(secured)g -(access)g(to)g(in)m(tranets,)g(and)f(secured)g(net)m(w)m(orks)i -(infrastructures)c(\(home)94 2429 y(or)g(car)h(con)m(trol\).)235 -2542 y(The)24 b(dev)m(elopmen)m(t)g(metho)s(dology)-8 -b(,)26 b(inside)c(T)-8 b(rusted)24 b(Logic)g(S.A.,)i(includes)c(a)i(p)s -(ermanen)m(t)g(concern)g(of)94 2655 y(qualit)m(y)31 b(and)g(securit)m -(y)g(asp)s(ects)h(\(formal)g(sp)s(eci\014cation)e(and)h(pro)s(ofs\))g -(that)i(pro)m(vides)d(a)j(soft)m(w)m(are)g(whic)m(h)94 -2768 y(is)c(e\016cien)m(t,)j(reliable)c(and)i(ready)g(to)h(face)g(high) -e(lev)m(el)i(Common)e(Criteria)g(ev)-5 b(aluations)30 -b(when)f(needed.)235 2881 y(The)i(main)g(actors)i(in)e(the)h(smart)f -(card)h(and)f(in)g(the)h(em)m(b)s(edded)f(soft)m(w)m(are)i(industry)c -(are)k(among)f(its)94 2994 y(customers)j(:)49 b(Sun)33 -b(Microsystems)i(Inc.,)g(Bull,)g(Gemplus,)f(Ob)s(erth)m(ur,)g(Sc)m -(hlum)m(b)s(erger,)g(ST)g(Micro)s(elec-)94 3107 y(tronics,)39 -b(VISA)e(In)m(ternational,)j(Carte)e(Bleue,)h(GIE)f(Cartes)g -(Bancaires,)i(ActivCard,)f(Proton)f(W)-8 b(orld)94 3220 -y(In)m(ternational,)30 b(etc.)94 3451 y Fa(Dominique)k(Bolignano)94 -3564 y Fl(Dominique)40 b(Bolignano)h(is)f(Chairman)g(and)h(Chief)f -(Executiv)m(e)i(O\016cer)f(of)h(T)-8 b(rusted)40 b(Logic.)74 -b(He)42 b(also)94 3677 y(teac)m(hes)c(securit)m(y)f(and)f(languages)h -(as)f(a)h(part-time)g(full)d(professor)i(\(Professeur)h(Asso)s(ci\))f -(at)h(the)g(Uni-)94 3790 y(v)m(ersit)30 b(P)m(aris-Dauphine.)39 -b(F)-8 b(rom)31 b(1996)h(to)f(1999,)h(Dominique)d(Bolignano)h(w)m(ork)m -(ed)g(with)f(Dy)m(ade,)j(a)f(join)m(t)94 3902 y(v)m(en)m(ture)37 -b(b)s(et)m(w)m(een)g(Bull)e(and)h(INRIA)g(\(F)-8 b(renc)m(h)37 -b(National)g(Researc)m(h)g(Institute)f(in)f(Computer)h(Science)94 -4015 y(and)42 b(Con)m(trol\),)j(as)e(Director,)j(Resp)s(onsible)39 -b(for)j(tec)m(hnology)i(transfer)e(in)f(securit)m(y)-8 -b(,)45 b(electronic)e(com-)94 4128 y(merce,)38 b(and)d(smart)g(cards,)i -(and)e(Pro)5 b(ject)36 b(Director)g(in)e(the)i(follo)m(wing)e(areas)i -(:)51 b(formal)35 b(v)m(eri\014cation)g(of)94 4241 y(electronic)41 -b(commerce)h(proto)s(cols)e(\(and)g(more)h(generally)f(cryptographic)g -(proto)s(cols\),)k(ev)-5 b(aluation)40 b(or)94 4354 y(design)d(of)g -(securit)m(y)h(arc)m(hitectures)g(\(mainly)e(for)h(secure)h(em)m(b)s -(edded)f(systems,)j(suc)m(h)d(as)h(smart)f(cards,)94 -4467 y(pa)m(ymen)m(t)d(terminals,)e(GSM)h(phones,)g(etc.\),)j(dev)m -(elopmen)m(t)d(of)h(highly)d(secure)i(Ja)m(v)-5 b(a)34 -b(Virtual)d(Mac)m(hines)94 4580 y(\(Bull)24 b(Odyssey)h(Ja)m(v)-5 -b(aCard,)27 b(pa)m(ymen)m(t)f(terminals\),)f(formal)g(metho)s(ds)g(for) -g(ITSEC)f(and)h(Common)g(Crite-)94 4693 y(ria)h(securit)m(y)h(ev)-5 -b(aluations)26 b(\(participation)g(to)i(v)-5 b(arious)26 -b(securit)m(y)g(ev)-5 b(aluations)27 b(including)c(some)28 -b(on)e(smart)94 4806 y(cards)f(op)s(erating)g(systems\).)40 -b(Before)26 b(that,)i(Dominique)c(Bolignano)h(w)m(as)h(the)g(head)f(of) -h(a)g(researc)m(h)g(group)94 4919 y(in)d(the)h(Corp)s(orate)g(Researc)m -(h)h(Cen)m(tre)g(of)f(Bull)f(and)g(he)h(has)g(acquired,)h(from)f(1982)i -(to)e(1996,)k(a)c(deep)g(exp)s(e-)94 5032 y(rience)k(in)f(industry)f -(soft)m(w)m(are)j(dev)m(elopmen)m(t)g(and)f(formal)f(v)m(eri\014cation) -h(systems)g(\(distributed)e(systems,)94 5144 y(securit)m(y)35 -b(proto)s(cols\).)57 b(Dominique)34 b(Bolignano)i(tak)m(es)h(part)e(in) -g(the)g(Ja)m(v)-5 b(a)37 b(Card)e(F)-8 b(orum.)56 b(He)37 -b(also)e(is)g(a)94 5257 y(Mem)m(b)s(er)f(of)g(the)h(newly)e(created)i -(IFIP)f(W)-8 b(orking)34 b(group)g(on)g(F)-8 b(oundations)34 -b(of)g(Securit)m(y)g(Analysis)e(and)94 5370 y(Design.)39 -b(He)26 b(has)g(b)s(een)f(an)h(in)m(vited)e(sp)s(eak)m(er)i(at)h -(MFPS'98,)h(CA)-10 b(V'99,)28 b(CARI'98,)f(CIRM'98,)h(JFMM'98,)p -eop -%%Page: 49 49 -49 48 bop 94 -128 a Fh(MO)m(W)m(GLI,)32 b(IST-2001-33562)2533 -b Fl(49)94 171 y(R)-8 b(TCS'96,)30 b(Cartier'96,)g(F)-8 -b(emSys'97,)32 b(and)c(to)i(man)m(y)g(securit)m(y)f(or)h(formal)e -(metho)s(ds)h(symp)s(osia)f(and)h(pre-)94 284 y(sen)m(ted)41 -b(in)m(vited)e(tutorials)h(at)i(F)-8 b(orte'98,)46 b(Cartier'96,)e(F)-8 -b(orte'93.)74 b(Dominique)39 b(Bolignano)i(also)f(acted)94 -397 y(as)35 b(a)g(PhD)g(advisor,)g(as)g(a)g(review)m(er)f(and)g(ev)-5 -b(aluator)36 b(for)e(Europ)s(ean)g(Comm)m(unit)m(y)f(programs.)54 -b(He)35 b(is)f(a)94 510 y(review)m(er)i(in)f(sev)m(eral)h(journals)e -(\(Journal)h(of)h(Theoretical)g(Computer)f(Science)h(\(TCS\),)g(TSI,)f -(...\))59 b(and)94 623 y(has)27 b(b)s(een)g(a)g(review)m(er)h(and/or)f -(a)h(mem)m(b)s(er)e(of)i(the)f(Program)h(Committee)g(in)e(in)m -(ternational)g(conferences)94 736 y(\(SESS'93,)k(FME'96,VDM)k(91)d(et)g -(F)m(OR)-8 b(TE)31 b(92,)g(SaS'94,)g(...\))p eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/helm/mowgli/home/misc/proposal/proposal.tgz b/helm/mowgli/home/misc/proposal/proposal.tgz deleted file mode 100644 index 50e8901da..000000000 Binary files a/helm/mowgli/home/misc/proposal/proposal.tgz and /dev/null differ diff --git a/helm/mowgli/home/style/mowgli.css b/helm/mowgli/home/style/mowgli.css deleted file mode 100644 index 4a32870fa..000000000 --- a/helm/mowgli/home/style/mowgli.css +++ /dev/null @@ -1,90 +0,0 @@ - -table.menuborder { - background-color: #003377; -} - -td.menutitle { - background-color: #ffeeaa; - color: black; - font-family: sans-serif; - font-weight: bold; - text-align: left; -} - -td.menuentries { - background-color: #ccddff; - color: black; - font-family: sans-serif; - font-size: smaller; - text-align: left; -} - -dl.news { - font-family: sans-serif; -} - -dt.news { - font-family: monospace; - font-weight: bold; -} - -dd.news { - font-family: sans-serif; -} - -div.small { - font-size: smaller; -} - -div.center { - text-align: center; -} - -div.right { - text-align: right; -} - -body { - font-family: sans-serif; - background-color: white; - color: black; -} - -body.content { - font-family: sans-serif; - background-color: white; - color: black; - -} - -a { - color: #003377; -} - -a:hover { - background-color: #ffeeaa; - color: #003377; -} - -a:visited { - color: black; -} - -table.small { - font-size: small -} - -td.title { - font-family: sans-serif; - font-weight: bold; - font-size: large -} - -td.top { - font-weight: bold; - font-size: x-small -} - -li { - list-style-type: circle -} diff --git a/helm/mowgli/home/templates/index.html b/helm/mowgli/home/templates/index.html deleted file mode 100644 index 7a2929c03..000000000 --- a/helm/mowgli/home/templates/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - MoWGLI Home Page - - - - - - - - - diff --git a/helm/mowgli/home/templates/ml-help-example.txt b/helm/mowgli/home/templates/ml-help-example.txt deleted file mode 100644 index 1c6ed1105..000000000 --- a/helm/mowgli/home/templates/ml-help-example.txt +++ /dev/null @@ -1,101 +0,0 @@ -***** help -Help for MOWGLI-dev mailing list: - -This is email command help for version 1.1 of the "Mailman" list -manager. The following describes commands you can send to get -information about and control your subscription to Mailman lists at -this site. A command can be in the subject line or in the body of the -message. - -Note that much of the following can also be accomplished via the World -Wide Web, at: - - http://mowgli.cs.unibo.it/mailman/listinfo/mowgli-dev - -In particular, you can use the Web site to have your password sent to -your delivery address. - -List specific commands (subscribe, who, etc) should be sent to the -*-request address for the particular list, e.g. for the 'mailman' -list, use 'mailman-request@...'. - -About the descriptions - words in "<>"s signify REQUIRED items and -words in "[]" denote OPTIONAL items. Do not include the "<>"s or -"[]"s when you use the commands. - -The following commands are valid: - - subscribe [password] [digest-option] [address=
] - Subscribe to the mailing list. Your password must be given to - unsubscribe or change your options. When you subscribe to the - list, you'll be reminded of your password periodically. - 'digest-option' may be either: 'nodigest' or 'digest' (no - quotes!) If you wish to subscribe an address other than the - address you send this request from, you may specify - "address=" (no brackets around the email - address, no quotes!) - - unsubscribe [address] - Unsubscribe from the mailing list. Your password must match - the one you gave when you subscribed. If you are trying to - unsubscribe from a different address than the one you -subscribed - from, you may specify it in the 'address' field. - - who - See everyone who is on this mailing list. - - info - View the introductory information for this list. - - lists - See what mailing lists are run by this Mailman server. - - help - This message. - - set